计算机科学与技术
《软件课程设计》报告
项目题目:学生选课管理系统

项目组成员: 姓名 学号
指导教师:

开始日期:
完成日期:
《软件课程设计》评价表
题 目
选课管理系统
项 目 内 容 简 介
学生选课管理系统是教学管理的重要组成部分,主要目的是利用软件实现选课的录入,查询,修改等功能,针对不同表的用户(学生,管理员)提供不同的操作,使学生选课及对其的管理更加方便,提高工作效率,降低管理成本。该选课系统具备课程设置,课程查询,学生选课,教务处管理员管理等系统过程。选课系统的主要使用者有学校全体学生,课程任课教师以及教务处管理人员等。其开发主要包括后台,数据库的建立和维护以及前端应用程序的开发两个方面,前者要求建立起数据的一致性,完整性和安全性好的数据库,而对于后者则要求应用程序功能完备,易使用及界面友好等特点。
这次主要运用了软件工程的结构化分析对学生选课管理系统进行了建模与分析,在此基础上实现了学生管理系统的功能。主要内容如下:首先,对学生选课管理系统的工作流程进行描述分析,分析其工作中存在的缺陷和不足,在此基础上得出理想的工作流程模式。按照模块化设计思想,将流程各个阶段分开设计。其次对系统的设计过程中的一些技术难点和实现方法进行叙述。其中包括权限分配,添加,删除,修改功能的实现查询功能以及打印功能的实现等等,本系统是一个单机版的小型的学生选课系统,对学生提供的服务有选课服务;对管理员提供的服务有学生信息管理,学生选课管理,课程信息管理模块和用户管理模块。
工作安排
2019年6月17日-2019年6月23日:进行需求分析、查找资料、数据库设计、系统设计。
2019年6月24日-2019年6月30日:使用Java语言对系统设计进行编码,以及数据库代码的编程,对整个系统进行编程,测试,调整,更改错误。
2019年7月1日到7月5日: 最后的调试,以及报告的撰写。
同组设计者及分工
同组者
职位
分工及任务
组长
负责组员分工,在设计阶段和协助完成数据库设计,描述总体思想,提出设计蓝图,编码阶段完成GUI事件监听以及JDBC连接数据库类的实现,测试阶段协助完成BUG修复
组员
在设计阶段主要完成需求分析、数据库设计,包括表的设计以及用户权限分配等,编码阶段实现数据库内容,测试阶段协助完成JDBC的语句问题以及修复各种错误。
组员
在设计阶段完成系统设计以及模块规划,编码阶段实现GUI的整体设计,完成各个界面连接的优化,在测试阶段完成对GUI出现的错误进行BUG修复,并实现优化。
组员
在设计阶段收集资料并协助系统设计,完成文档撰写,编码阶段为数据库增加数据并验证数据库的完整性和约束条件的正确性,在测试阶段作为黑盒测试主要的实现者。
评 委 评 分
项目评价项
评价级别
得分
项目规模、技术难度、工作量(20分)
□饱满、□达到要求、□不饱满
项目实现结果(可运行演示)(30分)
□良好、□有小问题、□错误较多
团队分工与协作情况(10分)
□很好、□较好、□一般、□较差
项目文档及报告(30分)
□规范、□较规范、□不规范、
答辨表现(10分)
□优秀、□良好、□一般、□较差
项目总分(100分)
学 号
班级
姓 名
贡献排名
平时扣分
五级制成绩
答辩评委签字
答辩日期: 2019 年 月 日
第1部分 项目开发意义
随着时代发展,科技的进步,各式各样的电子产品不断地出现,人类已经进入了电子化的时代。人们在生产生活已经离不开计算机,在学校中学生选课已经不再像以往一样用纸张一个个登记,然后在一个个录入到EXCEL中,然后再经过一系列复杂的人工操作过程,学生才能被得知自己的选课具体信息,这样造成人力,时间上的严重浪费。现在开发一款学生选课管理系统在很大程度上减少了教师的工作量,使得教育资源的调配得当。同时也能够更合理的进行课程设置,从而提高学校的教学质量。一个好的选课管理系统,一方面可以加快学生的选课时间,一方面也可以更加方便的对学生的课程进行很好的掌握。能够帮助学校提高的人才的教育把握,这对于现在这样一个时间就是金钱,人才就是财富的时代而言。学校对于管理系统的开发是必不可少的。
第2部分 系统需求规格说明书
2.1需求分析本系统为学生选课管理系统是一个客户端系统,与本机数据库相连,该系统面向所有学生及管理员,主要满足学校管理员创建学生信息表、删除课程、增加课程、安排课程计划、更改学生的基本信息的需求,以及满足学生可以选修课程,查看课程、退选课程,查看已选课程的需求。
2.2系统需求学生或管理员先利用系统初始定义的用户名和密码进行登录,登录后进行选课或更改课程操作,系统流程图如图2-1,程序流程图如图2-2
图 2-1
图 2-2
2.3用户分析用户角色
用户特点
用户权限
管理员
熟悉电脑操作,熟悉学校规章制度,且可与教师进行课程安排的沟通,拥有安排课程计划的权力。
修改课程信息(包括增加、删除、更改操作)、安排各专业课程计划、查询课程信息、修改学生信息、修改教师信息
学生
了解电脑操作,了解学校制度,会根据课程计划选修课程。
选修课程、查看课程信息、查看课程计划、查看选课结果
表2-12.4具体需求2.4.1功能需求分析软件系统主要负责将学生选课的信息、老师对教室的安排和管理员对课程计划的安排的记录在系统数据库上,供学校查看选课情况并进行统一调度。
2.4.2数据对象描绘数据的走向,学生数据流图如图2-3、管理员数据流图如图2-4
图 2-3
图 2-4
2.5用户界面用户界面包含:用户登陆界面,学生信息删除界面,学生信息修改界面,学生信息增加界面,查看课程及选课的界面,增加课程界面,删除课程界面,选课结果界面
第3部分 数据库设计说明书
3.1逻辑结构设计3.1.1 将实体转化为关系模型实体 属性
学生 学号,专业号,性别,年级,学生姓名,出生年月,所属专业,所属学院,用户名,密码
课程 课程号,课程名,学分,教室号,排课时间,课程类型,限定,所属学院
教师 教师号,教师姓名,联系方式,性别,所属学院,用户名,密码
管理员 工作号,用户名,密码
3.1.2 将联系转化为关系模型联系 属性
讲授 课程号
选课 学号,课程号,课程容量,成绩
3.1.3 E-R图
图3-1
图3-2
图3-3
3.2物理结构设计
3.2.1物理储存结构编号
表名
说明
输入的数据量
输出的数据流
1
教师信息表
存取教师信息
教师实体的一项或多项信息
教师信息或授课信息
2
学生信息表
存取学生信息
学生实体的一项或多项信息
学还信息或选课信息
3
课程信息表
存取课程信息
课程实体的一项或多项信息
课程信息或者选课信息或者授课信息或者开设信息
4
选课匹配表
存取选课信息
学生的选课记录
学生信息和课程信息
5
用户信息表
存取用户信息
开课信息
表3-1
第4部分 系统设计说明书
4.1 系统设计
系统模块设计思想
采用模块化原理可以使软件结构更加清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块以及它们的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。
模块设计的主要方法是结构化方法,主导思想是以系统的逻辑功能设计和数据流关系为基础,将本系统分解为功能明确,易于修改,大小适中的模块结构。本系统主要分为四大模块:注册模块、登陆模块、排课模块、选课模块。
模块之间的联系以及各模块功能说明:
注册模块首先用户想要使用该系统需要注册一个账号,本模块的主要作用是负责提供注册账号的功能。系统用户种类分为三种,即老师、用户和管理员,该模块提供面向老师和用户的账号注册。
登陆模块当三种不同的用户登陆系统时选择不同的用户类型时,就会分别拥有不同权限。其中管理员拥有最高的权限,其权限主要包括排课、配置选退课时间段和发布选课信息。教师的主要权限是反馈排课信息。学生的权限是选课、改课、退课。
排课模块已排课表管理员在排课的过程中,可以根据已排课表来获知已经排好的课程信息,并可以对其中的信息进行增、删、改、查、插。在排课表提交以后,系统还应保证课程及教室安排没有冲突。如有冲突,还需将冲突的原因显示出来。
备份排课表管理员在对排课的信息进行修改以后,对新排课信息进行保存备份。
导入排课表管理员将排课信息导入排课表,很大程度地增加了排课的灵活性。除此之外管理员还能够对以前的信息进行删除。
对未排课程进行排课排课者对照课程的信息表,教师的课程安排等信息,在教学楼的信息表中找出相对应的教师,并确定相应的时间段安排课程。在排课表提交到系统以后,应该保证其中没有课程发生时间冲突或者教室冲突,如果有问题应反馈给排课者,并找出问题出现的原因。
设定选课时间段排课者设置一个选课时段,并规定只能在这个时间段内进行选课、退课、改课,如果不在此时间段内则不能选课,并给出相应提示。
发布选课信息在选课完成以后,排课者可以在系统中发布关于选课结果等各种消息
选课模块查看可选择的课程信息每个学院及专业有着自己对应的课程,非本专业的学生则不能选择相应的课程,学生在选课时可以查看课程的详细信息,如课程号、任课老师、学分数、上课时间等内容,学生也可以根据课程代号来查询课程信息。
提交选课申请学生在勾选想要选择的课程,点击确定后反馈选课结果,如果选课成功则弹出成功提示,反之给出提示出错的信息。
退课学生可以对已选择的课程进行退课操作,勾选想退课的课程,按下确定按钮以后反馈退课信息,如果成功将原有课程信息从选课表中删除。
显示学生选课表选课表显示学生的选课信息,比如学生选择了哪些课程及这些课程的详细信息。
第5部分 系统实现技术报告
5.1 模块介绍
1.JDBC模块:此模块主要储存实现数据库连接及SQL语言处理的类。
2.UI模块:此模块主要储存GUI界面实现的类。
3.Util模块:此模块主要储存获得的学生、课程等对象。
5.2 具体类的实现
具体类的实现见表5.1,其关系如图5.1所示。
JDBC
UI
Util
addcoursesql()
addcourse()
course()
addstudentsql()
addstudent()
dept()
deletecoursesql()
admin()
major()
deletestudent()
delete_lessonforadmin()
student()
select_lessonsql()
delete_lessonforstudent()
select()
deletecourse()
updatecoursesql()
deletestudent()
updatestudentsql()
LoginUI()
user()
select_lesson()
sselect_lesson()
studentUI()
updatecourse()
uodatestudent()
表5-1
图5-1
5.3数据库设计
5.3.1数据库的选择:MySqlMySql简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
5.3.2 数据库的连接-JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
5.3.3实际开发代码:依据规范改成第二范式并完善约束英文符号化
代表意义
sNo
学生学号
sName
学生姓名
sGender
学生性别
majorNo
专业号
major
专业名
sAge
年龄
classNo
班级号
Dept
系名
deptNo
系号
username
用户名
pwd
密码
cNo
课程号
cName
课程名
tName
教师名
begin_week
课程起始周
end_week
课程结束周
credit
课程学分
表3-2
CREATE DATABASE Course_Mananger;
USE Course_Mananger;
/先建立了院系表,并预先插入应有院系/
CREATE TABLE Course_Mananger.dept(
deptNo VARCHAR(255) PRIMARY KEY,
dept VARCHAR(255) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO Course_ Mananger.dept values('01' , '计算机系');
INSERT INTO Course_Mananger.dept values('02' , '机械工程系');
INSERT INTO Course_Mananger.dept values('03' , '建筑系');
INSERT INTO Course_Mananger.dept values('04' , '人文与外国语学院');
/建立专业从属表/
CREATE TABLE Course_Mananger.major(
majorNo VARCHAR(255) PRIMARY KEY,
major VARCHAR(255),
deptNo VARCHAR(255),
FOREIGN KEY(deptNo) REFERENCES dept(deptNo)
ON UPDATE CASCADE
ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO Course_Mananger.major (majorNo, major, deptNo) VALUES ('01', '计算机科学与技术', '01');
INSERT INTO Course_Mananger.major (majorNo, major, deptNo) VALUES ('02', '软件工程', '01');
INSERT INTO Course_Mananger.major (majorNo, major, deptNo) VALUES ('03', '机械工程', '02');
INSERT INTO Course_Mananger.major (majorNo, major, deptNo) VALUES ('04', '土木工程', '03');
INSERT INTO Course_Mananger.major (majorNo, major, deptNo) VALUES ('05', '英语', '04');
/建立学生表/
CREATE TABLE Course_Mananger.student(
sNo NUMERIC(9,0)
CHECK(sNo BETWEEN 201700000 AND 201799999),
sName VARCHAR(255) NOT NULL,
sGender VARCHAR (255) CHECK(sGender IN('男','女')),
majorNo VARCHAR (255),
sAge NUMERIC(2,0) CHECK(sAge BETWEEN 5 AND 50),
classNo NUMERIC(3,0) CHECK(classNo BETWEEN 171 AND 179),
PRIMARY KEY (sNo),
FOREIGN KEY(majorNo) REFERENCES major(majorNo)
ON UPDATE CASCADE
ON DELETE SET NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO Course_Mananger.student(sNo, sName, sGender, majorNo, sAge, classNo)VALUES
(201701001,'李华','男','01',20,171),(201701002,'李果','男','02',20,172),
(201701003,'王玫','女','03',19,179),(201701004,'李青昭','女','05',18,173),
(201701005,'沈宇墨','女','04',21,174),(201701006,'周婕伦','女','02',20,176),
(201701007,'刘彻','男','01',20,175);
/用户表/
CREATE TABLE Course_Mananger.user_Table(
username VARCHAR(255) PRIMARY KEY,
sNo NUMERIC(9,0),
pwd VARCHAR(255) DEFAULT '123456',
FOREIGN KEY (sNo) REFERENCES student(sNo)
ON DELETE CASCADE
ON UPDATE CASCADE
);
/插入所有学生学号作为用户名,并把所有学生学号作为用户信息的链接/
INSERT INTO Course_Mananger.user_Table(username,sNo)
SELECT student.sNo,student.sNo
FROM Course_Mananger.student;
/插入一默认管理员/
INSERT INTO Course_Mananger.user_Table(username, pwd)
VALUES('01','111111');
/课程表/
CREATE TABLE Course_Mananger.course(
cNo CHAR(10) PRIMARY KEY,
cName CHAR(30) NOT NULL,
credit FLOAT(2) CHECK(credit > 0 AND credit < 10),
cType CHAR(10) CHECK(cType IN('必修','选修')),
tName CHAR(10),
begin_week NUMERIC(2,0)
CHECK(begin_week > 0 AND begin_week < 25),
end_week NUMERIC(2,0)
CHECK(end_week > 0 AND end_week < 25),
amount NUMERIC(3,0) CHECK(amount > 0)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO Course_Mananger.course(cNo, cName, credit, cType, tName, begin_week, end_week, amount)
VALUES ('bk0001','高等数学',5.0,'必修','薛高树',1,16,100),
('bk0002','计算机安全保密知识',3.0,'选修','计宝米',8,16,70),
('bk0003','概率论与数理统计',4.0,'必修','盖吕伦',1,16,100),
('bk0004','大学计算机',2.0,'必修','计苏吉',1,16,100),
('bk0005','大学英语',4.5,'必修','胡盈余',1,16,100),
('bk0006','大学心理健康',2.5,'必修','李健康',1,16,100),
('bk0007','中国近代史纲要',2.0,'必修','金黛诗',1,16,100),
('bk0008','形式与政策',2.5,'必修','师兴正',1,16,100),
('bk0009','马克思主义基本原理',4.0,'必修','马媛丽',1,16,100),
('bk0010','程序课程设计',5.0,'必修','希语嫣',1,16,100),
('bk0011','离散数学',3.0,'必修','李淑散',1,16,100),
('bk0012','数据结构',4.0,'选修','舒具婕',1,16,100);
/建立选课表/
CREATE TABLE Course_Mananger.sc(
cNo CHAR(10),
sNo NUMERIC(9,0),
PRIMARY KEY (sNo,cNo),
FOREIGN KEY (cNo) REFERENCES course(cNo)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (sNo) REFERENCES student(sNo)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
第6部分 测试方案
6. 1单元测试
单元测试主要是对软件的模块进行测试,通过测试以发现该模块的实际功能出现不符合的情况和编码错误。
6.1.1登陆模块测试
选择管理员登陆,输入一个错误的密码,可知用户名与密码的匹配功能正常,输入正确密码后能够正常进入主界面。
图6-1
图6-2
6.1.2学生信息插入模块测试
录入一组学生信息,可知该模块的功能正常
图6-3
6.1.3学生信息修改模块测试
图6-4
将刚插入的信息进行修改,此功能能够正常实现
6.1.4删除学生信息模块测试
图6-5
按下回车键后显示想要删除学生的姓名,删除成功后返回相关提示,该模块的功能可以正常实现
6.1.5增加课程信息模块测试
用一组数据进行课程信息的录入测试,返回录入成功提示,在数据库中可查询到相关信息,可知该功能正常
图6-6
图6-7
6.16课程信息删除模块测试
输入想要删除的课程编号,按下回车后显示课程名称,
删除后在数据库中无法找到相关课程信息,证明该功能正常
图6-8
图6-9
6.1.7课程信息修改模块测试
对已经录入的课程信息进行修改,输入相应的课程号,并把相应的信息进行再次录入,按下回车后显示修改成功的提示,在数据库中可以看见相应的课程信息已经发生了改变,证明此模块的功能是正常的
图6-10
图6-11
6.1.8管理员选课模块测试
在此模块中管理员可以对学生进行选课的操作,所以的课程信息会显示出来,在文本框中输入学生的学号,并点击想选择的相应课程,点击确定后会反馈选课成功的提示
图6-12
6.1.9学生登陆模块测试
输入一个错误的密码,测试账号与密码匹配功能是否正常,不能登陆,说明该部分功能正常。再次输入正确的密码之后登陆进选课界面。
图6-13
图6-14
6.1.10学生选课模块测试
点击想要选择的课程,点击确定以后反馈选课成功,在数据库中出现相关信息,说明选课成功,即该模块的功能是正常的。
图6-15
图6-17
6.1.11学生退课模块测试
输入想要退课的课程号,点击删除后,反馈删除成功的提示,在数据库的学生选课表里找不到对应的选课信息,说明删除课程成功,即功能正常
图6-18
图6-19
测试模块
权限
能否正常运行
功能能否正常实现
登陆模块
管理员/学生
是
是
学生信息插入模块
管理员
是
是
学生信息修改模块
管理员
是
是
删除学生信息模块
管理员
是
是
增加课程信息模块
管理员
是
是
课程信息删除模块
管理员
是
是
课程信息修改模块
管理员
是
是
管理员选课模块
管理员
是
是
学生登陆模块
学生
是
是
学生选课模块
学生
是
是
学生退课模块
学生
是
是
表6-1
第7部分 项目总结报告
(1)系统的不足和改进
后台数据库中的数据具有一定的冗余度,使得在操作过程中一旦数据量变大,会造成数据库更多的负担,甚至可能会造成数据崩溃。最后,界面上可以再做适当的美化。
(2)设计收获与心得
伴随着选课管理系统的完成,从一开始犹如盲人摸象般前行的自己,到现在很清晰整个系统的脉络,对大二这一年学过的知识的总结,包括数据库知识,软件工程知识,Java语言等等结合在一起,让我们对于某一部分的知识有了再一次的提升,我们以前不太喜欢软件工程这类课程,不知道具体作用,对某些深层次的问题了解确实少之又少。通过JAVA课程设计的完成,在整个过程中了解了软件工程的重要性。在设计表格的时候在做到严谨性的基础上,又能让数据在处理过程中尽量的简化。在这次Java课程设计过程中,我们慢慢发现自己在学习过程中存在的许多不足,在发现不足之后,我们会努力的去改变这种缺陷,然后让自己的知识更加扎实。
参考文献
1 王国辉,吕海涛,李中尉.JAVA数据库系统开发案例精选.中国邮电出版社,2006.12
2 王珊,萨师煊.数据库系统概论(第五版)高等教育出版社,2014.9
3 黑马程序员.JAVA入门基础.清华大学出版社,2018.12…
附录一 UI代码及图片(部分)
1.用户登录界面:LoginUI.java
private JLabel use, password;
private JTextField k1;//用户名输入框
private JPasswordField k2;//密码输入框
private JButton b1, b2,b3;
private String susername;
private String spassword;
private JTextArea k3;
b1.addActionListener(new ActionListener())
b2.addActionListener(new ActionListener())
b3.addActionListener(new ActionListener())
public static void main(String[] args) {
LoginUI f1 = new LoginUI();
}
}
2.管理员登录界面:admin.java
String useaname;
JPanel pCenter;
JLabel label,label1;
JMenuBar mb=new JMenuBar();//菜单栏
JMenu m1=new JMenu("学生管理");
JMenuItem add1=new JMenuItem("增加学生信息 ");
JMenuItem updata1=new JMenuItem("修改学生信息 ");
JMenuItem delete1=new JMenuItem("删除学生信息 ");
JMenu m2=new JMenu("课程管理");
JMenuItem add2=new JMenuItem("增加课程信息 ");
JMenuItem updata2=new JMenuItem("修改课程信息 ");
JMenuItem delete2=new JMenuItem("删除课程信息 ");
JMenu m3=new JMenu("选课管理");
JMenuItem add3=new JMenuItem("选课");
JMenuItem delete3=new JMenuItem("退课");
add1.addActionListener(e ->{new addstudent();this.setVisible(false);} );
updata1.addActionListener(e->{new updatestudent();this.setVisible(false);});
delete1.addActionListener(e->{new deletestudent();this.setVisible(false);});
delete2.addActionListener(e->{new deletecourse();this.setVisible(false);});
add2.addActionListener(e -> {new addcourse();this.setVisible(false);});
delete3.addActionListener(e->{new delete_lessonforadmin();setVisible(false);});
updata2.addActionListener(e -> {new updatecourse();this.setVisible(false);});
add3.addActionListener(e -> {new select_lesson();this.setVisible(false);});
学生登录界面UI:studentUI.java
private int sNo;
JLabel label;
JMenuBar mb=new JMenuBar();//菜单栏
JMenu m3=new JMenu("选课管理");
JMenuItem add3=new JMenuItem("增加选课信息 ");
JMenuItem delete3=new JMenuItem("删除选课信息 ");
Font t=new Font ("sanerif",Font.PLAIN,12);
add3.addActionListener(e -> {new sselect_lesson(sNo);this.setVisible(false);});
delete3.addActionListener(e->{new delete_lessonforstudent(sNo);this.setVisible(false);});
附录二 JDBC代码(部分)
查询功能代码:selectsql.javaprivate Connection conn;
private String sql;
public selectsql(){
this.conn = user.CONN();
}
public student selectfromstudent(int sNo){
PreparedStatement statement;
ResultSet re;
student st;
sql = "select from student where sNo = ?";
try {
statement = conn.prepareStatement(sql);
statement.setInt(1,sNo);
re = statement.executeQuery();
re.next();
st = new student(sNo, re.getString("sName"), re.getString("sGender"),
re.getString("majorNo"), re.getInt("sAge"), re.getInt("classNo"));
return st;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public major selectfrommajor(String majorNo){
PreparedStatement statement;
ResultSet re;
major ma;
sql = "select from major where sNo = ?";
try {
statement = conn.prepareStatement(sql);
statement.setString(1,majorNo);
re = statement.executeQuery();
re.next();
ma = new major(majorNo, re.getString("major"), re.getString("deptNo"));
return ma;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public dept selectfromdept(String deptNo){
PreparedStatement statement;
ResultSet re;
dept de;
sql = "select from major where sNo = ?";
try {
statement = conn.prepareStatement(sql);
statement.setString(1,deptNo);
re = statement.executeQuery();
re.next();
de = new dept(deptNo, re.getString("dept"));
return de;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public String selectcNamefromcourse(String cNo){
PreparedStatement statement;
ResultSet re;
String cName ;
sql = "select cName from course where cNo = ?";
try {
statement = conn.prepareStatement(sql);
statement.setString(1,cNo);
re = statement.executeQuery();
re.next();
cName = re.getString("cName");
return cName;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public Vector selectfromcourse() {
PreparedStatement statement;
ResultSet re;
Vector row = new Vector();
sql = "select from course ";
try {
statement = conn.prepareStatement(sql);
re = statement.executeQuery();
while (re.next()) {
Vector co = new Vector();
co.add(re.getString("cNo"));
co.add(re.getString("cName"));
co.add(re.getString("tName"));
co.add(re.getString("cType"));
co.add(re.getInt("credit"));
co.add(re.getInt("begin_week"));
co.add(re.getInt("end_week"));
co.add(re .getInt("amount"));
row.add(co);
}
return row;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
数据库连接代码:user.javapackage JDBC;
import java.sql.;
public class user {
private int sNo; //用户姓名
private String userneme;
private String password;
public static Connection CONN(){
String driverName = "com.mysql.jdbc.Driver"; //加载JDBC驱动
String dbURL = "jdbc:mysql://127.0.0.1:3306/Course_Mananger?serverTimezone=UTC&characterEncoding=utf-8";
String userName = "root"; //用户名
String userPwd = "root"; //密码
Connection conn=null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("Connection Successful!");
//如果连接成功 控制台输出Connection Successful!
} catch (Exception e) {
e.printStackTrace();}
return conn;
}
public boolean isTrue(String name,String password){
Connection conn = CONN();
PreparedStatement stmt ;
ResultSet re;
String sql ="select from user_Table where username = ?" ;//sql语句
try {
stmt = conn.prepareStatement(sql);
stmt.setString(1,name);
re = stmt.executeQuery();
while (re.next()){
this.password = re.getString("pwd");
this.sNo = re.getInt("sNo");}
}catch (Exception e){
e.printStackTrace();
return false;
}
if(password.equals(this.password))return true;
else return false;
}
public int getsNo() {
return sNo;
}
}
添加课程(学生):addcourse(student)sql.javaprivate course Sc;
private Connection conn;
private int i;
public addcoursesql(course Sc){
this.conn = user.CONN();
this.Sc = Sc;
String sql = "insert into course values(?,?,?,?,?,?,?,?)";
try {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,Sc.getNo());
stmt.setString(2,Sc.getName());
stmt.setFloat(3,Sc.getCredit());
stmt.setString(4,Sc.getType());
stmt.setString(5,Sc.getTeacher());
stmt.setInt(6,Sc.getBegin());
stmt.setInt(7,Sc.getEnd());
stmt.setInt(8,Sc.getLast());
i = stmt.executeUpdate();
}catch (Exception e ){
e.printStackTrace();
}
}
public int getI() {
return i;
}
删除课程(学生):deletecourse(student)sql.javaprivate course Sc;
private Connection conn;
private int i;
public addcoursesql(course Sc){
this.conn = user.CONN();
this.Sc = Sc;
String sql = "insert into course values(?,?,?,?,?,?,?,?)";
try {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,Sc.getNo());
stmt.setString(2,Sc.getName());
stmt.setFloat(3,Sc.getCredit());
stmt.setString(4,Sc.getType());
stmt.setString(5,Sc.getTeacher());
stmt.setInt(6,Sc.getBegin());
stmt.setInt(7,Sc.getEnd());
stmt.setInt(8,Sc.getLast());
i = stmt.executeUpdate();
}catch (Exception e ){
e.printStackTrace();
}
}
public int getI() {
return i;
}
修改课程(学生)信息:updatecourse(student)sql.javaprivate course co;
private Connection conn;
private int i ;
public updatecoursesql(course co){
this.co = co;
this.conn = user.CONN();
String sql = "update course set cName = ?,credit = ?,cType = ?,tName = ?," +
"begin_week = ?, end_week = ?, amount = ? where cNo = ?;";
try {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(8,co.getNo());
stmt.setString(1,co.getName());
stmt.setFloat(2,co.getCredit());
stmt.setString(3,co.getType());
stmt.setString(4,co.getTeacher());
stmt.setInt(5,co.getBegin());
stmt.setInt(6,co.getEnd());
stmt.setInt(7,co.getLast());
i = stmt.executeUpdate();
}catch (Exception e ){
e.printStackTrace();
}
}
public int getI() {
return i;
}
选课:select_lessonsql.sqlprivate Connection conn;
private int i;
public select_lessonsql(String cNo,int sNo){
conn = user.CONN();
PreparedStatement stmt1;
PreparedStatement stmt2;
String sql1 = "insert into sc value(?,?)";
String sql2 = "update course set amount = amount-1 where cNo=?";
try {
stmt1 = conn.prepareStatement(sql1);
stmt2 = conn.prepareStatement(sql2);
stmt1.setString(1, cNo);
stmt1.setInt(2, sNo);
stmt2.setString(1, cNo);
i = stmt1.executeUpdate()+stmt2.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}
}
public int getI() {
return i;
}