之前的两篇讲了HashMap的原理和应用部分
原理:
https://blog.csdn.net/weixin_46726346/article/details/107428192
应用:
https://blog.csdn.net/weixin_46726346/article/details/107433284
这次做的学生管理系统应用到的容器就是HashMap,那为什么要用这个呢;
前面说到过HashMap的特点:
1.存储无序
2.键唯一
正好对应的就是学生的顺序我不在意,但是学生的学号是唯一的,那么我们就可以吧学号当成key,学生对象当做value;
一、学生类
言归正传,就开始写这个简单系统;
首先我们应该创建一个学生类:
那,成员变量应该包括学号,姓名,年龄,性别(性别可以用枚举型,当然也可以用字符串类型);
然后方法我们要有构造方法,getter和setter方法,我们还要重写学生类的toString方法来便于输出学生的信息;
public class Student {
private int sid;//学号
private String name;//姓名
private int age;//年龄
private Gender gender;//性别
public Student() {
}
public Student(int sid,String name,int age,Gender gender) {
this.sid=sid;
this.name=name;
this.age=age;
this.gender=gender;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Override
public String toString() {
return "学生信息 [学号:" + sid + ", 姓名:" + name + ", 年龄:" + age + ", 性别:" + gender + "]";
}
}
enum Gender{
男,女
}
二、接口
这样的话我们学生类就写完了,那一个系统自然要涉及到增删改查,我们总结一下这些方法;
1.显示所有的学生信息。
2.添加学生信息
3.通过学号查找学生信息(学号唯一,所以查到的也是一个学生的信息)
4.通过姓名查找学生信息(姓名可能存在重复,所以应该返回一个表)
5.删除学生信息
6.修改学生信息
那这么多方法,我们最好先写出一个接口来放置这些方法
public interface StudentInterface {
void showAll();//显示学生信息
boolean addStudent();//添加学生
Student findBysid();//通过学号查找学生
List<Student> findByname();//通过姓名查找学生
boolean removeStu();//删除学生信息
boolean exchangeStu();//修改学生信息
}
返回类型设置成布尔型的方法,是为了确定是否操作成功;
这样接口我们就写好了,然后创建一个系统类,并且重写接口中的方法;
三、学生系统类
public class StudentSystem implements StudentInterface{
HashMap<Integer, Student> students=new HashMap<Integer, Student>();//定义HashMap对象,key为学号,value为学生对象
Scanner scan=new Scanner(System.in);
//欢迎界面
public void welcome() {
System.out.println("********欢迎进入学生管理系统****************");
System.out.println("\n");
System.out.println("初始化成功。。。。。。。。。。。。。。。。。。。");
}
//退出界面
public void exit() {
System.out.println("********感谢使用学生管理系统****************");
}
//菜单界面
public void showMenu() {
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("************");
}
public void showAll() {
//遍历哈希表
Set<Integer> sids=students.keySet();//获取所有键值
Iterator<Integer> iterator=sids.iterator();
if(iterator.hasNext()) {
while(iterator.hasNext()) {
Integer sid=iterator.next();
Student stu=students.get(sid);
System.out.println(stu);
}
}
else {
System.out.println("没有学生信息");
}
}
public boolean addStudent() {
System.out.println("请输入学生的学号");
int sid=scan.nextInt();
System.out.println("请输入学生的姓名");
String name=scan.next();
System.out.println("请输入学生的年龄");
int age=scan.nextInt();
System.out.println("请输入学生的性别");
Gender gender=scan.next().equals("男")?Gender.男:Gender.女;
Student stu=new Student(sid,name,age,gender);
//添加学生到哈希表中
students.put(sid,stu);
System.out.println("添加学生成功");
return true;
}
public Student findBysid() {
System.out.println("请输入学生的学号");
int sid=scan.nextInt();
//从哈希表获取学生信息
Student stu=students.get(sid);
if(stu==null) {
System.out.println("学生不存在");
}
else {
System.out.println(stu);
}
return stu;
}
public List<Student> findByname(){
System.out.println("请输入学生的姓名");
String name=scan.next();
//创建一个存放学生对象的表
List<Student> list=new ArrayList<>();
//获取所有的内容对哈希表进行遍历
Collection<Student> stus=students.values();
Iterator<Student> iterator=stus.iterator();
while(iterator.hasNext()) {
Student stu=iterator.next();
if(stu.getName().equals(name)) {
list.add(stu);
}
}
if(list==null) {
System.out.println("学生不存在");
}
else {
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
return list.size()==0?null:list;
}
public boolean removeStu() {
System.out.println("请输入学生的学号");
int sid=scan.nextInt();
//从哈希表中删除学生信息
Student stu=students.remove(sid);
return stu==null?false:true;
}
public boolean exchangeStu() {
System.out.println("请输入学生的学号");
int sid=scan.nextInt();
//从哈希表中获取学生信息
Student stu=students.get(sid);
if(stu!=null) {
System.out.println("请输入学生的新姓名");
String name=scan.next();
System.out.println("请输入学生的新年龄");
int age=scan.nextInt();
System.out.println("请输入学生的新性别");
Gender gender=scan.next().equals("男")?Gender.男:Gender.女;
stu.setAge(age);
stu.setGender(gender);
stu.setName(name);
}
return stu==null?false:true;
}
}
这里面呢,除了刚才接口中重写的方法,还有的就是欢迎界面和退出界面的方法,还有显示菜单的方法;因为用到了HashMap的容器,如果不理解的话可以看开头的链接的文章,那里面有讲解HashMap的原理和使用方法;
四、测试类
最后写的就是测试类,也就是主方法的类;
public class Test {
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
StudentSystem system=new StudentSystem();
system.welcome();
//死循环进行功能重复
while(true) {
system.showMenu();
System.out.println("请输入选择的功能");
int x=scan.nextInt();
switch(x){
case 1:
system.showAll();
break;
case 2:
system.addStudent();
break;
case 3:
system.findBysid();
break;
case 4:
system.findByname();
break;
case 5:
if(system.removeStu()) {
System.out.println("删除成功");
}
else {
System.out.println("删除学生信息失败");
}
break;
case 6:
if(system.exchangeStu()) {
System.out.println("修改成功");
}
else {
System.out.println("修改学生信息失败");
}
break;
case 7:
system.exit();
System.exit(0);
default:
System.out.println("请选择正确的功能");
}
}
}
}
关于测试类中,主要就是用到一个死循环来测试,然后就是用switch语句进行选择功能;
OK,关于一个简单的学生管理系统,基本功能也就全实现了,当然这里不涉及到数据库的存储和文件的操作,只是一个简单的在控制台运行的系统程序,也有很多不完善的地方,仅供学习参考;
结束,END;