学生成绩管理系统设计报告.docx
- 文档编号:30575696
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:25
- 大小:164.79KB
学生成绩管理系统设计报告.docx
《学生成绩管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统设计报告
学生成绩管理系统
一、实验目的
1、复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2、课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;
3、培养学生在项目开发中创新意识及能力。
二、 实验任务
1、理解并掌握图形界面的设计。
2、理解整体算法的思路,即actionPerformed()的算法。
3、输入学生姓名、成绩,完成信息的录入,并将数据存储到文件中。
4、输入学生姓名,从文件中查询该姓名的学生的成绩,找到一个成绩后可以选择是否继续查询。
5、输入学生姓名和新的成绩,修改文件中该姓名的学生的所有成绩为新的成绩。
6、输入学生姓名,删除文件中该姓名的学生的所有成绩。
7、输入学生姓名和成绩,删除文件中该姓名的学生的单次成绩。
8、进一步学习JAVA的编程思想。
9、理解并掌握文件的操作。
三、 实验要求
1、理解并掌握图形界面的设计。
2、理解整体算法的思路,即actionPerformed()的算法。
3、进一步学习JAVA的编程思想。
4、理解并掌握文件的操作。
四、思路分析
1、 为使程序美观,使用了多个JPanel和不同的LayoutManager(比如FlowLayout、BorderLayout)进行布局设计,同时限定了窗体的大小;
2、 为避免数据错误,每次操作前检查姓名和成绩是否为空、成绩是否为整数;
3、 增删改操作时,使用布尔型变量标记操作是否完成,并弹出相应提示;
4、 修改和删除操作,先将文件中的内容暂存到内存中,再重新写入符合条件的信息;
5、 查询操作,每次查询到结果时更新成绩,并询问是否需要继续查询;
6、 删除操作,分为删除指定姓名所有成绩和删除指定姓名单次成绩两种状况。
五、 程序代码
【studentmanager.java】
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
publicclassstudentmanagerextendsJFrame{
/**
*当前容器
*/
ContainercurrentContainer=this;
/**
*存储的文件名
*/
StringfileName=newString("data.txt");
/**
*显示标题文本
*/
JLabeltitleLabel=newJLabel("学生成绩管理系统");
/**
*标题面板
*/
JPaneltitlePanel=newJPanel();
/**
*显示姓名文本
*/
JLabelnameLabel=newJLabel("姓名");
/**
*显示成绩文本
*/
JLabelscoreLabel=newJLabel("成绩");
/**
*姓名文本框
*/
JTextFieldnameTextField=newJTextField(15);
/**
*成绩文本框
*/
JTextFieldscoreTextField=newJTextField(15);
/**
*输入面板
*/
JPanelinputPanel=newJPanel();
/**
*添加按钮
*/
JButtoninsertBtn=newJButton("录入");
/**
*查询按钮
*/
JButtonsearchBtn=newJButton("查询");
/**
*修改按钮
*/
JButtonmodifyBtn=newJButton("修改");
/**
*删除按钮
*/
JButtondeleteBtn=newJButton("删除");
/**
*管理面板
*/
JPanelmanagePanel=newJPanel();
/**
*按钮监听器
*/
ButtonActionListenerbtnAction=newButtonActionListener();
/**
*构造器:
初始化窗体
*/
publicstudentmanager(){
this.setSize(280,200);
this.setLocation(300,300);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("学生成绩管理系统");
/*
*将窗体划分为上中下三个块
*/
this.setLayout(newBorderLayout());
this.add(titlePanel,"North");
this.add(inputPanel,"Center");
this.add(managePanel,"South");
/*
*第一块用来放标题面板==
*/
titlePanel.setLayout(newFlowLayout(FlowLayout.CENTER,0,10));
titlePanel.add(titleLabel);
titleLabel.setFont(newFont("黑体",Font.PLAIN,16));
/*
*第二块放输入面板
*/
inputPanel.setLayout(newFlowLayout(FlowLayout.CENTER,20,10));
inputPanel.add(nameLabel);
inputPanel.add(nameTextField);
inputPanel.add(scoreLabel);
inputPanel.add(scoreTextField);
/*
*第三块是管理面板
*/
managePanel.setLayout(newFlowLayout(FlowLayout.CENTER,5,10));
managePanel.add(insertBtn);
managePanel.add(searchBtn);
managePanel.add(modifyBtn);
managePanel.add(deleteBtn);
/*
*为按钮注册按钮监听器
*/
insertBtn.addActionListener(btnAction);
searchBtn.addActionListener(btnAction);
modifyBtn.addActionListener(btnAction);
deleteBtn.addActionListener(btnAction);
/*
*显示窗体
*/
this.setVisible(true);
}
/**
*按钮监听类
*/
classButtonActionListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
/*
*检查是否输入了姓名
*/
Stringname=nameTextField.getText().trim();
if(name.length()==0){
JOptionPane.showMessageDialog(currentContainer,"输入的姓名为空!
","操作失败",JOptionPane.ERROR_MESSAGE);
return;
}
/*
*是否要求查询
*/
if(e.getSource()==searchBtn){
search(name);//执行查询方法,进行查询操作
return;
}
intscore=0;
/*
*是否要求删除
*/
if(e.getSource()==deleteBtn){
try{
score=Integer.parseInt(scoreTextField.getText().trim());
intchoose=JOptionPane.showConfirmDialog(currentContainer,"确定要删除该同学的这次成绩吗?
","确认删除",JOptionPane.YES_NO_CANCEL_OPTION);
if(choose==JOptionPane.YES_OPTION){
booleanflag=delete(name,score);//当确定时删除名字为name的同学成绩为score的成绩一次
if(flag){
nameTextField.setText("");//清空姓名框
scoreTextField.setText("");//清空成绩框
JOptionPane.showMessageDialog(currentContainer,"已删除该同学的这次成绩!
","删除成功!
",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(currentContainer,"该同学并没有这个成绩!
","删除失败!
",JOptionPane.PLAIN_MESSAGE);
}
}
}catch(NumberFormatExceptione1){
//当catch到NumberFormatException时说明parseInt失败:
没有输入成绩,此时应删除所有成绩
intchoose=JOptionPane.showConfirmDialog(currentContainer,"确定要删除该同学的所有成绩吗?
","确认删除",JOptionPane.YES_NO_CANCEL_OPTION);
if(choose==JOptionPane.YES_OPTION){
booleanflag=delete(name);//当确定时删除名字为name的同学的所有成绩
if(flag){
nameTextField.setText("");//清空姓名框
scoreTextField.setText("");//清空成绩框
JOptionPane.showMessageDialog(currentContainer,"已删除该同学的所有成绩!
","删除成功!
",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(currentContainer,"该同学没有成绩!
","删除失败!
",JOptionPane.PLAIN_MESSAGE);
}
}
}
return;
}
/*
*检查是否输入了成绩
*/
try{
score=Integer.parseInt(scoreTextField.getText().trim());
}catch(Exceptione1){
JOptionPane.showMessageDialog(currentContainer,"输入的成绩不是数字!
","操作失败",JOptionPane.ERROR_MESSAGE);
return;
}
/*
*是否要求录入
*/
if(e.getSource()==insertBtn){
booleanflag=insert(name,score);//执行方法,进行录入操作
if(flag){
JOptionPane.showMessageDialog(currentContainer,"录入成功!
");
scoreTextField.setText("");//清空成绩框
}else{
JOptionPane.showMessageDialog(currentContainer,"录入过程中出现了异常,请联络技术人员!
","录入失败",JOptionPane.ERROR_MESSAGE);
}
return;
}
/*
*是否要求修改
*/
if(e.getSource()==modifyBtn){
intchoose=JOptionPane.showConfirmDialog(currentContainer,"确定要将该同学的所有成绩都修改为"+score+"吗?
","确认修改",JOptionPane.YES_NO_CANCEL_OPTION);
if(choose==JOptionPane.YES_OPTION){
booleanflag=modify(name,score);//当确定时修改所有名字为name的同学的成绩为score
if(flag){
JOptionPane.showMessageDialog(currentContainer,"已将该同学的所有成绩都修改为"+score+"!
","修改成功!
",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(currentContainer,"没有该姓名的同学的成绩记录!
","修改失败!
",JOptionPane.ERROR_MESSAGE);
}
}
return;
}
}
}
/**
*查询指定姓名的同学的成绩
*@paramname要查询的姓名
*/
publicvoidsearch(Stringname){
try{
/*
*读入文件,读取每条学生信息,满足条件则显示并弹出提示确认是否继续查询
*/
BufferedReaderin=newBufferedReader(newFileReader(fileName));
Stringline;
intchoose=JOptionPane.NO_OPTION;
while((line=in.readLine())!
=null){
String[]info=line.split(":
");
if(info[0].equals(name)){
scoreTextField.setText(info[1]);//更新成绩信息
choose=JOptionPane.showConfirmDialog(null,"继续查询该同学的成绩?
","查找完毕!
",JOptionPane.YES_NO_OPTION);
if(choose==JOptionPane.NO_OPTION){
//选择否则不再查询,确定则继续
in.close();
return;
}
}
}
in.close();
if(choose==JOptionPane.YES_OPTION){
//当继续查找时找不到记录
JOptionPane.showMessageDialog(currentContainer,"找不到该同学的更多成绩!
","查找完毕",JOptionPane.PLAIN_MESSAGE);
}else{
//第一次查询就找不到记录
scoreTextField.setText("");
JOptionPane.showMessageDialog(currentContainer,"找不到该同学的成绩!
","查找完毕",JOptionPane.PLAIN_MESSAGE);
}
}catch(FileNotFoundExceptione){
//文件不存在,说明没有成绩数据
JOptionPane.showMessageDialog(currentContainer,"成绩数据为空!
","查找失败",JOptionPane.ERROR_MESSAGE);
}catch(IOExceptione){
JOptionPane.showMessageDialog(currentContainer,"成绩数据为空!
","查找失败",JOptionPane.ERROR_MESSAGE);
}
}
/**
*插入新记录
*@paramname姓名
*@paramscore成绩
*/
publicbooleaninsert(Stringname,intscore){
try{
/*
*写入文件
*/
Writerout=newFileWriter(fileName,true);
out.write(name+":
"+score+"\r\n");
out.close();
returntrue;
}catch(IOExceptione){
e.printStackTrace();
returnfalse;
}
}
/**
*修改记录内容
*
- 将姓名为name的所有成绩修改为score。
*@paramname姓名
*@paramscore更新的成绩
*/
publicbooleanmodify(Stringname,intscore){
try{
/*
*先读入所有学生成绩信息,
*把满足条件的记录更新为新成绩后,暂存到内存中
*其他记录直接存储
*/
BufferedReaderin=newBufferedReader(newFileReader(fileName));
Stringline=null,data="";
booleanflag=false;
while((line=in.readLine())!
=null){
String[]info=line.split(":
");
if(info[0].equals(name)){
line=info[0]+":
"+score;
flag=true;
}
data+=line+"\r\n";
}
in.close();
/*
*重新写文件
*/
Writerout=newFileWriter(fileName);
out.write(data);
out.close();
returnflag;
}catch(IOExceptione){
e.printStackTrace();
}
returnfalse;
}
/**
*删除指定姓名同学的所有成绩
*@paramname姓名
*/
publicbooleandelete(Stringname){
try{
/*
*读入所有学生成绩信息,
*只将未满足条件的记录暂存到内存中
*/
BufferedReaderin=newBufferedReader(newFileReader(fileName));
Stringline=null,data="";
booleanflag=false;
while((line=in.readLine())!
=null){
String[]info=line.split(":
");
if(!
info[0].equals(name)){
//只存储不满足条件的记录
data+=line+"\r\n";
}else{
flag=true;
}
}
in.close();
/*
*重新写文件
*/
Writerout=newFileWriter(fileName);
out.write(data);
out.close();
returnflag;
}catch(IOExceptione){
e.printStackTrace();
}
returnfalse;
}
/**
*删除指定姓名同学的指定成绩的一次成绩
*@paramname姓名
*@paramscore成绩
*/
publicbooleandelete(Stringname,intscore){
try{
/*
*读入所有学生成绩信息,
*当找到满足条件的记录时,第一次忽略。
*其他次或未满足条件的记录,暂存到内存中。
*/
BufferedReaderin=newBufferedReader(newFileReader(fileName));
Stringline=null,data="";
booleanflag=false;
while((line=in.readLine())!
=null){
String[]info=line.split(":
");
if(info[0].equals(name)&&info[1].equals(String.valueOf(score))&&!
flag){
//第一次找到满足条件的记录时跳过不写入文件:
只删除一条记录
flag=true;
continue;
}
data+=line+"\r\n";
}
in.close();
/*
*重新写文件
*/
Writerout=newFileWriter(fileName);
out.write(data);
out.close();
returnflag;
}catch(IOExceptione){
e.printStackTrace();
}
returnfalse;
}
/**
*入口方法
*@paramargs
*/
publicstaticvoidmain(String[]args){
newstudentmanager();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 设计 报告