java课程设计_学生学籍管理系统1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
Java语言是当前最为流行的程序设计语言之一,诸多优秀的的特性使其成为被业界广泛认可和采用的工具。
本设计可以帮助同学掌握和应运所学的面向对象程序设计学生学籍信息管理系统的编程内容,培养同学们建立对象模型,处理对象和对象集关系和对图形用回界面设计编程以及文件和流的编程问题的能力,训练同学为解决实际问题而创建较完整的简单面向对象和管理系统编程应运程序的独立编程能力.本设计是一个常见的学生学籍管理系统应运程序.
系统实现的功能:
界面操作实现学生学籍信息的添加、删除、查询、修改功能,在文本文件中的的信息的动态处理。
关键词:
学生学籍管理系统;图形用户界面设计;文件和流;java
目录
一、设计目的 0
二、设计问题 0
三、概要设计 0
3.1、主程序面板设计 (1)
3.2、功能组件的功能实现 (2)
四、详细设计 (5)
4.1图形用户界面设计 (5)
4.2添加功能的实现 (9)
4.3重置功能的实现 (11)
4.4查询功能的实现 (12)
4.5删除功能的实现 (5)
4.6修改功能的实现 (16)
4.7系统的运行 (19)
五、设计总结 (20)
参考文献 (21)
学生学籍管理系统
一、设计目的
随着现代社会的快速发展,我们已进入信息化时代,管理系统在人们的生活中的应用越来越广泛,它已深入到我们工作、学习、生活的各个方面。
为了适应时代的发展,本次课程设计的主要任务是设计一个学生学籍管理系统并完成一些基本操作。
其目的是:
(1)运用已学的java知识编一些简单使用的程序,通过本课程设计使我们加深理解、巩固课堂理论知识和实验知识;
(2)使我们初步具备综合运用所学Java语言基础知识,面向对象程序设计的基本思想、方法与技术,用户界面设计编程和文件编程技术等开发
简单应用系统的基本能力;
(3)使理论和实际相结合,真正做到学以致用,并适应时代发展的潮流。
二、设计问题
学生学籍管理系统
要求完成:
(1)学生学籍信息的添加、删除、查询、修改功能
(2)使用界面操作
(3)使用文件完成
首先设计面板,然后往面板里添加组件,点击各个组件来实现要求的对学生学籍信息的添加、删除、查询、修改功能。
三、概要设计
学生信息管理系统的程序文件为AddStudentInformation.java,在
AddStudentInformation.java包含名为AddStudent的类。
其主要功能为构成学生信息管理系统的主体框架,实现框架上各个组件的事件侦听。
主要包括2个模块:图形用户界面的构建:组件监听事件的实现。
用例图1表示如下
例图1
3.1、主程序面板设计:
设计主面板如图所示,主面板分为学籍信息输入区、功能操作区和学籍信息显示区。
在学生信息输入区里分别有学号、姓名、性别、班级、系别等信息的输入文本框,其数据类型均置为String类型。
在功能操作区里有五个按钮分别为:添加、修改、重置、删除、查询。
分别实现对文本文件中的的学生信息数据进行添加、修改、删除、查询。
其中重置功能按钮为对主程序界面中的信息输入区和信息显示区的文本框中的内容进行清除操作。
在学籍信息显示区里使用DefaultTableModel tableModel=new DefaultTableModel();
String[] titles={"学号","姓名", "性别","班级","系别"};
定义五个titles用来学籍信息的显示。
主程序面板如例图2所示。
学籍信息输入
功能操作
学籍信息显示
例图2
3.2、功能组件的功能实现:
3.2.1添加学生信息
在文本框中输入学生信息包括学号、姓名、性别、班级、系别,点击添加按钮弹出对话框如图。
该学生信息已成功添加至文件。
如例图3,4
例图3
例图4
3.2.2查询学生信息
在学号文本框里输入想要查询的学号0809010214,在学生信息显示栏显示信息。
如例图5:
例图5
3.2.3修改学生信息
在学生信息输入区输入完整的学生信息,点击修改按钮弹出如下对话框,点击是(Y)按钮,程序自动修改文本文件中的学生信息,如例图6,7。
例图6
例图7
打开text1.txt文件,查找所修改内容,成功修改内容,再查询学号为08090104的学生信息为如例图8
例图8
说明信息修改成功。
3.2.4删除学生信息
只需在信息输入区输入所要删除的学生信息的学号,点击删除按钮弹出如下对话框
例图9
点击是(Y)按钮,程序进行执行删除功能,并弹出如下对话框,如例图10
例图10
3.2.5重置信息
点击重置按钮,学籍信息输入区和学籍信息显示区的文本框中的内容都设置为空。
四、详细设计
4.1图形用户界面设计
定义AddStudent类继承JFrame类使用ActionListener, ItemListener接口实现对事件的监听。
以下为用户界面的程序代码及分析:
定义String类型的num,name,grade,sex,xibie,oldStr六个变量;在本系统中默认学籍信息中的学号为学生信息的唯一可区分标识。
删除、查询和修改时均以学号来进行信息的检索和匹配检测。
4.5使用JLabel标签类定义lbl_title lbl_num lbl_name lbl_sex lbl_class lbl_department;
使用JTextField类创建文本框用以学籍信息的输入和显示。
使用JButton类创建btn_rep btn_xg btn_cx btn_sh btn_add功能按钮。
使用addItemListener() 和addActionListener()方法功能按钮事件进行监听。
使用JRadioButton类创建rb_man rb_woman用以学生学籍信息性别的选择。
使用DefaultTableModel类定义五个titles用来学籍信息的显示。
使用Container容器类,并使用add()方法添加组件到容器中。
使用setBounds()方法对每个组件进行位置的设置,并使界面达到最优化。
使用setVisible(true)使界面显示各个组件。
class AddStudent extends JFrame implements ActionListener, ItemListener { public String num,name,grade,sex,xibie,oldStr;
JLabel lbl_title = new JLabel("学生信息");
JLabel lbl_num = new JLabel("学号:");
JLabel lbl_name = new JLabel("姓名:");
JLabel lbl_sex = new JLabel("性别:");
JLabel lbl_class = new JLabel("班级:");
JLabel lbl_department = new JLabel("系别:");
JTextField txt_num = new JTextField();
JTextField sfzText1 = new JTextField() ;
JTextField bnameText1 = new JTextField() ;
JTextField xbText1 = new JTextField() ;
JTextField dateText1 = new JTextField() ;
JTextField xb = new JTextField() ;
JTextField txt_name = new JTextField(11);
JTextField txt_class = new JTextField(11);
JTextField txt_department = new JTextField();
JButton btn_rep = new JButton("重置");
JButton btn_xg = new JButton("修改");
JButton btn_cx = new JButton("查询");
JButton btn_sh = new JButton("删除");
JButton btn_add = new JButton("添加");
JRadioButton rb_man = new JRadioButton("男");
JRadioButton rb_woman = new JRadioButton("女");
DefaultTableModel tableModel=new DefaultTableModel();
String[] titles={"学号","姓名", "性别","班级","系别"};
String a,b,c,d,f;
private JLabel infoLab = new JLabel("学生信息管理") ;
ButtonGroup bg = new ButtonGroup();
AddStudent(String s) {
super(s);
this.setBounds(500, 50, 390, 600);
Container con = this.getContentPane();
con.setLayout(null);
con.add(lbl_title);
con.add(lbl_num);
con.add(lbl_name);
con.add(lbl_sex);
con.add(lbl_class);
con.add(lbl_department);
con.add(txt_num);
con.add(txt_name);
con.add(txt_class);
con.add(txt_department);
con.add(btn_rep);
con.add(btn_xg);
con.add(btn_cx);
con.add(btn_sh);
con.add(btn_add);
con.add(rb_man);
con.add(rb_woman);
bg.add(rb_man);
bg.add(rb_woman);
con.add(infoLab);
con.add(sfzText1) ;
con.add(bnameText1) ;
con.add(xbText1) ;
con.add(dateText1) ;
con.add(xb);
lbl_title.setBounds(150, 50, 100, 25);
lbl_num.setBounds(100, 100, 50, 25);
lbl_name.setBounds(100, 150, 50, 25);
lbl_sex.setBounds(100, 200, 50, 25);
lbl_class.setBounds(100, 250, 50, 25);
lbl_department.setBounds(100, 300, 50, 25);
btn_add.setBounds(20, 350, 60, 25);
btn_sh.setBounds(230, 350, 60, 25);
btn_xg.setBounds(90, 350, 60, 25);
btn_cx.setBounds(300, 350, 60, 25);
btn_rep.setBounds(160, 350, 60, 25);
txt_num.setBounds(150, 100, 110, 25);
txt_name.setBounds(150, 150, 110, 25);
txt_class.setBounds(150, 250, 110, 25);
txt_department.setBounds(150, 300, 110, 25);
rb_man.setBounds(150, 200, 50, 25);
rb_woman.setBounds(220, 200, 50, 25);
infoLab.setBounds(0,410,100,25);
sfzText1.setBounds(0,450,80,20) ;
bnameText1.setBounds(80,450,80,20) ;
xb.setBounds(160,450,80,20) ;
xbText1.setBounds(240,450,80,20) ;
dateText1.setBounds(320,450,80,20) ;
tableModel.setColumnIdentifiers(titles);
JTable table=new JTable(tableModel);
JScrollPane scr=new JScrollPane(table);
con.add(scr);
scr.setBounds(0, 430, 400,300);
rb_man.addItemListener(this);
rb_woman.addItemListener(this);
btn_add.addActionListener(this);
btn_rep.addActionListener(this);
btn_xg.addActionListener(this);
btn_sh.addActionListener(this);
btn_cx.addActionListener(this);
setVisible(true);
4.2添加功能的实现
定义addDate()方法实现学籍信息的添加,使用getText()方法获取文本框中的学生学籍信息,并使用PrintWriter(new FileWriter( new File("text1.txt"),true))类下的println()方法将信息写入文件text1.txt。
其中每个学籍信息之间用|隔开,并换行保存以方便信息的的读取和查询。
添加成功之后执行setText()方法使各个文本框中的信息为空以方便其他功能的实现。
以下为具体的代码:
public void addDate(){
String sex = null;
if(rb_man.isSelected()){
sex=rb_man.getText();}
else {
sex=rb_woman.getText();
}
JOptionPane.showMessageDialog(null, "学号:" + txt_num.getText()+ "\n姓名:" + txt_name.getText()+"\n性别"+sex + "\n班级:"+ txt_class.getText() + "\n系别:" + txt_department.getText());
PrintWriter mm = null;
String fs =txt_num.getText()+"|"+txt_name.getText()+"|"+sex+"|"+txt_class.getText()+"|"+txt _department.getText();
try {
mm = new PrintWriter(new FileWriter( new File("text1.txt"),true));
mm.println(fs);
} catch (IOException e1) {
e1.printStackTrace();
}
mm.close();
JOptionPane.showMessageDialog(null, "添加成功", "温馨提示", RMATION_MESSAGE);
txt_num.setText(null);
txt_name.setText(null);
txt_class.setText(null);
txt_department.setText(null);
bg.remove(rb_man);
bg.remove(rb_woman);
rb_man.setSelected(false);
rb_woman.setSelected(false);
}
4.3重置功能的实现
使用setText()方法使各个文本框中的信息为空,使用JRadioButton 类下的remove()和setSelected(flase)方法使性别单选按钮置为未被选定状态。
public void repDate(){
txt_num.setText(null);
txt_name.setText(null);
txt_class.setText(null);
txt_department.setText(null);
bg.remove(rb_man);
bg.remove(rb_woman);
rb_man.setSelected(false);
rb_woman.setSelected(false);
bg.add(rb_man);
bg.add(rb_woman);
sfzText1.setText("");
bnameText1.setText("");
dateText1.setText("");
xb.setText("");
xbText1.setText("");
infoLab.setText("学生信息");
}
4.4查询功能的实现
定义查询方法实现查询功能,首先使用equals方法进行判别学号输入区文本框中的内容是否为空,为空的时候则提示用回输入学号进行查询,不为空使用类BufferedReader下的readLine()方法正行读取文件text1.txt中的内容,使用类StringTokenizer对读取的整行数据以“|“进行分割,每个分割点的内容赋值给String类型的num,name,sex,grade,xibie。
再次使用equal方法判断学号输入文本框中的内容是否和num相同,若相同则依次使用setText()方法将学籍信息显示区的文本框内容设置为所查找的文件数据。
其中包括文件的异常处理。
以下为具体代码:
public void CheckDate(){
if (txt_num.getText().toString().equals("")){
JOptionPane.showMessageDialog(null, "请输入学号", "温馨提示", RMATION_MESSAGE); }
try {
BufferedReader in = new BufferedReader(new FileReader("text1.txt"));
String s;
while((s=in.readLine())!=null)
{
StringTokenizer t=new StringTokenizer(s,"|");
num=t.nextToken();
name=t.nextToken();
sex=t.nextToken();
grade =t.nextToken();
xibie =t.nextToken();
if(num.equals(txt_num.getText())){
sfzText1.setText(num);
bnameText1.setText(name);
dateText1.setText(xibie);
xb.setText(sex);
xbText1.setText(grade);
infoLab.setText("查询成功!");}
}
} catch (IOException e) {
e.printStackTrace();
}
}
删除功能的实现
删除学籍信息时用户只需输入学生的学号即可删除文本文件中的该生的学籍信息,其实现是基于查询功能,首先是查询文本文件中的数据,如果输入的学号和查询到的信息相同时,提示用户是否要删除该生学籍信息,如果选择是(Y),则删除该学生的所有信息。
在实现删除功能时,本系统采用缓冲流StringBuffer buf的相关特性,在信息匹配成功之后,使用readLine()方法自动查找到该学籍信息在文本文件中所在的行,将该行之前的内容使用append()方法追加到缓冲流buf中,而该行数据则设置为空追加至buf中,该行之后的内容则正常追加至buf 中,然后再写入文本文件text1.txt中,其中也包括对文件读取写入的异常的处理,从而实现了信息的删除。
以下为具体代码:
public void deleteDate(){
if(rb_man.isSelected()){
sex=rb_man.getText();}
else {
sex=rb_woman.getText();
}
String m="确定要删除该学生的记录吗?\n请检查文本文件中的数据格式确保每行数据之间和文本最后无空行";
int ok=JOptionPane.showConfirmDialog(null,m,"确认",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(ok==JOptionPane.YES_OPTION){
try {
BufferedReader in = new BufferedReader(new FileReader("text1.txt"));
String s;
while((s=in.readLine())!=null)
{
StringTokenizer t=new StringTokenizer(s,"|");
num=t.nextToken();
name=t.nextToken();
sex=t.nextToken();
grade =t.nextToken();
xibie =t.nextToken();
if(num.equals(txt_num.getText())){
oldStr = num +"|"+name+"|"+sex+"|"+grade+"|"+ xibie;}
}
} catch (IOException e) {
}
try {
File file = new File("text1.txt");
BufferedReader st = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
StringBuffer buf = new StringBuffer();
String s=null;
for (int j = 1; (s = st.readLine()) != null && !s.equals(oldStr); j++) {
buf = buf.append(s);
buf = buf.append("\n");
}
while ((s = st.readLine()) != null) {
buf = buf.append(s);
buf = buf.append("\n");
}
buf.append("");
st.close();
PrintWriter pw = new PrintWriter(new FileOutputStream(file));
pw.println(buf.toString().toCharArray());
pw.flush();
pw.close();
}
catch (IOException e) {
e.printStackTrace();
}
JOptionPane.showMessageDialog(null, "删除成功", "温馨提示", RMATION_MESSAGE);
txt_num.setText(null);
txt_name.setText(null);
txt_class.setText(null);
txt_department.setText(null);
bg.remove(rb_man);
bg.remove(rb_woman);
rb_man.setSelected(false);
rb_woman.setSelected(false);
}
else if(ok==JOptionPane.NO_OPTION){
}
}
4.6修改功能的实现
修改学籍信息和删除功能实现方法类似,只是在修改的具体过程有些差异,修改学籍信息时需要用户输入完整的学籍信息,点击修改按钮,系统弹出对话框提示是否要删除学生学籍信息,点击是(Y)进行修改学籍信息,首先也是对文本文件的读取和信息匹配检测,以学号为标识进行匹配检测。
若学号相同,使用readLine()方法自动查找到该学籍信息在文本文件中所在的行,将该行之前的内容使用append()方法追加到缓冲流buf中,而该行数据则设置为从文本框中获取的内容追加至buf中,该行之后的内容则正常追加至buf中,然后再写入文本文件text1.txt中,其中也包括对文件读取写入的异常的处理,从而实现了信息的修改。
以下为具体代码:
public void editData(){
if(rb_man.isSelected()){
sex=rb_man.getText();}
else {
sex=rb_woman.getText();
}
String m="确定要修改该学生的记录吗?";
int ok=JOptionPane.showConfirmDialog(null,m,"确认",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(ok==JOptionPane.YES_OPTION){
try {
BufferedReader in = new BufferedReader(new FileReader("text1.txt"));
String s;
while((s=in.readLine())!=null)
{
StringTokenizer t=new StringTokenizer(s,"|");
num=t.nextToken();
name=t.nextToken();
sex=t.nextToken();
grade =t.nextToken();
xibie =t.nextToken();
if(num.equals(txt_num.getText())){
oldStr = num +"|"+name+"|"+sex+"|"+grade+"|"+ xibie;}
}
} catch (IOException e) {
e.printStackTrace();
}
try {
File file = new File("text1.txt");
BufferedReader st = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
StringBuffer buf = new StringBuffer();
String s=null;
for (int j = 1; (s = st.readLine()) != null && !s.equals(oldStr); j++) {
buf = buf.append(s);
buf = buf.append("\n");
}
while ((s = st.readLine()) != null) {
buf = buf.append(s);
buf = buf.append("\n");
}
buf = buf.append(txt_num.getText()+"|"+txt_name.getText()+"|"+sex+"|"+txt_class.getTex t()+"|"+txt_department.getText());
st.close();
PrintWriter pw = new PrintWriter(new FileOutputStream(file));
pw.println(buf.toString().toCharArray());
pw.flush();
pw.close();
}
catch (IOException e) {
e.printStackTrace();
}
JOptionPane.showMessageDialog(null, "修改成功", "温馨提示", RMATION_MESSAGE);
txt_num.setText(null);
txt_name.setText(null);
txt_class.setText(null);
txt_department.setText(null);
bg.remove(rb_man);
bg.remove(rb_woman);
infoLab.setText("学生信息");
rb_man.setSelected(false);
rb_woman.setSelected(false);
}
else if(ok==JOptionPane.NO_OPTION){
}
}
4.7系统的运行:
编写主函数,创建AddStudent类add_student。
以下为主函数代码:public class AddStudentInformation {
public static void main(String[] args) throws IOException {
AddStudent add_student = new AddStudent("学生学籍系统");
add_student.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
五、设计总结
我们刚学习java这门课程,对专业的java编程知识并未有深入的学习和探索。
但是当我们查找过一些书籍资料后,在老师的不遗余力的指导下我们还是把课程设计题目顺利的完成了。
通过此次学生学籍管理系统的设计,使我们对java 编程语言有了更深层次的了解。
不过在编写的过程中也存在一些问题,例如在选择适宜的方法实现修改和删除功能的时候,由于对数组的理解还不能满足当前的编程需要,并未选择更加简单的数组来处理数据,以至于当删除指定内容后在文本文件中留有空行,从而导致了在接下来的查询异常和再次修改和删除功能无法正常实现,还需人工删除掉文本文件中的空行以保证程序的正常运行。
我们也可以选用其他的更加方便的处理方法使得程序更加优化和简洁。
“书山有路勤为径,学海无涯苦作舟”,我们现今所学的知识还远远不够,在今后的学习过程中我们要进一步学习java的更多的知识,此次课程设计不仅锻炼了我们独立思考和团队合作的能力,而且提高了我们动手的能力。
参考文献
[1](美)Cay S.Horstmann、Gary Cornell(叶乃文、邝劲筠等译).JAVA2 核心技
术卷 [M].第七版.机械工业出版社,2006
[2]龚永罡、陈昕.Java程序设计[M].清华大学出版社,2009
[3]刘兆宏、郑莉、陈建、罗频捷.Java语言程序设计案例教程[M].清华大学出版
社,2008
[4]王舜燕、钟珞.Java编程方法学[M].北京邮电大学出版社,2008。