本案例基于Java语言中的ArrayList集合来储存数据,并建立两个类——学生类和用户类存储在集合中,通过用户交互,搭建简单的学生管理系统。
1、学生类
学生类利用set函数进行获取学生单个信息,show函数负责获取全部信息。
package test;
public class Student {private String name;private int age;private String sex;private String id;private int score;//构造函数public Student(){};//带参构造函数public Student(String name,String id,int age,String sex,int score){this.name=name;this.age=age;this.sex=sex;this.id=id;this.score=score;}//显示信息public void show(){System.out.println(this.name+"\t"+this.id+"\t"+this.age+"\t"+this.sex+"\t"+this.score);}//判断姓名是否相同是否相等public boolean judge(String name_){if(name_.equals(this.name))return true;elsereturn false;}//输出私有属性public String getname(){return this.name;}public String getid(){return this.id;}public int getage(){return this.age;}public int getscore(){return this.score;}public String getsex(){return this.sex;}
}
2、用户类
用户类与学生类一样,get负责返回私有属性,show负责显示类内所有信息。
package test;
public class User {private String username;private String password;private String id;private String phonenumber;public User(){};public User(String username,String password,String id,String phonenumber){this.username=username;this.password=password;this.id=id;this.phonenumber=phonenumber;}public String getusername(){return this.username;}public String getpassword(){return this.password;}public String getid(){return this.id;}public String getphonenumber(){return this.phonenumber;}public void show() {System.out.println(this.username+'\t'+this.password+'\t'+this.id+'\t'+this.phonenumber+'\t');}
}
3、主类-登录系统
登录系统分别设置登录、注册、忘记密码功能,后续可以添加文本数据库来进行储存。
ArrayList<User> ulist=new ArrayList<>();boolean log_verify=false;while(true){System.out.println("------欢迎来到学生管理系统------");System.out.println("**\t 1、登录\t **");System.out.println("**\t 2、注册\t **");System.out.println("**\t 3、忘记密码\t **");System.out.println("--------------------------------");System.out.println("请输入你的选择:");int choice=new Scanner(System.in).nextInt();switch(choice){case 0:showuser(ulist);break;case 1:log_verify=log(ulist);break;case 2:register(ulist);break;case 3:forget_password(ulist);break;default:System.out.println("输入指令错误,请重试!");}if(choice==1&log_verify==true)break;}
3.1登录
登录中存在的问题:用户名不存在,密码错误问题
public static boolean log(ArrayList<User>list){boolean log_verify=false;System.out.println("请输入您的账号: ");String username=new Scanner(System.in).next();System.out.println("请输入密码: ");String password=new Scanner(System.in).next();if(list.size()==0)System.out.println("用户名不存在! ");for(int i=0;i<list.size();i++){if(list.get(i).getusername().equals(username)){if(list.get(i).getpassword().equals(password)){System.out.println("欢迎回来! ");log_verify=true;break;}else{System.out.println("密码错误,请重试");break;}}else{System.out.println("用户名不存在! ");break;}}return log_verify;}
3.2注册
用户信息中设置账号,密码,身份证号,手机号四个信息,密码需要进行重复输入,若两次密码结果不一致,将会被要求重新输入。用户名重复会被告知用户名存在。
//注册public static ArrayList<User> register(ArrayList<User>list){System.out.println("请输入注册用户名:");String username=new Scanner(System.in).next();String password,id,phonenumber;boolean flag=false;for(int i=0;i<list.size();i++){if(list.get(i).getusername().equals(username)){System.out.println("此用户已存在!");flag=true;return list;}}if(flag==false){while(true){System.out.println("请输入密码:");password=new Scanner(System.in).next();System.out.println("请再次输入密码:");String again=new Scanner(System.in).next();if(password.equals(again))break;elseSystem.out.println("密码前后不一致!");}while(true){boolean flag_id=true;System.out.println("请输入身份证号:");id=new Scanner(System.in).next();if(id.length()!=18){ System.out.println("身份证号错误");continue;}for(int i=0;i<id.length();i++){if(id.charAt(i)<'0'|id.charAt(i)>'9')flag_id=false;if(i==17&(id.charAt(i)=='X'|id.charAt(i)=='x'))flag_id=true;}if(flag_id)break;else{System.out.println("身份证号错误");continue;}}while(true){System.out.println("请输入手机号:");phonenumber=new Scanner(System.in).next();boolean flag_ph=true;for(int i=0;i<phonenumber.length();i++){if(phonenumber.charAt(i)<'0'|phonenumber.charAt(i)>'9'){System.out.println("手机号错误");flag_ph=false;break;}}if(flag_ph)break;elsecontinue;}User user=new User(username,password,id,phonenumber);list.add(user);}return list;}
3.3忘记密码
当忘记密码时,需要输入账号,若账号不存在则退回主菜单,若账号存在则需要验证身份信息,核实是否为本人,然后进行二次重复输入新密码,修改密码后保存至ArrayList,回退主菜单。
//忘记密码public static void forget_password(ArrayList<User>list){System.out.println("请输入您的账号: ");String username=new Scanner(System.in).next();boolean exist=false;int exist_index=0;if(list.size()==0)System.out.println("账号不存在! ");for(int i=0;i<list.size();i++){if(list.get(i).getusername().equals(username)){exist_index=i;exist=true;break;}}if(exist==false){System.out.println("账号不存在! ");}else{System.out.println("请输入身份证号:");String id=new Scanner(System.in).next();if(list.get(exist_index).getid().equals(id)){boolean password_verify=false;while(true){System.out.println("请输入新密码: ");String password=new Scanner(System.in).next();System.out.println("请再次输入新密码: ");String password_=new Scanner(System.in).next();if (password.equals(password_)){list.set(exist_index,new User(list.get(exist_index).getusername(),password,list.get(exist_index).getid(),list.get(exist_index).getphonenumber()));password_verify=true;}else{System.out.println("两次密码不一致! ");}if(password_verify==true)break;}}else{System.out.println("身份信息验证错误! ");}}
4、主类-学生系统
学生系统包括添加,删除,选择,显示,排序,修改指令来进行简单的系统交互。
ArrayList<Student> list=new ArrayList<>();while(true){boolean flag=false; //不进行自动退出getmenu();String command=new Scanner(System.in).next();switch(command){case "1":add(list);break;case "2":delete(list);break;case "3":select(list);;break;case "4":showinformation(list);break;case "5":sort(list);break;case "6":modify(list);break;case "q":flag=true;break;default:System.out.println("输入指令错误,请重试! ");}if(flag==true)break;}System.out.println("再见,欢迎下次使用!");
表头信息:
//打印表头public static void getmenu(){System.out.println("\n-----------学生管理系统---------");System.out.println("**\t1、添加学生信息 **");System.out.println("**\t2、删除学生信息 **");System.out.println("**\t3、查询学生信息 **");System.out.println("**\t4、显示所有信息 **");System.out.println("**\t5、排序所有信息 **");System.out.println("**\t6、修改学生信息 **");System.out.println("**\t退出系统请按q,谢谢! **");System.out.println("--------------------------------");System.out.println("请输入你的选择:");}
4.1添加学生信息
学生信息包括姓名,学号,年龄,性别,分数五个变量,若学生姓名存在,则会提示存在该学生,回退上一级菜单。
//添加学生信息public static ArrayList<Student> add(ArrayList<Student>list){String name;String id;int age;String sex;int score;boolean flag=false;System.out.println("请输入所要添加的学生姓名: ");name=new Scanner(System.in).next();for(int i=0;i<list.size();i++){if(list.get(i).judge(name)){System.out.println("系统中存在该信息,请重新输入信息:");flag=true;break;}}if(flag==false){System.out.println("请输入所要添加的学生学号:");id=new Scanner(System.in).next();System.out.println("请输入所要添加学生年龄:");age=new Scanner(System.in).nextInt();System.out.println("请输入所要添加学生性别:");sex=new Scanner(System.in).next();System.out.println("请输入所要添加学生分数:");score=new Scanner(System.in).nextInt();Student stu=new Student(name,id,age,sex,score);list.add(stu);return list;}elsereturn list;}
4.2删除学生信息
通过输入学生姓名,删除该学生所有信息,若不存在该学生则会提示查无此人。
//删除学生信息public static ArrayList<Student> delete(ArrayList<Student>list){String name;boolean flag=false;System.out.println("请输入删除学生姓名: ");name=new Scanner(System.in).next();for(int i=0;i<list.size();i++){if(list.get(i).judge(name)){flag=true;list.remove(i);break;}}if(flag==false){System.out.println("查无此人!");}return list;}
4.3查询学生信息
通过输入需要查询的姓名或者学号,来获取该学生所有信息,若不存在,则警告查无此人。
//查找学生信息public static void select(ArrayList<Student> list){boolean flag=false;System.out.println("请问您要查询的是:\n1、姓名\n2、学号");int num=new Scanner(System.in).nextInt();if(num==1){System.out.println("请问您要查询的学生姓名: ");String name=new Scanner(System.in).next();for(int i=0;i<list.size();i++){if(list.get(i).getname().equals(name)){flag=true;list.get(i).show();break;}}}else if(num==2){System.out.println("请问您要查询的学生学号: ");String id=new Scanner(System.in).next();for(int i=0;i<list.size();i++){if(list.get(i).getid().equals(id)){flag=true;list.get(i).show();break;}}}else{System.out.println("请输入正确的序号!");return;}if(flag==false){System.out.println("查无此人! ");}}
4.4显示所有信息
循环调用类内的show函数来输出所有学生信息。
//显示所有信息public static void showinformation(ArrayList<Student>list){if(list.size()==0)System.out.println("系统中未添加学生信息!");System.out.println("姓名\t学号\t年龄\t性别\t分数");for(int i=0;i<list.size();i++){list.get(i).show();}}
4.5排序学生信息
可以针对姓名和学号两个变量进行排序,并选择升序和降序的方法使用冒泡排序,compareTo函数返回的是两个变量的ASCII码差值。
//排序学生信息public static ArrayList<Student> sort(ArrayList<Student>list){System.out.println("请问您要排序的是:\n1、姓名\n2、学号");int num=new Scanner(System.in).nextInt();if(num!=1 &num!=2)System.out.println("输入错误命令!");System.out.println("排序方式:\n1、降序\n2、升序");int style=new Scanner(System.in).nextInt();if(num!=1 &num!=2)System.out.println("输入错误命令!");switch(num){case 1:{for(int i=0;i<list.size();i++){for(int j=0;j<list.size()-i-1;j++){if (num==2)if(list.get(j).getname().compareTo(list.get(j+1).getname())>0)swap(list,j,j+1);elseif(list.get(j).getname().compareTo(list.get(j+1).getname())<0)swap(list,j,j+1);}}break;}case 2:{for(int i=0;i<list.size();i++){for(int j=0;j<list.size()-i-1;j++){if(num==2)if(list.get(j).getid().compareTo(list.get(j+1).getid())>0)swap(list,j,j+1);elseif(list.get(j).getid().compareTo(list.get(j+1).getid())<0)swap(list,j,j+1);}}}break;}return list;}
交换两个学生信息:
//交换两个学生信息public static ArrayList<Student> swap(ArrayList<Student> list,int i,int j){Student tmpi=new Student(list.get(i).getname(), list.get(i).getid(), list.get(i).getage(), list.get(i).getsex(), list.get(i).getscore());Student tmpj=new Student(list.get(j).getname(), list.get(j).getid(), list.get(j).getage(), list.get(j).getsex(), list.get(j).getscore());list.set(i,tmpj);list.set(j,tmpi);return list;}
4.6修改学生信息
用户输入要求修改的姓名,若不存在该学生,则警告查无此人,若存在,则依次输入学号,年龄,性别,分数进行修改。
//修改学生信息public static ArrayList<Student> modify(ArrayList<Student> list){boolean flag=false;int modicount=0;System.out.println("请问您要修改的姓名是: ");String name=new Scanner(System.in).next();for(int i=0;i<list.size();i++){if(list.get(i).getname().equals(name)){flag=true;modicount=i;break;}}if(flag==false)System.out.println("查无此人! ");else{System.out.println("请问修改后的学号是: ");String id=new Scanner(System.in).next();System.out.println("请问修改后的年龄是: ");int age=new Scanner(System.in).nextInt();System.out.println("请问修改后的性别是: ");String sex=new Scanner(System.in).next();System.out.println("请问修改后的分数是: ");int score=new Scanner(System.in).nextInt();list.set(modicount,new Student(name, id, age, sex, score));}return list;}