学生选课管理系统
《数据库原理与应用》
课程设计
分析与设计报告
题目专业班级
学姓号名指导老师
完成时间
目录
1设计任务与要求..................................................................................... 12需求分析................................................................................................. 1
2.1功能需求............................................................................................... 2
2.2性能需求............................................................................................ 3
2.3数据需求............................................................................................ 4
2.4运行需求............................................................................................ 43系统总体设计......................................................................................... 44数据库设计............................................................................................. 7
4.1概念结构设计.................................................................................... 7
4.2逻辑结构设计.................................................................................... 8
4.3物理结构设计.................................................................................... 85运行结果和测试................................................................................... 106参考资料............................................................................................... 20
1设计任务与要求
1)掌握数据库的基本概念,使用软件工程的思路确定总体方案;
2)完成详细的需求分析,在PowerDesigner 中进行数据库设计,完成概念结构设计,生成CDM 和PDM,以及SQL 脚本,建立规范化程度较高的关系模型,在SQL Server 中建立完善的数据库;
3)进行系统界面设计、功能模块设计;
4)熟悉某种开发工具(如Dslphi、VB、VC++6.0、PowerBuilder、等),使用程序设计语言(如Pascal、C++、Java等)编程实现高校选课功能,包括对课程和教师信息的日常管理和维护,能对学期选修课程进行增加、删除、修改和查询操作。
5)编码调试完成系统,最终完成开发任务;
6)撰写并提交课程设计报告和个人总结。
设计报告内容包括:设计题目、任务要求、系统总体方案、各个模块实现和数据流图,心得体会和参考资料。
2需求分析
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是
管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了.
基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。
2.1功能需求
课程信息添加:管理员用户登录后,进入课程信息管理功能单元,输入课程号,课序号,课程名称,教师姓名,开设院系这些数据后提交数据,完成课程信息地添加操作,此时在选课表中将出现刚才添加的课程的有关信息。
课程信息修改:管理员用户登录后,进入课程信息管理功能单元,如果是已经登录了,选择要修改的课序号,选定后就可以修改该选定课程的课程编号,课序号,课程名称,教师姓名,开设院系,提交后就得到该门课程修改后的信息。
课程信息删除:管理员用户登录后,进入课程信息管理功能单元,如果是已经登录了,选择要删除的课程的课序号,提交后,就将选定课程删除了。
用户信息添加:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入了,输入用户名,用户密码,但是此时的用户必须与学生信息管理系统中的学生相对应,即用户必须是存在的。提交后就将新用户添加到了用户组里面,即这个用户可以使用该系统了。用户信息修改:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入了,选择要修改的用户的用户名,点击后就可以修改该用户的密码。点击提交后就完成了该用户信息的修改,就得到了该用户修改后的信息。
用户信息删除:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入了,选择要删除的用户的用户名,提交之后就将该用户删除了。用户组里面将不存在改用户。
学生选课:学生用户登录后,进入选课管理功能单元,如果是已经登录进入了,输入课程号,课序号,提交之后系统会在已存在的课程信息表中查询该生所属专业应修的课程,如
果该门课程存在就可以看到选择的课程出现在了课程列表里面,同时该记录也会出现在已选课程信息里面。如果不存在则输出错误提示信息“没有该门课程”。
成绩查询:学生用户登录后,进入成绩查询功能单元,如果是已经登录进入了,点击课程名称,就可以看到该门课程的成绩,同时点击全部课程就可以看到全部的课程信息及对应的课程成绩,和该学期的学分绩点。
成绩录入:教师用户登录后,进入成绩录入功能单元,选择相应学生的学生编号,输入该学生的成绩,提交之后就完成了成绩的录入。该成绩即可对应的出现在相应学生相应课程的成绩列表之内。
2.2性能需求
1) 精度
该学生选课系统对数据输入/输出的精度要求为小数点后两位,因为涉及到成绩的输入和输出及学分绩点的计算输出。
2) 时间特性要求
该学生选课系统对时间的要求是用户对系统登录操作的时间最多为一个小时。一小时之后未退出者则网页实效。
3) 灵活性
该学生成绩管理系统还要有足够的灵活性,当用户需求发生变化时,如要求增加学生退选功能,通过增加学生的权限实现该功能
4) 故障处理要求
对于该学生选课系统,用户提出的故障可能有:软件无法安装或者软件停止运行以及此时应该采取什么措施恢复数据。
当软件无法安装时,可以查看帮助手册,安装相关软件或者修复受损文件。
当软件停止运行时,强行关机重启后,可以根据系统的自动备份或者在操作之前的手工备份来恢复数据,保证系统数据的正确性。
5) 安全性要求
因为学生选课系统关系到学校及学生的重要成绩信息,所以对于学校而言对安全保密性的要求非常严格,此系统是面向所有的在校学生,老师及系统管理员,大多数人都不是专业的计算机操作人员,因此对该系统使用的方便性要求也较高
6) 可扩充性要求
任何软件都有缺陷,对于学生选课系统但学校的需求发生变化时,增加一个新的功能模块,
要求系统能够很好地对其进行扩充,既可补充性。
7)可维护性要求
当操作系统平台发生变化或者支持软件学生信息管理系统发生变化时,为了适应这些变化必需对系统进行维护,即要求有可维护性
2.3数据需求课程(课程号,课程名,成绩,开始时间,结束时间,指导老师,成绩)2.4运行需求
硬件环境:
服务器端/客户端
处理器:Intel PentiumIII
内存:192M
硬盘空间:20G
软件环境:
服务器端/客户端
操作系统:Windows XP
网络协议:TCP/IP
浏览器:IE 浏览器
制作工具:SQL Server 2000、Visual C++6.0
3系统总体设计
3.1.1各模块功能及示意图
根据功能的不同可以将本系统划分为三个主模块,四个子模块
身份验证:通过登录才可进入选课系统,登录信息提交后检验登录者的身份是否合法,合法,
则转入对应的操作界面。在本系统中,只有三种身份:学生、老师、管理员。
选课:用于学生的网上选课,通过选择被选学期,查看被选专业的课程,完成该学期的选课。信息浏览:信息浏览包括已选课程浏览、被选课程浏览、公共信息浏览、已发布课程信息浏
览。已选课程浏览是为学生提供的查看自己已经选择的课程信息,根据选择的学
期不同而更新页面。被选课程浏览用于学生修改、补选、重新选择课程。公共信
息浏览适用于教师和学生查看最近发布的信息(内容、时间)。已发布课程信息
浏览用于各代课老师查询自己已经发布的课程信息,主要用于浏览、核对。
信息查询:包括教师个人信息查询、课程查询、选课名单查询。课程查询即通课程编码(唯
一)来查询该课程的相关介绍,包括课程内容、开课学期、地点等内容。教师个
人信息是通过教师姓名来查询对应的老师个人信息,包括学历、职称、成果等。
通过选课名单的查询可以查看该学期选择某一门课程的学生情况。
信息修改:包括选课信息的修改,课程发布信息的修改,密码的修改,学生信息的修改,教师信息的修改
3.1.2模块间的调用关系
模块间的调用:
公共信息浏览模块为教师和学生共用,学生登录模块中,当学生成功登录后,将学生的姓名、学号、密码、学期作为共用信息保存下来,作为密码修改模块、查询选课信息模块、修改选课信息模块使用时的参数。查询选课信息模块中的课程编码、学期、教师姓名信息作为传递参数用于查询教师信息模块、查询选课名单模块、查询课程信息模块、修改选课信息。同样,教师登录模块中,成功登录后将教师名、教师的身份证号、教师姓名作为参数保存下来,传递到密码修改模块、查询已发布课程信息模块、删除课程发布信息模块、修改课程发布信息模块。管理员登录后的修改教师信息、删除教师信息模块中传递的是教师的身份证号信息,参数由用户输入的信息得来;修改学生信息、删除学生信息模块中传递的是学生的学号信息,同样传递的参数由用户输入得来;删除公告信息模块中传递的是信息序号,由输入得来。
3.1.3模块间的接口
学生登录-密码修改:学号
学生登录-查询选课信息:学号、学期
查询选课信息-修改选课信息:专业、学期
教师登录-密码修改:身份证号
教师登录-查询已发布课程信息:身份证号
3.2数据库设计
根据系统功能设计的要求以及功能模块的划分,对于系统用户信息数据库,可以列出数据项和数据库
4数据库设计
4.1
概念结构设计
4.2
逻辑结构设计
4.3物理结构设计
1.名称:课程信息表
标识:CLASS_名称
课程编号
课程名
所在学院字段名称CLASS_numCLASS_nameCLASS_school
CLASS_teacher
CLASS_score
CLASS_begin
CLASS_end类别number varchar varchar varchar varchar char char 主键Yes No No No No No No 字长[1**********]指导教师成绩开课日期节课日期
表4.3.1课程信息表
2.教师信息表
标识:TECHER_
教师信息表包括身份证号、姓名、性别、所属学院、学历、职称、个人简介、密码8个字段。
名称教师编号姓名性别学院编号出生日期职称
字段名称Teacher_numTeacher_nameTeacher_sexTeacher_schoolTeacher_birthdayTeacher_call
类别Number varchar char Num char char
表4.3.2教师信息表
3.管理员信息表
标识:Info_admin
管理员信息表包括登录号、姓名、密码3个字段。
名称登录号姓名密码
字段名称ID Name Password
类别varchar varchar varchar
表43.3管理员信息表
4.学生选课信息表
标识:STU_
学生选课信息表包括学号、姓名、所在学院、所在专业、班级、所选课程、课程编码7个字段。
名称学号姓名班级学期所选课程
字段名称Stu_numStu_nameStu_classStu_termStu_ke
类别number varchar char char varchar
主键Yes No No No No
字长12128216
主键Yes No No
非空Yes No No
主键Yes No No No No No
字长128210104
课程编码出生日期
Stu_kenumStu_birthday
number char
表4.3.4学生选课信息表
No No
810
5运行结果和测试
5.1.1主界面
代码:void AdminMainFrame::OnOK(){
//TODO:Add extra validation here CDialog::OnOK();}
void AdminMainFrame::OnCancel(){
//TODO:Add extra cleanup here exit(1);
CDialog::OnCancel();}
void AdminMainFrame::OnShowStu(){
//TODO:Add your control notification handler code here ShowAllStu showallstu; showallstu.DoModal();}
void AdminMainFrame::OnShowTea(){
//TODO:Add your control notification handler code here ShowAllTea showalltea; showalltea.DoModal();}
void AdminMainFrame::OnShowCal(){
//TODO:Add your control notification handler code here ShowAllClass showallclass; showallclass.DoModal();}
void AdminMainFrame::OnStuAddCal(){
//TODO:Add your control notification handler code here Choose_Classchoose_class;choose_class.DoModal();}
void AdminMainFrame::OnAddStu(){
//TODO:Add your control notification handler code here Add_stuadd_stu;add_stu.DoModal();}
void AdminMainFrame::OnDelStu(){
//TODO:Add your control notification handler code here Del_Studel_stu;del_stu.DoModal();}
void AdminMainFrame::OnChanStu(){
//TODO:Add your control notification handler code here cha_Stucha_stu;cha_stu.DoModal();}
void AdminMainFrame::OnChanPas(){
//TODO:Add your control notification handler code here Cha_Passcha_pass;cha_pass.who="Admin";cha_pass.ID=ID;
cha_pass.Password=Password;cha_pass.DoModal();}
5.1.2
增加信息
代码:
void cha_Stu::OnSelchangeStuNo(){
//TODO:Add your control notification handler code here CString strSql="";CADOConn adoConn;
CString StuNo,Name,fOrm,Collage,Class;
m_Stu_No.GetLBText(m_Stu_No.GetCurSel(),StuNo);
strSql.Format("select学号,姓名,性别,院系,班级from 学生where 学号
='%s'",StuNo);
adoConn.Open(strSql);if(!adoConn.adoEOF()){
SetDlgItemText(IDC_Name,(_bstr_t)adoConn.m_pRecordset->GetColle
ct("姓名"));
SetDlgItemText(IDC_fOrm,(_bstr_t)adoConn.m_pRecordset->GetColle
ct("性别"));
SetDlgItemText(IDC_Collage,(_bstr_t)adoConn.m_pRecordset->GetCo
llect("院系"));
SetDlgItemText(IDC_Class,(_bstr_t)adoConn.m_pRecordset->GetColl
ect("班级"));
}
adoConn.ExitConnect();
}
void cha_Stu::OnOK(){
//TODO:Add extra validation here CString strSql="";CADOConn adoConn;
CString StuNo,Name,fOrm,Collage,Class;
m_Stu_No.GetLBText(m_Stu_No.GetCurSel(),StuNo);GetDlgItemText(IDC_Name,Name);
GetDlgItemText(IDC_Collage,Collage);GetDlgItemText(IDC_Class,Class);
m_fOrm.GetLBText(m_fOrm.GetCurSel(),fOrm);
strSql.Format("update学生set 姓名='%s',性别='%s',院系='%s',班级=
'%s'where 学号='%s'",Name,fOrm,Collage,Class,StuNo);
if(adoConn.ExecuteSQL(strSql)){
strSql.Format("学号%s信息已更新!",StuNo);MessageBox(strSql);
SetDlgItemText(IDC_StuNo,"");SetDlgItemText(IDC_Name,"");SetDlgItemText(IDC_Collage,"");SetDlgItemText(IDC_Class,"");SetDlgItemText(IDC_fOrm,"");return ; }
adoConn.ExitConnect();CDialog::OnOK();
}
BOOL cha_Stu::OnInitDialog(){
CDialog::OnInitDialog();
//TODO:Add extra initialization here CString strSql="";CADOConn adoConn; if(StuNo==""){
strSql="select*from 学生";adoConn.Open(strSql);while(!adoConn.adoEOF()){
m_Stu_No.AddString((_bstr_t)adoConn.m_pRecordset->GetCollec
t("学号"));
adoConn.MoveNext();}
}else
m_Stu_No.AddString(StuNo);
adoConn.ExitConnect();
return TRUE; //return TRUE unless you set the focus to a control
//EXCEPTION:OCX Property Pages should return FALSE
}5.1.3
修改信息
代码:
oid cha_Stu::OnOK(){
//TODO:Add extra validation here CString strSql="";CADOConn adoConn;
CString StuNo,Name,fOrm,Collage,Class;
m_Stu_No.GetLBText(m_Stu_No.GetCurSel(),StuNo);GetDlgItemText(IDC_Name,Name);
GetDlgItemText(IDC_Collage,Collage);GetDlgItemText(IDC_Class,Class);
m_fOrm.GetLBText(m_fOrm.GetCurSel(),fOrm);
strSql.Format("update学生set 姓名='%s',性别='%s',院系='%s',班级=
'%s'where 学号='%s'",Name,fOrm,Collage,Class,StuNo);
if(adoConn.ExecuteSQL(strSql)){
strSql.Format("学号%s信息已更新!",StuNo);MessageBox(strSql);
SetDlgItemText(IDC_StuNo,"");SetDlgItemText(IDC_Name,"");SetDlgItemText(IDC_Collage,"");SetDlgItemText(IDC_Class,"");SetDlgItemText(IDC_fOrm,"");return ; }
adoConn.ExitConnect();CDialog::OnOK();
}
BOOL cha_Stu::OnInitDialog(){
CDialog::OnInitDialog();
//TODO:Add extra initialization here CString strSql="";CADOConn adoConn; if(StuNo==""){
strSql="select*from 学生";adoConn.Open(strSql);while(!adoConn.adoEOF()){
m_Stu_No.AddString((_bstr_t)adoConn.m_pRecordset->GetCollec
t("学号"));
adoConn.MoveNext();}}
else
m_Stu_No.AddString(StuNo);
adoConn.ExitConnect();
return TRUE; //return TRUE unless you set the focus to a control
//EXCEPTION:OCX Property Pages should return FALSE
}
5.1.4
删除信息
代码:
void Del_Stu::OnOK(){
//TODO:Add extra validation here
CString strSql="";CADOConn adoConn;
CString StuNo,Name,fOrm,Collage,Class;
m_StuNo.GetLBText(m_StuNo.GetCurSel(),StuNo);
strSql.Format("deletefrom 学生where 学号='%s'",StuNo);if(adoConn.ExecuteSQL(strSql)){
strSql.Format("学号%s信息已删除!",StuNo);MessageBox(strSql);}
adoConn.ExitConnect();CDialog::OnOK();
}
BOOL Del_Stu::OnInitDialog()
{
CDialog::OnInitDialog();
//TODO:Add extra initialization here CString strSql="";CADOConn adoConn; {
strSql="select*from 学生";adoConn.Open(strSql);while(!adoConn.adoEOF()){
m_StuNo.AddString((_bstr_t)adoConn.m_pRecordset->GetCollect
("学号"));
adoConn.MoveNext();}
}
adoConn.ExitConnect();
return TRUE; //return TRUE unless you set the focus to a control
//EXCEPTION:OCX Property Pages should return FALSE
}
5.1.5
登陆界面
代码:
void CStu_ManageDlg::OnOK(){
//TODO:Add extra validation here CString id,passord,strSql;
GetDlgItemText(IDC_ID,m_ID);
GetDlgItemText(IDC_Passord,m_Passord);id=m_ID;
passord=m_Passord;CADOConn adoConn; strSql="";
if(IsDlgButtonChecked(IDC_Stu)){
strSql="select*from 学生where 学号='";strSql=strSql+id+"'and 密码='";strSql=strSql+passord+"'";adoConn.Open(strSql);if(!adoConn.adoEOF()){
StudentMainFrame studentmainframe; studentmainframe.ID=m_ID;
studentmainframe.Password=m_Passord;studentmainframe.DoModal();
////
MessageBox("登陆成功!","提示",MB_OK+MB_ICONWARNING);CDialog::OnOK();
}else
MessageBox("密码或编号错误!","提示",MB_OK+MB_ICONWARNING);adoConn.ExitConnect();}
else if(IsDlgButtonChecked(IDC_Tea)){
strSql="select*from 教师where 教师ID='";strSql=strSql+id+"'and 密码='";strSql=strSql+passord+"'";adoConn.Open(strSql);if(!adoConn.adoEOF()){
TeacherMainFrame teachermainframe; teachermainframe.ID=m_ID;
teachermainframe.Password=m_Passord;teachermainframe.DoModal();}else
MessageBox("密码或编号错误!","提示",MB_OK+MB_ICONWARNING);adoConn.ExitConnect();}
//
//else if(IsDlgButtonChecked(IDC_Admin)){strSql="select*from 管理员where 管理员ID='";strSql=strSql+id+"'and 密码='";strSql=strSql+passord+"'";adoConn.Open(strSql);if(!adoConn.adoEOF()){AdminMainFrame adminmainframe; adminmainframe.ID=m_ID;adminmainframe.Password=m_Passord;adminmainframe.DoModal();MessageBox("登陆成功!","提示",MB_OK+MB_ICONWARNING);CDialog::OnOK();
}
else
MessageBox("账号或密码错误!","提示",MB_OK+MB_ICONWARNING);
adoConn.ExitConnect();
}
else MessageBox("请选择登录身份!");
}
5.1.6
选课界面
代码:
void Choose_Class::OnOK()
{
//TODO:Add extra validation here
CString strSql="";
CADOConn adoConn;
CString StuNo,Class;
m_StuNo.GetLBText(m_StuNo.GetCurSel(),StuNo);
m_Class.GetLBText(m_Class.GetCurSel(),Class);
strSql.Format("select课程名from 课程where 课程名in(select课程
名from 选课where 学号='%s')",StuNo);
adoConn.Open(strSql);
while(!adoConn.adoEOF())
{
if((_bstr_t)adoConn.m_pRecordset->GetCollect("课程名")==Class)
{
MessageBox("该生已选过该课程!");
return;
}
adoConn.MoveNext();
}
if(adoConn.adoEOF())
{
strSql.Format("insertinto 选课(学号,课程名)values('%s','%s')",
StuNo,Class);
if(adoConn.ExecuteSQL(strSql))
{
MessageBox("成功增加选课信息!");
return;
}
}
adoConn.ExitConnect();
CDialog::OnOK();
}
6参考资料
[1]王珊萨师煊数据库系统概论北京:高等教育出版社2009年
[2]张俊兰王文发马乐荣冯伍软件工程西安:西安交通大学出版社2009年