Java项目---开发一个学生成绩管理系统(使用mysql数据库)

1、设计数据库

建立一个学生成绩表,表中的数据有姓名sname 、学号sno、英语成绩english、高等数学 math、计算机应用 computer、java编程 java。
建立一个账号密码表 users 和 pass 俩个属性
建表语句如下:(建库建表以及添加一条数据)

create database student
USE `student`;

DROP TABLE `t_gread`
CREATE TABLE T_gread #学生成绩表
(
  sname CHAR(5) NULL,
  sno CHAR(10) NOT NULL, 
  english CHAR(3) NULL,
  math CHAR(3) NULL,
  computer CHAR(3) NULL,
  java CHAR(3) NULL,
  PRIMARY KEY(sno)       
 )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE pass#账号密码表
 (
 users CHAR(10) NOT NULL,
 pass CHAR(15) NOT NULL,
 PRIMARY KEY (users)
 )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
 
 INSERT INTO pass VALUES('admin','123456') #设置初始账号密码
 INSERT INTO t_gread (sname,sno,english,math,computer,java) VALUES ('黄月月','1825123602','80','80','87','75');#添加一条学生信息作为样例
 
 SELECT * FROM pass;
 SELECT * FROM `t_gread`

2、添加jdbc驱动包及数据库连接

参考这一篇的博文、https://blog.csdn.net/qq_44973159/article/details/91360332
连接数据库的代码异曲同工:下载驱动包直接百度即可
Java+mysql数据库

package 学生成绩系统sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//定义该类用于连接到数据库
public class StudentDB {
	private String driverName = "com.mysql.jdbc.Driver";
	private String dbURL = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC";
	private Connection dbConn = null;
	public PreparedStatement stmt = null;
	private ResultSet rs = null;
	private String user = "root";#注意数据库的账号密码
	private String pass = "root";
	public StudentDB() { // 构造方法调用数据库连接。一旦创建对象,数据库建立连接
		 this.getConnection();
	}
	public void getConnection() {
		try {
			Class.forName(driverName);
			dbConn = DriverManager.getConnection(dbURL, user, pass);
			System.out.println("连接数据库成功");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.print("连接失败");
		}
	}
	public static void main(String[] args) {
		StudentDB studb = new StudentDB();
		studb.getConnection();
		System.out.println("=====================");
	public void close() { // 做完后关闭数据库操作
		try {
			if (rs != null) {
				rs.close();
				rs = null;
			}
			if (stmt != null) {
				stmt.close();
				stmt = null;
			}
			if (dbConn != null) {
				dbConn.close();
				dbConn = null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	// 增删改通用方法      insert delete update都是一个方法
	public int update(String sql, Object... obj) {
		int result = -1;
		try {			
			stmt = dbConn.prepareStatement(sql);
			if (obj != null) {
				int len = obj.length;
				for (int i = 0; i < len; i++) {
					stmt.setObject(i + 1, obj[i]);
				}
			}	
			result = stmt.executeUpdate();
			System.out.println("======"+result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

连接成功后,参考这一篇博文,https://blog.csdn.net/qq_44973159/article/details/103532431 套用其模板。这是使用文件系统存储的学生成绩管理系统的代码

3、修改代码之前,我们还需要将数据库中用到的列名进行定义,定义在一个新的Applicant类里面。并且再get/set将其封装。

	private String zhanghao; //账号
	private String mima; //密码
	private String name;//姓名
	private String no;//学号
	private String english;//英语成绩
	private String math;//数学成绩
	private String computer;//计算机成绩
	private String java;//java成绩

4、编写接口类

再定义一个类javadao,在这个类当中写入数据库查询的方法,需要用到的有注册,登录,录入成绩,查询成绩,删除信息。

4.1 登录操作的sql语句

// 使用该方法查询密码,从传入账号,再返回再数据库中的密码。
	public String srhpass(String user) { 
		StudentDB studb = new StudentDB();
		String sql = "select pass from pass where users =?";
		String password1 = null;
		try {
			ResultSet rs1 = studb.search(sql, user);
			while (rs1.next()) {				
				password1 = rs1.getString(1);				
			}
			rs1.close();
			studb.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return password1;
	}
	public String srhuse (String user) { //加上一层保险,
		StudentDB studb = new StudentDB();
		String sql = "select count(*) from pass where users =?";
		int count =0;//列数先设置为0
		try {
			//设置了账号为主键,主键值不可重复,所以count值只能为0或者1
			ResultSet rs1 = studb.search(sql, user);
			while (rs1.next()) {				
				count++;				
			}
			rs1.close();
			studb.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if (count==1) {
			return user;
		} else {
			return null;
		}
	}

4.2 注册用户

注册用户需要使用的sql语句。先导入Applicant这个类,在同一个包下面可省略。实例化studentDB,使用update方法,而插入的参数就是在Applicant传入进来的值。

//	注册用户。
	public int adduse(Applicant app) {
		StudentDB studb = new StudentDB();
		String sql = "insert into pass values(?,?)";
		Object[] obj = { app.getZhanghao(), app.getMima(),};
		//打印参数,判断是否可以获取值,
		System.out.println(obj[0]);System.out.println(obj[1]);
		return studb.update(sql, obj);
	}

4.3、成绩录入

再者,录入学生成绩的方法同理,

//录入学生成绩
	public int addgread(Applicant app) {
		StudentDB studb = new StudentDB();
		String sql = "insert into t_gread values(?,?,?,?,?,?)";
		Object[] obj = {app.getName(),app.getNo(),app.getEnglish(),app.getMath(),app.getComputer(),app.getJava()};
		//打印参数,判断是否可以获取值,
		System.out.println(obj[0]);System.out.println(obj[1]);System.out.println(obj[2]);
		return studb.update(sql, obj);
	}

根据输入的学号查询学生所有的信息:使用list集合对数据进行存储

public List<Applicant> srhdate(String no) {
			List<Applicant> list = new LinkedList<Applicant>();
			StudentDB studb = new StudentDB();
			String sql = " SELECT * FROM t_gread where sno = ?";
			try {
				Applicant t = new Applicant();
				ResultSet rs1 = studb.search(sql, no);
				while (rs1.next()) {				
					String sname = rs1.getString(1);
					String english=rs1.getString(3);
					String math=rs1.getString(4);
					String computer=rs1.getString(5);
					String java=rs1.getString(6);
					System.out.println("=======");
					t.setName(sname);
					t.setEnglish(english);
					t.setMath(math);
					t.setComputer(computer);
					t.setJava(java);
					list.add(t);
				}
				rs1.close();
				studb.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return list;
		}

最后使用main函数对方法进行测试。基本上就是调用方法进行验证,下面代码验证俩个,其余的省略。

public static void main(String[] args) {
//		测试注册的方法。
//		javadao dao =new javadao();
//		Applicant a =new Applicant(); //每一个测试都需要先实例化这俩个类
//		a.setZhanghao("zhhs");
//		a.setMima("1245");
//		dao.adduse(a);
		
		//测试录入成绩,与上面方法同理,要先实例化对象,此处省略。
//		a.setName("黄三");
//		a.setNo("1825123603");
//		a.setEnglish("74");
//		a.setMath("75");
//		a.setComputer("87");
//		a.setJava("85");
//		dao.addgread(a);	
	}
//测试根据学号查询学生信息
		List<Applicant> all = dao.srhdate("1825123602");
		System.out.println("=====");
		for (Applicant applicant : all) {
			System.out.println(applicant.getName());
			}
		}

5、界面修改,

5.1 登录界面

即MYJFrame01,修改其pd方法即可,如下图所示:类名修改成了UI
在这里插入图片描述
代码段如下:

	System.out.println("账号"+tf.getText());//输入的账号
	System.out.println("密码"+pf.getText());//输入的密码		
	//根据输入的账号在数据库当中查询密码
	javadao jdao = new javadao();
	System.out.println("javadao查询"+jdao.srhpass(tf.getText()));//返回的是数据库中的密码
	String pass1 = jdao.srhpass(tf.getText());//使用变量将获取过来的密码保存下来	
	System.out.println("javadao查询账号"+jdao.srhuse(tf.getText()));
	String zhanghao =jdao.srhuse(tf.getText());
	if (tf.getText().equals(zhanghao)&&pf.getText().equals(pass1)) {//验证密码是否正确

5.2 注册界面

只需要修改save方法,throws 到SQL异常,登录的时候以及其他的IOException都需要改成SQLEception。如下图所示:
在这里插入图片描述
代码段如下:

public void save() throws SQLException {
		javadao dao =new javadao();
		Applicant a =new Applicant();
		a.setZhanghao(tf.getText());
		a.setMima(pf1.getText());
		dao.adduse(a);
	}

5.3 录入学生成绩

与上注册同理,修改方法即可,
在这里插入图片描述
代码段如下:

public void xieru() throws SQLException{
		javadao dao =new javadao();
		Applicant app =new Applicant();
		System.out.println(tf1.getText());
		System.out.println(tf2.getText());
		System.out.println(tf3.getText());
		System.out.println(tf4.getText());
		System.out.println(tf5.getText());
		System.out.println(tf6.getText());
		app.setName(tf1.getText());
		app.setNo(tf2.getText());
		app.setEnglish(tf3.getText());
		app.setMath(tf4.getText());
		app.setComputer(tf5.getText());
		app.setJava(tf6.getText());
		dao.addgread(app);
		System.out.println("写入成功!");
	}

5.4 根据学号对学生信息进行查询

在这里插入图片描述
该方法代码如下:

public void ck() throws SQLException {		
		javadao dao =new javadao();
		Applicant a =new Applicant();
		a.setNo(tf.getText());
		System.out.println("a的值:"+a);
		List<Applicant> list1 = dao.srhdate(tf.getText());	
		System.out.println("获取a学号 1:"+ a.getNo());		    
			System.out.println(tf.getText());
			if (dao.srhno(tf.getText())==null) {
				JOptionPane.showConfirmDialog(lookstu.this, "查看失败:学生信息不存在", "系统提示", JOptionPane.OK_CANCEL_OPTION,JOptionPane.CANCEL_OPTION);
		        new lookstu();
			}else {
				System.out.println("获取a学号  xianshi :"+ a.getNo());
				List<Applicant> all = dao.srhdate(a.getNo());				
				for (Applicant applicant : all) {
					System.out.println("姓名 :"+applicant.getName());
					System.out.println("学号 :"+a.getNo());
					System.out.println("英语 :"+applicant.getEnglish());
					System.out.println("数学:"+applicant.getMath());
					System.out.println("计算机 :"+applicant.getComputer());
					System.out.println("Java:"+applicant.getJava());
					}		
				new lookstu();
			}
	        lookstu.this.dispose();
	}
  • 43
    点赞
  • 398
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论
好的,请稍等,我将为您生成一个Java数据库学生成绩管理系统课程设计。 ### 课程设计题目:Java数据库学生成绩管理系统 ### 实现目标: 设计一个Java数据库学生成绩管理系统,实现学生信息和成绩的录入、查询、修改和删除功能。要求系统具有良好的用户界面和友好的交互性。 ### 功能需求: 1. 学生信息录入:包括学生姓名、学号、性别、年龄、班级等基本信息; 2. 学生成绩录入:包括学生姓名、学号、考试科目、成绩等信息; 3. 学生信息查询:可以根据学号或姓名查询学生的基本信息和成绩信息; 4. 学生信息修改:可以修改学生的基本信息和成绩信息; 5. 学生信息删除:可以删除学生的基本信息和成绩信息; 6. 数据库备份和恢复:可以对数据库进行备份和恢复操作; 7. 界面友好:界面美观、操作简单、用户体验良好。 ### 技术需求: 1. Java语言编写; 2. 数据库采用MySQL; 3. GUI界面采用Swing或JavaFX实现; 4. 数据库连接采用JDBC技术。 ### 课程设计模块设计: 1. 登录模块:实现用户登录功能,防止未授权用户进入系统; 2. 学生信息管理模块:实现学生信息的录入、查询、修改和删除功能; 3. 学生成绩管理模块:实现学生成绩的录入、查询、修改和删除功能; 4. 数据库备份和恢复模块:实现数据库备份和恢复功能; 5. 界面设计模块:实现用户界面的设计和美化。 ### 课程设计实现步骤: 1. 确定系统需求和功能; 2. 设计系统界面,确定系统界面布局和样式; 3. 设计数据库表结构,建立数据库; 4. 实现数据库连接,编写数据库操作类; 5. 实现登录模块,验证用户身份; 6. 实现学生信息管理模块,包括学生信息的录入、查询、修改和删除功能; 7. 实现学生成绩管理模块,包括学生成绩的录入、查询、修改和删除功能; 8. 实现数据库备份和恢复模块; 9. 实现界面设计模块,美化用户界面; 10. 进行系统测试和调试。 ### 课程设计参考资料: 1. 《Java编程思想》 2. 《Java核心技术》 3. 《MySQL数据库开发与应用》 4. 《JDBC编程指南》 5. 《Java Swing界面设计》 6. 《JavaFX实战》
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值