计算机与信息工程学院规范化课程大型数据库案例丽水学院计算机与信息工程学院周建东2007年11月目录案例一:项目管理信息系统……………………………..1案例二:微机租赁管理系统…………………………….18案例三:丽水学院刷卡考勤系统……………………….49案例一:项目管理信息系统本例是一个简化的“项目管理信息系统”,以项目信息(项目编码、项目名称、开发经费、应用情况和参加人员)以及项目开发人员自身的信息(编码、姓名、性别、出生年月、职称、部门)为主线,以部门表等为辅表,实现了项目和人员信息的录入、查询和管理等功能,展示了用PowerBuilder开发系统的方法和技巧。本系统的主要功能包括以下几部分:一、创建应用PowerBuilder8.0的应用程序是以工作区文件、目标文件、库文件的形式保存的,因此创建这些文件是编写应用程序的第一步。1.创建应用的步骤如下:⑴在Windows资源管理器中为应用新建一个目录,如D:\Project。此目录用于保存本系统的工作区文件、目标文件、应用库文件和数据库文件。⑵启动PowerBuilder8.0,单击Power工具栏的新建按钮,打开。⑶在New对话框中选择图标,打开New对话框。⑷选择保存Workspace的目录(D:\Project),并在文件名文本框中输入Project,然后单击“保存”按钮,回到PowerBuilder主界面。⑸单击Power工具栏中的新建按钮,打开New对话框,选择Target标签页,并双击Application图标,打开SpecifyNewApplicationandLibrary对话框。在该对话框中要指定应用对象名及所用库、目标,输入应用对象名后,按Tab键,会以默认方式自动为应用对象指定Library和Target,如下图所示:项目管理信息系统系统管理统计报表数据处理部门维护人员维护人数统计项目统计更改密码数据备份用户管理项目维护2⑹单击Finish按钮就建立了一个空白的应用对象project,可以在PowerBuilder的SystemTree中看到。2.应用的Open事件脚本:SQLCA.DBMS=ODBCSQLCA.AutoCommit=FalseSQLCA.DBParm=Connectstring='DSN=Project'CONNECTUSINGSQLCA;IFSQLCA.SQLCode0THENBeep(1)MessageBox('连接错误',SQLCA.SQLerrText)HaltCloseELSE//this.ToolbarText=Truethis.ToolBarFrameTitle=框架窗口工具条this.ToolBarSheetTitle=当前窗口工具条this.ToolBarPopMenuText=左边,上边,右边,下边,浮动,显示文字,图标提示OPEN(w_login)ENDIF上述脚本的作用主要是建立与数据库的连接,然后打开登录窗口。二、创建数据库1.数据库设计本系统采用了PowerBuilder8.0自带的一个小型关系数据库AdaptiveServerAnywhere7.0。3在PowerBuilder8.0集成环境下创建数据库的步骤如下:⑴单击Power工具栏的DBProfile按钮,打开DatabaseProfiles对话框。⑵在DatabaseProfiles对话框中展开ODBODBC列表项,在展开其下面的Utilities列表项。双击CreateASADatabase项,系统打开CreateASADatabase对话框。⑶在CreateASADatabase对话框中输入DatabaseName(如D:\Project\Project.db),其余均用默认值。单击OK按钮,系统开始创建数据库。PowerBuilder在创建数据库后,自动创建了ODBC数据源Project和描述文件Project,并自动连接上数据库。如果用SybaseCentral创建ASA数据库,还需要手工创建ODBC数据源和描述文件。2.创建数据表本数据库包含5个数据表:⑴部门信息表(department)列名列标识数据类型宽度小数空值主键部门编码dept_idchar20NY部门名称dept_namechar200NN⑵人员信息表(personnel)列名列标识数据类型宽度小数空值主键编码p_idchar40NY姓名namechar100NN性别sexchar10YN⑶项目信息表(project)列名列标识数据类型宽度小数空值主键项目编码pro_idchar40NY项目名称pro_namechar400NNoutlaydouble80YN⑷项目参与人员表(member)列名列标识数据类型宽度小数空值主键项目编码pro_idchar40NY编码p_idchar40NY⑸系统用户信息表(users)列名列标识数据类型宽度小数空值主键用户编码user_idchar100NY用户姓名user_namechar100NN密码passwdchar60YN创建表的外键和索引以创建表personnel的外键为例,介绍创建外键的步骤。4⑴在数据库画板的Object视图中,找到并双击打开personnel表,右击ForeignKeys,打开弹出式菜单。⑵在弹出式菜单中选择NewForeignKey菜单项,进入ForeignKey视图。在Gereral标签页中设置外键名称和本表外键对应字段;在PrimaryKey标签页中设置外键的对应表;在Rules标签页中设置外键连接规则。其创建的外键为:fk_dept_id,外键字段为p_id,对应department表的主键dept_id⑶设置完成后,单击工具栏上的Save按钮,保存所创建的外键。表member的两个外键,分别为:fk_member_proid:外键字段为pro_id,对应project表的主键pro_idfk_member_pid:外键字段为p_id,对应表personnel的主键p_id3.创建编辑风格在数据库画板中创建编辑风格,并设定表中某列的编辑风格,这样在日后生成数据窗口时,该列将使用在数据画板中定义的编辑风格,从而可以节省设计的时间和工作量。本实例需要创建三个编辑风格,分别命名为es_department、es_project和es_personnel,分别用来显示部门数据、项目数据和开发人员数据。这三个编辑风格均使用下拉数据窗口样式,因此,在创建编辑风格之前,首先应创建三个数据窗口对象。创建dddw_department数据窗口对象该数据窗口的表现风格为Tabular,数据源为department表的所有列。在数据窗口画板下,把dept_id设为不可见。该数据窗口的布局如图所示。下面以创建es_department编辑风格为例,介绍具体操作步骤为:⑴在数据库画板下,打开扩展属性(ExtendedAttributes)视图,右击EditStyles项目,显示弹出式菜单。⑵在弹出式菜单中选择New菜单项,打开EditStyle对话框。⑶按照下图所示,输入各有关参数。5⑷输入完毕,单击OK按钮,返回数据库画板。三、创建用户对象、全局函数和祖先窗口为了减轻应用程序设计的工作量,以及使应用程序更容易维护,在进行系统开发时往往需要创建一些用户对象。本实例需要创建多个命令按钮用户对象和两个数据窗口用户对象,还需要创建一个用来对用户口令加密的全局函数,创建一个作为所有表单(Sheet)祖先的窗口。1.创建命令按钮用户对象为应用中常用的命令按钮创建用户对象,然后根据需要把这些按钮用户对象添加到窗口中,可以使应用界面保持一致,也便于日后维护。本实例需要创建8个按钮用户对象。这8个按钮用户对象的名称、属性和功能如下表所示。名称Text属性值功能uo_ok确定(&Y)确认当前操作uo_closse关闭(&C)关闭当前窗口uo_delete删除(&D)删除当前记录uo_edit编辑(&E)编辑当前记录uo_find查找(&F)打开查询窗口uo_new新增(&N)新增一条记录uo_refresh刷新(&R)刷新当前数据窗口uo_save保存(&S)保存数据下面以关闭按钮用户对象为例,介绍建立按钮用户对象的步骤。⑴单击Power工具栏上的New按钮,在打开的New对话框中选择PBObject标签页,然后选择StandardVisual图标,在单击OK按钮,打开SelectStantardVisualType对话框。⑵在对话框中选择Commandbutton列表项,然后单击OK按钮,打开用户对象画板。⑶在属性视图中设置有关属性,如下图所示:6⑷在脚本视图中编写该按钮clicked事件的脚本。“关闭”按钮的clicked事件脚本为:Close(Parent)⑸单击画板工具栏的Save按钮,保存用户对象,名字为uo_close。按照上述办法建立其它按钮用户对象。(除uo_close外,其它按钮不选中Cancel属性,而且不用编写事件脚本)。2.创建数据窗口用户对象本实例需要建立两个数据窗口用户对象。⑴建立uo_dw_freeform数据窗口用户对象单击Power工具栏上的New按钮,在打开的New对话框中选择PBObject标签页,然后选择StandardVisual图标,再单击OK按钮,打开SelectStandardVisualType对话框,选择datawindow列表项,然后单击OK按钮,打开用户对象画板。⑵定义外部全局变量。语句如下:Stringgs_userid,gs_pwd//用户ID,用户密码Booleangb_manager//管理者⑶建立用户自定义事件。首先定义API函数subroutinekeybd_event(uintbVk,uintbScan,longdwFlags,longdwExtraInfo)library'user32.dll'Shift_er自定义事件:事件ID为pbm_dwnkey。事件脚本如下://回车键及下箭头键下移焦点Ifkey=KeyEnter!OrKey=KeyDownArrow!Thenkeybd_event(9,0,0,0)//按下tabkeybd_event(9,0,2,0)//释放tabReturn0EndIf//上箭头键上移焦点IfKey=KeyUpArrow!Thenkeybd_event(16,0,0,0)//按下shiftkeybd_event(9,0,0,0)//按下tabkeybd_event(9,0,2,0)//释放tab7keybd_event(16,0,2,0)//释放shiftReturn1EndIf该事件用来实现在数据窗口中用回车键及上下箭头移动输入焦点。注:用回车键代替Tab键也可以用发送消息的方式来实现:Send(Handle(this),256,9,Long(0,0))Return1ue_delete自定义事件:事件ID为none。事件脚本如下://删除当前记录IFGetRow()0THENIFDeleteRow(0)=1THENMessageBox('提示','当前记录已被删除,请按保存按钮提交')ENDIFENDIF该事件用来删除数据窗口的当前记录。ue_refresh自定义事件:事件ID为none。事件脚本如下://刷新数据This.Retrieve()该事件用来重新检索数据窗口的数据(刷新显示)。ue_save自定义事件:事件ID为none。事件脚本如下://保存数据IFthis.Update()0THENCOMMITUSINGSQLCA;MessageBox('提示','数据已存盘')ELSEROLLBACKUSINGSQLCA;MessageBox('提示','数据无法存盘',Exclamation!)ENDIF该事件用来更新并提交数据窗口的当前记录。⑷编写dberror事件的脚本。MessageBox('数据库错误','错误代码:'+string(sqldbcode)+&'~r~n'+'错误信息:'+sqlerrtext