学生成绩管理系统pb课程设计..doc_第1页
学生成绩管理系统pb课程设计..doc_第2页
学生成绩管理系统pb课程设计..doc_第3页
学生成绩管理系统pb课程设计..doc_第4页
学生成绩管理系统pb课程设计..doc_第5页
免费预览已结束,剩余35页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、与设计 .11.1系统功能分析 .11.2系统功能模块设计 .1二、数据库设计与实现 .42.1数据库设计 .42.2创建数据库 .42.3创建应用 .72.4创建窗口 .82.4.1创建登陆窗口 .82.4.2创建学生窗口 .112.4.3创建教师窗口 .152.4.4创建管理员窗口 .212.5创建选单 .252.5.1创建学生选单 .252.5.2创建教师选单 .262.6创建数据窗口 .282.6.1创建学生数据窗口 .282.6.2创建教师数据窗口 .302.6.3创建管理员数据窗口 .322.7小结 .34三、使用说明 .343.1学生模块使用说明 .343.2教师模块使用说明 .

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

5、 管理员对学生基本信息的输入和维护,包括学号、姓名、性别、专业、总学分等。(2) 管理员对教师基本信息的输入和维护,包括职工号、姓名、年龄、性别、所授的课程号等。(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-Cre

8、ate ASA Database,如图 4-1图 4-1选择 table-new table设置参数如图 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

9、-1 和 7-2:图 7-1图 7-2创建新的应用,打开new,选择“ target”页中的应用“Application ”,单击ok,弹出保存文件对话框,选择到新建的目录 E:workspace, 输入文件名为“ project ”,单击 finish ,具体如图 8-1:图 8-1创建应用之后,在project 的 open 事件中编写代码:/ Profile student SQLCA.DBMS = ODBC SQLCA.AutoCommit = FalseSQLCA.DBParm = ConnectString=DSN=student;UID=dba;PWD=sql connect;i

10、f sqlca.sqlcode0 thenmessagebox(提示 , 数据库连接失败! ) elseopen(w_load) end if2.4 创建窗口2.4.1创建登陆窗口1.单击 new,选择 PB Object ,点击 window,然后单击 ok,窗口如下:保存窗口为“ w_load”。2. 添加控件并设置属性在窗口上放置 1 个图片控件, 5 个静态文本控件, 2 个单行编辑控件, 1 个下拉列表控件,对象W_load图 9-12 个按钮控件,各个控件的位置和大小如图属性取值Title学生成绩管理系统Window typeResponse!9-1所示。sle_2Password

11、True3. 编写脚本( 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,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.selec

12、ttext(1,len(this.text)(5)在 sle_2 中的 getfocus中的脚本为:l_id=trim(sle_1.text)if l_id=thenmessagebox(error,用户名不能为空,请输入!)sle_1.setfocus();elseselect user.idinto :qj_idfrom userwhere (user.id=:l_id);if sqlca.sqlcode0 thenmessagebox(error,用户名不存在,请重新输入!)sle_1.setfocus();elsesle_2.setfocus();end ifend ifthis.se

13、lecttext(1,len(this.text)(6) 在 ddplb_1 的 selecttionchanged中的脚本为:l_id=trim(sle_1.text)l_password=trim(sle_2.text)if l_password=thenmessagebox(error,密码不能为空,请输入!)sle_2.setfocus();elseselect user.id,user.passwordinto :qj_id,:qj_passwordfrom userwhere (user.id=:l_id and user.password=:l_password);if sqlc

14、a.sqlcode0 thenmessagebox(error,密码错误,请重新输入!)sle_2.setfocus();elseddplb_1.setfocus();end ifend if(7)在 cb_1 的 clicked中的脚本为:l_id=trim(sle_1.text)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.pa

15、ssword=:l_password and user.qx=:l_qx); if sqlca.sqlcode0 thenmessagebox(error,用户类型不匹配,请重新选择!)ddplb_1.setfocus();elsechoose case l_qxcase 管理员 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

16、,u_keydown中的脚本为:if keydown(keyenter!) thenthis.triggerevent(clicked!)end if(9)cb_2 的 clicked脚本为:close(parent)(10)给 cb_2 定义一个用户事件 u_2,事件号为 pbm_keydown,u_2 中的脚本为:if keydown(keyenter!) thenthis.event clicked()end if2.4.2创建学生窗口1 创建窗口,命名为“ w_student ”:图 11-1(1)添加控件在窗口上放置一个数据窗口控件,一个选单,如图11-12 创建学生快速选课窗口(1

17、) 创建学生选课窗口命名为“w_ksxk”;图 12-1(2) 添加控件在窗口上放置一个数据窗口控件,2 个静态文本控件, 1 个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_ksxk ,如图12-1 。(3) 在 w_ksxk 的 open 事件中的脚本为:dw_1.settransobject(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.sqlcode

18、0 thenmessagebox(error,选课失败 : 此课程不是可选课程或已被选, 请检查 !)sle_1.setfocus()sle_1.selecttext(1,len(m)elsemessagebox( 选课成功 , 你已成功选定课程号+m)sle_1.text=end if(5) 在 cb_2 中的 clicked的脚本为:sle_1.text=(6) 在 cb_3 中的 clicked的脚本为:close(parent)3 创建快速退课窗口( 1)创建学生退课窗口,命名为“w_tuike ”:图 13-1( 2)添加控件在窗口上放置一个数据窗口控件 ,2 个静态文本控件, 1

19、个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象 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_cj.kchinto :cj_kchfrom xs_cjwhere(xs_cj.xh=:qj_id);if cj_kchm thenmessagebox(error,课程表中没有此课程, 请重新输入 !)sle_1.setfo

20、cus()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)在 cb_3 中的 clicked的脚本为:close(parent)4 创建修改密码窗口( 1)创建学生登录密码修改窗口,命名为“w_password”:图 14-1( 2) 添加控件在窗口上放置 2 个

21、静态文本框控件, 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=:qj_idusing sqlca;if sqlca.sqlcode = 0 thenmessagebox(提示 , 密码修改成功!请记住新密码:+l)close(w_p

22、assword)elsemessagebox( 提示 ,密码修改失败 :n 长度过长或有特殊字符!)returnend 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 个数据窗口控件,给数据窗口控件添加一个数据窗口对象。如图 16-1.( 2) 在 w_teacher 的 open 事件中的脚本为:dw_1.settransobject(sqlca)dw_1.retrie

23、ve(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);if qj_kchm thenmessagebox(error,你输入的课程号不在你的授课范围! 请重新输入 !)sle_1.setfo

24、cus()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 thenmessagebox(error,学号格式不正确,请重新输入!)sle_1.setfocus(

25、)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 if(3) 给 cb_1 中的 clicked的脚本为:int m,n,chengjin=intege

26、r(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+ 的成绩已录入 !)elseupdate xs_cj set cj=:n,xf=0where (xs_cj.xh

27、=:s_xh and xs_cj.kch=:s_kch);messagebox( 成功 , 学号 +s_xh+ 的成绩已录入 !)end ifsle_1.text=sle_2.text=elsemessagebox(error,此学生此门课成绩已存在, 不能重复录入 !)sle_2.setfocus()sle_2.selecttext(1,len(sle_2.text)end ifelsemessagebox(error,录入成绩格式错误, 请检查 !)sle_2.setfocus()sle_2.selecttext(1,len(sle_2.text)end ifend if(4) 给 cb_

28、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 teacherwhere(teacher

29、.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_password”:图

30、 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 thenmessagebox(提示 , 密码修改

31、成功!请记住新密码:+l)close(w_password)elsemessagebox( 提示 ,密码修改失败 :n 长度过长或有特殊字符!)returnend ifend if(4) 在 cb_2 的 clicked 事件中的脚本为:sle_1.text=6 创建帮助窗口,命名为“w_guanyu”:如图 21-1图 21-12.4.4创建管理员窗口1 创建管理员窗口,命名为“ w_admin”:图 21-22 在窗口上放置 1 个按钮控件和 1 个选项卡控件,在选项卡上创建 5 个子选项,每个子选项上添加 1 个数据窗口控件,和 5 个按钮控件。如图 21-23 编写 tab_1.tab

32、page_1 (用户管理)中的代码:(1)给 tab_1.tabpage_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 thenset

33、column(col+1)elseif rowrowcount() 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

34、(0)setrow(row)scrolltorow(row)( 4)给添加记录的命令按钮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,当焦点落在该焦点时,按任意键都将触

35、发u_1。给 u_1 编写代码:if keydown(keyenter!) thenw_admin.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

36、w_admin.tab_1.tabpage_1.cb_2.event clicked()end if( 8)给删除记录的命令按钮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!) thenw_admin.tab_1.tabpage_1.cb_3.event clicked()end if( 10)给插入记录的命令

37、按钮cb_4 的 clicked事件编写代码:long rowrow=w_admin.tab_1.tabpage_1.dw_1.insertrow(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!) thenw_admin.tab_1.tabpage_1.cb_4.triggerevent (clicked!)end if(12) 给显示记录的命令按钮 cb_5 的 clicked 事件编写代码:w_admin.tab_1.tabpage_1.dw_1.re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论