学生成绩管理系统PB课程设计.doc

上传人:laozhun 文档编号:2396176 上传时间:2023-02-17 格式:DOC 页数:39 大小:1.50MB
返回 下载 相关 举报
学生成绩管理系统PB课程设计.doc_第1页
第1页 / 共39页
学生成绩管理系统PB课程设计.doc_第2页
第2页 / 共39页
学生成绩管理系统PB课程设计.doc_第3页
第3页 / 共39页
学生成绩管理系统PB课程设计.doc_第4页
第4页 / 共39页
学生成绩管理系统PB课程设计.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《学生成绩管理系统PB课程设计.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统PB课程设计.doc(39页珍藏版)》请在三一办公上搜索。

1、PB课程设计学生成绩管理系统学 号:姓 名:指导老师: 引言Powerbuilder 是目前最有代表性的数据库前端开发工具之一。它具有强大的数据库管理功能,以特有的数据窗口技术和简单易用功能强大的powerscript语言满足了快速开发和实施的需要。在这个学期学习的powerbuilder结合数据库原理进行了本系统的设计,本系统为学生成绩管理系统,制作了一个小型的系统,实现了基本的学生成绩管理功能,在实践中进一步理解和掌握了数据库技术,并使所学的知识有一定的应用价值。学生成绩管理系统能够有效运行,从而完成自动,高效,科学的学生和老师信息的输入和维护,以及老师对学生成绩的录入。系统开发的总体任务

2、是实现学生成绩管理的系统化,规范化和自动化,同时这是对学完powerbuilder之后开发的第一次完整实践。本学生成绩管理系统主要包括三大模块:一、管理员模块,管理员可对教师和学生的基本信息进行输入和维护,对学校课程进行录入、修改,对学生成绩的查看等。二、教师模块,教师可查看自己的基本信息,以及对录入学生成绩和登陆密码的修改等。三、学生模块,学生可查看自己的基本信息、课表,以及选课、退课和修改登陆密码等。本系统中,基本满足对学生成绩的管理,没有对学生成绩进行统计分析。通过做这次的学生成绩管理系统,自己受益匪浅,由于水平有限,不当之处在所难免,恳请老师批评指正。目录一、系统分析与设计11.1 系

3、统功能分析11.2 系统功能模块设计1二、数据库设计与实现42.1 数据库设计42.2 创建数据库42.3 创建应用72.4 创建窗口8 2.4.1创建登陆窗口8 2.4.2创建学生窗口11 2.4.3创建教师窗口15 2.4.4创建管理员窗口212.5 创建选单25 2.5.1创建学生选单25 2.5.2创建教师选单262.6 创建数据窗口28 2.6.1创建学生数据窗口28 2.6.2创建教师数据窗口30 2.6.3创建管理员数据窗口322.7 小结34三、使用说明343.1 学生模块使用说明343.2 教师模块使用说明343.3 管理员模块使用说明353.4 登陆模块使用说明35四、系统

4、优缺点分析354.1优点分析354.2 缺点分析35五、 心得体会35六、 参考文献35一、 系统分析和设计学生成绩管理是学校教务管理的重要环节之一。近年来,随着高校的不断扩招,学生人数越来越多,学生成绩管理的任务更加繁重,必须借助现代化的管理工具和手段提高学生成绩管理效率。学生成绩管理系统广泛应用于高校教务管理部门的学生成绩管理,其作用和功能也是学生比较熟悉和容易理解的。一个应用系统的开发过程包括分析、设计、实现、调试和发布等阶段。以下是分析说明。1.1 系统功能分析本系统可以实现的功能主要包括以下几点:(1) 管理员对学生基本信息的输入和维护,包括学号、姓名、性别、专业、总学分等。(2)

5、管理员对教师基本信息的输入和维护,包括职工号、姓名、年龄、性别、所授的课程号等。(3) 管理员对用户权限的设置,包括用户名、密码、和登陆权限等。(4) 管理员对课程信息的输入和修改,包括课程号、课程名、开课学期、学时、学分等。(5) 管理员对学生成绩的查询等。(6) 教师对学生成绩的录入以及登陆密码的修改等。(7) 学生对自己基本信息、课表和成绩查询,快速选课,修改登陆密码等。1.2 系统功能模块设计通过对上述功能的分析、分类、综合,按照模块化程序设计的要求,得到如图2-1所示的功能模块图。学生成绩管理系统学生功能管理员功能教师功能帮助密码修改学生成绩录入教师所授课程查询密码修改教师基本信息查

6、询学生课程管理学生基本信息查询学生成绩查询用户管理关于学校首页学生成绩查询全校课程信息输入与分配学生基本信息输入与维护教师基本信息输入与维护学生选课用户权限管理用户登录管理学生课程查询学生退课 图2-1二、 数据库设计与实现数据库在学生成绩管理系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统操作效率已经能否保证数据的一致性、完成性和安全性。2.1 数据库设计 根据学生成绩管理系统的功能要求,通过分析系统要设计的相关实体一集要收集、存储和操纵数据信息,得到如下图所示的系统E-R图。关系模式如下: 学生基本信息(学号,姓名,性别,专业,总学分) 教师基本信息(职工号,姓名,年龄,性别

7、,所授课程) 课程(课程号,课程名,开课学期,学时,学分) 成绩(学号,课程号,成绩,所获学分) 用户(用户账号,密码,权限) E-R图如图3-1:总学分专业性别姓名学号课程号所获学分成绩选修学生 1课程名 n教授课程 n学分学时 1工作 开课学期 1教师职工号 1姓名性别年龄 图3-12.2 创建数据库 开始,在E盘根目录下建立本实例的工作文件夹“workspace”再在”E:workspace”文件夹下建立文件夹”data”,用于存储数据文件。选择ODB ODBC-Utilities-Create ASA Database,如图4-1 图4-1选择table-new table设置参数如图

8、4-2到图5-4。图4-2图4-3 图5-1图5-2图5-3图5-41“学生”表表名:student主键:xh2“教师”表表名:teacher主键:zgh外键:kch3.“课程”表表名:kc主键:kch4“成绩”表表名:xs_cj主键:xh和kch外键:xh和kch5“用户”表表名:user主键:id表之间的具体联系如图6-1:图6-12.3创建应用在”E:workspace”文件夹下建立工作空间命名为“workspace”,如图7-1和7-2:图7-1图7-2创建新的应用,打开new,选择“target”页中的应用“Application”,单击ok,弹出保存文件对话框,选择到新建的目录E:

9、workspace,输入文件名为“project”,单击finish,具体如图8-1:图8-1创建应用之后,在project的open事件中编写代码:/ Profile studentSQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm = ConnectString=DSN=student;UID=dba;PWD=sqlconnect;if sqlca.sqlcode0 thenmessagebox(提示,数据库连接失败!)else open(w_load)end if2.4 创建窗口2.4.1 创建登陆窗口 1.单击new,选择PB O

10、bject,点击window,然后单击ok,窗口如下:保存窗口为“w_load”。2.添加控件并设置属性 在窗口上放置1个图片控件,5个静态文本控件,2个单行编辑控件,1个 图9-1下拉列表控件,2个按钮控件,各个控件的位置和大小如图9-1所示。对象属性取值W_loadTitle学生成绩管理系统Window typeResponse!sle_2PasswordTrue3.编写脚本 (1)定义全局变量string qj_id,qj_password,qj_qx,qj_kch,qj_xfstring s_kch,s_xh(2)定义实例变量int l_n;string l_id,l_password

11、,l_qx(3)w_load的open事件脚本为:st_4.text=string(today(),yyyy-mm-dd)st_5.text =string(now(),hh:mm:ss)Timer(1)在timer()中脚本为:st_5.text=string(now()(4)在sle_1中的getfocus中的脚本为:this.selecttext(1,len(this.text)(5)在sle_2中的getfocus中的脚本为:l_id=trim(sle_1.text)if l_id=thenmessagebox(error,用户名不能为空,请输入!)sle_1.setfocus();e

12、lseselect user.idinto :qj_idfrom userwhere (user.id=:l_id);if sqlca.sqlcode0 thenmessagebox(error,用户名不存在,请重新输入!)sle_1.setfocus();elsesle_2.setfocus();end ifend ifthis.selecttext(1,len(this.text)(6)在ddplb_1的selecttionchanged中的脚本为:l_id=trim(sle_1.text)l_password=trim(sle_2.text)if l_password=thenmessa

13、gebox(error,密码不能为空,请输入!)sle_2.setfocus();elseselect user.id,user.passwordinto :qj_id,:qj_passwordfrom userwhere (user.id=:l_id and user.password=:l_password);if sqlca.sqlcode0 thenmessagebox(error,密码错误,请重新输入!)sle_2.setfocus();elseddplb_1.setfocus();end ifend if(7)在cb_1的clicked中的脚本为:l_id=trim(sle_1.t

14、ext)l_password=trim(sle_2.text)l_qx=trim(ddplb_1.text)select user.id,user.password,user.qxinto :qj_id,:qj_password,:qj_qxfrom userwhere (user.id=:l_id and user.password=:l_password and user.qx=:l_qx);if sqlca.sqlcode0 thenmessagebox(error,用户类型不匹配,请重新选择!) ddplb_1.setfocus();elsechoose case l_qx case

15、管理员 open(w_admin) close(w_load) case 教师 open(w_teacher) close(w_load) case 学生 open(w_student) close(w_load) end chooseend if(8)给cb_1定义一个用户事件u_keydown,事件号为pbm_keydown,u_keydown中的脚本为:if keydown(keyenter!) thenthis.triggerevent(clicked!)end if(9)cb_2的clicked脚本为:close(parent)(10)给cb_2定义一个用户事件u_2,事件号为pbm

16、_keydown,u_2中的脚本为:if keydown(keyenter!) thenthis.event clicked()end if2.4.2 创建学生窗口1 创建窗口,命名为“w_student”: 图11-1(1)添加控件 在窗口上放置一个数据窗口控件,一个选单,如图11-12 创建学生快速选课窗口(1) 创建学生选课窗口命名为“w_ksxk”;图12-1(2) 添加控件在窗口上放置一个数据窗口控件,2个静态文本控件,1个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_ksxk,如图12-1。(3) 在w_ksxk的open事件中的脚本为:dw_1.settra

17、nsobject(sqlca)dw_1.retrieve()(4) 在cb_1的clicked中的脚本为:string mm=trim(sle_1.text)insert xs_cj(xh,kch)values (:qj_id,:m)using sqlca;if sqlca.sqlcode0 thenmessagebox(error,选课失败:此课程不是可选课程或已被选,请检查!)sle_1.setfocus()sle_1.selecttext(1,len(m)elsemessagebox(选课成功,你已成功选定课程号+m)sle_1.text=end if(5) 在cb_2中的clicked

18、的脚本为:sle_1.text=(6) 在cb_3中的clicked的脚本为:close(parent)3创建快速退课窗口(1) 创建学生退课窗口,命名为“w_tuike”:图13-1(2)添加控件在窗口上放置一个数据窗口控件,2个静态文本控件,1个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_kc。如图13-1.(3)在w_tuike的open事件中的脚本为:dw_1.settransobject(sqlca)dw_1.retrieve()(4)在cb_1的clicked中的脚本为:string m,cj_kchm=trim(sle_1.text)select xs_c

19、j.kchinto :cj_kchfrom xs_cjwhere(xs_cj.xh=:qj_id);if cj_kchm thenmessagebox(error,课程表中没有此课程,请重新输入!)sle_1.setfocus()sle_1.selecttext(1,len(m)elsedelete from xs_cjwhere(xs_cj.kch=:m)using sqlca;messagebox(退选成功,你已成功退选课程号+m)w_tuike.dw_1.retrieve(qj_id)sle_1.text=end if(5)在cb_2中的clicked的脚本为:sle_1.text=(6

20、)在cb_3中的clicked的脚本为:close(parent)4 创建修改密码窗口(1)创建学生登录密码修改窗口,命名为“w_password”: 图14-1(2) 添加控件在窗口上放置2个静态文本框控件,1个单行编辑控件,2个按钮控件。如图14-1.(3) 在cb_1的clicked事件中的脚本为: string lint nl=trim(sle_1.text)n=len(sle_1.text)if l=or n10 thenmessagebox(提示,新密码为空或长度大于10,请检查!)elseupdate userset user.password=:lwhere user.id=:

21、qj_idusing sqlca;if sqlca.sqlcode = 0 then messagebox(提示,密码修改成功!请记住新密码:+l) close(w_password) else messagebox(提示,密码修改失败:n长度过长或有特殊字符!) return end ifend if (4) 在cb_2的clicked事件中的脚本为:sle_1.text= 5 创建帮助窗口,命名为“w_guanyu”:如图15-1.图15-12.4.3 创建教师窗口1 创建窗口,命名为“w_teacher“: 图16-1(1) 在窗口上放置1个数据窗口控件,给数据窗口控件添加一个数据窗口对

22、 象。如图16-1.(2) 在w_teacher的open事件中的脚本为: dw_1.settransobject(sqlca)dw_1.retrieve(qj_id)2创建进入录入学生成绩窗口,命名为“w_srkch”:图16-2 (1)窗口上放置1个静态文本框控件,一个单行编辑框控件,2个按钮控件。如图16-2. (2)在cb_1中的clicked中的脚本为: string mint nm=trim(sle_1.text)n=len(sle_1.text)select teacher.kchinto :qj_kchfrom teacherwhere(teacher.zgh=:qj_id);

23、if qj_kchm thenmessagebox(error,你输入的课程号不在你的授课范围!请重新输入!)sle_1.setfocus()sle_1.selecttext(1,n)elseopen(w_lrcj)close(w_srkch)end if(3)在cb_2中的clicked的脚本为:sle_1.text=3 创建录入成绩窗口,命名为“w_lrcj”图17-1(1) 在窗口上放置2个静态文本框控件,2个单行编辑框控件,3个按钮控件。如图17-1.(2) 给sle_2中的getfocus的脚本为:string mm=trim(sle_1.text)if m= or len(m)10

24、 thenmessagebox(error,学号格式不正确,请重新输入!)sle_1.setfocus()sle_1.selecttext(1,len(m)elseselect xs_cj.xh,xs_cj.kchinto :s_xh,:s_kchfrom xs_cjwhere(xs_cj.xh=:m and xs_cj.kch=:qj_kch);if sqlca.sqlcode0 thenmessagebox(你没有权限录入,此学生没有选择此门课程)sle_1.setfocus()sle_1.selecttext(1,len(m)elsesle_2.setfocus()end ifend i

25、f(3) 给cb_1中的clicked的脚本为:int m,n,chengjin=integer(sle_2.text)if sle_1.text= or sle_2.text= thenmessagebox(error,学号或成绩不能为空)elseselect kc.xfinto :mfrom kcwhere (kc.kch=:s_kch);if n=0 and n=60 thenupdate xs_cj set cj=:n,xf=:mwhere (xs_cj.xh=:s_xh and xs_cj.kch=:s_kch);messagebox(成功,学号+s_xh+的成绩已录入!)else

26、update xs_cj set cj=:n,xf=0where (xs_cj.xh=:s_xh and xs_cj.kch=:s_kch);messagebox(成功,学号+s_xh+的成绩已录入!) end ifsle_1.text=sle_2.text=else messagebox(error,此学生此门课成绩已存在,不能重复录入!)sle_2.setfocus() sle_2.selecttext(1,len(sle_2.text)end ifelse messagebox(error,录入成绩格式错误,请检查!)sle_2.setfocus()sle_2.selecttext(1,

27、len(sle_2.text)end ifend if (4) 给cb_2的clicked的脚本为:sle_1.text=sle_2.text=(5) 给cb_3的clicked的脚本为:close(parent)4 创建查询成绩窗口(1) 创建查询成绩窗口,命名为“w_tcj”图19-1(2) 在窗口上放置1个静态文本框按钮,1个单行编辑框控件,2个按钮控件。如图19-1.(3) 给cb_1的clicked的脚本为:string mint nm=trim(sle_1.text)n=len(sle_1.text)select teacher.kchinto :qj_kchfrom teache

28、rwhere(teacher.zgh=:qj_id);if qj_kchm thenmessagebox(error,你的输入有误!请重新输入!)sle_1.setfocus()sle_1.selecttext(1,n)elsew_teacher.dw_1.dataobject=d_tcjw_teacher.dw_1.settransobject(sqlca)w_teacher.dw_1.retrieve(m)close(w_tcj)end if(4) 给cb_2的clicked的脚本为:close(parent) 5 创建修改密码窗口(1)创建教师登录密码修改窗口,命名为“w_passwor

29、d”: 图20-1(2)添加控件在窗口上放置2个静态文本框控件,1个单行编辑控件,2个按钮控件。如图20-1.(3)在cb_1的clicked事件中的脚本为: string lint nl=trim(sle_1.text)n=len(sle_1.text)if l=or n10 thenmessagebox(提示,新密码为空或长度大于10,请检查!)elseupdate userset user.password=:lwhere user.id=:qj_idusing sqlca;if sqlca.sqlcode = 0 then messagebox(提示,密码修改成功!请记住新密码:+l)

30、 close(w_password) else messagebox(提示,密码修改失败:n长度过长或有特殊字符!) return end ifend if (4) 在cb_2的clicked事件中的脚本为:sle_1.text= 6创建帮助窗口,命名为“w_guanyu”:如图21-1图21-1 2.4.4 创建管理员窗口 1 创建管理员窗口,命名为“w_admin”:图21-22 在窗口上放置1个按钮控件和1个选项卡控件,在选项卡上创建5个子选项,每个子选项上添加1个数据窗口控件,和5个按钮控件。如图21-23 编写tab_1.tabpage_1(用户管理)中的代码:(1)给tab_1.t

31、abpage_1的constructor中的脚本为:w_admin.tab_1.tabpage_1.dw_1.settransobject(sqlca)w_admin.tab_1.tabpage_1.dw_1.retrieve()(2)给tab_1.tabpage_1.dw_1定义一个用户事件u_key,事件号为pbm_dwnprocessenter,当焦点落在该控件时,按回车将触发u_key,给u_key编写代码:int collong rowcol=getcolumn()row=getrow()if col3 thensetcolumn(col+1)elseif rowrowcount()

32、 thensetrow(row+1)scrolltorow(row+1)setcolumn(1)elserow=insertrow(0)setrow(row)scrolltorow(row)setcolumn(1)end ifend ifreturn 1 (3)给tab_1.tabpage_1.dw_1定义一个用户事件u_keyarrow,事件号为pbm_dwntabdownout,当焦点落在该控件时,按回车将触发u_keyarrow,给u_keyarrow编写代码: long rowrow=insertrow(0)setrow(row)scrolltorow(row)(4)给添加记录的命令按

33、钮cb_1的clicked事件编写代码:long rowrow=w_admin.tab_1.tabpage_1.dw_1.insertrow(0)w_admin.tab_1.tabpage_1.dw_1.setrow(row)w_admin.tab_1.tabpage_1.dw_1.scrolltorow(row)w_admin.tab_1.tabpage_1.dw_1.setfocus() (5) 给cb_1定义一个用户事件u_1,事件号为pbm_keydown,当焦点落在该焦点时,按任意键都将触发u_1。给u_1编写代码: if keydown(keyenter!) thenw_admin

34、.tab_1.tabpage_1.cb_1.event clicked()end if(6)给更新记录的命令按钮cb_2的clicked事件编写代码:w_admin.tab_1.tabpage_1.dw_1.update()w_admin.tab_1.tabpage_1.dw_1.reset()(7)给cb_2定义一个用户事件u_2,事件号为pbm_keydown,当焦点落在该焦点时,按任意键都将触发u_2。给u_2编写代码: if keydown(keyenter!) then w_admin.tab_1.tabpage_1.cb_2.event clicked()end if(8)给删除记

35、录的命令按钮cb_3的clicked事件编写代码:w_admin.tab_1.tabpage_1.dw_1.deleterow(dw_1.getrow()(9)给cb_3定义一个用户事件u_3,事件号为pbm_keydown,当焦点落在该焦点时,按任意键都将触发u_3。给u_3编写代码: if keydown(keyenter!) then w_admin.tab_1.tabpage_1.cb_3.event clicked()end if(10)给插入记录的命令按钮cb_4的clicked事件编写代码: long rowrow=w_admin.tab_1.tabpage_1.dw_1.ins

36、ertrow(dw_1.getrow()w_admin.tab_1.tabpage_1.dw_1.setrow(row)w_admin.tab_1.tabpage_1.dw_1.scrolltorow(row)w_admin.tab_1.tabpage_1.dw_1.setfocus() (11)给cb_4定义一个用户事件u_4,事件号为pbm_keydown,当焦点落在该焦点时,按任意键都将触发u_4。给u_4编写代码: if keydown(keyenter!) then w_admin.tab_1.tabpage_1.cb_4.triggerevent (clicked!)end if

37、(12) 给显示记录的命令按钮cb_5的clicked事件编写代码: w_admin.tab_1.tabpage_1.dw_1.retrieve()(13)给cb_5定义一个用户事件u_5,事件号为pbm_keydown,当焦点落在该焦点时,按任意键都将触发u_5。给u_5编写代码:if keydown(keyenter!) then w_admin.tab_1.tabpage_1.cb_5.event clicked()end if4 编写tab_1.tabpage_2(教师管理)中的代码:(1)给tab_1.tabpage_2的constructor中的脚本为:w_admin.tab_1.

38、tabpage_2.dw_2.settransobject(sqlca)w_admin.tab_1.tabpage_2.dw_2.retrieve() (2)给添加记录的命令按钮cb_8的clicked事件编写代码:long rowrow=w_admin.tab_1.tabpage_2.dw_2.insertrow(0)w_admin.tab_1.tabpage_2.dw_2.setrow(row)w_admin.tab_1.tabpage_2.dw_2.scrolltorow(row)w_admin.tab_1.tabpage_2.dw_2.setfocus() (3)给更新记录的命令按钮c

39、b_10的clicked事件编写代码:w_admin.tab_1.tabpage_2.dw_2.update()w_admin.tab_1.tabpage_2.dw_2.reset()(4)给删除记录的命令按钮cb_11的clicked事件编写代码:w_admin.tab_1.tabpage_2.dw_2.deleterow(dw_2.getrow()(5)给插入记录的命令按钮cb_9的clicked事件编写代码: long rowrow=w_admin.tab_1.tabpage_2.dw_2.insertrow(dw_2.getrow()w_admin.tab_1.tabpage_2.dw

40、_2.setrow(row)w_admin.tab_1.tabpage_2.dw_2.scrolltorow(row)w_admin.tab_1.tabpage_2.dw_2.setfocus() (6) 给显示记录的命令按钮cb_6的clicked事件编写代码: w_admin.tab_1.tabpage_2.dw_2.retrieve()5 编写tab_1.tabpage_3(学生管理)中的代码: (1)给tab_1.tabpage_3的constructor中的脚本为:w_admin.tab_1.tabpage_3.dw_3.settransobject(sqlca)w_admin.tab_1.tabpage_3.dw_3.retrieve() (2)给添加记录的命令按钮cb_13的clicked事件编写代码:long rowrow=w_admin.tab_1.tabpage_3.dw_3.insertrow(0)w_admin.t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号