一、实验目的 通过编写Java的应用系统综合实例——图形化界面的成绩管理,总结、回顾和实践面向对象的编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握。
二、设备与环境 PC兼容机、Windows操作系统、JDK开发包、集成开发环境
三、实验内容 实现一个图形界面的学生成绩管理系统,能够对存储到学生成绩数据库中的学生成绩实现录入、查看、排序和按姓名查询等功能,主要分为两个开发任务。 第一个开发任务是实现所需要的图形界面。 第二个开发任务是为图形界面中的组件添加处理程序,完成所需要的功能。在录入功能中输入姓名、年龄和成绩,单击“添加”按钮,即可将学生信息存入数据库。 实现学生成绩查看功能,添加“显示”按钮处理程序,单击界面中间的“显示”按钮,找出数据库中保存的所有学生信息,将这些信息显示在右侧显示区中。 单击界面中的“排序”按钮,实现学生成绩的排序功能,找到数据库中保存的所有学生信息,按照成绩从低到高排序后显示在右侧显示区中。 在查询功能中输入姓名,单击“提交”按钮,即可根据姓名查询相应学生的信息并显示在右下侧显示区中。
四、实验结果及分析 (一)设计思路 首先,需要完成第一部分,就是创建图形化的界面,这需要引入java.awt包,调用java.awt包中的JFrame、JPanel、JLabel和JTextField这些属性。其中,JFrame用来定义学生成绩管理系统的主窗口,JPanel用来定义各项学生信息的输入区面板,JLabel用来定义各种提示标签,JTextField则用来定义各种信息的输入框。 然后,为类StudentManager增加了按钮处理程序,单击按钮就可以完成相应的功能,Java图形界面开发中采用事件处理机制来响应用户的操作。拼凑sql语句,通过insert方法来向数据库中插入一条学生信息,getStudentClass方法来获取数据库中所有学生信息,getByName方法来获取数据库中指定学生的信息。插入和获取的内容对应形参的name属性、age属性和grade属性。 最后,通过构造一个DbOperation类的getConnection()来连接数据库,构造getAll方法根据传入的参数sql中保存的SQL语句字符串的要求查询数据库,并将查询的结果返回给调用这个方法的程序,并以List
(二)效果展示 学生成绩管理系统的主界面:
录入学生姓名、年龄和成绩:
查看所有学生信息:
按成绩排序之后的所有学生信息:
查询指定学生信息:
(三)部分关键代码说明 (1)private JFrame mainFrame; 用JFrame定义图书管理系统的主窗口。 (2)private JPanel top; 用JPanel定义输入学生信息的输入区面板。 (3)private JLabel labelTop; private JLabel labelName; 用JLabel定义提示标签。 (4)private JTextField textName; 用JTextField定义输入框。 (5)private JButton btnAdd; 用JButton定义按钮。 (6)mainFrame.setBounds(100,100,500,250); mainFrame.setVisible(true); 设置窗口的大小以及窗口是否可见。 (7)mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 用于设置单击“关闭”按钮的功能为退出程序。 (8)private void setAction(){ btnAdd.addActionListener(this); btnShowAll.addActionListener(this); btnSortAll.addActionListener(this); btnQuery.addActionListener(this); } 该方法为动作设置方法,为之前定义的四个按钮添加点击时的响应。 (9)sql = "insert into student(name,age,grade)values('"; sql = sql+s.getName(); sql = sql+"',"; sql = sql+s.getAge(); sql = sql+","; sql = sql+s.getGrade(); sql = sql+")"; 在java程序中用这种方法来拼凑sql语句,通过形参(Student类的s)的置取方法来向数据库中插入一条学生信息,插入的内容对应形参的name属性、age属性和grade属性。 (10)String sql = "select name,age,grade from student"; sql = sql+"where name='"+name+"'"; 在java程序中通过这句话来起到拼凑出查询指定学生信息的sql语句,查询所得到的内容为所指定学生的姓名、年龄和成绩。 (11)public void sort(){ Student temp; for(int i=0;i for(int j=1;j if(stuList.get(j-1).getGrade()>stuList.get(j).getGrade()){ temp = stuList.get(j-1); stuList.set(j-1,stuList.get(j)); stuList.set(j,temp); } } } } 这个方法是通过冒泡排序的方式对取出来的学生信息按成绩来进行排序。 (12)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 在连接数据库时,通过这段程序来加载驱动器类。 (13)Connection conn = DriverManager.getConnection ("jdbc:sqlserver://127.0.0.1:1433","sa","123"); 在连接数据库时,通过这段程序来得到连接对象。 (14)public List List Student temp; String name; int age; double grade; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ name = rs.getString("name"); age = rs.getInt("age"); grade = rs.getDouble("grade"); temp = new Student(name,age,grade); result.add(temp); } return result; } 该方法根据参数sql中保存的SQL语句字符串的要求查询数据库,并将查询的结果返回给调用这个方法的程序,并以List (15)public class DisplayUtils{ public static String display(List StringBuilder strResult = new StringBuilder(); for(Map for(Map.Entry entry : map.entrySet()){ strResult.append(entry.getKey()+":"+entry.getValue()+"\t"); } strResult.append("\r\n"); } return strResult.toString(); } } 定义工具类DisplayUtils,里面有一个静态方法display()。其中包含一个参数List |