简单学生信息管理系统.docx
《简单学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《简单学生信息管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
简单学生信息管理系统
——综合性程序设计
题目:
简单学生信息管理系统(序列化版)
班级:
:
学号:
实验目的:
1.综合运用输入、输出的知识,用序列化方法保存、读入数组内容。
2.设计实现一个简单的信息管理系统。
实验内容:
编写能够满足如下条件的程序,分两次四个课时完成
1.声明Student类,该类实现Serializable接口以表明该类可以进行序列化。
该类有姓名、学号、math、os、java用来存放对应的成绩,在构造方法中进行姓名、学号、课程成绩的赋值。
Override有Object继承来的tostring方法已便友好格式显示自己的属性;
2.建立一个类,利用数组来存储多个Student,写完一个方法,在main中写一段测试代码,运行以保证目前所做工作的正确性,正确后再写其他代码。
有以下方法:
1)add(Studentstu):
增加新的学生,人数满时显示人满或是new一个更长的数组,把现有的Student复制到新数组
2)dispAll():
可以显示所有的学生信息(测试add是否正确)
3)findById(longid):
可以按照学号来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。
4)findByName(stringname):
可以按照姓名来查找,然后显示符合条件的学生信息,查无此人的话显示错误信息。
(判断姓名是否相等使用string类的equalsIgnoreCase方法)
5)delById(longid):
可以按照id来删除学生信息,然后显示找到该人,若查无此人的话显示错误信息。
6)save():
利用ObjectOutputStream来把数组写入文件中,需要考虑在什么时候调用该方法。
7)load():
利用ObjectIntputStream来进行反序列化,得到以前保存的内容,注意要考虑以前未保存内容的情况,可返回错误信息。
3.在控制台显示一个菜单,并实现相应的功能。
菜单如下:
1显示所有学生信息2按学号查找3按姓名查找4按学号删除5保存6读入7退出
请输入数字(1-7):
程序代码
Importjava.io.*;
Importjava.util.*;
classStuimplementsSerilizable{
privateStringname;
privatelongid;
privatedoubleos,java,math;
}
publicStudent()
{
}
publicStudent(intid,intage,intscore,Stringname)
{
this.id=id;
this.os=os;
this.java=java;
this.name=name;
this.math=math;
}
publiclonggetId()
{
returnid;
}
publicvoidsetId(longid)
{
this.id=id;
}
publicintgetOs()
{
returnos;
}
publicvoidsetOs(intos)
{
this.os=os;
}
publicintgetJava()
{
returnjava;
}
publicvoidsetJava(intjava)
{
this.java=java;
}
publicintgetMath()
{
returnMath;
}
publicvoidsetMath(intmath)
{
this.math=math;
}
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
Override
publicStringtoString()
{
return"学号:
"+id+":
"+name+"os:
"+os+"math:
"+math+"java"+java;
}
}
//Object类
publicclassObject
{
privatestaticScannerscanner=newScanner(System.in);
publicvoidadd(Student[]stus)throwsException
{
Student[]s=newStudent[stus.length+1];
for(inti=0;is[i]=stus[i];
}
System.out.print("请输入要添加的学生信息:
\n"+":
");
Stringname=scanner.next();
System.out.print("学号:
");
longno=scanner.nextInt();
System.out.print("os成绩:
");
doublecscore0=scanner.nextDouble();
System.out.print("java成绩:
");
doublecscore1=scanner.nextDouble();
System.out.print("math成绩:
");
doublecscore2=scanner.nextDouble();
s[s.length-1]=newStudent(name,no,cscore0,cscore1,cscore2);
save(s);
System.out.println("添加成功!
");
}
publicvoiddispAll(Student[]stus)
{
System.out.println("现有Student信息为:
");
for(Studentstu:
stus)
{
System.out.println(stu);
}
}
publicvoidsave(Student[]stus)throwsException
{
ObjectOutputStreamobjOut=newObjectOutputStream(newFileOutputStream("E:
\\STU.txt"));
objOut.writeInt(stus.length);
for(Studentstu:
stus)
{
objOut.writeObject(stu);
}
objOut.close();
}
publicStudent[]read()throwsException
{
ObjectInputStreamobjIn=newObjectInputStream(newFileInputStream("E:
\\STU.txt"));
intnum=objIn.readInt();
Student[]stus=newStudent[num];
for(inti=0;i{
stus[i]=(Student)objIn.readObject();
}
objIn.close();
returnstus;
}
publicvoidfindById(Student[]stus)
{
intno=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("无该生信息!
");
}
}
}
publicvoidfindByName(Student[]stus)
{
Stringname="";
System.out.print("请输入姓名:
");
name=scanner.next();
for(inti=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("无该生信息!
");
}
}
}
publicvoiddelById(Student[]stus)throwsException
{
intno=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("无该生信息!
");
}
}
}
publicstaticvoidmain(String[]args)throwsException
{
Objectdemo=newObject();
Student[]stus={newStudent("zhang",1,90,90,98),newStudent("wang",2,80,80,89),newStudent("li",3,70,70,79)};
System.out.print("请输入操作的编号:
");
System.out.print("\n");
intchoice=0;
do{
System.out.println("1添加2显示所有学生信息3按学号查找
4按姓名查找5按学号删除6保存7读入0退出请输入数字(1-7):
");
choice=scanner.nextInt();
switch(choice){
case1:
demo.add(demo.read());
break;
case2:
demo.dispAll(demo.read());
break;
case3:
demo.findById(demo.read());
break;
case4:
demo.findByName(demo.read());
break;
case5:
demo.delById(demo.read());
break;
case6:
demo.save(stus);
break;
case7:
demo.read(stus);
break;
case0:
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姓名:
kimos:
66math:
88java:
77
学号:
0122姓名:
linaos:
96math:
72java:
83
学号:
0136姓名:
joeos:
69math:
66java:
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姓名:
linaos:
96math:
72java:
83
1添加2显示所有学生信息3按学号查找
4按姓名查找5按学号删除6保存7读入0退出
请输入数字(1-7):
4
请输入姓名:
kim
学号:
0110姓名:
kimos:
66math:
88java:
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姓名:
kimos:
66math:
88java:
77
学号:
0122姓名:
linaos:
96math:
72java:
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接口,对于序列化与反序列化有了一定的掌握。
但是外部文件的存储和提取对象的过程还是出现过错误,需要再学习以熟练掌握。