学生成绩管理系统


一、项目简介

功能描述

 

基于SQL的学生管理系统,支持用户登录,能够学生基本信息进行添加,修改和删除,通过给出学号或者姓名查询学生基本信息,能够生成学生学习情况报表,并将结果输出到txt文件。

 

个人负责任务: 组件监视器重写,数据库读写

 

团队博客链接https://home.cnblogs.com/u/2428720

 

个人博客链接https://home.cnblogs.com/u/2428720

 

二、功能架构图

 

这个项目一共由三个包组成,model包,student包和util包;
model包:
Student.java,主要是对Student的属性和方法党的整体封装;

student包:
AccListFrame.java,主要是系统主界面的设计,包括内部各个组件所能完成功能和事件的设计;
scrollPane.setViewportView(table):把table,放到一个scrollPane;
quaryALL():查询指定学生信息,并能够在表中通过生成表控制模型,构造成绩排序比较器以一定的顺序排列;

报表窗口下调用List<Student>计算得到各科目班级平均成绩,每个学生的总成绩,班级总成绩平均值,实现学生集合的比较,并以总成绩降序排列;将List的引用给data数组,在columnCounts数组中给出学生属性,并生成DefaultTableModel(data,columnCounts),它使用一个 Vector 来存储这个二维表单元格的值对象,将其放在Jtable中,创建一个str型的content,用循环将List<Student>的newlist给content,然后使用Util.writeObjToFile("成绩表.txt", content);将报表中的学生成绩信息输出到“成绩表.txt”中;


AccSerive.java,主要是实现各种与数据库读写相关的方法,将其封装在一个类中;数据库的读写均是先连接数据库,然后向数据库发送SQL语言,得到查询结果或者进行插入和修改,删除,最后关闭连接;使用prepareStatement(String sql)方法对参数sql指定的SQL语言进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PrepareStatement对象中,提高了访问数据库的速度;并使用通配符?来代替sql语句中的字段的值,只要在对SQl预处理执行之前再配置
?的具体值即可,使得数据库读写更加灵活;
其中queryAll()根据在下拉列表中获取的查询条件(学号,姓名)做出相应的查询;

 


AddFrame.java,是用于添加学生基本信息的界面的设计,在AccListFrame中点击“添加”按钮后触发监视器产生的,添加学生信息结束后释放AddFrame返回到系统主界面AccListFrame;

AddScoreFrame.java,是用于添加和修改学生成绩的界面的设计,在AccListFrame中点击“成绩”按钮后触发监视器产生的,添加或修改学生成绩结束后释放AddFrame返回到系统主界面AccListFrame;

Login.java,主要是登录界面的设计,在输入用户名和密码,登录成功后,释放窗体,生成系统主界面AccListFrame;
在Login中,使用Serializable接口实现java序列化(Java序列化是指把Java对象转换为字节序列的过程,实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上,利用序列化实现远程通信,即在网络上传送对象的字节序列。)
setLocationRelativeTo():设置窗口相对于指定组件的位置。 如果组件当前未显示或者为 null,则此窗口将置于屏幕的中央
BtnListener:监视器首先判断是否有点击登录的事件;若有,获取jTextField和jPasswordField中的用户名与密码,并与已经设置的用户名与密码相比较
JOptionPane.showMessageDialog(null, "用户名不能为空"):弹出对话框并显示框里的信息;


UpdateFrame.java,是用于修改学生基本信息的界面的设计,在AccListFrame中点击“成绩”按钮后触发监视器产生的,添加或修改学生基本信息结束后释放UpdateFrame返回到系统主界面AccListFrame;

Util包:
Util.java,是用于连接MySql数据库的文件;此外还需要在Referenced Libraries中导入MySQL连接驱动;

 

三、个人任务简述

序号

完成功能与任务

描述

1

全局功能

使用ActionListener等事件处理,便于系统功能实现

2

面向对象设计

使用了面向对象技术设计系统。

3

数据库读写编码部分

使用了JDBC。使用了Navicat Premium15数据库连接池连接数据库,提高了数据库链接的性能,使用PrepareStatement提高读写效率。

 

四、本人负责功能详解

1. *面向对象设计

组员共同设计完成;

 

2. *全局功能:

主要负责各个组件监视器的重写

  1. 用户登录(Login):使用ActionEvent事件的监视器监视,触发事件时回调重写的接口方法,将用户名和密码通过equal方法与指定的数据进行比对进行登录操作;
  2. 主界面(AccListFrame):使用ActionEvent事件的监视器监视查询,添加,修改,删除,成绩,报表按钮,触发事件时回调重写的接口方法,生成各自的窗口;
  3. 在修改,成绩,报表窗口均是使用ActionEvent事件的监视器中实现对应的功能;
  4. *报表窗口下调用List<Student>计算得到各科目班级平均成绩,每个学生的总成绩,班级总成绩平均值,实现学生集合的比较,并以总成绩降序排列;将List的引用给data数组,在columnCounts数组中给出学生属性,并生成DefaultTableModel(data,columnCounts),它使用一个 Vector 来存储这个二维表单元格的值对象,将其放在Jtable中,创建一个str型的content,用循环将List<Student>newlistcontent,然后使用Util.writeObjToFile("成绩表.txt", content);将报表中的学生成绩信息输出到“成绩表.txt”中;本想实现随机生成10
  5. 用户登录:监视器重写接口方法;

 

  1. 主界面主要实现功能(包含查询,添加,修改,删除,成绩的按钮的监视器重写接口方法)

 

  1. 修改,成绩窗口功能的技术实现

 

 

 

4.对报表窗口功能的技术实现(生成成绩报表并输出至txt

 

3. *数据库读写部分

简述所完成模块采用的技术、难点及解决方法。

所有以下数据库的读写均是先连接数据库,然后向数据库发送SQL语言,得到查询结果或者进行插入和修改,删除,最后关闭连接;使用prepareStatementString sql)方法对参数sql指定的SQL语言进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PrepareStatement对象中,提高了访问数据库的速度;并使用通配符?来代替sql语句中的字段的值,只要在对SQl预处理执行之前再配置

?的具体值即可,使得数据库读写更加灵活;

 

1.查询获得全部学生基本信息

 

2.删除学生信息

 

3.插入学生信息

 

4.修改学生信息

 

5.修改学生成绩

 

6.获得最大的学生学号

 

五、课程设计感想

在一开始的时候,对javaswing的组件和布局有些生疏,后来先自己画出窗口再进行布局,就显得更加整齐了;在添加时间处理时,用了学到的ActionEvent事件,JDBCMYSQL数据库也是通过书中学习,通过使用PrepareStatement()预处理和通配符解决了很多问题;

在网上也了解到了一些好的编程格式和一些便捷的方法;

六、展望

对于学生查询的部分,没有完成模糊匹配,考虑是不是在sql语句上有错误;

我想进一步学习POI技术、增加将学生成绩报表导出至Excel功能

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM