学生成绩管理系统(三):系统设计
一、系统框架
1.使用图形用户界面登录。
2.建立一个数据库,再在该数据库中建三张表STUDENT(学生信息表)、Teacher(教师账号管理表)、zhanghao(学生账号管理表)。 3.设计当以学生身份登录时只能进行查询,当以教师身份登录时可以查询,修改,删除,添加操作。二、系统涉及到的知识点
1.掌握创建一个新的窗口。
2.掌握在窗口中添加文本框、按钮、容器。
3.对添加的文本框、按钮添加事件监听器。
4.掌握构造方法的调用。
5.掌握类的继承。
6.掌握java与数据库之间的连接语句。
Java语言程序设计:
布局管理器:BorderLayout、GridLayout
输入输出流:InputStream、OutputStream
数据库原理:
结构化查询语句:select、insert
数据库表的设计:
定义一个二维数组用于存放查询的数据,在窗体上设置一个表格以便可以用来输出查询的数据。
三、流程描述
( 1)首先在类Studentms创建一个新的窗体添加学生登录和教师登录两个按钮。
(2)用
f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } });
来监听事件当按关闭按钮可以关闭窗口。
(3)创建一个新类RegistSystem1,并用new方法来实现新类的功能,分别新增两个登录窗口。
(4)在新类中创建构造方法RegistSystem1(),该类中有相应的按钮,文本框等的窗体所需的控件,增加密码和按钮监听,并用语句连接数据库如下获取密码:
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con= DriverManager.getConnection("jdbc:odbc:SMS","Test","123"); //加载驱动器 stmt = con.createStatement(); 创建STATEMENT对象 int i=0; int j=0; int a[][]=new int[10][10]; int b[][]=new int[10][10]; //int c[][]=new int[10][10]; //int d[][]=new int[10][10]; rs = stmt.executeQuery("select * from zhanghao"); number1=Integer.parseInt(t1.getText()); pwd1=Integer.parseInt(pwd); //从表中读数据 while (rs.next()) { //rs.next()读的是一行的数据 a[i][j]=rs.getInt("ID"); //用二维数组来存放读出来的数据, b[i][j]=rs.getInt("密码");
(5)设置密码检错功能:
a.当账号输入为空时检错;b.当密码输入为空时检错;c.当账号和密码输入有错时检错。
(6)当以学生的身份登录成功时,在以上述同样的方法生成一个有查询、退出和返回的窗口。
(7)点击查询,根据语句
String cmd =e.getActionCommand(); if(cmd.equals("查询")) { //链接数据库,从数据库中输出信息 Statement stmt = null; ResultSet rs = null; JFrame jf = new JFrame("学生信息查询系统"); JPanel jpl = new JPanel(); final String[] colHeads = {"ID", "NAME", "DEPARTMENT", "C++","ENG","GAOSHU","ZUYUAN"}; Object[][] base = new Object[11][7]; //创建对象数组 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注意是JdbcOdbcDriver,而不是JdbcDriver!!!!!!! Connection con= DriverManager.getConnection("jdbc:odbc:SMS","Test","123");//加载驱动器 stmt = con.createStatement(); 创建STATEMENT对象 int i = 0; rs = stmt.executeQuery("select * from STUDENT"); //从表中读数据 while (rs.next()) { //rs.next()读的是一行的数据 base[i][0] = rs.getInt("ID"); //用二维数组来存放读出来的数据, base[i][1] = rs.getString("NAME"); base[i][2] = rs.getString("DEPARTMENT"); base[i][3] = rs.getString("C++"); base[i][4] = rs.getString("ENG"); base[i][5] = rs.getString("GAOSHU"); base[i][6] = rs.getString("ZUYUAN"); i++; };//注意有一个分号!!!!!! stmt.close(); con.close(); //关闭与数据库的连接 } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (SQLException e1) { e1.printStackTrace();
(8)当以教师的身份登录时产生一个新类,出现一个新的具有查询,添加,删除,退出功能的窗体。
(9)点击查询与上(7)一样的语句类型输出学生的成绩信息图
(10)点击删除跳出新的出口,根据提示输入需要删除的学生的信息。
(11)程序
else if(cmd.equals("退出")){ System.exit(0); }
用来增加按钮监听当按下退出键时退出窗体。
四、设计中遇到的问题及解决方法
1、当点击按钮无法达到想要的需求,跳不出另一个窗口。
经过仔细的检查和分析发现,是因为没有设置监听器,以及没有设置相应的实现方法。找出问题的根本之后,最终成功的解决了这一问题。2、无法把在文本框中输入的数和数据库中的数匹配已达到密码的验证功能:
通过代码:public void actionPerformed(ActionEvent e) { String cmd =e.getActionCommand(); if(cmd.equals("退出")){ System.exit(0); } String number = t1.getText(); String pwd = String.valueOf(pwdPwd.getText()); int number1; int pwd1; if(number.equals("")){ JOptionPane.showMessageDialog(null,"账号不能为空","错误",JOptionPane.ERROR_MESSAGE); return; }else if (pwd.equals("")){ //把String 类型转换为整形
数据库没有和程序连接成功。
四、项目进展
本周呢,我们的项目还在如火如荼的进行中,我们按照我们设计好的总流程图,一步一步,进行代码设计、测试与实现。现在经过了几周的努力,我们的项目分功能已经基本都实现了,但是我们目前的最大的问题是,还没有完成数据库连接的问题以及界面的设计不够完善,在接下来的时间里,这两个问题也是我们主要解决的问题,现在数据库连接的问题正在解决中,因为这一部分的内容以及操作都比较复杂,不过现在我们已经有眉目了,所以相信不久之后这一问题也将会迎刃而解。至于界面设计这一部分,基本功能的界面已经能够显示出来了,就剩下数据库连接这一部分,相信数据库这一块儿搞定之后,界面将不是问题。我们还会不断地跟进调试、测试和改进代码,以完善程序的不足。
五、成员贡献
成员 | 贡献 |
---|---|
杨梦云 | 负责数据库连接这一部分,包括数据库相关软件的查询和下载以及应用 |
冯佳 | 负责程序界面设计及其优化这一部分,以及数据库联机的查询 |
张家明 | 负责程序的改进,包括程序的测试和调试。还有总结程序更新博客 |