java课程设计 学生学籍管理系统.doc
课程设计论文任务书学院理学院专 业信息与计算科学学生姓名许岩班级学号0809010214课程名称Java程序设计课程设计课程设计论文题目学生学籍管理系统设计题目:学生学籍管理系统,用java语言编程知识和Eclipse软件实现学生学籍管理系统程序。设计目的:1复习、稳固Java语言的根底知识,进一步加深对Java语言的理解和掌握;2课程设计为学生提供了一个既动手又动脑,独立实践的时机,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;3培养学生在工程开发中的团队合作精神、创新意识及能力。方案与进度安排:周一全天:设计解决问题方法、周三14节;调试程序周一全天 :调试程序周三14节:完成论文、辩论。成绩:指导教师签字: 2010年7月8日 专业负责人签字:2010年7月18日主管院长签字: 2010年7月19日摘要Java语言是当前最为流行的程序设计语言之一,诸多优秀的的特性使其成为被业界广泛认可和采用的工具。本设计可以帮助同学掌握和应运所学的面向对象程序设计学生学籍信息管理系统的编程内容,培养同学们建立对象模型,处理对象和对象集关系和对图形用回界面设计编程以及文件和流的编程问题的能力,训练同学为解决实际问题而创立较完整的简单面向对象和管理系统编程应运程序的独立编程能力.本设计是一个常见的学生学籍管理系统应运程序.系统实现的功能:界面操作实现学生学籍信息的添加、删除、查询、修改功能,在文本文件中的的信息的动态处理。关键词:学生学籍管理系统;图形用户界面设计;文件和流;java目 录一 设计目的1二 设计问题1三 概要设计13.1 主程序面板设计23.2 功能组件的功能实现33. 添加学生信息33.查询学生信息43.修改学生信息43.删除学生信息53.重置学生信息5四 详细设计5图形用户界面设计5添加功能的实现9重置功能的实现10查询功能的实现10删除功能的实现12修改功能的实现15系统的运行18五 设计总结18参考文献19致谢19学生学籍管理系统一、设计目的随着现代社会的快速开展,我们已进入信息化时代,管理系统在人们的生活中的应用越来越广泛,它已深入到我们工作、学习、生活的各个方面。为了适应时代的开展,本次课程设计的主要任务是设计一个学生学籍管理系统并完成一些根本操作。其目的是:(1) 运用已学的java知识编一些简单使用的程序,通过本课程设计使我们加深理解、稳固课堂理论知识和实验知识;(2) 使我们初步具备综合运用所学Java语言根底知识,面向对象程序设计的根本思想、方法与技术,用户界面设计编程和文件编程技术等开发简单应用系统的根本能力;(3) 使理论和实际相结合,真正做到学以致用,并适应时代开展的潮流。二、设计问题学生学籍管理系统要求完成:(1) 学生学籍信息的添加、删除、查询、修改功能(2) 使用界面操作(3) 使用文件完成首先设计面板,然后往面板里添加组件,点击各个组件来实现要求的对学生学籍信息的添加、删除、查询、修改功能。三、概要设计学生信息管理系统的程序文件为AddStudentInformation.java,在AddStudentInformation.java包含名为AddStudent的类。其主要功能为构成学生信息管理系统的主体框架,实现框架上各个组件的事件侦听。主要包括2个模块:图形用户界面的构建:组件监听事件的实现。用例图1表示如下学生信息录入信息添加信息删除信息查询信息修改添加信息重置学籍信息数据文件学生学籍信息显示例图1、主程序面板设计:设计主面板如下列图,主面板分为学籍信息输入区、功能操作区和学籍信息显示区。在学生信息输入区里分别有学号、姓名、性别、班级、系别等信息的输入文本框,其数据类型均置为String类型。在功能操作区里有五个按钮分别为:添加、修改、重置、删除、查询。分别实现对文本文件中的的学生信息数据进行添加、修改、删除、查询。其中重置功能按钮为对主程序界面中的信息输入区和信息显示区的文本框中的内容进行去除操作。在学籍信息显示区里使用DefaultTableModel tableModel=new DefaultTableModel(); String titles="学号","姓名", "性别","班级","系别" 定义五个titles用来学籍信息的显示。主程序面板如例图2所示。例图2学籍信息输入学籍信息显示功能操作 、功能组件的功能实现:添加学生信息在文本框中输入学生信息包括学号、姓名、性别、班级、系别,点击添加按钮弹出对话框如图。该学生信息已成功添加至文件。 如例图3,4例图3例图4查询学生信息在学号文本框里输入想要查询的学号0809010214,在学生信息显示栏显示信息。如例图5:例图5修改学生信息在学生信息输入区输入完整的学生信息,点击修改按钮弹出如下对话框,点击是(Y)按钮,程序自动修改文本文件中的学生信息,如例图6,7。例图6例图7翻开text1.txt文件,查找所修改内容,成功修改内容,再查询学号为08090104的学生信息为如例图8例图8说明信息修改成功。删除学生信息只需在信息输入区输入所要删除的学生信息的学号,点击删除按钮弹出如下对话框例图9点击是(Y)按钮,程序进行执行删除功能,并弹出如下对话框,如例图10例图10重置信息点击重置按钮,学籍信息输入区和学籍信息显示区的文本框中的内容都设置为空。四、详细设计定义AddStudent类继承JFrame类使用ActionListener, ItemListener接口实现对事件的监听。以下为用户界面的程序代码及分析:定义String类型的num,name,grade,sex,xibie,oldStr六个变量;在本系统中默认学籍信息中的学号为学生信息的唯一可区分标识。删除、查询和修改时均以学号来进行信息的检索和匹配检测。使用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); 添加功能的实现定义addDate()方法实现学籍信息的添加,使用getText()方法获取文本框中的学生学籍信息,并使用PrintWriter(new FileWriter( new File("text1.txt"),true)类下的println()方法将信息写入文件。其中每个学籍信息之间用|隔开,并换行保存以方便信息的的读取和查询。添加成功之后执行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, "添加成功", "温馨提示", JOptionPane.INFORMATION_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);重置功能的实现使用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("学生信息");查询功能的实现定义查询方法实现查询功能,首先使用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, "请输入学号", "温馨提示", JOptionPane.INFORMATION_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),那么删除该学生的所有信息。在实现删除功能时,本系统采用缓冲流StringBufferbuf的相关特性,在信息匹配成功之后,使用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, "删除成功", "温馨提示", JOptionPane.INFORMATION_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) 修改功能的实现修改学籍信息和删除功能实现方法类似,只是在修改的具体过程有些差异,修改学籍信息时需要用户输入完整的学籍信息,点击修改按钮,系统弹出对话框提示是否要删除学生学籍信息,点击是(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.getText()+"|"+txt_department.getText(); st.close(); PrintWriter