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);
	}

4.3 根据输入的学号查询学生所有的信息:使用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,在jframe界面的修改,
5.1 登录界面 ,即MYJFrame01,修改其pd方法即可,如下图所示:类名修改成了UI
Java项目---开发一个学生成绩管理系统(使用mysql数据库)_第1张图片
代码段如下:

	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。如下图所示:
Java项目---开发一个学生成绩管理系统(使用mysql数据库)_第2张图片
代码段如下:

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 录入学生成绩,与上注册同理,修改方法即可,
Java项目---开发一个学生成绩管理系统(使用mysql数据库)_第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 根据学号对学生信息进行查询:如下图
Java项目---开发一个学生成绩管理系统(使用mysql数据库)_第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();
	}

上述代码可进行调试,如果调试出现问题,请私信我(或者在主页有我的联系方式),将把源码发送给你。


注:看到文章的评论之后,我还是直接使用百度网盘进行分享吧,如下所示

链接: https://pan.baidu.com/s/119ICLmMakFqCmrD9gpt03g 提取码: px5x

你可能感兴趣的:(#,Java基础+JDBC)