高校学生选课管理系统说明书.docx
《高校学生选课管理系统说明书.docx》由会员分享,可在线阅读,更多相关《高校学生选课管理系统说明书.docx(31页珍藏版)》请在冰豆网上搜索。
高校学生选课管理系统说明书
摘要
学生选课管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
全校性选修课的目的在于扩大学生知识面,加强学生素质教育,培养复合型高级人才,具有不可替代的重要性。
随着教育改革的不断深入和素质教育的加强,完全全学分制的实施,选修课在一个学生的培养计划中占的比重将越来越大。
网上选课系统的出现使同学们能够更加自主、便捷、准确的进行选课。
本系统主要实现学选课和查询课程的功能,学生可以在本系统上方便的选课,查询信息,本系统主要有课程查询系统,选课系统和教师管理系统组成。
经过分析,我们使用powerbuilder9.0为开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
关键词:
数据库;学生选课;课程查询;powerbuilder9.0
正文
1.问题描述
学生选课管理系统是一个学校管理系统不可缺少的部分,本设计的内容对于学校的决策者和管理者来说都至关重要,所以学生选课管理系统应该能够为用户提供充足的信息和快捷的查询手段。
本设计中所实现的主要工作和功能如下:
(1)介绍了个性化页面的背景及SQLServer2000和PowerBuilder9.0系统运用的一般原理;
(2)阐述整个个性化页面生成系统的系统结构及工作原理;分析了系统实现中的特殊性、难点和重点。
(3)进行测试并分析结果。
2.需求分析
2.1任务需求分析
系统要实现基本信息录入、修改、查询等功能:
1、信息的输入,包括学生基本信息、课程信息、成绩信息、学期信息、、用户信息等。
2、信息的修改、删除。
根据要求,查询符合条件的各类信息。
2.2数据流图,数据字典
2.2.1数据流图
数据流图由四种基本的元素构成:
数据流(DataFlow),处理(Process),数据存储和数据源(数据终点)。
数据流(DataFlow):
为具有名称且有流向的数据,用标有名称的箭头表示,一个数据可以是记录、组合项或基本项。
处理(Process):
表示对数据所进行的加工和变换,在图中用矩形框表示。
指向处理数据流为该处理的输入数据,离开处理的数据为处理的输出数据。
数据存储:
表示用文件方式或数据库形式所存储的数据,堆砌进行的存取分别以指向或离开数据存储的箭头表示。
数据源及数据终点:
表示数据的来源或数据的去向,可以是一个组织或人员,它处于系统范围之外,所以又称它为外部实体,它是为了帮助理解系统界面而引入的,一般只出现在数据流图的起点和终点。
查询
成绩单
查询
查询
成绩信息
学生信息
成绩信息
课程信息
操作
操作
操作
D3学生信息
D2成绩信息
D1课程表
用户
更改课程信息
更改成绩信息
更改学生信息
用户
产生成绩单
图1.系统数据流图
2.2.2数据字典
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
由于本次设计是小型软件系统的开发,所以采用卡片形式书写数据字典。
每张卡片上保存描述一个数据的信息这样做更新和修改起来比较方便,而且能单独处理描述每个数据的信息。
下面将列出若干数据元素的数据卡片信息。
数据字典卡片:
名称:
课程表
别名:
描述:
课程信息存储的描述
定义:
课程表=课号+课名+教师+学分+上课时间+教室+容纳人数
位置:
保存到磁盘
名称:
课程名称
别名:
描述:
惟一的标识课程的一个主键
定义:
课号=8{字符}8
位置:
课程表
名字:
教师表
别名:
描述:
描述教师的信息
定义:
教师表=教师名+姓名+教师号+用户名+登陆密码+所在院系+课号
位置:
保存到磁盘
名字:
教师号
别名:
描述:
惟一的标识教师的一个主键
定义:
教师号={integer}
位置:
保存到磁盘
名字:
选课表
别名:
描述:
学生选课后的信息
定义:
选课表=课号+学号+学期+得分
位置:
保存到磁盘
名字:
课号+学号+学期
别名:
描述:
唯一确定一个学生选课的信息的主键
定义:
课号=8{chair}8学期=8{chair}8
学号=8{chair}8
名字:
管理员
别名:
教师用户信息
描述:
是对使用本系统的管理员(教师)进行身份验证用的
定义:
管理员=教师用户名+登陆密码
位置:
教师表
位置:
保存到磁盘
名字:
学生用户
别名:
学生用户信息
描述:
是对使用本系统的学生用户进行身份验证用的
定义:
学生用户=用户名+密码
位置:
学生表
图2.数据字典卡片
3.系统总体设计
通过这个阶段的工作将划分组成系统的物理元素。
系统概要设计的基本目的是用比较抽象的概括方式确定系统如何完成预定的任务,也就是要确定系统的配置物理方案。
软件结构设计时应该遵循的最主要的原理是模块独立,让模块彼此间的接口关系应该尽量简单。
3.1系统功能模块图
可以根据模块独立原理对软件结构进行精化。
为了合理的分解,得到尽可能高的内聚、尽可能松散的耦合,为了得到一个易于实现、易于测试和易于维护的软件结构,应该对模块进行再分解或合并。
系统功能模块图如图
图3.系统功能模块图
3.2数据库概念结构设计
数据库一般分为三级模式:
外模式、概念模式和内模式。
外模式也就是不同用户所对的数据视图,它将数据库内部抽象的数据及其互相之间的关系表示为简单、直观的应用界面。
概念模式是数据库中全部数据的逻辑结构和特征描述,通常以某种数据模型为基础。
内模式是对数据的物理结构和存储方式的描述。
在这里我们将要设计的是数据库的概念模式,
3.2.1实体联系E-R图
根据对数据流图和数据字典的分析,我们可以确定该应用中的实体,属性和实体之间的关系,并画出如下所示的E-R图。
图4.教师实体
图5.学生实体
图6.课程实体
图7.得到的实体关系E-R图
得到的关系模式:
学生表(学号,姓名,性别,班级,出生年月,用户名,密码,备注)
选课表(学号,课号,学期,得分)
课程表(课号,课名,教师,教室,容纳人数,剩余名额,上课时间,学分)
教师表(教师号,教师,性别,所在院系,登录密码,课号)
数据库概念结构设计,是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及他们之间的关系,为后面的逻辑结构设计打下基础。
数据库中表格,视图等的操作,如创建表,修改表,删除表,增加/删除记录。
设计中设计数据窗口的时候,通过对话框实现与数据的连接。
在应用程序中则一般是在应用程序对象中书写连接数据库的程序代码,使得应用程序开始运行并实现与数据库的连接。
程序代码如下:
//ProfileStudent
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectstring='DSN=student'"
4.详细设计
详细设计阶段的根本目标是确定应该如何具体地实现所要求的系统,包括了用户界面设计、程序过程设计等步骤。
4.1系统主要功能
1、各种信息的输入,包括学生信息,课程信息,用户信息的输入等
2、学生选课成绩管理的各种信息查询,修改和维护
4.2系统流程图
程序流程图的优点是对控制流程的描绘很直观,易于掌握。
系统流程图
图8系统流程图
在用户登录时,在输入用户名和密码及用户类型的前提下将其与数据库中的数据进行对比,若一致,则打开主窗体,若不一致提示错误。
在这个部分中,需要对用户的类型存入一个全局变量,予以判断其所具有的系统使用权限,例如,用户类型为DBA,则该用户拥有系统的一切权力,可以对每一部分进行添加、删除、查找、统计等操作;而其他用户类型都依据其类型的属性,可以使用的部分也会相应减少,而只能使用一部分与其类型相匹配的功能。
5.系统测试
一个软件开发完成后,并不能投入使用,而需要有好长时间的测试。
测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。
目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。
在本次设计中,涉及到的主要模块有三个,即信息维护模块、信息查询模块、和信息浏览模块,它们之间的联系决定了在测试中必须将上述三个功能模块进行统一的测试。
各模块之间的联系就决定在测试过程中必须进行全面的分析。
在设计模块时,应尽力向高内聚、低偶合的思想方面靠拢。
5.1测试方法
软件的测试方法有两种,一种是黑盒测试(功能测试),另外一种是白盒测试(结构测试)。
黑盒测试把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当的接受输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。
白盒测试的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定的要求正确工作。
在本次软件的测试工作中,由于水平的限制,仅仅对软件的各个功能模块进行了测试,并对各个模块之间的接口进行了详细的测试(用黑盒测试法)。
测试的步骤
由于该系统是一个小系统,可以把整个系统作为一个单独的实体来测试。
当然,在测试的过程中可以分模块、分阶段来进行。
大型软件系统通常是有若干个子系统组成,且每个子系统由许多模块组成,因此,软件的测试过程基本上由以下步骤组成:
模块测试;
子系统测试;
系统测试;
验收测试;
平行运行;
5.2测试用例
本次设计主要模块有三个,即信息维护模块、信息浏览模块、信息查询模块,这里只列出这三个模块的测试用例。
当然,在实际的测试中应尽可能的对每个功能,都能测试到。
1、信息查询模块
信息查询模块的窗体应显示某学生的所有信息,包括学号、姓名、性别、出生年月、所选课程号,教师,教室,上课时间等,本模块可分别对这些信息进行查询。
学生李荣要对自己的选课信息查询:
在登录(输入正确的用户名和密码)后选“课程查询”控件:
的到所选课程的信息:
表1.选课信息表
选课表学号
选课表课号
选课表学期
教师表教室
课程表上课时间
课程表学分
课程表教师
1
数学
2009
301
9:
55
2.5
海射香
2
数据库
2009
302
8:
00
3.5
王燕
3
微机原理
2009
501
14:
30
3.5
朱超群
5
Java
2009
503
19:
25
3
张其文
教师(管理员)登陆后可查询学生的选课情况:
表2.课程查询表
学号
课号
学期
得分
04240411
1
2009
06240410
1
2009
06240406
2
2009
06240334
4
2009
6.软件使用说明书
1.登陆系统时,输入正确的用户名和密码,选择登录类型才可进入,界面如下图所示:
图9.登陆界面
2.学生选课索引界面可以实现选课,修改密码的界面索引
图10.选课索引界面
3学生选课界面
图11.学生选课界面
4.选课查询界面
图12.学生选课查询界面
5.教师查询选课信息
图13.教师查询选课界面
6.密码修改窗口
图14.密码修改界面
总结
在紧张和忙碌中,数据库课设短短的两周就这样过去了。
在本次设计的全过程中,我对三年所学的知识有了一个比较系统的认识和理解。
涉及了各方面的知识,大大扩展了我的知识面,同时使我学会了如何使用所学的知识去解决一些实际的问题。
在设计中我深知自己掌握的知识还远远不够,掌握的一些理论知识应用到实践中去,总会出现这样或那样的问题,不是理论没有掌握好,而是光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。
把学到的知识应用到实践中去,多做多练,才可以把理论的精华发挥出来。
知识不是知道、了解就好,一定要去应用它,发展它,让它在现实生活中得到充分的应用,从而解决一些问题,这才是学习的根本目的。
而且知识又不是单一的,它是互相联系的,学科与学科之间都有着内在的联系。
计算机是一门非常复杂且庞大的学科,一项课题往往需要多项技术才可以完成的。
在设计阶段,通过对课题的深入分析与研究,迫使我对技术有了一定的了解。
在遇到问题时,得到了指导老师与同学的悉心帮助,使我感受到集体的力量是无穷的。
通过这次设计,我学会了和别人配合工作,因为一个人所学的知识不可能面面俱到的,只有通过合作,发挥自己的优点,体现团队精神,才能使工作做得更为出色。
通过这次设计,我学到了许多书本上学不到的知识,增强了自己的动手能力。
计算机技术的高速发展,使我深深地认识到只有不断的加强学习,才能在计算机技术方面不至于被淘汰,今后,我还要加强学习,努力使自己成为一位专业的计算机人员,为我自己所从事的工作服务。
在此,感谢所有老师们对我的谆谆教导!
感谢他们给了我这次机会!
参考文献
1张海藩.软件工程导论.北京:
清华大学出版.2003
2萨师煊.数据库系统概论.北京:
清华大学出版设.2002
3数据库管理系统[美].北京:
清华大学出版社.1999
4张剑平.学校管理信息系统.北京:
中国铁道出版社.1997
5数据库设计[美].四川:
机械工业出版.2003
6完全掌握SQLServer2000[美].四川:
机械工业出版社.2000
7张钦雨.PowerBuilder9数据库项目案例导航.北京:
清华大学出版社.2005
8滕连爽,马宝林.基于B/S的计算机教学管理系统的设计与实现.北京:
清华大学出版社.2005
致谢
首先非常感谢我们学院开设这个软件综合开发的课题,为我们日后从事计算机方面的工作提供了实战的经验,奠定了初步的基础。
本次课程设计我们花费了近一个月的时间,在这一个月来我们的辅导老师张其文不辞辛苦的给我们辅导,为我们讲解疑难问题,对待我们,他是那么的和蔼可亲,对于学术,他又是那么的严谨、认真,从他那里,学到了许多从书本上学不到的东西,在此献上最诚挚的谢意。
当然,还有我以前的所有老师,他们给我打下了坚实的基础,使我这次课设可以顺利完成!
另外,还要感谢在课程设计过程中给予我帮助的同学和所有支持我的同学,他们让我学习到了很多以前都不懂的知识!
再次感谢以上对我此次设计提供帮助的所有人,谢谢你们!
!
!
附件Ⅰ部分原程序代码
Powerbuilder使用的是脚本语言,各脚本语言如下:
1数据库连接,打开登录窗口(应用程序的第一个运行窗体):
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='UID=;PWD=;'"
connect;
open(login)
2学生登录时的代码:
//定义两个变量
stringpassword,usename
//数据库连接参数
//ProfileStudent
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectstring='DSN=student'"
//连接数据库
connect;
//检索用户名和密码记录
SELECT"学生表"."学号",
"学生表"."用户名",
"学生表"."密码"
INTO:
stu_no,
:
usename,
:
password
FROM"学生表"
WHERE学生表.用户名=:
sle_1.text;
//判断用户输入的用户名是否正确
ifsle_1.text=""orsle_2.text=""then
messagebox("错误!
","用户名或密码不能为空!
",exclamation!
ok!
2)
else
ifusename=sle_1.textandpassword=sle_2.textthen
open(index)
close(login)
else
messagebox("错误!
","用户名或密码错误,请重新输入!
",exclamation!
ok!
2)
endif
endif
3教师(管理员)登录的代码
//定义两个变量
stringpassword,usename
//数据库连接参数
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectstring='DSN=student'"
//连接数据库
connect;
//检索用户名和密码记录
SELECT"教师表"."教师号",
"教师表"."用户名",
"教师表"."登陆密码"
INTO:
stu_no,
:
usename,
:
password
FROM"教师表"
WHERE教师表.用户名=:
sle_1.text;
//判断用户输入的用户名是否正确
ifsle_1.text=""orsle_2.text=""then
messagebox("错误!
","用户名或密码不能为空!
",exclamation!
ok!
2)
else
ifusename=sle_1.textandpassword=sle_2.textthen
open(about)
close(login)
else
messagebox("错误!
","用户名或密码错误,请重新输入!
",exclamation!
ok!
2)
endif
endif
3学生查询课程的代码,学生可以查询课号,代课老师,课名,上课时间(包括精确查询,模糊查询两种查询模式):
dw_1.setfilter("")
ifrb_1.checked=truethen
//精确查询模式程序
choosecaseddlb_1.text
case"课号"
dw_1.setfilter("课号='"+sle_1.text+"'")
case"课名"
dw_1.setfilter("课名='"+sle_1.text+"'")
case"教师"
dw_1.setfilter("教师='"+sle_1.text+"'")
case"上课时间"
dw_1.setfilter("上课时间='"+sle_1.text+"'")
endchoose
else
//模糊查询模式程序
choosecaseddlb_1.text
case"课号"
dw_1.setfilter("课号like"+"'%"+sle_1.text+"%'")
case"课名"
dw_1.setfilter("课名like"+"'%"+sle_1.text+"%'")
case"教师"
dw_1.setfilter("教师like"+"'%"+sle_1.text+"%'")
case"上课时间"
dw_1.setfilter("上课时间like"+"'%"+sle_1.text+"%'")
endchoose
endif
dw_1.retrieve()//检索数据,将符合条件的数据显示在数据窗口中
4,教师和学生更改密码的程序
//定义两个变量,教师密码
stringmima,usename
//数据库连接参数
//ProfileStudent
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectstring='DSN=student'"
//连接数据库
connect;
//检索用户名和密码记录
SELECT"教师表"."教师号",
"教师表"."登陆密码"
INTO:
usename,
:
mima
FROM"教师表"
WHERE"教师表"."教师号"=:
sle_1.text;
//判断用户输入的用户名是否正确
ifsle_1.text=""orsle_2.text=""orsle_3.text=""orsle_4.text=""orsle_3.text<>sle_4.textthen
messagebox("错误!
","用户名或密码不能为空,并且新密码不能两次输入相同!
",exclamation!
ok!
2)
else
ifusename=sle_1.textandmima=sle_2.textthen
//修改用户的密码
UPDATE"教师表"
SET"登陆密码"=:
sle_4.text
WHERE"教师表"."教师号"=:
sle_1.text
;
messagebox("密码修改成功!
","请记住新密码,下次登录时请使用新密码!
",Information!
ok!
2)
else
messagebox("错误!
","用户名或密码错误,请重新输入!
",exclamation!
ok!
2)
endif
endif
//定义两个变量
stringmima,usename
//数据库连接参数
//ProfileStudent
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="Connectstring='DSN=student'"
//连接数据库,学生更改密码
connect;
//检索用户名和密码记录
SELECT"学生表"."用户名",
"学生表"."密码"
INTO:
usename,
:
mima
FROM"学生表"
WHERE"学生表"."用户名"=:
sle_1.text;
//判断用户输入的用户名是否正确
ifsle_1.text=""orsle_2.text=""orsle_3.text=""orsle_4.text=""orsle_3.text<>sle_4.textthen
messagebox("错误!
","用户名或密码不能为空,并且新密码不能两次输入相同!
",exclamation!
ok!
2)
else
ifusename=sle_1.textandmima=sle_2.textthen
//修改用户的密码
UPDATE"学生表"
SET"密码"=:
sle_4.text
WHERE"学生表"."用户名"=:
sle_1.text
;
messagebox("密码修改成功!