简单学生信息管理系统
——综合性程序设计
题目:简单学生信息管理系统(序列化版)班级:
姓名:
学号:
实验目的:
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 implements Serilizable{
private String name;
private long id;
private double os,java,math;
}
public Student()
{
}
public Student(int id, int age, int score, String name) {
this.id = id;
this.os = os;
this.java = java;
https://www.360docs.net/doc/d218530194.html, = name;
this.math=math;
}
public long 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) {
https://www.360docs.net/doc/d218530194.html, = name;
}
@Override
public String toString()
{
return "学号:" + id + " 姓名:" + name + " os:" + os+ " math:" + math + "java" + java;
}
}
//Object类
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[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("现有Student信息为:"); for(Student stu:stus) { System.out.println(stu); } } public void save(Student[] 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 Student[num]; for(int i=0;i { stus[i]=(Student)objIn.readObject(); } objIn.close(); return stus; } public void findById(Student[] stus) { int no=0,i=0; System.out.print("请输入学号:"); no=scanner.nextInt(); for(i=0;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(Student[] stus) { String name=""; System.out.print("请输入姓名:"); name=scanner.next(); for(int i=0;i { if(name.equalsIgnoreCase(stus[i].name)==true) { System.out.println(stus[i]);break; } if(name.equalsIgnoreCase(stus[i].name)==false&&i==stus.length-1) { System.out.println("无该生信息!"); } } } public void delById(Student[] stus)throws Exception { int no=0,i=0; System.out.print("请输入学号:"); no=scanner.nextInt(); for(i=0;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.length-1) { System.out.println("无该生信息!"); } } } public static void main(String[] args)throws Exception { Object demo=new Object(); Student[] stus={new Student("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.add(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 学号:0110 os成绩:66 java成绩: 77 math成绩:88 添加成功! 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):1 请输入要添加的学生信息: 姓名:lina 学号:0122 os成绩:96 java成绩: 83 math成绩:72 添加成功! 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):1 请输入要添加的学生信息: 姓名:joe 学号:0136 os成绩:69 java成绩: 83 math成绩: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:83 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):6 1 添加 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:83 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):4 请输入姓名:kim 学号:0110姓名:kim os:66 math:88 java:77 1 添加 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:83 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):9 Error! 1 添加 2 显示所有学生信息 3 按学号查找 4 按姓名查找 5 按学号删除 6 保存 7 读入 0 退出请输入数字(1-7):0 实验总结: 以前用C语言做过关于学生信息的管理系统,这次用java,在有过c和c++的学习后,相对来说要比以前更有些思路,java也比c更为方便一些,在程序编写时总是忘记写一段就编译一段,以及时的能发现错误,导致最后程序编译时无法找到自己的错误。实现类的序列化的必要条件就是实现Serializable接口,对于序列化与反序列化有了一定的掌握。但是外部文件的存储和提取对象的过程还是出现过错误,需要再学习以熟练掌握。 .