本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。
1.信息需求
2.功能需求
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 ,
)
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);
// }
// }
}