# 基于JAVA和MYSQL实现的学生成绩管理系统
# 一、实验目的
- 熟悉Java开发工具及开发环境的使用
- 掌握Java程序的编写、运行、测试过程
- 综合运用Java语言的面向对象特性编写程序
- 掌握Java的常用类库
- 掌握Java的图形界面操作以及与数据库的数据交换方式
# 二、实验设备
- **硬件**
- PC机
- **软件环境**
- JDK版本:JDK11.0.1
- 开发环境:Intellij IDEA community edition
- 操作系统:windows 10
- mysql版本号:8.0.13
- mysql驱动:mysql-connector-java-8.0.13
# 三、实验原理
Java是一门面向对象的编程语言,在编写大型项目时应该充分利用它的这一特性,对不同的功能建立不同的类,在各个类中实现功能,尽量减少主方法中的内容。并且对程序进行封装,使得代码简洁易读并且易于维护,也可以充分保护数据的安全性。并且面向对象的编程语言的移植性极强,java是互联网编程中最受欢迎的代码之一也许正是由于此。
Java是一门格式严格的编程语言,但与之对应的是它的稳定性和使用IDEA编写时强大的提示功能,各个类中的方法都被写好,并且根据不同的参数情况重写了不同的方法,甚至可以使用抽象接口的方式重写方法。例如本项目中所有的数据库操作都被封装在了Database_operate类当中,在其他类中只需要新建Database_operate类的实例并调用对应方法即可对数据库进行读写增删改的操作。
本实验中用到的主要类库有二:java.sql和java.swing,前者包含了用于java与数据库的连接所用到的类:Connection,Statement以及ResultSet,分别用于新建数据库连接,实例化状态对象,获得数据库查询时返回的结果集;后者则包含了Java常用的图形界面工具:JFrame,JPanel,JtextField,JButton等等。
# 四、实验过程记录
## 4.1 需求分析
需要用Java图形编程完成系统的用户界面设计,并且在本地建立数据库,实现程序与数据库的交互。主要功能分为三种:注册、学生操作界面,教师操作界面。
注册界面要求可以新建学生或者教师用户并且自动检测重复的用户名;学生操作界面要求学生可以查询不同课程的成绩以及修改密码;教师操作界面要求教师可以查询或修改学生成绩、删除学生信息、修改密码。
并且需要保证各个界面之间可以互通,即需要设计退出登陆的功能,增强程序的可用性。同时要考虑到用户误输入的情况,需要对错误数据进行判断并且给出相应的错误提示。
## 4.2 系统设计
程序代码中主要系统分为六个类:
- **Main类**:用于执行主方法,调用登录窗口类的构造函数启动系统
- **Window_login类**:用于实现登录窗口,仅包含一个构造方法,其中两个按钮分别用于注册和登陆。登录按钮可以向数据库请求当前用户名对应的密码,如果登录不成功将清空输入框并给出错误提示,点击注册按钮则会调用注册窗口的构造方法并且暂时关闭当前登录窗口
- **Window_register类**:用于执行注册操作,实际上调用了数据库操作类中的addstu和addtea方法,用于向不同的表中插入数据。若注册不成功会给出相应的提示信息。在输入用户名和密码后会根据不同的身份给出不同的详细信息录入窗口,截图可见4.3节
- **Window_stu类**:实现了学生窗口的相关功能,学生可以利用多选框查询不同科目的成绩并且修改密码,提供了退出登录的功能
- **Window_tea类**:实现了教师窗口的相关功能,可以利用学生学号查询学生信息、修改学生信息、删除学生信息(会弹出二次确认窗口)、修改密码以及退出登录。在修改了学生信息后再次查询学生信息时会实时更新数据。该类中只有一个构造方法用于创建页面
- **Database_operate类**:实现了五个对数据库进行操作的方法:
- addstu:添加学生信息
- addtea:添加教师信息
- del:删除制定学生的信息
- change_password:根据输入不同的身份可以修改不同用户的密码并将修改提交给数据库
- find:根据输入不同的身份和id返回查询结果的结果集,如果未查询到对应用户则返回null,结果集中储存了当前用户的各项信息,调用next()方法即可以进行获取
数据库中主要含有两个表:
- **tea表**:储存了学生id,姓名,登陆密码,班级名以及四门科目的对应的成绩
- **stu表**:储存了教师id,登陆密码以及教师姓名
这两个表的主键都是id号,即注册用户时id号一定不可以重复。
test类用于早期测试程序与数据库的连接方式,它可以访问数据库并且在屏幕上打印出stu表中的所有内容,它并未在主程序中被用到。
## 4.3 代码实现
关于mysql数据库的操作详见Database_operate类,其中主要有五个方法:addtea、addstu、change_password、del、find,数据库初始设定如图:
![](http://www.write-bug.com/myres/static/uploads/2021/10/19/664c986dcc2a3754a4806dd2ff7b1e76.writebug)
新建两个表的sql语句如下:
```sql
CREATE TABLE stu(
stu_id INT NOT NULL AUTO_INCREMENT,
stu_password VARCHAR(100) NOT NULL,
stu_name VARCHAR(100) NOT NULL,
stu_class VARCHAR(100) NOT NULL,
stu_english INT NOT NULL,
stu_chinese INT NOT NULL,
stu_math INT NOT NULL,
stu_java INT NOT NULL,
PRIMARY KEY(stu_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE tea(
tea_id INT NOT NULL AUTO_INCREMENT,
tea_password VARCHAR(100) NOT NULL,
tea_name VARCHAR(100) NOT NULL,
PRIMARY KEY(tea_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
插入初始数据的sql语句如下:
```sql
INSERT INTO stu VALUES ('1712110111', 'dhr123', '邓浩然', '计算机科学与技术一班', '95', '65', '32', '21');
INSERT INTO stu VALUES ('1712480238', 'zyf123', '张翼飞', '计算机科学与技术二班', '95', '65', '32', '21');
```
登陆界面主要由Window_login类实现,界面截图如下:
![](http://www.write-bug.com/myres/static/uploads/2021/10/19/431ba59f76547c2d3f68a4c3dd6e7aaf.writebug)
需要用户输入用户名和密码并且选择对应的登陆身份,其中登录按钮的实现代码如下:
```java
jb_login.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String username = jt_username_login.getText().trim();
String password = new String(jp_password_login.getPassword()).trim();
Database_operate dbo = new Database_operate();
String identity = new String();
if(jr_student.isSelected()){
identity="stu";
}/*学生*/
else if(jr_teacher.isSelected()){
identity="tea";
}/*教师*/
else{
JOptionPane.showMessageDialog(null, "未选择身份!");
return;//退出当前函数
}/*未选中*/
ResultSet rs=dbo.find(username,identity);
String right_password=new String();
try{
if(rs.next()){
if(identity.equals("stu")){
right_password = rs.getString("stu_password");
}
else{
right_password = rs.getString("tea_password");
}
/*获取密码*/
if(password.equals(right_password)){
if(identity.equals("stu")){
jf_login.dispose();
int id = rs.getInt("stu_id");
String name = rs.getString("stu_name");
String classname = rs.getString("stu_class");
int english = rs.getInt("stu_english");
int chinese = rs.getInt("stu_chinese");
int math = rs.getInt("stu_math");
int java = rs.getInt("stu_java");
/*从结果集中获取必要信息*/
Window_stu stu = new Window_stu(id,right_password,name,classname,english,chinese,math,java);
}/*启动学生窗口*/
else{
jf_login.dispose();
int id = rs.getInt("tea_id");
String name =
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
7807106570444062.zip (50个子文件)
achievement-management
src
src
.classpath 386B
.settings
org.eclipse.jdt.core.prefs 630B
src
arrow.png 219B
student_information_manager
Window_tea.java 8KB
Window_register.java 7KB
test.java 2KB
Window_login.java 4KB
Database_operate.java 5KB
Main.java 155B
Window_stu.java 5KB
student_information_manager.iml 767B
.idea
workspace.xml 18KB
misc.xml 256B
modules.xml 294B
encodings.xml 291B
bin
arrow.png 219B
student_information_manager
Window_tea$5.class 2KB
Window_tea$3.class 2KB
Window_tea$8.class 1KB
Window_tea$1.class 3KB
Window_tea.class 6KB
Window_stu$1.class 1KB
test.class 3KB
Window_login.class 2KB
Window_tea$9.class 989B
Window_stu.class 4KB
Window_stu$3.class 2KB
Window_tea$6.class 992B
Window_login$1.class 1KB
Window_register$2$1.class 3KB
Main.class 544B
Window_stu$2.class 2KB
Window_register$2$2.class 1KB
Database_operate.class 5KB
Window_tea$4.class 1KB
Window_register$2$3.class 2KB
Window_register$2$4.class 1KB
Window_login$2.class 4KB
Window_register$1.class 1KB
Window_tea$7.class 1KB
Window_stu$3$1.class 2KB
Window_stu$3$2.class 1013B
Window_tea$2.class 1KB
Window_register.class 3KB
Window_register$2.class 5KB
META-INF
student_information_manager.kotlin_module 16B
.project 386B
实验报告.docx 258KB
LICENSE 1KB
README.md 15KB
共 50 条
- 1
资源评论
工具盒子
- 粉丝: 60
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功