Java实现学生选课管理系统
作者:四原色 发布时间:2023-04-12 20:00:16
标签:Java,选课,管理系统
本文实例为大家分享了Java实现学生选课管理系统的具体代码,供大家参考,具体内容如下
需求分析
本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。
1.信息需求
1.学生信息:学号,姓名,性别,专业
2.登陆信息:账号,密码
3.课程信息:课程号,课程名,选课人数,选课容量,任课老师
4.选课信息:课程号,学生学号
5.登录信息:账号、密码
2.功能需求
1.系统为学生建立登陆信息,学生进入系统前需要身份验证,用户名、密码输入正确后方可进入系统。
2.在系统中,用户可以在界面中看到本人的基本信息,也可以对课程信息表和个人选课信息表进行查看、以及选课。
3.使用数据库存储读取数据内容
3.系统需求
学生信息管理系统采用的编译环境是IntelliJ IDEA,编程语言是Java,使用用MySQL数据库
定义数据库
CREATE DATABASE Couse ON PRIMARY(NAME = Couse,
FILENAME = 'D:\JAVA\courseDesign_2020JAVA' ,
SIZE = 2MB, FILEGROWTH = 10%,FILERROWHT=4MB)
CREATE TABLE user (
id char(25) IDENTITY NOT NULL PRIMARY KEY,
name char(25) NOT NULL ,
sex char(2) CHECK (性别 IN('男','女')) ,
profess char(30) NULL ,
)
CREATE TABLE subject (
subjectId varchar(20) NOT NULL PRIMARY KEY ,
name varchar(25) NOT NULL ,
Noss int NOT NULL ,
capacity int NULL ,
teacher varchar(25) NULL ,
)
CREATE TABLE PickCouse (
stuId char(25),
couseId char(25) NOT NULL ,
)
CREATE TABLE login (
Id char(25) NOT NULL PRIMARY KEY,
pwd char(25) NOT NULL ,
)
设计项目结构
1.项目包结构
2.项目UML类图
运行效果展示
1.登录
2.查看全部课程信息
3.查看个人选课信息
4.学生选课
开放源代码
1、学生用户信息类:
package StuPickCouse_Dos.PickCouse;
public class User {
String id;
String pwd;
String name;
String sex;
String pross;//专业
public User(String id,String pwd){
this.id=id;
this.pwd=pwd;
}
public User(String id, String name, String sex, String pross) {
this.id = id;
this.name = name;
this.sex = sex;
this.pross = pross;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public User(){}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPross() {
return pross;
}
public void setPross(String pross) {
this.pross = pross;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", pross='" + pross + '\'' +
'}';
}
}
2、课程信息类:
package StuPickCouse_Dos.PickCouse;
public class Couse {
String id;
String name;
String num;//选课人数
String capacity;//容量
String teacher;
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public Couse(String id, String name, String num, String capacity, String teacher) {
this.id = id;
this.name = name;
this.num = num;
this.capacity = capacity;
this.teacher = teacher;
}
public Couse(String id){this.id=id;}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getCapacity() {
return capacity;
}
public void setCapacity(String capacity) {
this.capacity = capacity;
}
@Override
public String toString() {
return id +" "+ name +" "+ num+ "/" + capacity+" " +teacher;
}
}
3、学生数据库操作类
package StuPickCouse_Dos.PickMysql;
import StuPickCouse_Dos.PickCouse.User;
import javax.swing.*;
import java.sql.*;
public class UserSql {
Connection con=null;
Statement sql;
ResultSet rs;
public UserSql(){}
void star(){
String url="jdbc:mysql://localhost:3306/couse?user=root&password=&useSSL=true&useUnicode=true&characterEncoding=utf-8";
String user="root";
String passKey="";
try {
Class.forName("com.mysql.jdbc.Driver");
con= DriverManager.getConnection(url,user,passKey);
}
catch(SQLException e){
System.out.println(e);
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public User getUser(String id){
User user=new User();
star();
try {
sql=con.createStatement();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs=sql.executeQuery("select * from User where id="+id);
while(rs.next()){
user.setId(id);
user.setName(rs.getString(2));
user.setSex(rs.getString(3));
user.setPross(rs.getString(4));
}
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return user;
}
public String findUser(String id){
String user="";
star();
try {
sql=con.createStatement();
} catch (SQLException throwables) {
// throwables.printStackTrace();
JOptionPane.showMessageDialog(null,
"数据库无法连接!",
"登录失败",
JOptionPane.ERROR_MESSAGE);
}
try {
rs=sql.executeQuery("select pwd from Login where id="+id);
while(rs.next()){
user=rs.getString(1);
}
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return user.equals("")?null:user;
}
}
4、课程数据库信息操作类:
package StuPickCouse_Dos.PickMysql;
import StuPickCouse_Dos.PickCouse.Couse;
import StuPickCouse_Dos.PickCouse.User;
import java.sql.*;
import java.util.ArrayList;
public class CouseSql {
User user;
public CouseSql(User user){
this.user=user;
}
Connection con=null;
Statement sql;
ResultSet rs;
void star(){
String url="jdbc:mysql://localhost:3306/couse?user=root&password=&useSSL=true&useUnicode=true&characterEncoding=utf-8";
String user="root";
String passKey="";
try {
Class.forName("com.mysql.jdbc.Driver");
con= DriverManager.getConnection(url,user,passKey);
}
catch(SQLException e){
System.out.println(e);
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public ArrayList<Couse> findCouse(String sqlLine){
ArrayList<Couse> couses=new ArrayList<>();
star();
try {
sql=con.createStatement();//
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs = sql.executeQuery(sqlLine);
while (rs.next()) {
couses.add(new Couse(rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5)
));
}
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return couses;
}
public boolean isMyCouse(String sqlLine){
boolean couses=false;
star();
try {
sql=con.createStatement();//
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs = sql.executeQuery(sqlLine);
while (rs.next()) {
couses=true;
}
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return couses;
}
public void chioseCouse(Couse couse) {
star();
try {
sql=con.createStatement();//
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
sql.executeUpdate("update Subject set Noss=Noss+1 where subjectId="+couse.getId());
sql.executeUpdate("INSERT INTO PickCouse VALUES ('"+this.user.getId()+"','"+couse.getId()+"')");
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
System.out.println("====>添加成功!");
}
public void addCouse(String id,String name,int x1,int x2,String tec) throws Exception{
star();
sql=con.createStatement();
sql.executeUpdate("INSERT INTO Subject VALUES (\""+id+"\",\""+name+"\","+x1+","+x2+",\""+tec+"\")");
con.close();
}
}
5、功能实现类:
package StuPickCouse_Dos;
import StuPickCouse_Dos.PickCouse.Couse;
import StuPickCouse_Dos.PickCouse.User;
import StuPickCouse_Dos.PickMysql.CouseSql;
import StuPickCouse_Dos.PickMysql.UserSql;
import java.util.ArrayList;
import java.util.Scanner;
public class Operator {
User user;
CouseSql couseSql;
UserSql userSql;
ArrayList<Couse> couses = new ArrayList<>();
public void setUser(User user) {
this.user = user;
}
public Operator(){}
public Operator(User user) {
this.user = user;
couseSql=new CouseSql(user);
userSql=new UserSql();
}
public void findAllCouse(){
couses = couseSql.findCouse("select * from Subject");
for (int i = 0; i < couses.size(); i++)
System.out.println((i + 1) + " " + couses.get(i).toString());
}
public void selectCouse(){
System.out.println("所有课程如下:");
ArrayList<Couse> couseICanChose=new ArrayList<>();
ArrayList<String> couseICanChoseId=new ArrayList<>();
for (int i = 0; i < couses.size(); i++){
System.out.print((i + 1) + " " + couses.get(i).toString());
boolean tag=false,flage=false;
System.out.println( ( tag= ( ( !(flage=couseSql.isMyCouse("select * from PickCouse where stuId="+user.getId()+" and couseId="+couses.get(i).getId() )
)&& Integer.parseInt( couses.get(i).getCapacity() )
>= Integer.parseInt( couses.get(i).getNum() ) ) ) )? " 可选": flage?" 已选":" 人员已满");
if(tag) {
couseICanChose.add(couses.get(i));
couseICanChoseId.add(couses.get(i).getId());
}
}
if(couseICanChose.size() < 1)
System.out.print("暂时没有可选的课程!");
else {
System.out.println("====》可选课程有:");
for (int i = 0; i < couseICanChose.size(); i++)
System.out.println((i + 1) + " " + couseICanChose.get(i).toString());
System.out.print("====>请输入选择的课程编号:");
String couse = "";
while(!couseICanChoseId.contains( couse = (new Scanner(System.in)).nextLine()))
System.out.print("输入不在选择范围,请重新输入:");
couseSql.chioseCouse(new Couse(couse));
}
}
public void findMyCouse(){
shoeArrayList(couseSql.findCouse("select * from Subject where subjectId in (select couseId from PickCouse where stuId="+user.getId()+")"));
}
public static void shoeArrayList(ArrayList<Couse> item){
for (int i = 0; i < item.size(); i++)
System.out.println((i + 1) + " " + item.get(i).toString());
System.out.print("Tip: 按任意键继续:");
(new Scanner(System.in)).next();
}
public boolean intoPwd(String pwd,String id){
int inputTimes=2;
while( !( userSql.findUser(id).equals((new Scanner(System.in)).nextLine()) )&&inputTimes>0)
System.out.print("![第"+(3-inputTimes)+"次输入]-密码输入错误:剩余输入机会"+(inputTimes--)+"\n请重新输入:");
return inputTimes>=0;
}
public int show(){
System.out.println("*****************************************");
System.out.println("*****************************************");
System.out.println("******** 1)查看课程信息 **************");
System.out.println("******** 2)选课 *************");
System.out.println("******** 3)查看个人选课 *************");
System.out.println("*****************************************");
System.out.print("请输入选择:");
return (new Scanner(System.in)).nextInt();
}
}
6、程序入口:
package StuPickCouse_Dos;
import StuPickCouse_Dos.PickCouse.User;
import StuPickCouse_Dos.PickMysql.UserSql;
import java.util.Scanner;
public class Demo_1 {
public static void main(String[] args) throws Exception {
System.out.println("*****************************************");
System.out.println("******** 学生选课管理-登录 ***********");
System.out.println("*****************************************");
User user= new User();
System.out.print("===》请输入账号:");
String id="";
int inputTimes=1;
while(!(id=(new Scanner(System.in)).nextLine()).matches("[0-9]{9}"))
System.out.print("![第"+(inputTimes++)+"次输入]输入错误:用户账号为你的学号\n请重新输入:");
System.out.print("====>请输入密码:");
if((new Operator()).intoPwd("",(user=(new UserSql()).getUser(id)).getId())){
System.out.println("用户:"+user.getName()+",欢迎登录!");
while((inputTimes=(new Operator()).show())> 0 ) {
switch (inputTimes) {
case 1:(new Operator(user)).findAllCouse();break;
case 2:(new Operator(user)).selectCouse();break;
case 3:(new Operator(user)).findMyCouse();break;
// case 99:addCouse(new CouseSql(user));break;
default:return;
}
System.out.print("按任意键返回主菜单:");
(new Scanner(System.in)).next();
}
}
else{
System.out.println("登录失败!请重新登录!");
main(args);
}
}
// public static void addCouse(CouseSql sql) throws Exception{
// System.out.print("1)请输入课程编号:");
// String id=(new Scanner(System.in)).nextLine();
// System.out.print("2)请输入课程名称:");
// String name=(new Scanner(System.in)).nextLine();
// System.out.print("3)请输入已选课人数:");
// int noss=(new Scanner(System.in)).nextInt();
// System.out.print("4)请输入课程选课容量:");
// int cap=(new Scanner(System.in)).nextInt();
// System.out.print("5)请输入课程教师姓名:");
// String tec=(new Scanner(System.in)).nextLine();
// sql.addCouse(id,name,noss,cap,tec);
// System.out.println("======》添加成功!");
// System.out.print("继续输入请按1,退出按其他键:");
// if((new Scanner(System.in)).nextLine()=="1"){
// addCouse(sql);
// }
// }
}
来源:https://blog.csdn.net/qq_44140450/article/details/111396678


猜你喜欢
- 本节我们基于一个发表文章的案例来说明SpringBoot如何elasticsearch集成。elasticsearch本身可以是一个独立的服
- Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。Mutex 跟 lock 相似,但是 Mutex 支持多个
- 废话不多说,直接给大家贴代码了,具体代码如下所示:package com.luo.wctweb.util; import java.awt
- 在APP项目的开发过程中,经常会用到分享图片的功能,有时候还需要根据当前用户信息获取指定的分享图片,比如要求在用户分享图中显示用户名、Uid
- 1.构造器也就是在上一篇讲的那个例子,调用默认的无参构造函数2.静态工厂方法1)创建需要执行的方法的类public class HelloW
- 这篇文章主要介绍了SpringBoot下如何实现支付宝接口的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 一、问题描述今天做了一个C++的类组合的作业,由于是基础小白,编写之后一直出现Id returned 1exit status的情况:网上查
- 目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上
- 背景原生的TextView是支持跑马灯效果的,但是在项目中实际用了之后,达不到需求,原因是内容滚动太慢,速度无法调节。因此,需要自定义一个可
- 一、前言在Java编码中,我们经常会遇到List与数组的转换,包括对象List与对象数组的转换,以及对象List与基本数据类型数组的转换,下
- 好问题。答案就是这篇文章的题目所建议的,这是一种合理的设计。在这种情况下,newInstance()方法是一种“静态工厂方法",让
- 1 pom.xml文件注:热部署功能spring-boot-1.3开始有的<!--添加依赖--><dependency&g
- 学过Spring的小伙伴对于IOC一定不陌生,IOC:控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向
- 前言说到 ADB 大家应该都不陌生,即 Android Debug Bridge,Android调试桥,身为 Android 开发的我们,熟
- 一,功能介绍本点单系统主要是基于SpringBoot框架和小程序开发的,主要是为当代人们的生活提供更便利、更高效的服务,也为营销者提供更好的
- 起源最近公司要做多租户,Mybatis-Plus的多租户插件很好用,但是有一个场景是:字典表或者某些数据表,一些数据需要在各个租户之间共享,
- 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来解决这个问题,下面我将详
- Android 属性动画ValueAnimator与插值器详解一、ValueAnimator详解:ValueAnimator是整个动画的核心
- 本文实例讲述了Java编程使用箱式布局管理器。分享给大家供大家参考,具体如下:先来看看运行效果:完整代码如下:package awtDemo
- 在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,