2某高校学生选课系统.docx
《2某高校学生选课系统.docx》由会员分享,可在线阅读,更多相关《2某高校学生选课系统.docx(24页珍藏版)》请在冰点文库上搜索。
2某高校学生选课系统
数据库课程设计
《某高校学生选课管理系统》
学生:
徐渊哲
指导老师:
于宝华
学号:
2010508019
学院专业:
信工院计科2010级
完成日期:
2013年1月16日
课程设计报告
1、课程设计任务
实现学生信息、课程学生管理;实现教师及任课信息管理;实现选课登记,要保证学生不能选修重复的课程(实用触发器实现);创建存储过程统计各学生指定学期选修课程的总学分数;创建视图查询没有被选修的课程;创建存储过程统计各教师任课的学生人数;创建表间关系。
二、需求描述
本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所选课程总数不能超过3门;对教师提供的服务有登录、修改登录密码和登录成绩;对管理员提供的服务有登录开设学生和教师帐号、删除学生和教师帐号的服务。
三、系统总体设计
1.系统架构设计
(1)架构:
单机
(2)运行软件环境:
windows7,jdk1.6
(3)数据库:
SQLServer2005
开发工具:
Eclipse3.3
2.功能模块设计
各模块功能:
●登录界面:
登录界面是有帐号,密码两个JTextField,管理员帐号一字母A开头,教师帐号一字母T开头,学生帐号以字母S开头,登录帐号或密码输入错误会弹出相应的提示对话框。
●学生信息管理模块:
管理员用于添加和删除学生信息的模块。
●教师信息管理模块:
管理员用于添加和删除教师信息的模块。
●教师密码修改模块和学生密码修改模块:
管理员添加的用户帐号的初始密码与用户的帐号相同,用户通过密码修改模块可以自己需改密码。
●教师录入成绩模块:
教师可以浏览选修自己课程的学生的信息并且录入该学生的成绩。
●学生选择选修课模块:
该模块通过表格的形式将所有课程列出来,学生可以根据个人兴趣选择不同的课程,每个学生选择的课程数目不能超过3门,而且不能重复选课,否则会弹出对话框,提示用户查看已经选择了的课程。
●学生查询成绩模块:
通过表格的形式将该学生选择了的课程列出来,如果教师有录入成绩,则可以看到自己的课程成绩。
3.数据库设计
(1)全局E-R图
(2)关系模式
学生(学生学号,学生姓名,教师性别,教师生日,所在班级)
教师(教师编号,教师姓名,教师性别,教师生日,教师职称,所在院系)
课程(课程号,课程名,学分,选课人数)
选课(课程号,学生学号,成绩)
授课(课程号,教师编号,上课地点)
(3)数据库管理系统:
MicrosoftSQLServer2005
(4)数据库命名
StudentManager
(5)数据库表
Logon(登录帐号密码)
主要用来保存用户登录信息
字段名
数据类型
长度
是否为空
是否主键
UserID
char
10
不为空
主键
Passwordr
charr
10
StudentTable1(学生信息表)
主要用来保存学生信息。
字段名
数据类型
长度
主键否
是否为空
描述
StudentID
Char
10
主键
不为空
学生学号
StudentName
Char
10
不为空
学生姓名
StudentSex
Char
2
不为空
学生性别
StudentBirthday
Datetime
8
学生生日
Class
char
16
所在班级
TeacherTable1(教师信息表)
用来储存教师的基本信息
字段名
数据类型
长度
主键否
是否为空
描述
TeacherID
Char
10
主键
不为空
教师编号
TeacherName
Char
10
不为空
教师姓名
TeacherSex
Char
2
不为空
教师性别
TeacherBirthday
Datetime
8
教师生日
Post
char
10
教师职称
Department
char
20
所在院系
CourseTable(课程信息表)
字段名
数据类型
长度
主键否
是否为空
描述
CourseID
Char
16
主键
不为空
课程编号
CourseName
Char
16
不为空
课程名
Point
Char
8
不为空
学分
StuNumber
Datetime
4
不为空
选课人数
ScoreTable(学生成绩表)
用于存储学生成绩
字段名
数据类型
长度
是否为空
是否主键
CourseID
char
16
不为空
主键
StudentID
char
10
不为空
主键
Score
int
4
TeachTable(j教师授课表)
字段名
数据类型
长度
是否为空
是否主键
CourseID
char
16
不为空
主键
TeacherID
char
10
不为空
主键
Location
int
10
(6)数据库账户及权限(截图)
学生账户表
教师账户表
用户登录表:
(7)数据库存储过程:
程序代码中尽量不出现SQL语句,所有操作都写成了存储过程,如下:
ShowPointSum:
CreateprocShowPointSum
@StudentID_OUTchar(10)
AS
BEGIN
SELECTSUM(Course.Point)
FROMStudentTable1,ScoreTable,Course
WHERECourse.CourseID=ScoreTable.CourseIDANDScoreTable.StudentID=@StudentID_OUTANDScoreTable.StudentID=StudentTable1.StudentID
END
ShowTeachStuID
createprocShowTeachCount:
@TNO_INCHAR(10)
ASSELECTDISTINCTScoreTable.StudentID
FROMScoreTable,COURSE,TeachTable
WHEREScoreTable.CourseIDIN/*Scoretable.CourseIDAND*/(SELECTDISTINCTTeachTable.CourseID
FROMTeachTable,ScoreTable
WHERETeachTable.CourseID=ScoreTable.CourseIDandTeachTable.TeacherID=@TNO_IN)
AllCourse:
createprocAllCourse
as
begin
selectx.CourseID,x.CourseName,x.Point,y.TeacherName,y.Post,z.Location,x.StuNumber
fromCoursex,TeacherTable1y,TeachTablez
wherex.CourseID=z.CourseIDandy.TeacherID=z.TeacherID
end
DeleteLogon:
createprocDeleteLogon(@idchar(10))
as
begin
deletefromLogon
whereUserID=@id
end
DeleteStudent:
createprocDeleteStudent(@idchar(10))
as
begin
deletefromStudentTable1
whereStudentID=@id
end
DeleteTeacher:
createprocDeleteTeacher(@idchar(10))
as
begin
deletefromTeacherTable1
whereTeacherID=@id
end
InsertLogon:
createprocInsertLogon(@idchar(10))
as
begin
insertintoLogon
values(@id,@id)
end
InsertStudent:
createprocInsertStudent(@useridchar(10),@usernamechar(10),@sexchar
(2),@birthdatetime,@classchar(10))
as
begin
insertintoStudentTable1values(@userid,@username,@sex,@birth,@class)
end
return
InsertTeacher:
createprocInsertTeacher(@useridchar(10),@usernamechar(10),@sexchar
(2),@birthdatetime,@postchar(10),@departmentchar(10))
as
begin
insertintoTeacherTable1values(@userid,@username,@sex,@birth,@post,@department)
end
return
IsExistsStu:
createprocIsExistsStu(@idchar(10))
as
begin
select*fromStudentTable1
whereStudentID=@id
end
IsExistsTea:
createprocIsExistsTea(@idchar(10))
as
begin
select*fromTeachertable1
whereTeacherID=@id
end
ProcAllStu:
createprocProcAllStu
as
begin
select*fromStudentTable1
end
ProcAllTea
createprocProcAllTea
as
begin
select*fromTeacherTable1
end
ProcLogon:
createprocProcLogon(@useridchar(16),@passwordchar(10))
as
begin
select*
fromLogon
whereUserID=@useridandPassword=@password
end
return
ProcModify:
createprocProcModify(@idchar(10),@passwordchar(16))
as
begin
updateLogon
setPassword=@password
whereUserID=@id
end
ProcStudent:
createprocProcStudent(@idchar(10))
as
begin
select*fromStudentTable1
whereStudentID=@id
end
SelectCourse:
createprocSelectCourse(@idchar(10),@courseidchar(16))
as
begin
insertintoScoreTable
values(@courseid,@id,null)
end
SelectedCourse:
createprocSelectedCourse(@idchar(10))
as
begin
select*fromScoreTable
where@id=StudentID
end
SelectedCourseNum:
createprocSelectedCourseNum(@idchar(10))
as
begin
selectCOUNT(*)
fromScoretable
whereStudentID=@id
end
SelectedDetail:
createprocSelectedDetail(@idchar(10))
as
begin
selectx.CourseID,x.CourseName,x.Point,y.TeacherName,y.Post,z.Location,s.Score
fromCoursex,TeacherTable1y,TeachTablez,ScoreTables
where@id=s.StudentIDandx.CourseID=z.CourseIDandz.TeacherID=y.TeacherID
andx.CourseID=s.CourseID
End
(8)视图设计
createviewView_NoOneChoise
As
Selectdistinctdbo.Course.CourseName,dbo.Course.CourseID
Fromdbo.CourseCROSSJOIN
dbo.ScoreTable
Where(dbo.Course.CourseIDNOTIN
(SELECTCourseID
FROMdbo.ScoreTableASScoreTable_1
GROUPBYCourseID))
4.系统界面设计
(1)窗体功能描述
登录界面Logon.java
管理员以帐号Admin密码123登录成功进入管理员的信息管理界面,通过点击“学生信息管理”和“教师信息管理”进入不同的管理界面,学生信息管理界面如下:
教师信息管理界面如下:
以学生帐号(如:
帐号:
S001001,密码:
S001001)登陆成功后进入如下界面,首先显示的是学生的基本信息:
点击“课程列表”按钮进入如下界面
根据自己的跟人兴趣选择课程,选择的课程数目不能超过3门否则弹出对话框如下:
点击“确定”跳转到已选课程列表。
在主界面点击“已选课程”按钮也可以进入下面的界面查看已经选择的课程:
以教师帐号(如:
帐号:
T01001,密码:
T01001)登陆成功后进入如下界面,首先显示的是教师的基本信息,
点击“录入成绩”可以通过表格来录入学生的成绩,界面如下图所示:
四、实现数据库连接技术
封装数据库操作的类:
SqlManager.java
importjava.sql.*;
importjava.util.*;
importjavax.swing.JOptionPane;
publicclassSqlManager{
privatestaticSqlManagerp=null;
privatePropertyResourceBundlebundle;
privatestaticStringjdbcDriver=null;
privatestaticStringsplit=null;
privateStringDBType=null;
privateStringDBhost="localhost";
privateStringDBname="";
privateStringDBport="";
privateStringDBuser="";
privateStringDBpassword="";
privateConnectionSqlconn=null;
privateStatementSqlstmt=null;
privateStringstrCon=null;
privateSqlManager(){
try{
bundle=newPropertyResourceBundle(SqlManager.class.
getResourceAsStream("/sysConfig.properties"));
this.DBhost=getString("DBhost");
this.DBname=getString("DBname");
this.DBport=getString("DBport");
this.DBuser=getString("DBuser");
this.DBpassword=getString("DBpassword");
Stringsystem_type=getString("system-type");
if(system_type!
=null){
if(system_type!
=null){
if(system_type.toLowerCase().equals("widows"))
split=";";
elseif(system_type.toLowerCase().equals("unix"))
split=":
";
}
Stringdatabase_type=getString("database-type");
this.DBType=database_type;
if(database_type!
=null){
if(database_type.toLowerCase().equals("mysql")){
jdbcDriver="com.mysql.jdbc.Driver";
strCon="jdbc:
mysql:
//"+DBhost+":
"+DBport+"/"+DBname;
}
elseif(database_type.toLowerCase().equals("oracle")){
jdbcDriver="oracle.jdbc.driver.OracleDriver";
strCon="jdbc:
oracle:
thin:
@"+DBhost+":
"+DBport+":
"+DBname;
}
elseif(database_type.toLowerCase().equals("sqlserver")){
jdbcDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
strCon="jdbc:
microsoft:
sqlserver:
//"+DBhost+":
"+DBport+";DatabaseName="+DBname;
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticSqlManagercreateInstance(){
if(p==null)
{
p=newSqlManager();
p.initDB();
}
returnp;
}
privateStringgetString(Strings)
{
returnthis.bundle.getString(s);
}
publicvoidinitDB(){
System.out.println(strCon);
System.out.println(jdbcDriver);
try{
Class.forName(jdbcDriver);
}catch(Exceptionex){
System.err.println("Can'tFindDatabaseDriver.");
}
}
publicvoidconnectDB(){
try{
System.out.println("SqlManager:
Connectingtodatabase...");
Sqlconn=DriverManager.getConnection(strCon,DBuser,DBpassword);
Sqlstmt=Sqlconn.createStatement();
}catch(SQLExceptionex){
System.err.println("connectDB"+ex.getMessage());
}
System.out.println("SqlManager:
Connecttodatabasesuccessful.");
}
publicvoidcloseDB(){
try{
System.out.println("SqlManager:
Closeconnectiontodatabase...");
Sqlstmt.close();
Sqlconn.close();
}catch(SQLExceptionex){
System.err.println("closeDB:
"+ex.getMessage());
}
System.out.println("Sqlmanager:
Closeconnectionsuccessful.");
}
publicintexecuteUpdate(Stringsql){
intret=0;
try{
ret=Sqlstmt.executeUpdate(sql);
}catch(SQLExceptionex)
{
System.out.println("executeUpdate:
"+ex.getMessage());
}
returnret;
}
publicResultSetexecuteQuery(Stringsql){
ResultSetrs=null;
try{
rs=Sqlstmt.executeQuery(sql);
}catch(SQLExceptionex){
System.err.println("executeQuery:
"+ex.getMessage());
}
returnrs;