1. 学生管理系统

image-20210727182635131

思路

在主函数中创建学生集合,创建学生对象,在学生类中写增删改查方法

1. 测试类

image-20210727182751956

2. 学生类

image-20210727182850138

image-20210727182943462

细节

1. 测试类

  • 主函数

包含创建集合对象,实例化本类调用方法

image-20210727183227145

  • 学生管理方法

image-20210727183341133

image-20210727183405933

注意点:

  • 需要把创建集合写在主函数中,学生管理方法以集合为参数,这样每次调方法的时候使用的是同一个集合,否则每次重新调方法都会新创建一个集合存放一名学生

  • 终止程序System.exit(0),关闭JVM虚拟机

2. 学生类

  1. 四个私有属性

有参无参构造器,get()、set()方法,可用快捷键Alt+Insert生成

  1. add()

image-20210727184150336

注意点:

  • 复制的时候注意scanner对象1、2、3改没改,set什么属性改没改

  • 年龄的数据类型

  1. delete()

image-20210727184516983

注意点:

  • 我最开始写的是for (int i = 0; i <= students.size(); i++),然后如果i==students.size(),就说没有该学生,这样写报错,经过debug之后找到原因,虽然是0~ students.size()-1,本意是再轮一次就报没学生,但是i==students.size()仍然要做if判断,就是做students.get(i)的操作,索引下标越界,所以我把这个操作改成了,如果找到了就退出for循环,如果没找到,就说明所有的集合元素都没走if判断没退出for循环,就接着走,输出没有该学生再退出循环(这个时候break已经没用了,因为已经是最后一个i,咋的也得退出来)

  • 还有,最开始我写的判断语句是if (students.get(i).getName().==sname),报错,经过debug发现一直把他判断为false,改成if (students.get(i).getName().equals(sname))就可以了,个人分析原因应该是获取的名字是在对象中,指向的内存不一样,equals方法比较的是字符串内容(个人理解,如果有异议请指点)

  1. update()

键盘分别输入需要修改对象的姓名与需要修改的属性

如果for循环遍历集合中存在该学生,则用switch-case做相应的修改操作

否则为不存在该学生并退出循环

image-20210727185530085

image-20210727185554525

  1. select()

image-20210727191038092

这个不足在于控制不好字符串长度导致数据对不齐,以后学到更骚的操作之后再回来改

测试

改bug的时候已经输了无数遍了知道好使了就行了

image-20210727191238980

标准答案

  • 答案在主函数中用死循环控制,我用的是主函数外的方法递归

image-20210727191447016

  • 只需要一个new一个Scanner对象就可以一直输入

image-20210727191730113

  • 答案里在显示信息的函数里加了个if判断,如果还没添加信息就提示一句话,但是为了不执行剩下的内容,可以用一句return;不再执行剩下的内容,如果是我写的话我可能会把剩下的内容用else括起来

image-20210727192123293

  • 答案里添加学生信息的方法中加了一个方法判断学生学号是否重复,确保唯一性,用if判断即可(草率了,太麻烦)

image-20210727192551725

这其中有个isUsed(array,sid)方法,来判断集合对象array中是否使用过sid,返回布尔值

posted on 2021-07-27 19:32  托马斯源  阅读(30)  评论(0编辑  收藏  举报