简单的学生选课模拟系统(java)

本例主要练习jdbc技术以及sql语句对数据库进行增删改查的操作

四张表

在这里插入图片描述
grade(班级表)
在这里插入图片描述表中数据
在这里插入图片描述

result(成绩表)
在这里插入图片描述表中数据
在这里插入图片描述

student(学生表)
在这里插入图片描述表中数据
在这里插入图片描述

subject(科目表)
在这里插入图片描述在这里插入图片描述

java代码实现
Util.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Util {
	Connection conn =null;
	Statement st = null;
	Scanner input = new Scanner(System.in);
	//建立连接
	public void getConn() throws Exception {
		//加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		//连接数据库
		conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java27?characterEncoding=utf-8&serverTimezone=GMT%2B8",
				"root","root");
	}
	//关闭连接
	public void closeConn() throws Exception {
		conn.close();
		if(st!=null) {
			st.close();
		}
		
	}
	//选课系统
	public void courseSystem() throws Exception {
		int isLoop = 1;
		System.out.println("欢迎进入学生选课系统!");
		do {
			System.out.println("请输入学号:");
			int studentNo = input.nextInt();
			System.out.println("请输入密码:");
			String pwd = input.next();
			//判断学生是否存在
			if(login(studentNo,pwd)) {
				isLoop=4;
				boolean isContinue = false;
				do {
					showData();
					int choice = input.nextInt();
					switch (choice) {
					case 1:
						subjectInfo();
						break;
					case 2:
						selectCourse(studentNo);
						break;
					case 3:
						subjectInfo();
						addCourse(studentNo);
						break;
					case 4:
						lookResult(studentNo);
						break;
					case 5:
						gradeInfo(studentNo);
						break;
					case 6:
						classmates(studentNo);
						break;
					case 7:
						selectCourse(studentNo);
						deleteCourse(studentNo);
						break;
					case 8:
						updatePwd(studentNo);
						
						break;
					default:
						break;
					}
					System.out.println("请输入0继续1退出");
					int a = input.nextInt();
					if(a==0) {
						isContinue=true;
					}else {
						System.out.println("系统已退出");
						System.exit(0);
					}
				} while (isContinue);
				
			}else {
				System.out.println("你还有"+(3-isLoop)+"次输入机会后系统将退出");
				isLoop++;
				if(isLoop==4) {
					System.out.println("3次机会已用完,系统退出");
					System.exit(0);
				}
			}
		} while (isLoop<4);
	}
	//检查学生是否在表中
	public boolean login(int studentNo,String pwd) throws Exception {
		try {
			getConn();
			st = conn.createStatement();
			String sql="select * from student where studentNo="+studentNo+" and loginPwd='"
					+pwd+"'";
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()) {
				return true;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeConn();
		}
		return false;	
	}
	//展示数据
	public void showData() {
		System.out.println("1.查看所有课程信息");
		System.out.println("2.查看自己已经选择的课程");
		System.out.println("3.新增选课(不能重复)");
		System.out.println("4.查看自己每门课的成绩");
		System.out.println("5.查看自己的班级信息");
		System.out.println("6.查看自己班级的同学");
		System.out.println("7.作废某门课程");
		System.out.println("8.修改自己的信息(密码)");
		System.out.println("请输入编号:");
	}
	//1.查看所有课程信息
	public void subjectInfo() throws Exception {
		getConn();
		st = conn.createStatement();
		String sql = "select * from subject";
		ResultSet rs = st.executeQuery(sql);
		System.out.println("课程编号\t课程名称\t学分\t所属班级");
		while(rs.next()) {
			System.out.println(rs.getInt("SubjectNo")+"\t"+rs.getString("SubjectName")
					+"\t"+rs.getInt("ClassHour")+"\t"+rs.getInt("GradeId"));
		}
		closeConn();
	}
	//2.查看自己选择的课程信息
	public void selectCourse(int studentNo) throws Exception {
		getConn();
		st = conn.createStatement();
		String sql = "select * from subject where subjectNo in ((select subjectNo from result where studentNo="+studentNo+"))";
		ResultSet rs = st.executeQuery(sql);
		System.out.println("课程编号\t课程名称\t学分\t所属班级");
		while(rs.next()) {
			System.out.println(rs.getInt("SubjectNo")+"\t"+rs.getString("SubjectName")
					+"\t"+rs.getInt("ClassHour")+"\t"+rs.getInt("GradeId"));
		}
		closeConn();
	}
	//3.新增选课
	public void addCourse(int studentNo) throws Exception {
		System.out.println("请输入要选择的课程编号:");
		int subjectNo = input.nextInt();
		//判断课程是否在课程表上
		if(!isSubject(subjectNo)) {
			System.out.println("你要选的课程不存在");
		}else {
			//判断该课程是否属于该学生所在班级的可以选择的课程
			if(isGrade(subjectNo, studentNo)) {
				//判断该课程是否已经被该学生选过
				if(isExist(subjectNo, studentNo)) {
					System.out.println("你已经选择过这门课程");
				}
				else {
					//新增课程成功,存入result表
					addSubject(subjectNo, studentNo);
					System.out.println("新增科目成功");
				}
			}else{
				System.out.println("该班级的学生不可以选择该课程");
			}
		}
	}
	//3.判断课程是否在课程表上
	public boolean isSubject(int subjectNo) throws Exception {
		try {
			getConn();
			st=conn.createStatement();
			String sql = "select SubjectName from subject where SubjectNo="+subjectNo;
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeConn();
		}
		return false;
	}
	//3.判断该课程是否属于该学生所在班级可以选择的课程
	public boolean isGrade(int SubjectNo,int studentNo) throws Exception {
		try {
			getConn();
			st = conn.createStatement();
			String sql = "select * from student where GradeId="
					+ "(select GradeId from subject where SubjectNo="+SubjectNo+") and studentNo="+studentNo;
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()) {
				return true;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeConn();
		}
		return false;
		
	}
	//3.判断该课程是否已经被该学生选过
	public boolean isExist(int subjectNo,int studentNo) throws Exception {
		try {
			getConn();
			st = conn.createStatement();
			String sql = "select studentNo from result where studentNo="+
						studentNo+" and subjectNo="+subjectNo;
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()) {
				return true;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeConn();
		}
		return false;
		
	}
	//3.新增成功,存入result表
	public void addSubject(int subjectNo,int studentNo) throws Exception {
		getConn();
		st=conn.createStatement();
		//获得系统时间
		Date date = new Date();
		//将时间格式转换成符合Timestamp要求的格式
        String nowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        String sql = "insert into result(studentNo,subjectNo,examDate) values("+studentNo+","+subjectNo+",'"+nowTime+"')";
		st.executeUpdate(sql);
		closeConn();
	}
	//4.查看自己每门课程的成绩
	public void lookResult(int studentNo) throws Exception {
		getConn();
		st = conn.createStatement();
		String sql = "select s.subjectNo,SubjectName,studentResult from \r\n" + 
				"(select * from result where StudentNo="+studentNo+") s left join subject\r\n" + 
				"on s.subjectNo=subject.SubjectNo";
		ResultSet rs = st.executeQuery(sql);
		System.out.println("课程编号\t课程名称\t成绩");
		while(rs.next()) {
			System.out.println(rs.getInt("s.SubjectNo")+"\t"+rs.getString("SubjectName")
					+"\t"+rs.getInt("studentResult"));
		}
		closeConn();
	}
	//5.查看自己班级信息
	public void gradeInfo(int studentNo) throws Exception {
		getConn();
		st = conn.createStatement();
		String sql = "select s.gradeid,gradename from (select gradeid from student where studentno="+studentNo+") s \r\n" + 
				"left join grade on s.gradeid=grade.GradeId";
		ResultSet rs = st.executeQuery(sql);
		System.out.println("班级编号\t班级名称");
		while(rs.next()) {
			System.out.println(rs.getInt("gradeid")+"\t"+rs.getString("gradename"));
		}
		closeConn();
	}
	//6.查看自己班级的同学
	public void classmates(int studentNo) throws Exception {
		getConn();
		st = conn.createStatement();
		String sql = "select studentno,studentname,sex,gradeid from student WHERE\r\n" + 
				"gradeid=(select gradeid from student where studentno="+studentNo+") ";
		ResultSet rs = st.executeQuery(sql);
		System.out.println("学号\t名字\t性别\t班级编号");
		while(rs.next()) {
			System.out.println(rs.getInt("studentno")+"\t"+rs.getString("studentname")+"\t"
						+rs.getInt("sex")+"\t"+rs.getInt("gradeid"));
		}
		closeConn();
	}
	//7.作废某门课程
	public void deleteCourse(int studentNo) throws Exception {
		System.out.println("请输入要作废的课程的编号:");
		int subjectNo = input.nextInt();
		//判断该门课程是否已经被该学生选过
		if(isExist(subjectNo, studentNo)) {
			getConn();
			st = conn.createStatement();
			String sql = "delete from result where studentno="+studentNo+" and subjectno="+subjectNo;
			int rs = st.executeUpdate(sql);	
			if(rs>0) {
				System.out.println("该门课程作废成功");
			}
			closeConn();
		}else {
			System.out.println("该学生没有选择过该门课程");
		}
	}
	//8.修改密码
	public void updatePwd(int studentNo) throws Exception {
		System.out.println("请输入修改后的密码");
		String pwd = input.next();
		getConn();
		st = conn.createStatement();
		String sql = "update student set loginPwd='"+pwd+"' where studentno="+studentNo;
		int rs=st.executeUpdate(sql);
		if(rs>0) {
			System.out.println("修改成功");	
		}
		closeConn();
	}
}

Test.java
测试

package studentSelect;

public class Test {
	public static void main(String[] args) throws Exception {
		Util util = new Util();
		util.courseSystem();
	}
}

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41150890/article/details/107509818