学生选课管理信息系统设计与实现.docx
- 文档编号:10225590
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:55
- 大小:270.05KB
学生选课管理信息系统设计与实现.docx
《学生选课管理信息系统设计与实现.docx》由会员分享,可在线阅读,更多相关《学生选课管理信息系统设计与实现.docx(55页珍藏版)》请在冰豆网上搜索。
学生选课管理信息系统设计与实现
完成学生选课管理系统的开发
一、课程设计任务
完成学生选课管理系统的开发
二、需求描述
本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所选课程总数不能超过3门;对教师提供的服务有登录、修改登录密码和登录成绩;对管理员提供的服务有登录开设学生和教师帐号、删除学生和教师帐号的服务。
三、系统总体设计
1.系统架构设计
(1)架构:
单机
(2)运行软件环境:
windowsXPSP3、jdk1.6
(3)开发环境:
硬件平台:
CPU:
P41.8GHz
内存:
256MB以上
软件平台:
windowsXPSP3、jdk1.6
操作系统:
WindowsXP
数据库:
SQLServer2000、SQLServerSP4补丁
开发工具:
Eclipse3.3
分辨率:
1024*768
2.功能模块设计
各模块功能:
●登录界面:
登录界面是有帐号,密码两个JTextField,管理员帐号一字母A开头,教师帐号一字母T开头,学生帐号以字母S开头,登录帐号或密码输入错误会弹出相应的提示对话框。
●学生信息管理模块:
管理员用于添加和删除学生信息的模块。
●教师信息管理模块:
管理员用于添加和删除教师信息的模块。
●教师密码修改模块和学生密码修改模块:
管理员添加的用户帐号的初始密码与用户的帐号相同,用户通过密码修改模块可以自己需改密码。
●教师录入成绩模块:
教师可以浏览选修自己课程的学生的信息并且录入该学生的成绩。
●学生选择选修课模块:
该模块通过表格的形式将所有课程列出来,学生可以根据个人兴趣选择不同的课程,每个学生选择的课程数目不能超过3门,而且不能重复选课,否则会弹出对话框,提示用户查看已经选择了的课程。
●学生查询成绩模块:
通过表格的形式将该学生选择了的课程列出来,如果教师有录入成绩,则可以看到自己的课程成绩。
●3.数据库设计(概要设计...)
(1)E-R图
(2)关系模式
学生(学生学号,学生姓名,教师性别,教师生日,所在班级)
教师(教师编号,教师姓名,教师性别,教师生日,教师职称,所在院系)
课程(课程号,课程名,学分,选课人数)
选课(课程号,学生学号,成绩)
授课(课程号,教师编号,上课地点)
(3)数据库管理系统:
MicrosoftSQLServer2000
(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
(8)数据库账户及权限(截图)
学生账户表
教师账户表
用户登录表:
(9)数据库存储过程:
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
4.系统界面设计
(1)窗体功能描述
登录界面Logon.java
管理员以帐号Admin密码123登录成功进入管理员的信息管理界面,通过点击“学生信息管理”和“教师信息管理”进入不同的管理界面,学生信息管理界面如下:
教师信息管理界面如下:
以学生帐号(如:
帐号:
S001001,密码:
S001001)登陆成功后进入如下界面,首先显示的是学生的基本信息:
点击“课程列表”按钮进入如下界面
根据自己的跟人兴趣选择课程,选择的课程数目不能超过3门否则弹出对话框如下:
点击“确定”跳转到已选课程列表。
在主界面点击“已选课程”按钮也可以进入下面的界面查看已经选择的课程:
以教师帐号(如:
帐号:
T01001,密码:
T01001)登陆成功后进入如下界面,首先显示的是教师的基本信息,
点击“录入成绩”可以通过表格来录入学生的成绩,界面如下图所示:
(2)页面/窗体关系结构图
四、系统实现技术小结
为了方便管理,将数据库的封装分成两部分,数据库资源配置文件和封装数据库操作的类SqlManager.java:
●数据库资源配置文件sysConfig.properties:
#Sepecifythesystemtype:
windoworunix
system-type=windows
#specifythedatabase'stype
database-type=sqlserver
#specifysomeparameters
DBhost=localhost
DBport=1433
DBname=StudentManager
DBuser=sa
DBpassword=
●封装数据库操作的类:
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;
}
publicstaticvoidmain(Stringargs[]){
SqlManager.createInstance().connectDB();
SqlManager.createInstance().closeDB();
}
}
五、课程设计体会
该系统主要实现了学生选课的功能,这个系统是我独立完成,从需求分析,界面的搭建,到数据库的连接,表格,存储过程和存储过程等的建立,在这段时间的摸索中,我确实学到了很多东西,特别是对以前不太了解的JavaSwing组件有了更深刻的了解。
比如JTable,对于它的用法我在网上找了很多资料,JTable的建立有各种不同的方法,可以使用DefaultTableModel类来实现,如DefaultTableModeldtm=newDefaultTableModel(newObject[]{"","课程编号","课程名称","学分","任课教师","教师职称","上课地点","以选人数"},0));然后再table.setModel(dtm);或者继承AbstractTableModel类,还有对于如何在JTable中添加Swing组件,原本我是直接新建一个JcheckBox对象直接添加到表格的单元格里,结果发现只能显示出一串字符串,上网查找后才知道,要用DefaultCellEditor来添加Swing组件,再设置setCellRenderer(newMyTableRenderer())这是一个实现了TableCellRenderer接口的JCheckBox。
TableCellRenderer可以看做是Swing组件的呈
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 选课 管理信息系统 设计 实现