资源描述
软件工程 系统设计一、实验目的n 掌握软件体系结构模型;n 掌握使用过程设计工具描述模块的数据结构和算法;n 了解人机界面设计;n 掌握概要设计说明书和详细设计说明书的撰写二、实验原理概要设计n 软件概要设计的基本要点n 基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,确定系统的物理配置方案,确定系统的结构。n 系统分析与设计的关系n 系统分析的基本任务是定义用户所需要的软件任务,也就是回答系统必须“做什么”这个问题。系统设计的基本任务是设计实现目标系统的具体方案,也就是回答“怎样做”这个问题。二、实验原理详细设计n 软件详细设计的基本要点n 关键任务是确定怎样具体地实现用户需要的软件系统。n 除了保证软件可靠性之外,使程序可读性好、容易理解、容易测试、容易修改和维护。n 结构化程序设计技术是实现上述目标的基本保证,是进行详细设计的逻辑基础。n 人机界面设计是接口设计的一个重要组成部分。在设计人机界面的过程中,必须充分重视并认真处理好系统响应时间、用户帮助设施、出错信息处理和命令交互等4个设计问题。n 过程设计在数据设计、体系结构设计和接口设计完成之后进行,任务是设计算法。n 过程设计的工具可分为图形、表格和语言3类,应根据需要选用适当的工具。n 人机界面设计n 人机界面的设计质量,直接影响用户对软件产品的评价。n 人机界面设计是接口设计的一个重要的组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。n 使用基于原型的系统化的设计策略,是成功地设计人机界面的关键。n 用户界面设计是一个迭代的过程,也就是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改,直到用户满意为止。n 过程设计n 过程设计的任务是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。过程设计的结果基本上决定了最终的程序代码的质量。n 衡量程序的质量不仅要看它的逻辑是否正确,性能是否满足要求,更主要的是要看它是否容易阅读和理解。n 过程设计的目标不仅仅是正确实现每个模块的功能,更重要的是尽可能简明易懂。n 结构程序设计技术是实现上述目标的关键技术。n 过程设计工具n 描述程序处理过程的工具称为过程设计工具,它们可以分为图形、表格和语言三类。n 不论是哪类工具,对它们的基本要求都是要提供对设计的无歧义的描述,也就是应该指明控制流程、处理功能、数据组织以及其他方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码。n 这类工具应该尽可能直观、易学、易懂。三、实验内容与步骤n 软件体系结构模型n 模块过程设计与界面设计n 撰写系统设计说明书图书馆管理系统C概要设计说明书一、引言1.1编写目的为完善图书管理系统软件的开发途径及应用方法,以提高开发效率,使应用更为方便。根据需求规格说明书,在仔细考虑讨论之后,我们又进一步对图书管理系统软件的功能划分、数据结构、软件总体结构有了进一步的认识。我们把讨论的结果记录下来,作为概要设计说明书,并作为进一步详细设计软件的基础。1.2背景说明:a. 待开发软件系统的名称:图书管理系统b. 列出此项目的任务提出者是本小组成员,开发者也为本小组成员、用户是学校图书馆。1.3定义开发(develop):除了单纯的开发活动外,还包括维护活动。项目(project):向顾客交付的最终的全部产品,包括程序及各种文档,以及开发活动所需资源经费等各种信息。项目开发计划(project development plan):把项目与过程联系起来的计划方案。产品生命周期(product life cycle):产品从构思到不可在使用的持续时间。1.4参考资料软件工程导论 张海藩 编著 清华大学出版社 数据库系统概论 萨师煊 王 珊 编著 高等教育出版社 Visual Basic 数据库系统开发实例导航(第二版) 刘 韬骆娟何旭洪 编著 人民邮电出版社 C#程序设计教程曾强聪编著中国水利水电出版社二总体设计2.1需求规定主要输入输出项目:图书信息:(图书编号、图书名称、图书ISBN号、作者、出版社、类型、价格、库存量、副本总量、图书总数)学生信息:(学生编号、学生姓名、性别、入校时间、毕业时间)借书登记:(借书编号、学生编号、结束时间、归还时间、是否归还)还书登记:(图书编号、图书名称、归还时间、作者、出版社、2.2运行环境硬件环境:PC机配置:奔腾133 、内存1GB以上PC机,内存要求不得低于1GB,硬盘大于20G的PC台式机和便携式电脑;软件环境: Windows2000XP SQL Server2000 C#2.3基本设计概念和处理流程该系统的主程序流程图如下图所示:2.4功能需求与程序的关系本条用一张如下的矩阵图说明各项功能需求的实现同各块程序的分配关系:创建查找修改删除图书信息管理(管理员)学生信息管理(管理员)学生信息查询(学生)查询图书信息(学生)归还图书(管理员)借阅图书(管理员)2.5人工处理过程管理员登录:图书管理员需要手动输入登录信息验证身份登录系统后方能进行操作。图书入库:对于新购图书,管理员需要手动对其进行分类进行编号,并把图书基本信息录入计算机。修改图书信息:学生借阅图书时,管理员需要对该图书进行登记,记录被借阅图书信息和学生信息。当学生归还图书时,同样需要对图书信息进行修改。三接口设计3.1用户接口向用户提供命令软件回答对应信息操作员登记添加用户学生登记添加学生信息学生查询学生信息查询图书登记管理员登记图书信息借阅登记管理员登记学生的借阅信息借阅查询管理员查询学生的借阅情况3.2外部接口接口传递信息软件接口:与数据库接口图书信息学生信息3.3内部接口接口传递信息图书信息管理录入图书信息:(图书编号、图书名称、图书ISBN号、作者、出版社、类型、价格、库存量、副本总量、图书总数)图书信息管理修改图书信息:(图书编号、图书名称、图书ISBN号、作者、出版社、类型、价格、库存量、副本总量、图书总数)学生信息管理添加学生信息:(学生编号、学生姓名、性别、入校时间、毕业时间)学生信息管理修改学生信息:(学生编号、学生姓名、性别、入校时间、毕业时间)借书登记登记借阅图书以及学生信息借书登记:(借书编号、学生编号、结束时间、归还时间、是否归还)还书登记修改借书登记的信息还书登记:(图书编号、图书名称、归还时间、作者、出版社、)四 运行设计4.1运行模块组合对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,以及每种运行所历经的内部模块和支持软件。4.2运行控制运行控制控制方法学生信息管理管理员对学生信心进行管理,包括增加学生用户,修改用户信息,以及删除学生信息学生信息查询用户可以对学生的信息进行查询图书信息登记录入新的图书信息,以及对已有图书的各项信息进行修改,查询,删除等图书信息查询用户对所要借阅的图书信息进行查询借阅登记管理员登记学生所借图书以及学生本人的信息借阅查询管理员对学生或者所对应图书的信息进行查询4.3运行时间检索任务所需时间:3秒执行任务所需时间:3秒五系统数据结构设计5.1逻辑结构设计要点1.图书信息表(tBook),其字段列表如表5-1-1所示。表5-1-1 图书信息表的结构序号字段名称字段说明类型位数属性备注1cBooksID图书编号文本7必须非空2cBooksName图书名称文本20必须非空3cBooksISBN图书ISBN号文本15可为空4cBooksAuthor图书作者文本10可为空5cBooksPublisher图书出版社文本20可为空6cBooksType图书类型文本16可为空7smBooksPrice图书价格货币可为空8iBooksStoreQuan图书库存量整数可为空9iBooksLeftQuant图书副本数量整数可为空10iBooksTotalQuan图书总数整数可为空2.图书借阅登记表(tBorrow),其字段列表如表5-1-2所示。表5-1-2 图书借阅登记表的结构序号字段名称字段说明类型位数属性备注1cBorrowID借书编号文本6必须非空2cVipID学生编号文本6必须非空3cBooksID图书编号文本7必须非空4cBorrwTime借书时间时间日期可为空5cReturnTime还书时间时间日期可为空6cReturn是否归还文本1可为空3.图书归还登记表(tReturn),其字段列表如表5-1-3所示。表5-1-3 图书归还登记表的结构序号字段名称字段说明类型位数属性备注1cBorrowID借书编号文本6必须非空2cVipID学生编号文本6必须非空3cBooksID图书编号文本7必须非空4cBorrwTime借书时间时间日期可为空5cReturnTime还书时间时间日期必须非空6cReturn是否归还文本1必须非空7cNoReturn归还异常文本8可为空4.学生信息表(tVip),其字段列表如表5-1-4所示。表5-1-4 学生信息表的结构序号字段名称字段说明类型位数属性备注1cVipID学生编号文本6必须非空2cVipName学生姓名文本10必须非空4cVipSex学生性别文本1可为空5vipAddTime学生入学时间时间日期必须非空6vipEndTime学生毕业时间时间日期必须非空5.管理员信息表(tOperators),其字段列表如表5-1-5所示。表5-1-5 管理员信息表的结构序号字段名称字段说明类型位数属性备注1cOperatorID管理员编号文本5必须非空2cOperatorName管理员姓名文本10必须非空3cOperatorPassword密码文本6必须非空4cOperatorAddTime管理员加入时间时间日期10必须非空5.2数据结构与程序的关系主模块:连接数据库学生管理模块:学生信息管理模块:管理员输入帐号密码进入系统后可以对学生信息进行管理,包括修改,插入,删除等。学生信息查询模块:管理员可以对学生信息进行查询,学生输入学生的账号密码后,成功登陆后,学生可以对其信息进行查询,输入学生编号后,对应输出学生姓名,性别,入校时间,毕业时间等。图书管理模块:图书信息登记模块:管理员对图书信息进行登记,输入相应的图书信息,如图书书名,作者,出版社。单价等信息。图书信息查询模块:学生和管理员都可以进行此操作,通过查询数据库,匹配要查找的图书信息,包括读入图书号,图书作者,图书出版社 ,图书单价等基本信息。借阅管理模块:借阅登记模块:管理员对图书的借阅情况进行登记,记录借书者的学生编号,学生姓名等学生信息以及图书编号,图书名称,作者,出版社等图书信息,并修改图书状态。借阅查询模块:管理员和学生都可以对图书的借阅情况进行查询,输入读者号,对应输出学生姓名,性别,入校时间,毕业时间。输入图书号,对应输出图书书名,图书作者,图书出版社,图书单价,图书状态。归还管理模块:读入图书编号,对应输出借书记录表中的学生编号,借书时间,应归还时间等,修改图书状态,删除借书记录表中的学生编号,图书编号,借书时间等信息。六 系统出错处理设计6.1出错信息出错的位置出错的原因提示信息用户名输入数据库中不存在的用户名You are a not system user用户名密码输入的密码不正确Password eroor,please check your passwprd添加用户输入已存在的用户信息用户已存在添加信息添加信息必填信息不完整信息必须完整普通用户操作权限使用管理员的你没有该权限出错信息处理:学生或管理人员输入的帐号和密码不匹配或输入不存在的帐号,系统应友好进行提示,如提示您输入的帐号或密码错误,请重新输入!6.2补救措施故障出现后可能采取的变通措施,包括:a. 后备技术说明准备采用的后备技术,当原始系统数据万一丢失时启用的副本的建立和启动的技术,例如周期性地把磁盘信息记录到磁带上去就是对于磁盘媒体的一种后备技术;b. 降效技术说明准备采用的后备技术,使用另一个效率稍低的系统或方法来求得所需结果的某些部分,例如一个自动系统的降效技术可以是手工操作和数据的人工记录;c. 恢复及再启动技术说明将使用的恢复再启动技术,使软件从故障点恢复执行或使软件从头开始重新运行的方法。图书管理系统D详细设计说明1.1 编写目的图书管理系统详细设计是设计的第三个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述,直接翻译、转化为用某种程序设计语言书写的程序。1.2 项目背景为提高图书信息的管理,借阅管理,查询管理,统计及工作效率,给予用户的要求开发图书管理系统1.3 定义SQL :数据库C# :开发工具2 总体设计2.1 需求概述按照需求分析文档中的规格要求,使用给定图书编号添加进书、借书、还书等等,使得信息传递准确、流畅。同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。2.2 软件结构模块(软件总体结构细化)3 程序界面和代码描述3.1.1登录模块设计登陆界面是图书管理管理系统运行后首先打开的界面。在这个界面,用户必须输入预先设定好的用户名以及密码才能进入,这样有利于防止他人在没有授权的情况下进入系统。1 功能说明:用户输入登录帐号和密码,连接数据库进入到操作界面。2 流程图:需要的问题说明:(1) 录入的密码和用户名不能为空;(2) 录入数据后根据用户的编号判断授权。登录界面如图所示:问题说明:本窗体有两个文本框textBoxIP,textBoxpassword是用作用户输入用户名和密码。查询该用户是否为合法的用户,并判断用户的类别和权限。合法用户进入系统的操作界面区。pub.dataSql()为连接数据库的方法函数,以后就不在讲解sqlselsect = select * from Main_view where 登陆编号=; sqlcon = new SqlConnection(pub.dataSql();/连接数据库 sqlcon.Open(); logincon = new SqlCommand(sqlselsect + textBoxIP.Text.Trim() + , sqlcon); loginer = logincon.ExecuteReader(); while (loginer.HasRows) loginer.Read(); if (textBoxpassword.Text).Equals(loginer.GetString(1).Trim() guanliindex guan = new guanliindex(); guan.Show(); return; else MessageBox.Show(密码错误!); textBoxpassword.Text = ; textBoxpassword.Focus(); return; sqlcon.Close(); MessageBox.Show(无此用户名,请注册后再登陆);当用户没有没有填写textBoxIP,textBoxpassword两个文本框时而点击登录按钮将不做任何操作。3.1.2 图书管理系统模块(系统主操作界面)管理系统模块是用户成功进入系统的操作界面:该界面包括了读者下拉菜单、管理员的下拉菜单和一个工具栏。该窗体使用的是MDI容器,在这里不在说明怎么调用各个窗体。MDI容器防止相同的子窗体的重复出现的处理方法是:构造一个checkChildFrmExist函数:private bool checkChildFrmExist(string childFrmName) for (int i = 0; i this.MdiChildren.Length; i+) if (this.MdiChildreni.Text = childFrmName) this.MdiChildreni.Activate(); return true; return false; 这个函数会把显示的每个子窗体的名字存放在一个数组里面,在连接一个新的子窗体时先判断该窗体是否以显示(MdiChildreni里是否存在这个窗体的名字),如果该窗体已经显示就不用再弹出该窗体否则就弹出该子窗体。最后根据用户的权限显示相应的下拉列名。权限是根据用户登录时从数据库里面读取的数据和用户的登录编号等数据传入到系统操作界面当中,进行相应的处理。根据传入的数据显示相应的下拉列表: if (public_Class.NU = 1) this.toolStrip_Xiaoxi.Text = 读者编号: + public_Class.NumID.ToString(); this.menuStrip2.Visible = true; /读者下拉菜单 this.menuStrip1.Visible = false; else if (public_Class.NU = 2) this.toolStrip_Xiaoxi.Text = 操作员编号: + public_Class.NumID.ToString(); this.menuStrip1.Visible = true; /操作员下来菜单 this.menuStrip2.Visible = false; 3.1.3 图书编目模块(书籍信息管理)该模块是给管理员或者操作员用的。功能是管理员用作添加、修改、删除相关信息的模块。实现该模块首先是要把要维护图书的存放的表查询出来。然后给据文本框的一一对应相应的添加。本窗体共有7个文本框1个下拉框和两个时间框,他们分别和(图书表)的各个列相对应。功能的流程图如下所示:需要的问题说明:(1) 操作员填写的相关信息必须符合要求。(2) 可以一次性添加多条图书的信息。(3) 点击工具栏上面的添加按钮,并没有把用户所输入的数据添加到数据库里,只是把它放在内存里面。最后要点击保存按钮。(4) 只要没有弹出“添加成功”信息提示框,表明没有添加成功。功能描述:(1) 功能类型:添加数据,(2) 功能概述:添加图书的相关信息,操作简单。(3) 操作权限:图书管理人员。(4) 前提业务:管理模块(5) 后继业务:无界面设计描述:1 动作说明:添加:是文本框的内容添加到内存表里面。取消操作:放弃添加的内容保存:把一添加的内容保存到熟数据库里退出:点击按钮,退出该窗体2 界面展示如下图:连接数据库,查询图书表中的信息,把查询的结果放在DataSet()里面,并取名的映射表明为(Table0)。添加图书代码: DataRow data = Dataset.TablesTable0.NewRow();/添加一个新行 data图书编号 = AddBookID.Text; data图书名 = AddBookName.Text; data作者 = AddBookZuozhe.Text; data出版社 = AddBookShe.Text; data类编号 = Btun; data出版日期 = dateTimePicker1.Text; data上架时间 = dateTime.Text; data价格 = AddBookjiage.Text; data上架编号 = AddBookjiaNum.Text; data是否借出 = AddBookYesNo.Text; data备注 = AddBookbeizhu.Text; Dataset.TablesTable0.Rows.Add(data);这段代码是把文本框的内容添加到Table0表里面还没有保存到数据库里面。ddlStoreName的下拉框是为吧图书的类别类别添加到下拉列表中: SqlConnection con = new SqlConnection(); con.Open(); SqlCommand cmd = new SqlCommand( select 类名称 from Bookship,con); SqlDataReader sdr = cmd.ExecuteReader(); while (sdr.Read() ddlStoreName.Items.Add(sdr.GetString(0); sdr.Close(); con.Close();维护图书的方法与上面有相似一处,进行数据的网格绑定。在这里不一一介绍。最后保存添加的以上的内容,填写的信息必须符合相关的要求如果出现填写错误:就提示一下信息如果是保存到数据库成功就提示成功的操作。(注意:添加读者信息功能相似)3.1.4 读者编目模块(读者信息管理维护)该模块的功能就是添加用户,修护读者的信息;该模块的功能与上面模块的功能代码相识。在这里讲解读者的信息维护功能的实现:该窗体含有一个toolStrip工具栏(定位,修改,删除等按钮)流程图 :改流程图与图书编目模块相识。需要的问题说明:(1) 操作员填写的读者相关信息必须符合要求。(2)可以一次性修改多条图书的信息。(3)点击工具栏上面的修改按钮,并没有把用户所修改的数据添加到数据库里,只是把它放在内存里面。最后要点击保存按钮。(4)只要没有弹出“修改成功”信息提示框,表明没有修改该数据。功能描述:(1) 功能类型: 修改数据和查询数据(2) 功能概述:修改文本框里的内容,更新读者信息表文件信息(3) 前提业务:管理模块(4) 后续业务:无(5) 权限操作:图书管理人员界面设计描述: 1操作说明(1)定位按钮:4个定位按钮能够快速定位到操作员所要维护的人员(2)文本框:录入读者编号吧相应读者的信息定位显示出来(3)修改:点击按钮式把修改后的数据添加到内存表里面(4)删除:点击按钮把当前读者从内存表里删除(5)取消操作:放弃对该读者信息的修改(6)保存:把修改后的数据保存到数据库里面(7)退出:点击按钮,退出该窗体 2 界面展示如下图所示:思 想:先要把被修改的读者的全部信息提取出来,方放进相应的为本框中,在选定文本框,修改文本框里的内容。 /数据的绑定的网格功能 text_ID.DataBindings.Add(Text, Dataset, Table.读者编号); text_name.DataBindings.Add(Text, Dataset, Table.姓名); text_sex.DataBindings.Add(Text, Dataset, Table.性别); text_phone.DataBindings.Add(Text, Dataset, Table.联系电话); text_work.DataBindings.Add(Text, Dataset, Table.工作单位); text_home.DataBindings.Add(Text, Dataset, Table.住址); text_number.DataBindings.Add(Text, Dataset, Table.证件号码); text_time.DataBindings.Add(Text, Dataset, Table.登记日期); text_ZT.DataBindings.Add(Text, Dataset, Table.读者状态); bangD = this.BindingContextDataset, Table;/ 修改功能bangD.EndCurrentEdit();/ 删除功能bangD.RemoveAt(bangD.Position); /取消操作Dataset.RejectChanges();同样:这段代码是把文本框的内容添加到Table0表里面还没有保存到数据库里面。最后调用 SqlDa.Update(Dataset, Table);方法3.1.5 图书借阅模块这个模块的功能就是读者借书。借书要求就是 1 每个读者按照自己的级别查询出最多借书的数量,如果有超期没有归还的图书,则不能借书;如果超过借书数量则不能借,如果图书已经被借出则不能借阅。该模块含有两个文本框textbookID,textReadID用来写入读者的编号和图书编号和一个确定借书按钮,dataGridView用来显示读者要借的书籍,操作员只需要有鼠标点击dataGridView上面的的网格就为读者借阅的图书。为了代码精简,本系统采用借书的存储过程(数据结构设计后面将详细讲解)流程图:需要的问题说明:(1)在读者进行借阅图书时,先根据读者的编号查询该读者的借阅情况;如果该读者借书的数量已满则不能再借,如果含有过期图书未归还则拒绝借阅。(2)如果该图书已经被借出,弹出相应的提示。(3)可以一次性借阅多本图书,接过的出书做好标识。功能描述:(1) 功能类型:修改数据、查询数据、添加数据(2) 功能描述:更新学生借阅文件(表),图书信息文件(表)(3) 前提业务:管理模块(4) 后续业务:无(5) 操作权限:图书管理人员界面设计描述:操作说明:(1) 管理员根据读者编号和图书编号查询相关的信息。读者的借阅数量,是否有借书未归还历史。图书是否借出。(2) 确定借书按钮:点击此按钮并提示:借阅是否成功(3) 推出按钮:退出当前窗体界面展示如下图:借书功能的精简代码如下:sqlcommand = new SqlCommand(); sqlcommand.CommandType = CommandType.StoredProcedure; sqlcommand.Connection = sqlcon; sqlcommand.CommandText=qq11;/储存过程 SqlParameter bookID = new SqlParameter(BookID, Convert.ToInt32(textbookID.Text); SqlParameter readID = new SqlParameter(ReaderID, Convert.ToInt32(textReadID.Text); SqlParameter Bookxix = new SqlParameter(Bookxinxi, SqlDbType.VarChar, 100); Bookxix.Direction = ParameterDirection.Output; sqlcommand.Parameters.Add(bookID); sqlcommand.Parameters.Add(readID); sqlcommand.Parameters.Add(Bookxix); sqlcon.Open(); sqlcommand.ExecuteNonQuery(); sqlcon.Close(); MessageBox.Show(Bookxix.Value.ToString();该代码为借书功能的代码,并还有输出参数。如果借书没有成功原因弹出如下图所示的提示:如果有过期未还的图书,借书不成功,弹出以下信息如下图所示:如果借书数量已满或者借书成功也会弹出相应的提示框。(流程图见概要设计)3.1.6 图书归还模块该模块是为读者归还图书。归还图书思想:归还读书前要查询该用户是否借阅超期,如果已经超期就要根据读者的类型查询出罚金公式和计算出超期天数及罚金的总金额;并把罚金的相关信息存储起来;如果没有超期就正常归还。该模块含有两个文本框textbookID,textReadID用来写入读者的编号和图书编号和一个确定归还按钮,dataGridView用来显示读者已经借的书籍,操作员只需要有鼠标点击dataGridView上面的的网格就为读者要归还阅的图书。textBox1_newmoney为本框时输入读者罚金金额。流程图如下:需要的问题说明:(1) 根据该读者归还图书的编号查询该读者是否借阅超期,如果超期结算处超期的金额。(2) 根据读者的编号,查询读者所借阅的图书信息,并显示在dataGridView表格里。用鼠标点击归还的图书。(3) 更新历史借书表功能描述:(1) 功能类型:修改数据,添加数据信息(2) 功能概述:完成读者的还书业务并计算出超期天数和罚金金额,如果没有超期,就不用计算。(3) 前提业务:管理模块(4) 后继业务:无(5) 操作权限:图书管理人员界面设计描述:操作说明:(1) 输入读者编号查询该读者的当前借阅历史,动鼠标点击读者要归还的图书。系统自动计算借阅是否超期和罚金金额。(2) 读者借阅超期,借提示下面的消息框(3) 如有罚金,并输入罚金金额和备注信息(4) 确定归还:归还图书按钮(5) 推出按钮:推出该窗体界面展示如下图所示:超期罚金提示框如下图所示计算超期罚金代码函数:private decimal calPenalty(DateTime rTime,double money) /计算过期天数 int overDays = 365 * (System.DateTime.Now.Year - rTime.Year) + System.DateTime.Now.DayOfYear - rTime.DayOfYear; /根据过期天数计算罚金 decimal fee = (decimal) money * overDays; return (fee); 归还图书也是采用存储过程下面数据设计将详细介绍。3.1.7 图书查询模块该模块给管理员和读者都能使用的模块。能够快速的查询到每本书的相关信息(是否被借阅、简介)等等。多功能的查询,能够根据图书编号查询、根据作者查询、根据图书名查询、根据出版社查询等等。图书查询的流程图为需要问题说明:(1) 查询:可以查询全部图书和未借阅图书的范围(2) 精确查询:可以按照图书编号、图书名称、作者、出版社查询图书。(3) 查询的结果集放在dataGridView(4) 输入信息正确(5) 进行的是模糊精确匹配(6) (读者)可以查询自己的借书历史、热门图书查询、新书查询(7) (管理员)可以查询所有用户的借书历史、热门图书、新书查询。功能描述:(1) 功能类型:查询数据(2) 功能概述:显示查询结果集(3) 前提业务:无(4) 后继业务:无(5) 操作权限:面向所有用户界面设计描述: 操作说明:(1) 单选按钮:用户选择查询图书的范围(分为全部图书和未接图书,默认为全部图书)(2) 下拉列表:用户选择查询图书的方式(图书编号、图书名称、出版社、作者)(3) 下拉列表:用户选择的图书类型(4) 录入文本框:用户查询的录入相关信息 界面展示如下图所示:查询如下:首先是把所有图书查询出来放入到内存中再根据内存中的表查询出来放入到dataGridView中。 SqlDa = new SqlDataAdapter(sql, sqlcon); SqlCommandBuilder ScomdB = new SqlCommandBuilder(SqlDa); Dataset = new DataSet(); SqlDa.Fill(Dataset, Table);DataView dv_book = Dataset.TablesTable.DefaultView; switch (comboBox2.SelectedItem.ToString() case 图书编号: dv_book.RowFilter = 图书编号 like + textBox1.Text + %; break; case 图书名: dv_book.RowFilter = 图书名 like + textBox1.Text + %; break; case 作者: dv_book.RowFilter = 作者 like + textBox1.Text + %; break; case 出版社: dv_book.RowFilter = 出版社 like + textBox1.Text + %; break; default: dv_book.RowFilter = ; break; 3.1.8 管理员进行读者查询模块管理员可以查询该模块查询读者的相关信息(除读者的密码),例如(联系方式)。该模块于图书查询模块基本相识流程图如下需要问题说明:(1) 条件是按用户编号进行查询。(2) 本窗体采用的是网格布局dataGridView;管理员根据用户的编号查询读者的相关信息和预览全部读者的信息。(3) 采用的是分页操作(4) 不可显示用户的密码。功能说明描述:(1) 功能类型:查询数据(2) 功能概述:显示查询数据结构(3) 前提业务:管理模块(4) 后继业务:无(5) 操作权限:图书管理人员界面设计描述: 操作说明:(1) 文本框:录入查询信息的要求,条件是安读者编号进行查询(2) 确定按钮:保存录入读者信息(3) 推出按钮:退出操作界面相关代码在这里不在做相关的介绍介绍。3.1.9 读者自己信息维护模块 这个模块是只是针对读者用的用来是读者修改自己的密码信息;在用户修改自己的密码需要2次输入新的密码,判断是否输入一直,否则修改不成功。需要的说明:(1) 修改密码时要两次输入新的密码和旧密码(2) 两次输入的密码必须一致(3) 密码的长度必须大于6位功能描述:(1) 功能类型:修改数据(2) 功能概述:修改用户或者管理员的密码(3) 前提业务:管理系统(4) 后继业务:无(5) 操作权限:面向所有用户(只能修改自己的密码)界面设计描述:操作说明:(1) 为本框:录入密码信息(2) 确定修改按钮:信息保存到数据库。窗体界面如下图所示:修改的基本操作代码如下: if (textBox2.Text.Trim()!=(textBox3.Text.Trim() MessageBox.Show(你的密码输入不一致); return; if (textBox3.Text.Length 0 ? 操作成功! : 找不到该用户; MessageBox.Show(s); catch (Exception ex) MessageBox.Show(操作失败,请检查网络连接是否正常!); finally if (sqlcon.State = ConnectionState.Open) sqlcon.Close();如果用户输入的密码2次不一致或者密码输入过简单,这不允许该用户修改并弹出一下信息提示:如果操作成功也弹出修改成功的提示:密码修改成功。(管理员的的密码修改于读者的一直以后不在说明)3.1.10 读书类型和读书类型设置模块模读者类型和图书分类的操作功能是:修改、添加、删除读者的分类或者图书分类设置,分别是放在两个窗体当中。流程图和代码编写与读者编目有许多相识之处,所以不在讲解。3.1.11 统计模块该模块的作用是分别统计,统计出本年的借阅信息、热门图书信息,历史的支出与收支金额信息。A 本年度借阅信息设计:需要说明:1 这个统计的功能是根据借阅历史表和图书信息表里的相关信息统计出来的,条件是今年以内。2 统计出信息有:今年购书图书总数、外借图书总数、购置图书总支出、预计罚款总收入、实际罚款总收入、超期归还总数、超期未归还总数。3 统计思想:采用数据库的存储过程统计(Stat_nowyear)。功能描述:1 功能类型:查询数据2 功能概述:统计显示相关信息3 操作权限:图书管理员界面设计描述:1 操作说明:2 界面展示如下图所示:B热门图书统计设计(含有打印功能):需要说明: 1 这个子模块的功能是统计今年最好最热门的图书的全部信息。条件是今年。 2 统计出信息有:图书的全部信息。 3 统计思想:采用数据库的试图,根据每本书被借的次数安降序排列。 4 统计出来的信息放入到dataGridView里面;并却能够支持打印出表格的数据。功能说明描述:1 功能类型:查询数据2 功能概述:统计显示相关信息3 操作权限:面向所有用户打印功能接口:public static void ExportData(DataGridView srcDgv, string fileName) /导出数据,传入一个datagridview和一个文件路径 Excel.Application excel = new Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = true; for (int i = 0; i srcDgv.ColumnCount; i+) excel.Cells1, i + 1 = srcDgv.Columnsi.HeaderText; for (int i = 0; i srcDgv.RowCount - 1; i+) for (int j = 0; j srcDgv.ColumnCount; j+) excel.Cellsi + 2, j + 1 = srcDgvj, i.Value.ToString();
展开阅读全文