
学生成绩管理平台一、实验目的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】 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*;public class studentmanager extends JFrame {/** * 当前容器 */ Container currentContainer = this;/** * 存储的文件名 */ String fileName = new String("data.txt");/** * 显示标题文本 */ JLabel titleLabel = new JLabel("学生成绩管理系统");/** * 标题面板 */ JPanel titlePanel = new JPanel();/** * 显示姓名文本 */ JLabel nameLabel = new JLabel("姓名");/** * 显示成绩文本 */ JLabel scoreLabel = new JLabel("成绩");/** * 姓名文本框 */ JTextField nameTextField = new JTextField(15);/** * 成绩文本框 */ JTextField scoreTextField = new JTextField(15);/** * 输入面板 */ JPanel inputPanel = new JPanel();/** * 添加按钮 */ JButton insertBtn = new JButton("录入");/** * 查询按钮 */ JButton searchBtn = new JButton("查询");/** * 修改按钮 */JButton modifyBtn = new JButton("修改");/** * 删除按钮 */ JButton deleteBtn = new JButton("删除");/** * 管理面板 */ JPanel managePanel = new JPanel();/** * 按钮器 */ ButtonActionListener btnAction = new ButtonActionListener();/** * 构造器:初始化窗体 */ public studentmanager(){ this.setSize(280,200); this.setLocation(300, 300);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("学生成绩管理系统");/* * 将窗体划分为上中下三个块 */ this.setLayout(new BorderLayout()); this.add(titlePanel, "North"); this.add(inputPanel,"Center"); this.add(managePanel,"South");/* * 第一块用来放标题面板 = = */ titlePanel.setLayout(new FlowLayout(FlowLayout.CENTER,0,10)); titlePanel.add(titleLabel); titleLabel.setFont(new Font("黑体 ",Font.PLAIN,16));/* * 第二块放输入面板 */inputPanel.setLayout(new FlowLayout(FlowLayout.CENTER,20,10)); inputPanel.add(nameLabel); inputPanel.add(nameTextField);inputPanel.add(scoreLabel); inputPanel.add(scoreTextField);/* * 第三块是管理面板 */ managePanel.setLayout(new FlowLayout(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); }/** * 按钮类 */ class ButtonActionListener implements ActionListener{public void actionPerformed(ActionEvent e) { /* * 检查是否输入了姓名 */ String name = nameTextField.getText().trim(); if(name.length()==0){JOptionPane.showMessageDialog(currentContainer, "输入的姓名为空! ","操作失败",JOptionPane.ERROR_MESSAGE); return; }/* * 是否要求查询 */ if(e.getSource()==searchBtn){ search(name); 进行查询操作 return; } // 执行查询方法,int score = 0;/* * 是否要求删除 */ if(e.getSource()==deleteBtn){ try{ score = Integer.parseInt(scoreTextField.getText().trim()); int choose = JOptionPane.showConfirmDialog(currentContainer, "确定应删除该同 学的此次成绩吗?","确认删除",JOptionPane.YES_NO_CANCEL_OPTION); if(choose == JOptionPane.YES_OPTION){ boolean flag = 当确认时删除名字为 name 的同delete(name,score); 学成绩为 score 的成绩一次//if(flag){nameTextField.setText("");//清空姓名框scoreTextField.setText("");//清空成绩框JOptionPane.showMessageDialog(currentContainer, "已删除该老师的 这次成绩!","删除成功!",JOptionPane.PLAIN_MESSAGE); }else{JOptionPane.showMessageDialog(currentContainer, "该老师并没有这 个成绩!","删除失败!",JOptionPane.PLAIN_MESSAGE); } } }catch(NumberFormatException e1){ // 当 catch 到 NumberFormatException 时表明 parseInt 失败:没有输入成绩,此时要删 除所有成绩int choose = JOptionPane.showConfirmDialog(currentContainer, "确定应删除该同 学的所有成绩吗?","确认删除",JOptionPane.YES_NO_CANCEL_OPTION); if(choose == JOptionPane.YES_OPTION){ boolean flag = 当确认时删除名字为 name 的同学的所有delete(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(Exception e1){JOptionPane.showMessageDialog(currentContainer, "输入的成绩不是 数字!","操作失败",JOptionPane.ERROR_MESSAGE); return; }/* * 是否要求录入 */ if(e.getSource()==insertBtn){ boolean flag = insert(name,score); // 执行方式,进行录入操作 if(flag){JOptionPane.showMessageDialog(currentContainer,"录入成功!");scoreTextField.setText(""); }else{//清空成绩框JOptionPane.showMessageDialog(currentContainer,"录入过程中发生了 异常,请联系技术人员!","录入失败",JOptionPane.ERROR_MESSAGE); } return; }/* * 是否要求修改*/ if(e.getSource()==modifyBtn){ int choose = JOptionPane.showConfirmDialog(currentContainer, "确定应将该朋友 的所有成绩都设置为" + score+ "吗?","确认修改 ",JOptionPane.YES_NO_CANCEL_OPTION); if(choose == JOptionPane.YES_OPTION){ boolean flag = 当确认时设置所有名字为 name 的同学modify(name,score); 的成绩为 score//if(flag){JOptionPane.showMessageDialog(currentContainer, "已将该朋友的所 有成绩都设置为" + score+ "!","修改成功! ",JOptionPane.PLAIN_MESSAGE); }else{JOptionPane.showMessageDialog(currentContainer, "没有该姓名的同 学的成绩记录!","修改失败!",JOptionPane.ERROR_MESSAGE); } } return; } }}/*** 查询指定姓名的同学的成绩 * @param name 要查询的姓名 */ public void search(String name){ try { /* * 读入文件,读取每条,满足条件则 显示并弹出提醒确认能否再次查询 */ BufferedReader in = new BufferedReader(new FileReader(fileName)); String line; int choose = 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 (FileNotFoundException e) { // 文件不存在,说明没有成绩数据JOptionPane.showMessageDialog(currentContainer,"成绩数据为空! "," 查找失败",JOptionPane.ERROR_MESSAGE); } catch (IOException e) {JOptionPane.showMessageDialog(currentContainer,"成绩数据为空! "," 查找失败",JOptionPane.ERROR_MESSAGE); }}/** * 插入新记录 * @param name 姓名 * @param score 成绩 */ public boolean insert(String name, int score){ try { /* * 写入文件 */ Writer out = new FileWriter(fileName,true); out.write(name + ":" + score + "\r\n"); out.close(); return true;} catch (IOException e) { e.printStackTrace(); return false; } }/** * 修改记录内容 * <ul>将姓名为 name 的所有成绩修改为 score。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-142986-1.html
你好