版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章数据库应用系统设计案例数据库编程技术11.1图书馆管理系统的设计本例以图书馆管理系统为例说明如何开发数据库应用程序。11.1.1需求分析图书馆是这样的部门,馆中收藏大量图书供读者借阅,其中图书可分成不同的类别,如自然科学类,社会科学类等;借阅者可分为老师和学生。不同的借阅者最多可借的书的数量和期限不同,如教师最多可借10本,期限为3个月,学生最多可借2本,期限为1个月,无论老师和学生借阅超期还要进行罚款处理。11.1.2概念结构设计图书馆管理系统的E-R图读者图书借阅日期mnpq金额日期罚款读者借书证号读者姓名性别是否有超期读者实体与其属性读者类别图书条形码号书名作者出版社图书实体与其属性出版日期书的类别图书编号借阅状态借阅次数11.1.3逻辑结构设计读者(借书证号,读者姓名,性别,读者类别,是否有超期)图书(条形码号,图书编号,书名,作者,出版社,出版日期,书的类别,借阅状态,借阅次数)借阅(借书证号,条形码号,借出日期,归还日期)罚款(借书证号,条形码号,处罚日期,超期天数,罚款金额)另外,为了保证系统的安全性,采用了登录的措施,用户名和密码存放在密码表中。密码表(用户名,密码)11.1.4规范化分析除[罚款]关系外,其它4个关系模式中主码是本模式的唯一决定因素,所以这4个关系模式都属于BCNF.但是在[罚款]关系中,罚款金额=日罚款额×超期天数,所以超期天数→罚款金额,而超期天数→(借书证号,条形码号,处罚日期),所以(借书证号,条形码号,处罚日期)→罚款金额,存在传递函数依赖,所以[罚款]关系属于2NF,存在冗余现象。读者往往既关心超期天数,又关心罚款金额,所以“罚款金额”是必要的冗余。
11.1.5在SQLServer2000中创建数据库图书表的结构字段名 数据类型 长度 条形码号 char 13 图书编号 char 10 书名 varchar 20 作者 varchar 20 出版社 varchar 50 出版日期 datetime 8 类别char 10 借阅状态 char 4 借阅次数 smallint 2 读者表的结构字段名 数据类型 长度 借书证号 char 10 读者姓名 varchar 20 性别 char 2 读者类别 char 1 是否有超期char 1 借阅表的结构字段名 数据类型 长度 借书证号 char 10 条形码号 char 13 借出日期 datetime 8 归还日期 datetime 8 罚款表的结构字段名 数据类型 长度 借书证号 char 10 条形码号 char 13 处罚日期 datetime 8 超期天数 int 4 罚款金额 money 8 密码表的结构字段名 数据类型 长度 用户名 char 10 密码 char 6 11.1.6用VB6.0开发应用程序1.图书馆管理系统的功能图书馆管理系统读者管理图书管理借阅管理罚款管理2.配置数据源用前面介绍的方法,利用ODBC数据源管理器配置一个连接到“图书馆”数据库的数据源,名为“图书管理”,
1)设计MDI主窗体。
3.设计各个窗体其中菜单的结构如下表所示 标题及位置名称标题及位置名称系统管理m_system图书流通m_flow…注册新用户m_rigister…借阅管理m_lend…退出系统m_exit…罚款管理m_punish基本信息m_basi报表m_report…读者信息管理m_reader…图书借阅排行m_lendp…读者信息浏览m_readerscan…借阅报表m_lend_report…读者信息查询m_readerquery…罚款报表m_punish_report…图书信息管理m_book关于m_about…图书信息查询m_bookquery2)设计登录窗体DimmiCountAsInteger'用于记录输入密码次数DimstrAsStringstr="select密码from密码表where用户名='"&Text1.Text&"'"Adodc1.RecordSource=strAdodc1.RefreshIfAdodc1.Recordset.EOF=TrueThenMsgBox"用户名错误,请重新输入",vbExlamation,"警告"Text1.Text=""Text1.SetFocusElseIfAdodc1.Recordset.Fields("密码")=Text2.TextThenMDIForm1.ShowUnloadMeElseMsgBox"密码错误,请重新输入",vbExlamation,"警告"Text2.Text=""Text2.SetFocusEndIfEndIfmiCount=miCount+1IfmiCount>=3ThenUnloadMe3)设计读者管理窗体(1)设计界面PrivateSubForm_Load()CmdFirst.Enabled=FalseCmdPre.Enabled=FalseCmdNext.Enabled=TrueCmdLast.Enabled=TrueCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdCancel.Enabled=FalseEndSubPrivateSubCmdAdd_Click()Adodc1.Recordset.AddNewCmdAdd.Enabled=FalseCmdDel.Enabled=FalseCmdOk.Enabled=TrueCmdCancel.Enabled=TrueEndSubPrivateSubCmdOk_Click()Adodc1.Recordset.UpdateCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdCancel.Enabled=FalseEndSubPrivateSubCmdDel_Click()x=MsgBox("确实要删除当前记录吗?",vbYesNo+vbQuestion)Ifx=vbYesThenAdodc1.Recordset.DeleteAdodc1.Recordset.MoveNextIfAdodc1.Recordset.EOF=TrueThenAdodc1.Recordset.MoveLastEndIfElseAdodc1.RefreshEndIfEndSubPrivateSubCmdCancel_Click()Adodc1.RefreshCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdCancel.Enabled=FalseEndSubPrivateSubCmdFirst_Click()Adodc1.Recordset.MoveFirstCmdFirst.Enabled=FalseCmdPre.Enabled=FalseCmdNext.Enabled=TrueCmdLast.Enabled=TrueEndSubPrivateSubCmdPre_Click()Adodc1.Recordset.MovePreviousCmdNext.Enabled=TrueCmdLast.Enabled=TrueIfAdodc1.Recordset.BOF=TrueThenAdodc1.Recordset.MoveFirstCmdFirst.Enabled=FalseCmdPre.Enabled=FalseEndIfEndSubPrivateSubCmdNext_Click()Adodc1.Recordset.MoveNextCmdFirst.Enabled=TrueCmdPre.Enabled=TrueIfAdodc1.Recordset.EOF=TrueThenAdodc1.Recordset.MoveLastCmdLast.Enabled=FalseCmdNext.Enabled=FalseEndIfEndSubPrivateSubCmdLast_Click()Adodc1.Recordset.MoveLastCmdFirst.Enabled=TrueCmdPre.Enabled=TrueCmdNext.Enabled=FalseCmdLast.Enabled=FalseEndSub4)设计读者查询窗体(1)设计界面其中Adodc1连接到读者表,在“记录源”选项卡中,选择命令类型。1-adCmdText,在“命令文本”文本框中输入SQL语句select*from读者表。(2)编写代码PrivateSubForm_Load()'窗体装载代码Combo1.AddItem"借书证号"Combo1.AddItem"读者姓名"Combo1.AddItem"是否有超期"Combo1.Text="借书证号"Text1.Text=""EndSubPrivateSubCommand1_Click()'“查询”按钮代码DimstrAsStringstr="select*from读者表where读者表."&Combo1.Text&"like'"&Text1.Text&"%'“Adodc1.RecordSource=strAdodc1.RefreshEndSub'“返回”按钮代码PrivateSubCommand2_Click()UnloadMeEndSub5)设计图书管理窗体、图书查询窗体图书管理与查询窗体与读者管理与查询窗体功能类似。不再赘述6)设计借阅管理窗体(1)设计界面借书时需输入读者的借书证号及书的条形码号,然后单击“借书”按钮,实现借书功能;还书时单击“还书”按钮,实现还书功能。借书时首先看读者是否有超期书,如果有则不允许再借书,然后根据读者是学生还是教师,判断所借书数是否达到最多,如果已达到最多,给出提示:“借书数量达到最多,不能再借!”,两个条件都允许,则可以借书,借书时先在图书表中根据条形码号写入该书的借阅状态值为“借出”,同时将“借阅次数”加1,然后在借阅表中添加借阅记录。单击“还书”铵钮,先还书,再判断是否超期。还书时,在借阅表中写上“归还日期”,同时在图书表中把该书的“借阅状态”值改为“在库”。如果超期,则显示罚款窗口,进行罚款处理。(2)代码参考教材:7)设计罚款管理窗体(1)设计窗体(2)代码参考教材8)设计图书借阅排行报表首先,在数据环境设计器中添加一个连接“图书管理”.然后添加三个命令对象“借阅管理”“罚款管理”“图书借阅排行”。设置“借阅管理”命令对象的SQL语句如下:SELECT读者表.借书证号,读者表.读者姓名,图书表.书名,借阅表.借出日期,借阅表.归还日期FROM读者表INNERJOIN借阅表ON读者表.借书证号=借阅表.借书证号INNERJOIN图书表ON借阅表.条形码号=图书表.条形码号设置“罚款管理”命令对象的SQL语句如下:SELECT读者表.借书证号,读者表.读者姓名,图书表.书名,罚款表.超期天数,罚款表.罚款金额,罚款表.处罚日期FROM读者表INNERJOIN罚款表ON读者表.借书证号=罚款表.借书证号INNERJOIN图书表ON罚款表.条形码号=图书表.条形码号。设置“图书借阅排行”语句如下:SELECT图书编号,书名,SUM(借阅次数)AS次数FROM图书表GROUPBY图书编号,书名ORDERBY次数DESC“图书借阅排行”报表运行结果11.2招聘管理系统的设计本例以招聘管理系统为例说明如何用ADO对象编写应用程序。11.2.1需求分析招聘管理用于管理企业招聘新员工的全过程,主要功能包括应聘人员登记、应聘人员初选、应聘人员面试和应聘人员录用。11.2.2概念结构设计经分析,此系统涉及到的主体只有应聘人员和评委两个实体集之间存在初选、面试和录用的联系,据此可画出此系统的E-R图1面试地点应聘人员初选录用是否录用开始录用日期m1p面试r1录用情况综合考核分业务能力评委综合评分初选状态外表形象领悟反应能力综合评分其中应聘人员与其属性关系如图所示应聘人员编号姓名性别外语水平电话应聘人员评委与其属性关系如图所示评委评委编号部门姓名11.2.3逻辑结构设计登记表(应聘人编号,姓名,性别,电话,外语水平)评委表(评委编号,评委姓名,部门)初选表(应聘人编号,计算机能力,业务能力,综合评分,初选状态),根据实际情况,去掉了评委编号属性。面试表(应聘人编号,初选评分,外表形象,领悟反应能力,综合评分,面试地点,面试人号,录用情况).面试时,往往要参考应聘人的初选评分,所以增加了一个“初选评分”属性。录用表(应聘人编号,面试分,笔试分,综合考核分,开始录用日期,是否录用)
为了保证系统的安全性,采用了登录的措施,用户名和密码存放在系统表中。系统表(姓名,密码)11.2.4规范化分析其中的“登记表”、“评委表”和“系统表”三个关系模式中的主码是本模式的唯一决定因素,所以这三个关系模式都属于BCNF;但在“初选表”中,综合评分=(计算机能力+业务能力)/2,“初选状态”也由“综合评分”来定,与“图书馆管理系统”案例中的分析类似。“初选表”属于2NF,其中的“综合评分”和“初选状态”两个属性值是冗余数据,但评委往往既关心“计算机能力”和“业务能力”,又关心“综合评分”和“初选状态”,所以“综合评分”和“初选状态”是必要的冗余。在“面试表”和“录用表”中也有类似的情况。
11.2.5在SQLServer2000中创建数据库各表格的结构如下:字段名
数据类型长度
姓名
char 10 密码
char 6 字段名
数据类型
长度
评委编号
char
4 评委姓名
varchar
20
部门
varcha
20 字段名
数据类型
长度
应聘人编号char
3 姓名
varchar
20 性别
char
2 电话
varcha
12 外语水平
char
4 评委表的结构字段名
数据类型
长度
应聘人编号
char
3 计算机能力
char
10 业务能力
smallint
2 综合评分
smallint
2 初选状态
char 6初选表的结构字段名
数据类型
长度
应聘人编号char
3初选评分
smallint
2 外表形象
smallint
2 领悟反应能力smallint
2 综合评分
smallint
2 面试地点
varchar
20 面试人号
char
4 录用情况
varchar
6 面试表的结构字段名
数据类型
长度
应聘人编号char
3 面试分
smallint
2 笔试分
smallint
2 综合考核分smallint
2 开始录用日期datetime
8 是否录用
char
2 表11.15录用表的结构1.招聘管理系统的功能模块招聘管理系统系统管理招聘管理信息查询打印报表2.配置数据源。利用ODBC数据源管理器配置一个连接到“招聘管理”数据库的数据源,名为zhpgl。3.设计各个窗体。1)设计主窗体。从主窗体中可以打开各个功能的窗口。菜单的结构标题及位置 名称 标题及位置 名称 文件 m_file …面试情况 m_qmianshi …登录 m_login …录用情况 m_qluyong …退出 m_exitt 统计报表 m_baobiao 数据管理 m_data …初选名单 m_pchuxuan …招聘管理 m_zhaopin…面试通过名单m_pmianshi 查询信息 m_chaxun…录用名单 m_pluyong …初选情况 m_qchuxuan 2)设计登录窗体(2)编写程序如下:在“通用”和“声明”栏内,编写代码如下:DimcnAsNewADODB.ConnectionDimrstAsNewADODB.RecordsetPrivateSubForm_Load()'窗体装载代码DimsAsStrings="DSN=zhpgl;uid=sa;pwd=sa"cn.Openscn.CursorLocation=adUseClientEndSubPrivateSubcmdOk_Click()'“确定”按钮单击事件的代码rst.Open"select*from系统表where姓名='"&Text1&"'",cnIfrst.BOFAndrst.EOFThenMsgBox"无效用户名,请重新输入。",vbCritical,"错误"Text1=""Text1.SetFocusElseIfText2=rst.Fields("密码")ThenMsgBox"登录成功!",vbInformationMDIzhaopin.m_zhaopin.Enabled=TrueMDIzhaopin.m_chaxun.Enabled=TrueMDIzhaopin.m_baobiao.Enabled=TrueMe.HideElseMsgBox"密码错误,请重新输入",vbCritical,"错误"Text2.Text=""Text2.SetFocusEndIfrst.CloseEndSub3)设计招聘管理窗体招聘管理窗体用SSTab控件实现登记管理、初选管理、面试管理和录用管理4个功能,在登记管理选项卡中有4个命令按扭:“添加”(Cmd0Add)、“确定”(Cmd0Ok)、“删除”(Cmd0Del)和“退出”(Cmd0Exit),分别实现添加记录、存入数据库、删除记录和退出本窗体的功能。在“初选”、“面试”和“录用”选项卡中都有“导入数据”、“确定”和“退出”4个命令按钮,分别实现从其他表中导入数据、存入数据库和退出本窗体的功能。例如,在“初选”选项卡中单击“导入数据”(Cmd1Import)命令按钮就从登记表中把登记人员的编号导入初选表中来,单击“确定”(Cmd1Ok)命令按钮就可以计算当前受聘者的“综合评分”和“初选状态”并存入数据库中。(2)编写程序在“通用”“声明”段内,声明如下对象变量:DimcnAsNewADODB.ConnectionDimrst0AsNewADODB.Recordset'定义用于存放登记表的记录集Dimrst1AsNewADODB.Recordset'定义用于存放初选表的记录集Dimrst2AsNewADODB.Recordset'定义用于存放面试表的记录集Dimrst3AsNewADODB.Recordset'定义用于存放录用表的记录集PrivateSubForm_Load()cn.Open"DSN=zhpgl;uid=sa;pwd=sa"cn.CursorLocation=adUseClientrst0.LockType=adLockPessimistic'允许更新记录集rst1.LockType=adLockPessimisticrst2.LockType=adLockPessimisticrst3.LockType=adLockPessimisticrst0.Open"select*from登记表",cnSetDataGrid1.DataSource=rst0'设置DataGrid1的数据源rst1.Open"select*from初选表",cnSetDataGrid2.DataSource=rst1Ifrst1.RecordCount<>0Then'如果初选表中有记录,就不能从登记表中导入数据Cmd1Import.Enabled=FalseEndIfrst2.Open"select*from面试表",cnSetDataGrid3.DataSource=rst2Ifrst2.RecordCount<>0ThenCmd2Import.Enabled=FalseEndIf
rst3.Open"select*from录用表",cnSetDataGrid4.DataSource=rst3Ifrst3.RecordCount<>0ThenCmd3Import.Enabled=FalseEndIfEndSubPrivateSubCmd0Add_Click()'“登记”选项卡中“添加”按钮单击事件的代码rst0.AddNewEndSubPrivateSubCmd0Ok_Click()'“登记”选项卡中“确定”按钮单击事件的代码rst0.Updaterst0.Sort="应聘人编号"EndSubPrivateSubCmd0Del_Click()'“登记”选项卡中“删除”按钮单击事件的代码x=MsgBox("确定要删除吗?",vbYesNoCancel+vbQuestion,"确认")Ifx=vbYesThenrst0.DeleteEndIfEndSubPrivateSubCmd1Import_Click()'“初选”选项卡中“导入数据”按钮单击事件的代码'把登记表中的应聘人编号转到初选表中来rst0.MoveFirstFori=1Torst0.RecordCountrst1.AddNewrst1.Fields("应聘人编号")=rst0.Fields("应聘人编号")rst0.MoveNextrst1.MoveNextNextiCmd1Import.Enabled=False'只能导一次数据EndSubPrivateSubCmd1Ok_Click()'“初选”选项卡中“确定”按钮单击事件的代码rst1.Fields("综合评分")=(Val(rst1.Fields("计算机能力"))+rst1.Fields("业务能力"))*0.5Ifrst1.Fields("综合评分")>=6Thenrst1.Fields("初选状态")="通过"Elserst1.Fields("初选状态")="未通过"EndIfrst1.Updaterst1.Sort="应聘人编号"EndSubPrivateSubCmd2Import_Click()'“面试”选项卡中“导入数据”按钮单击事件的代码'把初选表中通过的应聘人编号、初选评分转到面试表中来rst1.Closerst1.Open"select*from初选表where初选状态='通过'",cnrst1.MoveFirstFori=1Torst1.RecordCountrst2.AddNewrst2.Fields("应聘人编号")=rst1.Fields("应聘人编号")rst2.Fields("初选评分")=rst1.Fields("综合评分")rst1.MoveNextNextirst2.UpdateCmd2Import.Enabled=FalseEndSubPrivateSubCmd2Ok_Click()'“面试”选项卡中“确定”按钮单击事件的代码rst2.Fields("综合评分")=(rst2.Fields("初选评分")+rst2.Fields("外表形象")+rst2.Fields("领悟反应能力"))/3Ifrst2.Fields("综合评分")>=6Thenrst2.Fields("录用情况")="通过"Elserst2.Fields("录用情况")="未通过"EndIfrst2.Updaterst2.Sort="应聘人编号"rst2.MoveLastEndSubPrivateSubCmd3Import_Click()'“录用”选项卡中“导入数据”按钮单击事件的代码'把面试表中通过的应聘人编号、面试分转到录用表中来rst2.Closerst2.Open"select*from面试表where录用情况='通过'",cnrst2.MoveFirstFori=1Torst2.RecordCountrst3.AddNewrst3.Fields("应聘人编号")=rst2.Fields("应聘人编号")rst3.Fields("面试分")=rst2.Fields("综合评分")rst3.Fields("开始录用日期")=Daterst2.MoveNextNextiCmd3Import.Enabled=FalseEndSubPrivateSubCmd3Ok_Click()'“录用”选项卡中“确定”按钮单击事件的代码rst3.Fields("综合考核分")=(rst3.Fields("面试分")+rst3.Fields("笔试分"))/2Ifrst3.Fields("综合考核分")>=6Thenrst3.Fields("是否录用")="是"Elserst3.Fields("是否录用")="否"EndIfrst3.Updaterst3.Sort="应聘人编号"rst3.MoveLastEndSub'选项卡的单击事件过程代码如下PrivateSubSSTab1_Click(PreviousTabAsInteger)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋季开学第一课传染病防控健康知识三篇讲稿
- 2026事业单位工勤技能-湖南-湖南计算机信息处理员一级高级技师历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖南-湖南广播电视天线工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北食品检验工五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北有线广播电视机务员五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北保育员一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-海南-海南水土保持工二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-海南-海南医技工一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-浙江-浙江园林绿化工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-山西-山西水土保持工二级(技师)历年参考题库含答案详解3套试卷
- GB/T 48029-2026全谷物食品命名与标示要求
- 2026年宁波高新区机关各部门、事业单位及街道公开招聘30名编外人员笔试参考题库及答案详解
- 2026-2030中国冬瓜种植市场营销模式与投资战略研究研究报告
- 2026年宁夏高考物理试卷(含答案及解析)
- 小学语文教师业务知识能力测试考试试题及答案
- 2026年下半年幼儿园教师资格证《保教知识与能力》真题试卷
- 2026年公共卫生执业医师资格考试(第一单元)试卷真题(后附答案解析)
- 中医体质辨识评估流程
- 2026年摄像机械员技师考试试题
- 广东粤财投资控股有限公司2026春季校园招聘笔试历年典型考点题库附带答案详解
- 2026年4月18日衢州市属事业单位选调笔试真题及答案深度解析
评论
0/150
提交评论