




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 本文配套程序下载地址 : 无忧无虑毕设网 ()-大学生毕业设计站 ,免费毕业设计论文 ,无忧无虑毕设网 大学生毕业设计 ,出售各类毕业设计源码 ,论文 ,程序源码 ,网站源码 ,免费视频教程 ,我们将竭诚为您服务! 目录 前言 1 第一章 需求分析 2 1.1 需求概述 .2 1.2 需求分析及功能模块分析 .2 1.2.1 各模块功能 .3 1.2.2 系统流程图 . .3 1.2.3 图书查询流程 .4 1.3 系统 E-R 图 .5 1.4 数据字典 .7 第二章 数据库的建立 .8 2.1 后台数据库设计 . .8 2.2 数据库的建立 .8 第三章 前台软件设计 .12 3.1 软件的界面设计 .12 3.2 登陆窗体的设计 .13 3.3 主窗体界面设计 .16 3.4 新用户添加模块 .19 3.5 新书添加模块 .21 3.6 还书模块 .22 3.7 读者档案管理模块 .24 3.8 逾期清单 . .25 第四章 调试及测试分析 .26 4.1 软 件测试概述 .26 4.2 软件测试的目的 .26 4.3 软件测试的方法 .26 第五章 结论 . .28 参考文献 .29 南昌航空大学科技学院学士学位论文 1 致谢 . .30 附录 A.31 前 言 现在,科学技术的飞速发展把人类社会推向了一个崭新的时代 计算机网络 时代。这已是无可争议的事实; 计算机网络 对社会经济发展的巨大推动作用,使其与物质能源一起并列为现代社会的三大支柱,这已在全社会达到共识。随着对 计算机 作为一种资源来管理 的需求日益加强, 计算机 研究领域出现了一种新的管理思想和模式 计算机信息 管理。 随着科学技术的不断提高 ,计算机科学日渐成熟 ,其强大的功能已为人们深刻认识 ,它已进入人类社会的各个领域并发挥着越来越重要的作用 。传统 的管理已经不能适应时代的发展,尤其是它浪费了大量的人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的 图书 管理 系统 所取代。为了注重时间和效率 ,实现自动化 , 我们的图书馆应该开发一个图书管理系统 的读者与图书管理子系统 。 作为数据库系统的开发, c+ builder 6 是一个非常理想 的 选择。 c+ builder 6 因简单易学、功能强大、编译速度快而从众多的软件开发工具中脱颖而出。它提供了灵活的可视化设计工具,将可视化界面与面向对象技术完善、紧密地结合起来,并封装了 Windows 编程的复杂性。程序的规模小到简单的个人数据库应用,大到复杂的 高校 的多层次分布式系统,都可以使用 c+ builder 6 进行开发,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。尤其是 c+ builder 6 对数据库应用的强大支持,大大提高了 数据库应用软件开发的效率,缩短了开发周期,深受广大数据库应用程序设计人员的喜爱。 c+ builder 6 为数据库应用开发人员提供了丰富的数据库开发组件,使数据库应用开发功能更强大,控制更灵活,编译后的程序运行速度更快。 南昌航空大学科技学院学士学位论文 2 第一章 需求分析 1.1 需求概述 图书数据的组织图书管理系统的需求主要体现在以下几个方面: (1) 改善图书各子库之间图书数据的组织方式,满足学生对图书数据的不同查询处理和信息资源共享的需求,使图书各子库之间实现更好的分工。 (2) 提高图书各子库自动化水平、提 高工作效率、减少劳动强度、提高图书馆管理机制、能更好地管理图书、能更好地为学生服务。 (3) 系统的建立应本着先进的管理技术,实用性强,除了能方便地实现增加、查询、汇总、打印等功能外,更要求系统的稳定、可靠、高效及可维护,最终实现更好地组织数据、满足学生需求。 1.2 需求分析及功能模块分析 图书管理系统的读者与图书管理子系统主要有读者类型设置、读者档案管理、过期续证管理、图书类型设置、图书征订、图书验收这六大功能模块 南昌航空大学科技学院学士学位论文 3 图 1.1 图书管理系统功能模块框图 1.2.1 各功能模块功能 读者类型设置 -对借阅图书的用户,如学生、教师等进行分类管理。 读者档案管理 -对读者的资料进行录入、查询以及维护。 过期续证管理 -对用户借阅过期的图书进行续证管理。 图书类型设置 -对图书的种类资料进行添加、修改、删除等操作。 图书征订 -对图书购入的流通去向进行登记跟踪。 图书验收 -对借阅用户的归还的时间和日期进行登记注册 1.2.2 系统流程图 图书管理系统的流程图所示。 图书管理系统 读者管理子系统 图书管理子系统 读者类别设置 读者档案设置 图书管理 流通管理 图书类别设置 图书档案管理 图 书 征 订 图 书 归 还 逾 期 清 单 南昌航空大学科技学院学士学位论文 4 图 1.2.1 图书管理系统流程图 1.2.3 图书查询流程 如图所示: 南昌航空大学科技学院学士学位论文 5 图 1.2.2 图书查询流程图 1.3 系统 E-R 图 1.3.1 读者实体 E-R 图 读者 南昌航空大学科技学院学士学位论文 6 图 1.3.1 读者实体 E-R 图 1.3.2 图书实体 E-R 图 图 1.3.2 图书实体 E-R 图 1.3.3 图书管理子系统 初步 E-R 图: 图书 书 号 书 名 作 者 藏 处 书 价 出版社 出版日期 版次 类别 状态 名字 系别 标志 年龄 性别 南昌航空大学科技学院学士学位论文 7 n 1 n 1 借书日期 1 还书日期 1 图 1.3.3 图书管理子系统 E-R 图 1.3.4 总体 E-R 图 图 1.3.4 总体的 E-R 图 1.4 数据字典 书刊管理子系统 用户 图书 借阅 1 n 用户 图书 1 n 还书 合法用户 图书 借阅 注册 归还 读者 南昌航空大学科技学院学士学位论文 8 字段中文名称 字段名 类型 长度 说明 编号 BOOK_NO C 16 全馆书刊的统一编号,可作为识别标志 书名 BOOK_NAME C 50 书刊名称 作者 WRI_NAME C 10 作者的姓名 出版社 PUB_HOUSE C 50 出版社的名称 出版日期 PUB_DATE D 本版的出版日期 版次 PUB_TIMES I 4 类别 BOOK_VAR C 20 按本馆图书的分类方法分类 借阅者 REA_NO C 8 读者的标志号 库存地点 SAVE_PLACE I 16 读者管理子系统 读者信息字典 字段中文名称 字段名 类型 长度 说明 姓名 NAME C 8 读者姓名 ID REA_NO C 8 读者 ID 号 性别 SEX C 2 年龄 AGE I 2 系别 DEPART C 20 读者所属系别 借阅信息字典 字段中文名称 字段名 类型 长度 说明 ID REA_NO C 8 读者 ID 号 借书本数 Book_num I 8 借书总册数 借书信息 书 编号 Book_no C 16 书的编号 借书日期 BOOK_DATE C 16 第二章 数据库的建立 2.1、后台数据库设计 后台数据库设计是软件开发比较重要的一部分,它直接影响了软件界面的设南昌航空大学科技学院学士学位论文 9 计。所以,后台数据库的合理搭建能够帮助我们更轻松的进行软件设计 2.2 数据库的建立 数据库建表 图 2.1 数据库根目录 为图书管理信息数据库建立 3 张基本表,它们分别是用户表、图书表、借阅表。 图 2.2 数据库表 用户表的字段设计: 南昌航空大学科技学院学士学位论文 10 图 2.3 数据库用户表 (其中用户编号字段做为用户标识) 图书表的字段设计 : 图 2.4 数据库图书表 借阅表的字段设计: 图 2.5 数据库借阅表 为了达到数据库的基本要求(数据完整性),对用户表的性别进行 CEHCKIN约束,对用户表、图书表和借阅表的主键进行外键约束。 南昌航空大学科技学院学士学位论文 11 图 2.6 用户表 CEHCKIN 约束 图 2.7 借阅与图书外键约束 南昌航空大学科技学院学士学位论文 12 图 2.8 借阅与用户外键约束 第三章 前台软件设计 南昌航空大学科技学院学士学位论文 13 3.1 软件的界面设计 软件的模块较多,界面设计基本没有用到别的软件,采用 C+Builder 自主的控件组合设置完成,有些图片采用 XP 自带的画图软件制作。 主界面示例: 图 3.1 图书管理系统主窗体 第四章 软件 单元模块设计 4.1、 登陆模块 图 3.1 图书管理系统的主窗体 3.2 登陆窗体的 设计 登陆界面设计: 南昌航空大学科技学院学士学位论文 14 图 3.2 登陆界面 控件设计及部分代码: 登陆界面由 3 个 Label 控件、 1 个 ADOQuery 控件、 2 个 Edit 控件、2 个 BitButton 控件组成。 Label 用做标识,提示用户如何使用软件; Image 控件为了使软件界面更加友好; ADOQuery 控件作为连接数据库的纽带; Edit 控件的作用是接收用户输入; BitButton 控件的作用是登陆和离开系统。 ADOQuery 控件不需要写代码,因为登陆界面只是为了从数据库中检查输入帐号的 信息, Borland 已经集成了这些功能,修改 ADO Query 的属性ConnectinString 为 Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=图书管理信息数据库 ;Data Source=.: 南昌航空大学科技学院学士学位论文 15 图 3.3 ADOQuery 设置图 和 SQL 属性为: 图 3.4 SQL 属性 完成从数据库的用户表检索登陆的信息。 登陆界面的主要代码集中在 ”登陆 ”按钮上,下面是“登陆”按钮的核心代码: if (!ADOQuery1-Active) ADOQuery1-Active = true;/如果 ADOQuery 没有启用,启用它 if (uid = | pwd = ) ShowMessage(请输入正确的用户名和密码 !); /输入的用户名和密码不能为空 else ADOQuery1-First();/将 ADOQuery 的记录指针移动带表头 南昌航空大学科技学院学士学位论文 16 for (;iRecordCount;i+)/循环 if (uid=ADOQuery1-FieldByName(帐号 )-AsString) /如果输入帐号等于数据库帐号 if(ADOQuery1-FieldByName(密码 )-AsString=pwd) /输入密码等于数据库密码 3.3 主窗体模 块界面设计: 南昌航空大学科技学院学士学位论文 17 图 3.5 主窗体模块界面图 主窗体主要由 1 个 Menu 控件、 1 个 Label 控件、 1 个 ADOQuery 控件、 1 个DataSource 控件、 1 个 DBGrid 控件和 1 个 DBNavigate 控件组成。 Menu 控件用于菜单的设计、 ADOQuery 控件连接数据库、 Label 控件用来显示登陆角色、 DataSource 控件作为数据源池、 DBGrid 用来显示数据源中数据、DBNavigate 对 DBGrid 进行一些基本操作。 菜单的设计如图: 南昌航空大学科技学院学士学位论文 18 图 3.6 菜单设计图 数据的连接和显示: 将 ADOQuery1 的 ConnectionString 属 性 改 为 :“ Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=图书管理信息数据库 ;Data Source=.”连接上后台数据库,然后将 DataSource 的 DataSet 属性选择为 ADOQuery1,把 DBGrid 的DataSource 改 为 DataSource1 , 同 样 把 DBNavigater 的 DataSource 改为DataSource1。这样数据库和软件关联上了。 主窗体的部分代码: 为了在主窗体显示时让用户看不见 DBGrid 等控件,并且对登陆的用户角色有所表示,在 Form2(主窗体 )的 OnShow 中做了一些初始化,其代码详见程序清单。 剩下的代码都是对 Menu 的操作,点击按钮后打开新窗口或执行查询功能,(代码比较多,可以参看图 2-13 可以知道下面的代码段是哪个菜单的响应) 代码很多地方都使用到了另外的窗体,所以应该在 Form2 的源文件加上头文件。 其中的和主窗体连接的各个子窗体的代码大致相同,主要集中在下面的核心代码南昌航空大学科技学院学士学位论文 19 上: ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select 用户 .帐号 ,用户 .用户名 ,借阅 .借阅书号 ,图书 .书名 ,借阅日期 ,应还日期 from 用户 ,图书 ,借阅 where 帐号 = + m_id + and 借阅 .帐 号 = 用户 .帐号 and 图书 .书号 = 借阅 .借阅书号 ); /这是一句 SQL 代码 由于 Form2 是登陆窗体和其他窗体的纽带,经常要引用到其他的单元、窗体,所以,用到什么窗体就包含该窗体的头文件。 南昌航空大学科技学院学士学位论文 20 3.4 新用户添加模块 新用户添加模块界面设计: 图 3.7 新用户添加模块界面 新用户添加由一些 Label 控件和 Edit 控件组成 ,作为接收用户输入, ”*”号其实也是 Label 控件,为了数据的校验,性别和数据库权限是 ComboBox 控件,由于在数据库中约束 性别为男或女,所以这里将起下拉列表改为这两项,数据库权限改为普通和管理员两种。 ADOQuery1 控件的设置与前面的设置相同, 2 个 BitButton 控件的 Caption属性修改如图示。 南昌航空大学科技学院学士学位论文 21 此模块的代码基本在提交新用户按钮中实现,其核心代码代码如下:DOQuery1-SQL-Add(insert into 用户 values(+Edit1-Text+,+Edit3-Text+,+Edit2-Text+,+ComboBox1-Text+,+Edit4-Text+,+Edit5-Text+,+Edit6-Text+,+Edit7-Text+,+ComboBox2-Text+); /这是一句 SQL 代码,将起添加进 ADO if (ADOQuery1-ExecSQL()/如果代码执行成功 ShowMessage(您已经成功的注册为用户 );/显示注册成功 ADOQuery1-Close();/关闭 ADO 南昌航空大学科技学院学士学位论文 22 3.5 新书添加模块 新书添加模块界面设计: 图 3.8 新书添加模块界面 新书入库模块由一些 Label 控件和 Edit 控件所组成,大致的方法和属性和新用户模块基本相同。为了方便用户,用户在对 ComboBox1 进行类别选择后,书号边的 Edit6 控件前会自动为书号修改前缀,实现代码如下: ADO 控件也是一样连接到数据库,只是 BitButton 的 Caption 属性有所变化。 代码也基本集中在提交新书按钮上,代码如下: 南昌航空大学科技学院学士学位论文 23 ADOQuery1-SQL-Add(select * from 图书 ); if(ADOQuery1-FieldByName( 书号)-AsString!=(Label8-Caption+Edit6-Text) ADOQuery1-SQL-Add(insert into 图书 values(+Label8-Caption+Edit6-Text+,+Edit1-Text+,+Edit2-Text+,+ComboBox1-Text+,+Edit4-Text+,:a);/一句 SQL 代码,添加图书用的,参数a 的值在后面给 ADOQuery1-Parameters-ParamByName(a)-Value = Edit5-Text;/给a 赋值 3.6 还书模块 还书模块的界面设计 : 图 3.9 还书模块的界面 南昌航空大学科技学院学士学位论文 24 还书模块由 1 个 Image 控件 ,2 个 Label 控件 ,4 个 BitButton 控件 ,2DataSource 控件 ,3 个 ADOQuery 控件 ,2 个 DBGrid 控件 。 DataSource 控件用来和 ADOQuery1 和 ADOQuery2 连接 ,分别做为检索帐号和书号用,而 ADOQuery3 用来实现借阅功能。两个 DBGrid 控件分别与DataSource1 和 DataSource2 连接,显示检索信息,这与借书模块基本相同。 还书模块主要体现在俩个检索按钮和还书按钮上, 其中帐号检索的核心代码如下: ADOQuery1-SQL-Add(select 用户名 ,数据库身份 as 权限 from 用户 where 帐号 = +Edit1-Text+) 检索书号的代码和账号检索的大致相似: ADOQuery2-SQL-Add(select 书号 ,书名 ,出版社 from 图书 where 书号 = +Edit2-Text+); 还书按钮代码相对复杂: ADOQuery1-SQL-Add(select 用户名 ,数据库身份 as 权限 from 用户 where 帐号 = +Edit1-Text+); ADOQuery2-SQL-Add(select 书号 ,书名 ,出版社 from 图书 where 书号 = +Edit2-Text+); ADOQuery3-SQL-Add(select * from 借阅 where 帐号 = :a and 借阅书号 = :b); ADOQuery3-SQL-Add(delete from 借阅 where 帐号 = :a and 借阅书号 = :b);/删除借阅的信息 南昌航空大学科技学院学士学位论文 25 3.7 读者档案管理模块 读者档案管理模块设计: 图 3.10 读者档案管理界面 读者档案管理模块是由一些 Edit、 BitButton、 label,2 个 DataSource 控件、 1个 DBGrid、 4 个 ComboBox 等一些控件组成 . 其中 DataSource1、 DataSource2 分别在其 DateSet 中与 Table1、 Table1 进行连接。 在 DBGrid 的事件栏里与 DataSource1 连接。 读者档案管理模块的主要代码集中于几个日期的控件上,其中由以出生日期为代表,其核心代码如下: if(EditDBEdit7-Text.Length()=0) dtPickerBirthday-Date = dtPickerBirthday-Date.CurrentDate(); 其余如登记日期、有限日期等与出生日期的核心代码大致相似,在此不赘述详见程序清单。 南昌航空大学科技学院学士学位论文 26 3.8 逾期清单模块 逾期清单模块设计: 图 3.11 逾期清单界面 逾期清单模块是由一些 Label、 Edit、 Table,另外还有 DBGrid、 BitButton、Datasource 控件组成。 其中在 Datasource 控件的 Dataset 属性栏里和 Table1 关联起来。 逾期清单的主要代码集中在搜索按键上,其核心代码如下: if(szFilter.Length()0) szFilter += and ; szFilter += m_szFilter; 南昌航空大学科技学院学士学位论文 27 第四章 调试及测试分析 4.1 软件测试概述 软件测试是在软件交付用户使用或投入运行前 ,对软件需求规格说明、设计 规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现 错误而执行程序的过程。软件测试在软件生命周期中横跨两个阶段 :通常在编写 出每一个模块之后就需要对它做必要的测试 (称为单元测试 )。编码和单元测试属 于软件生命周期中的同一个阶段。在结束这个阶段后对软件系统还要进行各种综 合测试,如集成测试、系统测试、性能测试和配置测试等,这是软件生命周期的 另一个独立阶段,即测试阶段。 4.2 软件测试的目的 1. 测试的最终目的是为了避免错误的发生,确保应用程序能够正常高效 的运 2. 好的测试用例在于发现至今未发现的错误 ; 3. 成功的测试是发现了至今未发现的错误的测试 ; 4. 好的测试工程师应该做到不仅发现问题,还能够帮助开发人员分析问题。 4.3 软件测试的方法 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能, 通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打 开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接 口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序 电子科技大学硕士学位论文 是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息 (如数据库或文件 )的完整性。黑盒测试方法主要有等价类划分、边值分析、因一果图、错误推测等,主要用于软件确认测试。“黑盒”法着南昌航空大学科技学院学士学位论文 28 眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工 作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能, 白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证 “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒” 法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检 查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使 每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序 违反了 设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中 因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。 南昌航空大学科技学院学士学位论文 29 第五章 结论 在方芳老师的指导下。本次设计,就要画上一个句号了。可是,对我来说, 这次设计的本身所产生的影响,还远远没有结束,我从本次设计中学到了许多课 本上没有的知识。在这几个月中。通过自己的学习和努力 :通过各位老师的指导 和教育,使我不仅仅在知识水平和解决实际问题的能力上有了很大的提高。还从 思想的深处体 会到,要把自己的所学变成现实时所将面对的种种难题。 通过本次课程设计,本人对 C+Builder 有了更进一步的了解。通过了本次的设计,我们能够更加熟悉的运用 C+Builder,对于我们了解和研究软件开 发有了很大的帮助,为我们以后的学习打下了较好的基础。但是由于水平的限制使本系统有一定缺陷,功能不强,在本次课程设计中也出现不少的问题。由于对C+Builder 的实际操作还不是很熟悉,因此在设计过程中有些地方我们仍然还不是很明确。还有另外一个较麻烦的问题就是数据库与程序文件的加壳和安全问题。 总的来说,本次 的课程设计还算成功。尽管有些小细节不能很好的运行但是 设计的大方向是正确的,我们编写程序的思想还算比较清晰,这对于我们以后的 系统设计中有很大的帮助。在此,我们再次对方芳老师表示衷心的感谢 !也对 培养我们的南昌航空大学表示最忠心的谢意 ! 南昌航空大学科技学院学士学位论文 30 参考文献 1. 宋静 . 学生信息管理系统设计与实现 J. 计算机与数 字工程 ,2008( 8) 2.陆卫忠、刘文亮 ,C+ Builder6 程序设计教程 M,北京 :科学出版社 ,2005 3.侯识忠 ,数据结构算法 C+ Builder6.0 程序集 M,北京 :中国水利水电出版 4.李进 .软件工程导论 M, 北京 :清华大学出版社, 1998.1 5.郭盈发 ,张红娟 .数据库原理 M.西安 :西安电子科技大学 ,2002 6. 美 O Neil, P. DATABASE Principles Programming and Performance . ( second edition1) M北京 : 高等教育出版社 , 2001 7.陈禹 .管理信息系统 M.北京 :中国人民大学出版社 , 1998 8. 袁永林、宁义 .数据库管理与开发 M.北京 :清华大学出版社 2007 9. 苗雪兰 .数据库系统原理及应用教程 J.机械工业出版社 ,2007 年 10. 美 Mcleod . Management Information SystemM.北京 :中国人民大学出版社, 1998 南昌航空大学科技学院学士学位论文 31 致谢 经过几个月的 构思与设计,在指导老师方老师的精心指导和安排下,本系统 已经设计完毕。其使用功能基本符合在实际工作的需要,具有一定的实用性。但 是由于时间比较仓促,加上本人软件设计经验的不足。因此,在分析问题、解决 问题时显得不够严密、完善,还需要在以后的工作中不断地改进和完善。 在这次的设计过程中,让我深深地体现到进行软件开发不是一件简单的事情, 它需要设计者具有全面的专业知识、填密的思维、严谨的工作态度以及较高的分 析问题、解决问题的能力,而我在很多方面还有欠缺。最后,我要衷心感谢老师 在我的设计过程中给予我的极大帮助 ,使我能够及时、顺利地完成此次的毕业设 计。同时,也要感谢我的指导老师方老师在本系统的设计过程中给予我的无微不 至的支持和帮助。 最后,感谢南昌航空大学、感谢科技学院对我的培养,让我圆满完成研究 生学业,谢谢 ! 南昌航空大学科技学院学士学位论文 32 附录 A 程序清单 void _fastcall TForm1:BitBtn2Click(TObject *Sender) Form1-Close();/关闭登陆窗口 登陆界面的主要代码集中在 ”登陆 ”按钮上: void _fastcall TForm1:BitBtn1Click(TObject *Sender) try String uid,pwd;/定义了 2 个字符串变量用做接收用户输入信息 BOOL m_logon=false;/定义一个布尔变量判断是否允许登陆 int i=1;/做后面的循环判断用 uid = Edit1-Text;/提取用户帐号存入 uid 变量 pwd = Edit2-Text;/提取用户密码存入 pwd 变量 if (!ADOQuery1-Active) ADOQuery1-Active = true;/如果 ADOQuery 没有启用,启用它 if (uid = | pwd = ) ShowMessage(请输入正确的用户名和密码 !); /输入的用户名和密码不能为空 else ADOQuery1-First();/将 ADOQuery 的记录指针移动带表头 for (;iRecordCount;i+)/循环 if (uid=ADOQuery1-FieldByName(帐号 )-AsString) /如果输入帐号等于数据库帐号 if(ADOQuery1-FieldByName(密码 )-AsString=pwd) /输入密码等于数据库密码 南昌航空大学科技学院学士学位论文 33 ShowMessage(登陆成功 !);/登陆成功 m_logon = true;/置允许登陆为 真 m_name = ADOQuery1-FieldByName(用户名 )-AsString; m_grand = ADOQuery1-FieldByName( 数据库身份)-AsString; m_id = ADOQuery1-FieldByName(帐号 )-AsString; /上面的 3 个 m_变量是全局变量,获取当前登陆的用户帐号,用户名 /和数据库权限 break;/如果验证帐号成功就退出循环 else ShowMessage(密码错误 !);/密码错误 break;/退出循环 else ADOQuery1-Next();/帐号不匹配就将记录指针 +1,再判断 if(i=ADOQuery1-RecordCount) ShowMessage(帐号或密码错误 !); /如果全查完了还没有匹配记录,则帐号错误 if (m_logon = true)/如果允许登陆 ADOQuery1-Close();/节省资源关闭 ADO Form2-Show();/显示软件主窗体 Form1-Hide();/隐藏登陆窗体 南昌航空大学科技学院学士学位论文 34 catch(Exception &e)/接收错误 ShowMessage(e.Message);/显示错误信息 / 下面的是全局变量的定义,全局变量必须在在登陆窗口的 H 头文件和 CPP 中都定义才能使用,使用时只需要包含定义全局变量的窗体头文件就可以了: 头文件代码: #include #include #include /- class TForm1 : public TForm 。 /省略了部分代码 /- extern PACKAGE TForm1 *Form1; extern AnsiString m_name,m_grand,m_id;/定义全局变量的地方 /- #endif 源文件定义: /- #include 南昌航空大学科技学院学士学位论文 35 #pragma hdrstop #include Unit1.h #include Unit2.h/由于要使用主窗体 Form2,所以包含其头文件 /- #pragma package(smart_init) #pragma resource *.dfm TForm1 *Form1; AnsiString m_name,m_grand,m_id;/定义全局变量 /- /后面是实现代码,省略。 void _fastcall TForm2:FormShow(TObject *Sender) if (m_grand = 管理员 )/m_grand 是全局变量在 unit1.h 中定义 ShowMessage(您将以管理员身份登陆本系统,您没有权限限制,请小心使用 ); /显示用户登陆身份 Form2-N7-Enabled = true;/让 N7 菜单有效 Form2-N2-Enabled = true; Form2-N4-Enabled = true; /以上都去掉对菜单的限制,达到权限无限制 else ShowMessage(您将以会员身份登陆本系统,您有权限制,无法进行图书,用户的管理 ); Form2-N7-Enabled = false; Form2-N2-Enabled = false; Form2-N4-Enabled = false; /以上限制了软件的部分功能,达到权限限制 南昌航空大学科技学院学士学位论文 36 Label1-Caption = 当前登陆帐户的信息:用户名 :+m_name+ 权限 :+m_grand; /动态修改 Label1 的 Caption 属性 由于 Form2 是主窗体,我们要求登陆后关闭 Form1 能直接退出程序,于是在 Form2 的 OnClose 响应中写: void _fastcall TForm2:FormClose(TObject *Sender, TCloseAction &Action) Form1-Close(); 剩下的代码都是对 Menu 的操作,点击按钮后打开新窗口或执行查询功能,代码如下:(代码比较多,可以参看图 4-5 可以知道下面的代码段是哪个菜单的响应) void _fastcall TForm2:N18Click(TObject *Sender) /点击退出系统菜单时触发 Form1-Close();/退出程序 /- void _fastcall TForm2:N16Click(TObject *Sender)/点击注销菜单时触发 Form1-Edit1-Clear();/清空 Form1 的 Edit1 控件内容 Form1-Edit2-Clear();/清空 Form1 的 Edit2 控件内容 Form2-N7-Checked = false; Form2-N6-Checked = false; Form2-N11-Checked = false; /把带复选标记的菜单都初始化 Form2-DBGrid1-Visible = false;/把 DBGrid 变为不可视 Form2-Hide();/Form2 隐藏 Form1-Show();/Form1 显示 Form1-Edit1-SetFocus();/Form1 的 Edit1 获得输入焦点 /- 南昌航空大学科技学院学士学位论文 37 void _fastcall TForm2:N4Click(TObject *Sender)/点击新用户注册菜单时触发 Form3-ShowModal();/Form3 以模态对话框方式显示 /代码很多地方都使用到了另外的窗体,所以应该在 Form2 的源文件加上头文件包含 /- void _fastcall TForm2:N7Click(TObject *Sender)/点击读者档案管理菜单时触发 if(N7-Checked)/如果 N7 已经选中 ADOQuery1-Close();/关闭 ADOQuery1,节省系统资源 DBGrid1-Visible=false;/关闭 DBGrid1 显示 DBNavigator1-Visible = false;/关闭 DBNavigater1 显示 N7-Checked = false;/去掉 N7 选择 else Form2-N7-Checked = false;/ Form2-N6-Checked = false;/ Form2-N11-Checked = false;/ /上面 3 句做一个初始化工作,让软件在同一个时间只能有一个菜单被设置选择标记 ADOQuery1-Close();/关闭 ADO ADOQuery1-SQL-Clear();/清空 ADO 的 SQL 代码 ADOQuery1-SQL-Add(select * from 用户 );/加如 SQL 代码 ADOQuery1-Open();/激活 ADO DBGrid1-Visible=true;/显示 DBGrid1 DBNavigator1-Visible = true;/显示 DBNavigater1 DBNavigator1-Enabled = true; 南昌航空大学科技学院学士学位论文 38 /让 DBNavigater1 可用,后面有地方需要不可用 DBNavigater1 N7-Checked = true;/设置 N7 选中 /- void _fastcall TForm2:N8Click(TObject *Sender)/点击新图书入库菜单时触发 Form4-ShowModal();/让 Form4 以模态对话框方式显示 /- void _fastcall TForm2:N11Click(TObject *Sender)/点击图书档案管理菜单时触发 if(N11-Checked) ADOQuery1-Close(); DBGrid1-Visible=false; DBNavigator1-Visible = false; N11-Checked = false; else Form2-N7-Checked = false; Form2-N6-Checked = false; Form2-N11-Checked = false; ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select * FROM 图书 ); ADOQuery1-Open(); DBGrid1-Visible=true; DBNavigator1-Visible = true; 南昌航空大学科技学院学士学位论文 39 DBNavigator1-Enabled = true; N11-Checked = true; /上面代码的意思和用户管理的差不多 /- void _fastcall TForm2:N12Click(TObject *Sender)/点击图书借阅菜单时触发 Form5-ShowModal();/Form5 以模态对话框显示 /- void _fastcall TForm2:N14Click(TObject *Sender)/点击图书还书菜单时触发 Form6-ShowModal();/Form6 以模态对话框显示 /- void _fastcall TForm2:N6Click(TObject *Sender)/点击查询当前用户信息菜单时触发 if(N6-Checked) ADOQuery1-Close(); DBGrid1-Visible=false; DBNavigator1-Visible = false; N6-Checked = false; else Form2-N7-Checked = false; Form2-N6-Checked = false; Form2-N11-Checked = false; ADOQuery1-Close(); 南昌航空大学科技学院学士学位论文 40 ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select 用户 .帐号 ,用户 .用户名 ,借阅 .借阅书号 ,图书 .书名 ,借阅日期 ,应还日期 from 用户 ,图书 ,借阅 where 帐号 = + m_id + and 借阅 .帐号 = 用户 .帐号 and 图书 .书号 = 借阅 .借阅书号 ); /这是一句 SQL 代码 ADOQuery1-Open(); DBGrid1-Visible=true; DBNavigator1-Visible = true; DBNavigator1-Enabled = false; N6-Checked = true; /代码的意思和用户管理菜单的意思大致相同 /- void _fastcall TForm3:BitBtn1Click(TObject *Sender) try bool m_registEnable = false;/定义 BOOL 变量是否允许注册 ADOQuery1-Close();/关闭 ADO ADOQuery1-SQL-Clear();/清空 ADO 的 SQL ADOQuery1-SQL-Add(select * from 用户 );/设置 SQL ADOQuery1-Open();/打开 ADO ADOQuery1-First();/将 ADO 记录移动到表头 if(Edit1-Text = | Edit1-Text.Length()20)/Edit1 不能为空且长度不大于 20 ShowMessage(请输入正确的帐号 ); else if(Edit2-Text = ) ShowMessage(请输入您的用户名 );/Edit2 不能为空 else if(Edit3-Text = ) ShowMessage(请确定密码 输入 );/Edit3 不能为空 else if(ComboBox1-Text=) ShowMessage( 请选择性别);/ComboBox1 不能为空 南昌航空大学科技学院学士学位论文 41 else m_registEnable = true;/当必填资料全填了,允许注册 while(m_registEnable & !ADOQuery1-Eof)/允许注册且没有指到表尾 if(ADOQuery1-FieldByName(帐号 )-AsString!=Edit1-Text) /当当前记录帐号不等于 Edit1 的 Text 内容,指针 +1 ADOQuery1-Next(); else ShowMessage(对不起,您的帐号已经被注册了 ); /当当前帐号等于 Edit1 的内容时,显示已经注册 break;/退出循环 if(ADOQuery1-Eof)/当所有记录都找过了才会指到表尾 ADOQuery1-Close();/关闭 ADO ADOQuery1-SQL-Clear();/清空 ADO 的 SQL 代码 ADOQuery1-SQL-Add(insert into 用户 values(+Edit1-Text+,+Edit3-Text+,+Edit2-Text+,+ComboBox1-Text+,+Edit4-Text+,+Edit5-Text+,+Edit6-Text+,+Edit7-Text+,+ComboBox2-Text+); /这是一句 SQL 代码,将起添加进 ADO if (ADOQuery1-ExecSQL()/如果代码执行成功 ShowMessage(您已经成功的注册为 用户 );/显示注册成功 ADOQuery1-Close();/关闭 ADO catch(Exception &e)/接收异常 ShowMessage(e.Message);/异常处理 南昌航空大学科技学院学士学位论文 42 /- void _fastcall TForm3:BitBtn2Click(TObject *Sender) Form3-Close();/关闭用户注册窗体 /- void _fastcall TForm3:FormShow(TObject *Sender) /为了再次开启注册窗口时初始化一些信息 Edit1-Text = ;/Edit1 清空 Edit2-Text = ;/Edit2 清空 Edit3-Text = ;/Edit3 清空 Edit4-Text = ;/Edit4 清空 Edit5-Text = ;/Edit5 清空 Edit6-Text = ;/Edit6 清空 ComboBox1-ItemIndex = -1;/ ComboBox1 不选择 ComboBox2- ItemIndex = -1; / ComboBox2 不选择 /- void _fastcall TForm4:ComboBox1Change(TObject *Sender) if(ComboBox1-Text = 计算机 ) Label8-Caption = CN; else if(ComboBox1-Text = 经 济 ) Label8-Caption = EN; else if(ComboBox1-Text = 考试 ) Label8-Caption = KN; else if(ComboBox1-Text = 学习 ) Label8-Caption = SN; else if(ComboBox1-Text = 研究生类 ) Label8-Caption = YN; ADO 控件也是一样连接到数据库,只是 BitButton 的 Caption 属性有所变化。 代码也基本集中在提交新书按钮上,代码如下: void _fastcall TForm4:BitBtn1Click(TObject *Sender) 南昌航空大学科技学院学士学位论文 43 try bool m_bookEnable = false;/定义 BOOL类型变量是否允许加入新书 ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select * from 图书 ); ADOQuery1-Open(); ADOQuery1-First();/将 ADO 记录指针移动到表首 if(Edit1-Text = | Edit1-Text.Length()20) ShowMessage(请输入正确的书名 ); else if(Edit5-Text = ) ShowMessage(请输入书价 ); else if(Edit6-Text = ) ShowMessage(请输入书号 ); else if(ComboBox1-Text =) ShowMessage(请选择图书类别 ); else if(Edit4-Text.Length()20 | Edit5-Text.Length()20 | Edit6-Text.Length()10) ShowMessage(请仔细输入信息 ); else m_bookEnable = true;/当书的信息全部填写正确,允许注册 while(m_bookEnable & !ADOQuery1-Eof) if(ADOQuery1-FieldByName( 书号)-AsString!=(Label8-Caption+Edit6-Text) ADOQuery1-Next(); else ShowMessage(书号重复 了 ); break; /上面的语句判断是否有重复的书号 if(ADOQuery1-Eof)/没有就执行 ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(insert into 图书 南昌航空大学科技学院学士学位论文 44 values(+Label8-Caption+Edit6-Text+,+Edit1-Text+,+Edit2-Text+,+ComboBox1-Text+,+Edit4-Text+,:a);/一句 SQL 代码,添加图书用的,参数a 的值在后面给 ADOQuery1-Parameters-ParamByName(a)-Value = Edit5-Text;/给a 赋值 if (ADOQuery1-ExecSQL()/如 果 SQL 执行成功就显示成功对话框 ShowMessage(您已经成功的添加新书 ); ADOQuery1-Close();/关闭 ADO catch(Exception &e) ShowMessage(e.Message);/接收异常 /- void _fastcall TForm4:BitBtn2Click(TObject *Sender) Form4-Close(); /关闭 Form4 窗体 /- void _fastcall TForm4:FormShow(TObject *Sender)/为 Form4 再次开启做初始化 Edit1-Text = ; Edit2-Text = ; Edit4-Text = ; Edit5-Text = ; Edit6-Text = ; ComboBox1-ItemIndex = -1; 南昌航空大学科技学院学士学位论文 45 /- void _fastcall TForm6:FormShow(TObject *Sender)/这些代码和借书模块的意思相同 DBGrid1-Visible = false; DBGrid2-Visible = false; Edit1-Enabled = true; Edit1-Text = ; Edit2-Text = ; if(m_grand = 管理员 ) Edit1-SetFocus(); Edit1-Enabled = true; else Edit1-Text = m_id; Edit1-Enabled = false; Edit2-SetFocus(); 还书模块的代码如下: void _fastcall TForm6:BitBtn4Click(TObject *Sender)/取消按钮的代码 Form6-Close();/关闭窗体 /- void _fastcall TForm6:BitBtn1Click(TObject *Sender)/帐号检索的代码 /和借书模块的基本相同 南昌航空大学科技学院学士学位论文 46 if (Edit1-Text != ) DBGrid1-Visible = false; ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select 用户名 ,数据库身份 as 权限 from 用户 where 帐号 = +Edit1-Text+); ADOQuery1-Open(); if (ADOQuery1-ExecSQL() DBGrid1-Visible = true; else ShowMessage(错误的帐号 ); else ShowMessage(请输入帐号 ); /- void _fastcall TForm6:BitBtn2Click(TObject *Sender)/检索书号的代码 /和借书模块的基本相同 if (Edit2-Text != ) DBGrid2-Visible = false; ADOQuery2-Close(); ADOQuery2-SQL-Clear(); ADOQuery2-SQL-Add(select 书号 ,书名 ,出版社 from 图书 where 书号 = +Edit2-Text+); ADOQuery2-Open(); if (ADOQuery2-ExecSQL() DBGrid2-Visible = true; 南昌航空大学科技学院学士学位论文 47 else ShowMessage(错误的书号 ); else ShowMessage(请输入书号 ); /- void _fastcall TForm6:BitBtn3Click(TObject *Sender)/还书按钮代码 bool m_bool = false;/定义和部分代码和借书的模块相同 bool m_boolsame = false; String m_samename; String m_samebook; if (Edit1-Text != ) ADOQuery1-Close(); ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(select 用户名 ,数据库身份 as 权限 from 用户 where 帐号 = +Edit1-Text+); ADOQuery1-Open(); if (!ADOQuery1-ExecSQL() ShowMessage(错误的帐号 ); else if (Edit2-Text != ) ADOQuery2-Close(); ADOQuery2-SQL-Clear(); ADOQuery2-SQL-Add(select 书号 ,书名 ,出版社 from 图书 where 书号 = +Edit2-Text+); ADOQuery2-Open(); 南昌航空大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂车间干燥管理制度
- 墙面防撞处理方案(3篇)
- 小区勘测现场管理制度
- 彩绘门头改造方案(3篇)
- 肇事赔偿方案(3篇)
- 建筑施工防暑演练方案(3篇)
- 地质雷达监测方案(3篇)
- 水系围栏维修方案(3篇)
- 厂房楼层规划方案(3篇)
- 工程计划方案(3篇)
- GB/T 3672.1-2002橡胶制品的公差第1部分:尺寸公差
- GB/T 23227-2018卷烟纸、成形纸、接装纸、具有间断或连续透气区的材料以及具有不同透气带的材料透气度的测定
- GB/T 18049-2017热环境的人类工效学通过计算PMV和PPD指数与局部热舒适准则对热舒适进行分析测定与解释
- 烟草专卖管理师岗位技能标准(2023版)
- 半条被子(红军长征时期故事) PPT
- 电梯安装标准合同模板
- 松下NPM贴片机基本操作培训教程课件
- 公司车辆驾驶扣分违章处理证明 模板
- 一次性赔偿协议书模板
- (中职)车削加工技术全册实训课教案完整版
- 幼儿园绘本故事:《漏》
评论
0/150
提交评论