——综合性程序设计题目:简单学生信息管理系统(序列化版)班级::学号:实验目的:1.综合运用输入、输出的知识,用序列化方法保存、读入数组容。
2.设计实现一个简单的信息管理系统。
实验容:编写能够满足如下条件的程序,分两次四个课时完成1.声明Student类,该类实现Serializable接口以表明该类可以进行序列化。
该类有、学号、math、os、java用来存放对应的成绩,在构造方法中进行、学号、课程成绩的赋值。
Override有Object继承来的tostring方法已便友好格式显示自己的属性;2.建立一个类,利用数组来存储多个Student,写完一个方法,在main中写一段测试代码,运行以保证目前所做工作的正确性,正确后再写其他代码。
有以下方法:1)add(Student stu):增加新的学生,人数满时显示人满或是new一个更长的数组,把现有的Student复制到新数组2)dispAll():可以显示所有的学生信息(测试add是否正确)3)findById(long id):可以按照学号来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。
4)findByName(string name):可以按照来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。
(判断是否相等使用string类的equalsIgnoreCase方法)5)delBy Id(long id): 可以按照id来删除学生信息,然后显示找到该人,若查无此人的话显示错误信息。
6)save():利用ObjectOutputStream 来把数组写入文件中,需要考虑在什么时候调用该方法。
7)load():利用ObjectIntputStream 来进行反序列化,得到以前保存的容,注意要考虑以前未保存容的情况,可返回错误信息。
3.在控制台显示一个菜单,并实现相应的功能。
菜单如下:1显示所有学生信息2按学号查找 3 按查找 4按学号删除 5 保存 6 读入7 退出请输入数字(1-7):程序代码Import java.io.*;Import java.util.*;class Stu impl ements Serilizable{private String name;private long id;private doubl e os,java,math;}public Student(){}public Student(int id, int age, int score, String name) {this.id = id;this.os = os;this.java = java; = name;this.math=math;}public l ong getId(){return id;}public void setId(long id){this.id = id;}public int getOs(){return os;}public void setOs(int os){this.os = os;}public int getJava(){return java;}public void setJava(int java){this.java = java;}public int getMath(){return Math;}public void setMath(int math){this.math = math;}public String getName(){return name;}public void setName(String name){ = name;}Overridepublic String toString(){return "学号:" + id + " :" + name + " os:" + os+ " math:" + math + "java" + java;}}public class Object{private static Scanner scanner=new Scanner(System.in);public void add(Student[] stus)throws Exception{Student[] s=new Student[stus.length+1];for(int i=0;i<s.l ength-1;i++){s[i]=stus[i];}System.out.print("请输入要添加的学生信息:\n"+":");String name=scanner.next();System.out.print("学号:");long no=scanner.nextInt();System.out.print("os成绩:");double cscore0=scanner.nextDouble();System.out.print("java成绩:");double cscore1=scanner.nextDouble();System.out.print("math成绩:");double cscore2=scanner.nextDouble();s[s.length-1]=new Student(name,no,cscore0,cscore1,cscore2);save(s);System.out.println("添加成功!");}public void dispAll(Student[] stus){System.out.println("现有Stud ent信息为:");for(Student stu:stus){System.out.println(stu);}}public void save(Stud ent[] stus)throws Exception{ObjectOutputStream objOut=new ObjectOutputStream(new FileOutputStream("E:\\STU.txt"));objOut.writeInt(stus.length);for(Student stu:stus)objOut.writeObject(stu);}objOut.close();}public Student[] read()throws Exception{ObjectInputStream objIn=new ObjectInputStream(new FileInputStream("E:\\STU.txt"));int num=objIn.readInt();Student[] stus=new Stud ent[num];for(int i=0;i<num;i++){stus[i]=(Student)objIn.readObject();}objIn.cl ose();return stus;}public void findById(Stud ent[] stus){int no=0,i=0;System.out.print("请输入学号:");no=scanner.nextInt();for(i=0;i<stus.length;i++){if(stus[i].no==no){System.out.println(stus[i]);break;}if(stus[i].no!=no&&i==stus.length-1){System.out.println("无该生信息!");}}}public void findByName(Stud ent[] stus){String name="";System.out.print("请输入:");name=scanner.next();for(int i=0;i<stus.length;i++){if(name.equalsIgnoreCase(stus[i].name)==true){System.out.println(stus[i]);break;}if(name.equalsIgnoreCase(stus[i].name)==false&&i==stus.l ength-1){System.out.println("无该生信息!");}}}public void delById(Stud ent[] stus)throws Exception{int no=0,i=0;System.out.print("请输入学号:");no=scanner.nextInt();for(i=0;i<stus.length;i++){if(stus[i].no==no){System.out.println(stus[i]);stus[i]=null;save(stus);System.out.println("删除成功!");break;}if(stus[i].no!=no&&i==stus.l ength-1){System.out.println("无该生信息!");}}}public static void main(String[] args)throws Exception{Object d emo=new Object();Student[] stus={new Stud ent("zhang",1,90,90,98),new Student("wang",2,80,80,89),new Student("li",3,70,70,79)};System.out.print("请输入操作的编号:");System.out.print("\n");int choice=0;do{System.out.println("1 添加 2 显示所有学生信息 3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):");choice=scanner.nextInt();switch(choice){case 1:demo.ad d(demo.read());break;case 2:demo.dispAll(demo.read());break;case 3:demo.findById(demo.read());break;case 4:demo.findByName(demo.read());break;case 5:demo.delById(demo.read());break;case 6:demo.save(stus);break;case 7:demo.read(stus);break;case 0:break;default:System.out.println("Error!");}}while(choice!=0);}}实验结果1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):1请输入要添加的学生信息::kim学号:0110os成绩:66java成绩:77math成绩:88添加成功!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):1请输入要添加的学生信息::lina学号:0122os成绩:96java成绩:83math成绩:72添加成功!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):1请输入要添加的学生信息::joe学号:0136os成绩:69java成绩:83math成绩:66添加成功!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):2现有Student信息为:学号:0110:kim os:66 math:88 java:77学号:0122:lina os:96 math:72 java:83学号:0136:joe os:69 math:66 java:831 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):61 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):4请输入:lim无该生信息!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):3请输入学号:0122学号:0122:lina os:96 math:72 java:831 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):4请输入:kim学号:0110:kim os:66 math:88 java:771 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):5请输入学号:0136删除成功!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):2学号:0110:kim os:66 math:88 java:77学号:0122:lina os:96 math:72 java:831 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):9Error!1 添加2 显示所有学生信息3 按学号查找4 按查找5 按学号删除6 保存7 读入0 退出请输入数字(1-7):0实验总结:以前用C语言做过关于学生信息的管理系统,这次用java,在有过c和c++的学习后,相对来说要比以前更有些思路,java也比c更为方便一些,在程序编写时总是忘记写一段就编译一段,以及时的能发现错误,导致最后程序编译时无法找到自己的错误。