1、重庆航天职业技术学院 重庆航天职业技术学院继续教育学院PowerBuilder实用教程和实训课程设计任务汇报书班级:10计算机网络学号:*姓名:*指导老师:*完成日期:/12/23数据库技术课程设计任务书班级:10计算机网络一、 课程设计名称:学生成绩管理系统设计和实现二、 课程设计目标:经过此次课程设计,学会PB使用方法。三、 任务要求:1 画出系统设计图。2 给出关键模块设计和实现步骤。3 给出实现代码。四、 课程设计汇报书要求:1 要求有课程设计汇报书封面,封面上写清楚标题、班级、姓名、指导老师、完成日期,格式自己设计。2 将本任务书装订在汇报书第二页。3 第三页为老师评语。4 第四页为
2、目录。5 汇报书具体内容以下:1) 系统结构图。2) 数据库建立步骤及截图。3) 系统模块实现步骤及截图。4) 具体代码。6 汇报书最终是此次课程设计小节和参考文件。五、 作业周期:.11.15.1.5计算机工程系 *重庆航天职业技术学院 老师评语重庆航天职业技术学院 目录1 课程设计目标52 数据库设计52.1 需求分析.52.2 数据库设计内容.62.3 概念设计.62.4 创建数据库.73 模块及窗口设计.113.1 设计系统管理模块.113.2 设计主窗口和菜单.133.3 设计输入班级信息数据窗口.173.4 设计访问学生基础信息数据窗口.193.5 设计查询班级开设课程窗口.203
3、.6 设计访问成绩信息窗口.233实训心得274 参考文件.27重庆航天职业技术学院 引言数据库技术,已经成为优异信息技术关键组成部分,是现代计算机信息系统和计算机应用系统基础和关键。数据库从诞生到现在,在不到半个世纪时间里,形成了坚实理论基础、成熟商业产品和广泛应用领域,吸引越来越多研究者加入。计算机技术不停地应用到各行各业,大量企业把数据存放在数据库中,而且经过T相关代码语句来进行快速查询,获取比传统方法更高效率。为了深入加深和巩固我们所学PowerBuilder实用教程和实训基础理论知识,使我们所学理论能够愈加好和实际专业连接起来。是学生得到搜集、处理、应用资料信息实践训练,同时全方面考
4、评学生所掌握基础理论知识及其实际专业能力,从而达成提升学生素质最终目标。学校安排了实训课程,在这段时间里,期望阩能够利用所学到只是穿件一个图书管理数据系统,来达成图书管理需要。 .12.20重庆航天职业技术学院 1 课程设计目标经过此次课程设计,学会PB使用方法。2 数据库设计熟悉PowerBuilder实用教程和实训实训环境,熟练掌握数据库、表、窗口界面设计、图形按钮添加、数据库链接及函数创建和应用,确立数据库创建方向,对图书管理系统进行分析并设计系统实现需要哪几张表和各表结构,确立数据库创建要求,优化数据库界面设计。2.1 需求分析书籍是人类进步阶梯,人类进步精神粮食。所以,读书显得格外关
5、键。所以学生成绩系统应该是能够为阅读者提供充足信息和快捷查询手段一个方法。学生成绩管理工作繁琐,查阅繁琐,包含大量信息数据,所以就需要一个完善学生成绩管理系统来实现对这些数据有效管理。从而达成领导、老师对查询学生成绩信息进行统一管理,满足用户需要。重庆航天职业技术学院 伴随计算机信息技术发展,数据库作为信息技术一部分也在飞速发展着。使用数据库对图书资源尽心管理工含有着手工管理无法比拟有点,它检索快速、查找方便、可靠性高、存放量大、成本低,所以数据库成为了图书管理最关键选择。2.2数据库设计内容利用PowerBuilder开发一个小型图书管理系统改图书管理系统关键有一下多个功效:图书类型信息查询
6、和编辑,图书信息查询和编辑,用户查询和编辑,借阅还书统计生成和查询。2.3 概念设计概念设计是在需求分析基础上,用概念数据模型来表述数据和数据之间相互联络,从上述分析中得到图书管理系统E-R图。重庆航天职业技术学院 性别姓名修课班级编号班级老师学期家庭住址开设系统E-R图出生日期学号班级班号学生学期所属成绩班级名称课时专业课程学制人数课程名称入课时间2.4 创建数据库数据库是一个数据库系统关键,一切数据全部存放在数据库中,我们所进行数据查找,删除,更改等行为全部是要进入数据库中。要创建数据库管理系统,那么我们首先要创建一个数据库。重庆航天职业技术学院 在D盘新建xscj文件夹,再新建data文
7、件夹。打开powerBuilder,新建一个工作空间和应用。在应用open中输入代码:/连接数据库SQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm = Connectstring=DSN=xscj;UID=dba;PWD=sqlCONNECT;if SQLCA.sqlcode0 thenmessagebox(提醒,数据库连接失败!)else open(w_login) /打开登录窗口end if在工具栏上点击Database图标(或Tools-Database painter快捷键Shift+F7),弹出数据库创建对话框。打开ODBC下
8、拉菜单,单击Utilities,然后双击Create ASA Database。Database name键入xscj,保留在在D盘下xscj文件夹data文件夹下,图.重庆航天职业技术学院 图2-1 新建xscj数据库 图 2-2 数据库树状图在数据库中创建表banji、jiben、bjkc、xscj、 user同时为表创建主键,外键。在数据库xscj中选中Tables,右键选择NewTable,弹出表创建窗口,输入表名,类型,宽度,和是否为空。完成后点击图标或使用快捷键Ctrl+S 保留。图 2-3 在数据库中创建表banji创建完成后,打开xscjTables下拉菜单,选中刚刚创建表。右
9、键NewprimaryKey为表设置主键bjbh。使用一样方法建立表jiben,bjkc,xscj,user图所表示:重庆航天职业技术学院 图 2-4 在数据库中创建表jiben图2-5 在数据库中创建表 xscj 图 2-6 在数据库中创建表users分别为其设置主键xh,xm表关联关系:bjkc-foreignkey关联banji-primarykey Jiben-primarykey关联jiben-foreignkey Jinben-primarykey关联xscj-foreignkey 重庆航天职业技术学院 图 2-7 表关联关系3.1系统模块设计点击工具栏新建图标,或File-new
10、,选择PB Object中Windows。使用CommondButton,创建一个用户登陆窗口。在属性页面Title框内输入登陆,使用两个Create static text control,在其一加入图片,另一text属性文本框内输入学生成绩管理系统。在窗口中添加GroupBox,text属性中输入请输入。在其内添加两个static text control,text。在static text controltext属性输入用户名,密码。本窗口实现用户登录控制重庆航天职业技术学院 图 3-1 登陆窗口在确定按钮下添加代码,以下: string ls_username, ls_password
11、 ls_username=trim(sle_1.text) /输入用户名和密码 ls_password=trim(sle_2.text) if ls_username= or ls_password= then messagebox(提醒,用户名和密码不能为空) else SELECT users.name, users.password, users.admin INTO :gs_username, :gs_password, :gs_admin FROM users WHERE ( users.name = :ls_username ) AND ( users.password = :ls
12、_password ); if sqlca.sqlcode=0 then open(w_main) /密码正确,打开主窗口 close(w_login) else li_n=li_n - 1 if li_n0 then重庆航天职业技术学院 messagebox(提醒,用户名或密码错误) elsemessagebox(提醒,错误超出3次,自动退出)halt /错误超出3次,退出程序 end if end if end if放弃按钮下输入代码:halt /退出程序3.2 设计主窗口和菜单主窗口和菜单是系统工作主界面,本例窗口为带帮助多文档框架窗口。File|New 在PB Object下选定Men
13、u单击OK,或使用new小图标弹出new选择窗口对话框。打开Menu窗口。选定Untitled0右键Insert Submenu Item,输入-系统(&S)回车,选定系统(&S)右键Insert Submenu Item,输入-密码修改,再选定系统(&S)右键选择Insert Submenu Item输入用户管理.使用一样方法创建Menu菜单结构。图所表示:重庆航天职业技术学院 图3-2 系统树形菜单结构窗口【系统】菜单下【密码修改】菜单项Clicked事件脚本以下。Open(w_mmxg)【系统】菜单下【用户管理】菜单项Clicked事件脚本以下。Open(w_yhgl)【系统】菜单下【退
14、出系统】菜单项Clicked事件脚本以下。Close(parentwindow)【班级管理】菜单下【录入班级信息】菜单项Clicked重庆航天职业技术学院 事件脚本以下。Open(w_banji_shuru,w_main,6,Original!)【班级管理】菜单下【修改班级信息】菜单项Clicked事件脚本以下。Open(w_banji_xiugai,w_main,6,original)【班级管理】菜单下【浏览班级信息】菜单项Clicked事件脚本以下。Opensheet(w_banji_xiugai,w_main,6,original!)【学生管理】菜单下【录入学生信息】菜单项Clicked
15、事件脚本以下。Opensheet(w_jiben_shuru,w_main,6,original!)【学生管理】菜单下【修改学生信息】菜单项Clicked事件脚本以下。Opensheet(w_jiben_xiugai,w_main,6,original!)【学生管理】菜单下【查询学生信息】菜单项Clicked事件脚本以下。Opensheet(w_jiben_chaxun,w_main,6,original!)【课程管理】菜单下【录入/修改开设课程】菜单项重庆航天职业技术学院 Clicked事件脚本以下。Opensheet(w_bjkc_shuruxiugai,w_main,6,original
16、!)【课程管理】菜单下【查询开设课程信息】菜单项Clicked事件脚本以下。Opensheet(w_bjkc_chaxun,w_main,6,original!)【成绩管理】菜单下【录入修改成绩】菜单项Clicked事件脚本以下。Opensheet(w_xscj_shuru,w_main,6,original!)【成绩管理】菜单下【查询个人成绩】菜单项Clicked事件脚本以下。Opensheet(w_xscj_grcx,w_main,6,original!)【成绩管理】菜单下【查询班级成绩】菜单项Clicked事件脚本以下。Opensheet(w_xscj_bjkc,w_main,6,ori
17、ginal!)【成绩管理】菜单下【查询课程成绩】菜单项Clicked事件脚本以下。Opensheet(w_xscj_kccx,w_main,6,original!)【窗口】菜单下【层叠窗口】菜单项Clicked事件重庆航天职业技术学院 脚本以下。W_main.arrangesheets(cascade!)功效是将主窗口打开子窗口以层叠方法排列。【帮助】菜单下【相关】菜单项Clicked事件脚本以下。Open(w_about)【帮助】菜单下【相关】菜单项Clicked事件脚本以下。ShowHelp(“d:xscjhelpxscjhelp.chm”,index!)3.3 设计输入班级信息数据窗口菜
18、单栏中选择【File】-【new】或点击new小图标选择Datawindows窗口,选中Freedom单击ok。选择【Quick Select】类型数据库,选中预览时检索数据复选框,单击【Next】命令按钮,弹出【Quick Selct】数据窗口对话框。在途中左边【Tables】列表框中列出目前数据库中全部表名,单击某一个表名,会在【Columns】列表框中列出该表全部字段。单击某个字段名,单击右边【Add All】命令按钮。完成字段选重庆航天职业技术学院 择后单击【ok】按钮,接着弹出【Selcet Color and Border Seting】严责和边框设置对话框。图 3-3 表选择 图
19、 3-4 颜色边框对话框点击【Next】-【Finish】完成选择弹出以下对话框 图 3-5 数据窗口 单击【Save】图标,或【File】-【Save】弹出保留对重庆航天职业技术学院 话框,输入创建 图 3-5 保留对话框数据窗口d_banjishuru生成SQL Selct语句为:SELCET “banji”.”bjbh”.”banji”.”bjmc” “banji”.”zymc”.”banji”.”xz”.”banji”.”rxsj”.”banji”.”rs”FROM”banji”3.4 设计访问学生基础信息数据窗口创建数据窗口d_jiben_shuru,显示风格为“Freefrom”,
20、数据源类型为“Quick Selcet”。数据窗口d_jiben_shuru生成SQL selcet语句为:SELCET重庆航天职业技术学院 “jiben”.”xh”、”jiben”.”xm”.”jiben”.”xb”.”jiben”.”csrq”、”jiben”.”jtzz”、”jiben”.”bjbh.FROM ”jiben”图 3-4 学生基础信息窗口3.5 设计查询班级开设课程窗口首先创建一个窗口对象w_bjkc_chaxun,调整期大小,在窗口中放置2个静态文本控件(st_1,st_2)、2个下拉列表框控件(ddlb_1,ddlb_2)、1个命令按钮(cb_1)1个数据窗口控件(dw
21、_1),调整各个控件位置和大小。位置窗口及其控件属性见一下表。图 3-5 查询班级开设课程窗口重庆航天职业技术学院 对象属性取值W_bjkc_chaxunTitle查询班级开设课程Window TypeMain!ResizableFalseCenterFalseMaxboxFalseMinboxFalseDw_1VScrolloBarTureDataObjectD_bjkc_chaxunSt_1Text选择学期:St_2Text选择班级Cb_1text查询窗口w_bjkc_chaxunopen事件脚本以下。重庆航天职业技术学院 dw_1.settransobject( sqlca)int li
22、_xq, li_bjmc, nstring ls_xq, ls_bjmcSELECT count(distinct xq) INTO :li_xqFROM bjkc;DECLARE xqcursor CURSOR FOR SELECT xq FROM bjkc GROUP BY xq;OPEN xqcursor ;FOR n=1 TO li_xqFETCH NEXT xqcursor INTO :ls_xq;ddlb_1.additem( ls_xq)NEXTCLOSE xqcursor ;SELECT count(distinct bjmc) INTO :li_bjmcFROM banji;
23、DECLARE bjmccursor CURSOR FOR SELECT banji.bjmc FROM bjkc, banji WHERE bjkc.bjbh = banji.bjbh GROUP BY banji.bjmc;OPEN bjmccursor ;FOR n=1 TO li_bjmcFETCH NEXT bjmccursor INTO :ls_bjmc;ddlb_2.additem( ls_bjmc)NEXTCLOSE bjmccursor ;【查询】按钮clicked事件脚本以下Dw_1.retrieve(ddlb_1.text、ddlb_2.text)重庆航天职业技术学院 3
24、.6 设计访问成绩信息窗口首先新建窗口对象w_xscj_shuru,在窗口上放置1个分组框控件、3个静态文本控件、3个下拉列表框控件、3个命令窗口按钮控件和1个数据窗口控件其中,【保留】按钮enabled属性设成False;数据窗口控件调整到只显示学号、姓名和成绩3列,VScrollBar属性设置为Ture,数据窗口对象为d_xscj_shuru;3个下拉菜单列表框控件列表项为空,由代码动态生成。图 3-6 班级学生成绩查询 【确定】按钮代码以下。int li_xh, nstring ls_kcmc, ls_xq, ls_bjmc, ls_xhls_xq=ddlb_1.text重庆航天职业技术
25、学院 ls_bjmc=ddlb_2.textls_kcmc=ddlb_3.textif ls_xq= or ls_bjmc= or ls_kcmc= thenmessagebox(提醒, 选择项不能空!)else SELECT count(distinct xh) INTO :li_xh FROM xsbj WHERE xsbj.bjmc=:ls_bjmc; DECLARE xhcursor CURSOR FOR SELECT xh FROM xsbj WHERE xsbj.bjmc=:ls_bjmc; OPEN xhcursor ; FOR n=1 TO li_xhFETCH NEXT xh
26、cursor INTO :ls_xh;INSERT INTO xscj ( xh,xq,kcmc,cj ) VALUES ( :ls_xh, :ls_xq, :ls_kcmc, null ); NEXT CLOSE xhcursor ; dw_1.retrieve(ls_xq,ls_kcmc )end if【保留】按钮代码以下。if dw_1.update(true,false )=1 thendw_1.resetupdate( )commit; cb_2.enabled=false重庆航天职业技术学院 elserollback;messagebox(错误,保留数据失败!)end if【退出】
27、按钮代码以下。close(parent)课程下拉列表框Getfocus事件脚本以下。int li_kcmc,nstring ls_kcmc, ls_xq, ls_bjmcls_xq=ddlb_1.textls_bjmc=ddlb_2.textif not(ls_xq= or ls_bjmc=) then SELECT count(distinct bjkc.kcmc) INTO :li_kcmc FROM bjkc,banji WHERE (bjkc.bjbh = banji.bjbh) and(banji.bjmc=:ls_bjmc) and (bjkc.xq=:ls_xq); DECLAR
28、E kcmccursor CURSOR FOR SELECT bjkc.kcmc FROM bjkc, banji WHERE (bjkc.bjbh = banji.bjbh) and (banji.bjmc=:ls_bjmc) and (bjkc.xq=:ls_xq)GROUP BY bjkc.kcmc; ddlb_3.reset( )重庆航天职业技术学院 OPEN kcmccursor ; FOR n=1 TO li_kcmcFETCH NEXT kcmccursor INTO :ls_kcmc;ddlb_3.additem( ls_kcmc) NEXT CLOSE kcmccursor
29、;end if窗口Closequery事件脚本以下。integer rtdw_1.accepttext( )if dw_1.modifiedcount( ) =0 thenreturn 0elsert=messagebox(提醒,添加修改内容未保留,确实退出吗?, Question!, YesNo!) if rt=1 thenreturn 0end ifend ifreturn 1dw_1事件代码以下。cb_2.enabled=true数据窗口Itemchanged事件脚本以下。Cb_2.enablde=ture重庆航天职业技术学院 3 实训心得这个星期是我们PowerBuilder使实用教程和实训实训,经过这一段时间实训,让我领悟到了很多课堂上没有注意关键知识。怎样使用PowerBuilder快速创建一个通用接口ODBC数据库,用window来创建我们常常使用软件界面。而且将每个创建窗口关联到主窗口,使整个学生管理系统使用愈加方便。抱着学习和探索精神,我们投入到实训过程去。一段时间以来,我学到了很多知识,也发觉了自己在课堂学习中学习不住和未能注意到知识点。实训过程中,也碰到了很多问题,在老师和同学帮助下全部得以处理,对PowerBuilder认识也更深刻。4 参考文件1 PowerBuilder实用教程和实训2 网络资料