1.开篇
这篇博文也是博主复习一下之前学过的 Java 的相关内容,通过使用 Java中的类、对象、构造器、set和get方法、接口、重写、集合(泛型)等一些相对来说不算太难的知识,来实现一个简易的学生信息管理系统。我写的真的很水,有些数据都不切实际,当然了,写这篇博文为大家分享主要还是为了回顾一下学过的内容、和大家共同交流、一起学习。
下面我们一起来看一下程序代码的具体实现:👇👇👇(注释写的很清楚了)
2.程序代码
2.1 学生信息操作相关接口
package student.system;
import java.util.*;
public interface StudentService {
//初始化学生信息
void initStudentInfo(List<Student> studentlist);
//添加学生信息
void addStudentInfo(List<Student> all,Student student);
//更新学生信息
List<Student> updateStudentInfo(List<Student> all,Student student);
//删除学生信息
List<Student> deleteStudentInfo(List<Student> all,String name);
//打印所有学生信息
void printStudentInfo(List<Student> all);
//打印指定学生信息
void printMeInfo(Student student);
}
2.2 学生信息操作相关接口实现类
package student.system;
import java.util.*;
//该类具体实现了StudentService接口,需要重写接口中的所有方法
public class StudentManage implements StudentService {
@Override
public void addStudentInfo(List<Student> all,Student student) {
all.add(student);//add(方法进行添加)
System.out.println("学生信息已添加!!!");
}
@Override
public List<Student> updateStudentInfo(List<Student> all,Student student) {
for(Student student1 : all) {//遍历该集合
if(student1.getSno().equals(student.getSno())) {//学号匹配成功
student1.setSname(student.getSname());//存入更新信息
student1.setSage(student.getSage());
student1.setGrade(student.getGrade());
student1.setGrade(student.getGrade());
student1.setScore(student.getScore());
student1.setPassword(student.getPassword());
System.out.println("==============个人信息已更新=============");
printMeInfo(student1);//及时打印更新之后的学生信息,确保更新正确
break;
}
}
return all;//返回更新后的集合
}
@Override
public List<Student> deleteStudentInfo(List<Student> all,String name) {
int length=all.size();//获取集合长度
for(Student student1 : all) {//遍历该集合
if(student1.getSname().equals(name)) {//姓名匹配成功
System.out.println("==============消息通知==============");
System.out.println("~~~~~~~~~~~~~成功删除" + name + "~~~~~~~~~");
System.out.println("=====================================");
all.remove(student1);//remove()方法移除该学生的所有信息
break;
}
}
//每移除一个学生信息,集合长度都会减1
if(length==all.size()) {//如果长度没变,则说明没有移除,也就是不存在该学生
System.out.println("==============消息通知==============");
System.out.println("~~~~~~~~~~~~不存在该学生~~~~~~~~~");
System.out.println("=====================================");
}
return all;//返回移除后的集合
}
@Override
public void printStudentInfo(List<Student> all) {
System.out.println("==============学生信息==============");
System.out.println("学号 | 姓名| 性别| 年龄| 分数| 年级| 密码|");
for(Student student1 : all) {//打印学生列表信息
System.out.println(student1.toString());
}
System.out.println("=====================================");
}
@Override
public void printMeInfo(Student student) {//打印个人信息
System.out.println("==============我的个人信息==============");
System.out.println("学号--->" + student.getSno());
System.out.println("姓名--->" + student.getSname());
System.out.println("性别--->" + student.getSex());
System.out.println("年龄--->" + student.getSage());
System.out.println("分数--->" + student.getScore());
System.out.println("年级--->" + student.getGrade());
System.out.println("密码--->" + student.getPassword());
System.out.println("=========================================");
}
@Override
public void initStudentInfo(List<Student> studentlist) {//初始化学生列表
Random random=new Random();//声明一个Random类对象,用于生成随机数
for(int i=0;i<10;i++) {
String sex=(i%2==0 ? "男" : "女");
String grade=(i%3==0 ? "学士" : (i%2==0 ? "硕士" : "博士"));
Student student=new Student("No." + i,"学生" + i,random.nextInt(10)+20,sex,random.nextInt(90)+10,grade,"2656307671");
studentlist.add(student);
}
}
}
2.3 学生类
package student.system;
public class Student {
private String sno;
private String sname;
private Integer sage;
private String sex;
private Integer score;
private String grade;
private String password;
public Student() {
}
public Student(String sno,String sname,Integer sage,String sex,Integer score,String grade,String password) {
this.sno=sno;
this.sname=sname;
this.sage=sage;
this.sex=sex;
this.score=score;
this.grade=grade;
this.password=password;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno=sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname=sname;
}
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage=sage;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex=sex;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score=score;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade=grade;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password=password;
}
@Override
public String toString() {
return sno + "| " + sname + "| " + sex + "| " + sage + "| " +
score + "| " + grade + "| " + password + "|";
}
}
2.4 main()方法,Java主程序的入口
package student.system;
import java.util.*;
public class Main {
//控制台输入
private static Scanner input=new Scanner(System.in);
//创建一个集合studentlist存储学生信息,通过ArrayList类去实现List接口中的方法
private static List<Student> studentlist=new ArrayList<Student>();
//声明一个Student类对象,记录当前学生的信息
private static Student current=new Student();
//声明一个StudentManage类对象
private static StudentManage studentservice=new StudentManage();
//标记变量,是否登录的标志
private static boolean isLogin=false;
public static void main(String[] args) throws InterruptedException {
System.out.println("正在初始化学生信息.......");
Thread.sleep(3000);//线程延时,也可以不写
studentservice.initStudentInfo(studentlist);//初始化,随机生成10个学生信息
int choose=Integer.parseInt(Menu());//获取Menu()方法中的Integer整形数据
while(choose<9) {//循环读入不同的数字,表示不同的功能
switch(choose) {
case 1:
login();//登录
break;
case 2:
register();//注册
break;
case 3:
studentservice.printStudentInfo(studentlist);//打印学生信息列表
break;
case 4:
update();//更新学生信息
break;
case 5:
if(isLogin) {//已经登录
System.out.println("=====>个人资料");
studentservice.printMeInfo(current);//打印指定学生信息
}else {//未登录
System.out.println("请先登录!!!");
}
break;
case 6:
if(isLogin) {//已经登录
System.out.print("请输入需要删除的学生姓名:");
String sname=input.next();
studentservice.deleteStudentInfo(studentlist,sname);//删除指定学生信息
}else {//未登录
System.out.println("请先登录!!!");
}
break;
case 7:
sortscore();//按成绩升序排名
break;
case 8:
System.out.println("系统退出,欢迎您下次访问!!!");//退出程序
System.exit(0);
default ://输入不合法
System.out.println("输入错误!!!");
break;
}
choose=Integer.parseInt(Menu());//继续下一步操作
}
}
//主界面,菜单栏
private static String Menu() {
System.out.println("==============学生信息管理系统==============");
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.查看学生列表");
System.out.println("4.更新学生信息");
System.out.println("5.查看个人信息");
System.out.println("6.删除学生信息");
System.out.println("7.根据学生成绩排名");
System.out.println("8.退出");
System.out.println("========================================");
System.out.print("输入你需要选择的功能编号:");
return input.next();//返回每个功能前的数字
}
//登录
private static void login() {
System.out.println("请输入学号:");
String username=input.next();//获取学号
System.out.println("请输入密码:");
String password=input.next();//获取密码
for(Student student : studentlist) {//for-each循环进行列表集合遍历
//学号和密码都输入正确
if(student.getSno().equals(username) && student.getPassword().equals(password)) {
isLogin=true;//标记变量修改为true,即登录成功
current.setSno(student.getSno());//存入学生信息
current.setSname(student.getSname());
current.setSage(student.getSage());
current.setSex(student.getSex());
current.setScore(student.getScore());
current.setGrade(student.getGrade());
current.setPassword(student.getPassword());
break;
}
}
if(isLogin) {
System.out.println("登录成功!!!");
}else {
System.out.println("学号或密码输入错误!!!");
}
}
//注册
private static void register() {
System.out.println("请输入学生的基本信息=====>");
System.out.print("学号:");
String sno=input.next();//获取学生学号
for(Student student : studentlist) {//for-each循环进行列表集合遍历
if(student.getSno().equals(sno)) {//匹配成功,即此学号已经存在
System.out.println("此学号已存在,请重新输入!!!");
System.out.print("学号:");
sno=input.next();//重新输入
}
}
//依次输入注册学生的所有信息
System.out.print("姓名:");
String sname=input.next();
System.out.print("性别:");
String sex=input.next();
System.out.print("年龄:");
Integer sage=input.nextInt();
System.out.print("成绩:");
Integer score=input.nextInt();
System.out.print("年级:");
String grade=input.next();
System.out.print("密码:");
String password=input.next();
//向构造器中传入具体值
Student student=new Student(sno,sname,sage,sex,score,grade,password);
//将该学生信息添加至studentlist列表集合中
studentservice.addStudentInfo(studentlist,student);
}
//更新
private static void update() {
if(isLogin) {//已经登录
System.out.print("请输入需要更新的学号:");
String sno=input.next();//进行更新操作,这里不能更新学号
System.out.println("姓名:");
String sname=input.next();
System.out.println("性别:");
String sex=input.next();
System.out.println("年龄:");
Integer sage=input.nextInt();
System.out.println("成绩:");
Integer score=input.nextInt();
System.out.println("年级:");
String grade=input.next();
System.out.println("密码:");
String password=input.next();
//向构造器中传入具体值
Student student=new Student(sno,sname,sage,sex,score,grade,password);
//将更新后的学生信息添加至studentlist列表集合中
studentservice.updateStudentInfo(studentlist,student);
}else {//未登录
System.out.println("请先登录!!!");
}
}
//按成绩排名
private static void sortscore() {
List<Student> list=studentlist;
for(int i=0;i<list.size()-1;i++) {//冒泡排序
for(int j=0;j<list.size()-i-1;j++) {
if(list.get(j).getScore()>list.get(j+1).getScore()) {
swap(list.get(j),list.get(j+1));//swap()方法在Main类中的最后
}
}
}
studentservice.printStudentInfo(list);//打印排好序的学生信息列表
}
//定义排序方法,即交换对象m和n中的所有内容
private static void swap(Student m,Student n) {
//先从构造器中获取对象m的所有信息
Student student=new Student(m.getSno(),m.getSname(),m.getSage(),m.getSex(),m.getScore(),m.getGrade(),m.getPassword());
//将对象n的所有信息存入对象m中
m.setSno(n.getSno());
m.setSname(n.getSname());
m.setSage(n.getSage());
m.setSex(n.getSex());
m.setScore(n.getScore());
m.setGrade(n.getGrade());
m.setPassword(n.getPassword());
//再将对象m的所有信息存入对象n中
n.setSno(student.getSno());
n.setSname(student.getSname());
n.setSage(student.getSage());
n.setSex(student.getSex());
n.setScore(student.getScore());
n.setGrade(student.getGrade());
n.setPassword(student.getPassword());
}
}