本案例基于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;
else
return 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;
else
System.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;
else
continue;
}
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;
}
else
return 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);
else
if(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);
else
if(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;
}