资源描述
太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日1继续教育学院综合作业报告继续教育学院综合作业报告二一年五月十五日课程名称:课程名称: 图书管理系统 考考 号:号: 100205200460 姓姓 名:名: 郑 莉 专专 业:业: 计算机及应用 单 位: 山西计算机科技学院 指导老师:指导老师: 段利国 成成 绩:绩: 优 良 中 及格 不及格 太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日2摘要本文首先介绍了数据库管理系统 (DBMS)的基本概念及关系模型等。然后对问题的来源进行深入分析,指出 图书借阅者、图书馆工作人员和图书馆管理人员 是问题主要来源,并指出本数据管理系统的实用性功能就是 管理好图书馆信息,提高工作效率,避免数据处理手工操作,工作量大,出错率高 的弊端。接着对需求分析进行细致的分析,特别对图书借阅者、图书馆工作人员和图书馆管理人员 三者权限进行分配。接着对系统功能模块进行分析,指出本系统功能模块主要分为 “图书资料管理”模块、“学生资料管理”模块、“借还书操作”模块。总的来说,本图书管理系统,介绍了该系统组成结构、功能特点、使用原理和方法,本系统实现了系统登陆、图书管理、学生管理图书的借阅与归还、图书借阅排行榜和查看逾期未还图书以及各种信息的 打印等功能。有了这个系统就使图书馆的工作变得简单了许多,使图书馆的图书管 理形成了一个整体自动化管理模式。管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新 型学科,企业要生存要发展,要高效率地把企业活动有机地组织起来,就必须加强 企业管理,即加强对企业内部的各种资源(人、财、物等)的有效管理,建立与自 身特点相适应的管理信息系统。图书馆管理系统是典型的信息管理系统,其开发主 要包括后台数据库的建立和维护以及前端的应用程序的开发两个方面。对于前者要 求建立数据的一致性和完整性,对于后者则要求应用程序功能的完备,易用等的特 点。基于上述考虑本系统主要利用Microsoft Visual Studio 2005 作前端的应用开发工具 ,利用SQL Server 2000 作为后台的数据库,利用WINDOWS 作为系统平台开发的图书管理系统。另外本图书馆管理系统利用软件工程化思想和方法,总体上是 采用结构化生命法进行系统分析和设计的,而系统实现等步骤则采用了原型法和面 对对象的方法。关键词关键词:C#程序设计语言, SQL SERVER 2000,软件工程太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日3目录目录 摘摘要要.2第第 1 1 章章 基础理论知识基础理论知识.51.1 数据库应用系统开发简介.51.2 数据库管理系统.51.3 MICROSOFT VISUAL STUDIO 2005 简介.61.4 C#语言简介.61.4.11.4.1 C#C#中中 OOPOOP 概述概述.61.4.21.4.2 面向对象的面向对象的 C#C# 编程编程.81.4.31.4.3 接口与继承接口与继承.12第二章第二章 系统开发背景系统开发背景.14第三章第三章 需求分析需求分析.153.1 应用需求分析.153.2 实际需求分析 .15第四章第四章 可行性分析可行性分析.164.1 环境可行性分析.164.2 面向对象的程序分析.16第五章第五章 系统概要设计系统概要设计.175.1 模块分析.175.1.15.1.1 功能模块图功能模块图.175.2 模块分析.175.2.15.2.1 “图书资料管理图书资料管理”模块模块.175.2.25.2.2 “学生资料管理学生资料管理”模块模块.185.2.35.2.3 “借还书操作借还书操作”模块模块.18第六章第六章 详细设计详细设计.186.1 设计创建数据库.186.1.16.1.1 设计数据库设计数据库.186.1.26.1.2 创建数据库创建数据库.196.2 创建系统主程序.226.3 创建系统常用类.226.3.16.3.1 创建创建“移动记录工具栏移动记录工具栏”类类.236.3.26.3.2 创建创建“命令按钮工具栏命令按钮工具栏”类类.236.4 创建登录表单.236.4.16.4.1 系统主表单的功能系统主表单的功能.236.4.26.4.2 创建系统主表单界面创建系统主表单界面.246.4.3.6.4.3. 新书入库新书入库.25太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日46.4.46.4.4 图书借阅图书借阅.266.4.56.4.5 图书归还图书归还.276.4.66.4.6 图书信息查询图书信息查询.286.4.76.4.7 图书信息修改图书信息修改.296.4.86.4.8 旧书销毁旧书销毁.306.4.96.4.9 图书证的办理及证件信息修改图书证的办理及证件信息修改.326.4.106.4.10 证件挂失与注销证件挂失与注销.326.4.116.4.11 图书类别信息排行图书类别信息排行.336.4.126.4.12 库存外借信息库存外借信息.346.4.136.4.13 图书借阅排行榜图书借阅排行榜.35第七章第七章 结果分析结果分析.36项目学习心得体会项目学习心得体会.37结结束束语语.38致致谢谢.39太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日5第第 1 1 章章 基础理论知识基础理论知识1.11.1 数据库应用系统开发简介数据库应用系统开发简介在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。数据库技术在计算机软件邻域研究中一直是非常重要的主题,产生于 60 年代,40 多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着 World Wide Web(WWW)的猛增及 Internet 技术的迅速发展,使得数据库技术一时成为最热门技术之一。1.21.2 数据库管理系统数据库管理系统数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS 是数据库系统的核心组成部分。对数据库的一切操作,包括定义、更新及各种控制,都是通过 DBMS 进行的。DBMS 总是基于某种数据模型,可以把 DBMS 看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS 可以分成层次型、网状型、关系型、面向对象型等。SQL Server 2000 就是一种关系型数据库管理系统。关系模型。关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL 语言是关系数据库的标准化语言,已得到了广泛的应用。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日61.31.3 MicrosoftMicrosoft VisualVisual StudioStudio 20052005 简介简介2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本 2.0) 。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的 Visual Studio Express 版本运行库实际上在组件的运行时和开发时操作中都起到很大的作用,尽管名称中没有体现这个意思。在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的 COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。1.41.4 C#C#语言简介语言简介C#(C Sharp)是微软于 2000 年提出的一种源于 C+、类似于 Java 的面向对象编程语言,适合于分布式环境中的组件开发。C# 是专门为.NET 设计的,也是.NET 编程的首选语言。1.4.11.4.1 C#C#中中 OOPOOP 概述概述程序设计语言,在思想上发展很快,在技术上也是不断创新。经历了手工操作(控制面板) 、机器语言、汇编语言、宏汇编语言、高级语言和第 4 代语言等多个阶段。OOP 只是在高级程序设计语言中,流行的多种编程技术之一。1基本特征面向对象编程的三个基本特征是:封装(encapsulation) 是对问题的抽象,以达到信息隐藏的目的。通过类和对象,将属性(数据/变量)和方法(操作/函数)封装在一个黑箱内,太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日7将细节隐藏起来。既可以保护数据不被他人恶意或大意地修改,又能防止其他程序员编写高耦合度的代码,还方便了今后对对象内部的修改和升级。继承(inheritance) 利用问题和事物的相似性,通过类的(多层)继承机制,可以达到减少软件开发难度和重用已有对象的属性和方法之目的。多态(polymorphism) 同一操作或响应,可以同时针对多个可选的类型和对象,并且能够自动在它们中间选择最合适的来进行。多态可以分为:编译时多态:包括函数和运算符的重载(overload) ,通过早期的静态绑定(binding)来实现。运行时多态:通过继承结合晚期动态绑定来实现用同一基类的指针,可以访问各个不同派生类中的同名方法和函数。2基本概念面向对象编程的基本概念(类似的概念多、表达不够准确、各处的用法各异):抽象(abstraction) 一个问题的本质特征。忽略一个对象的细节,致力于一般的合适级别的程序能力。抽象是在事物的周围绘制透明的盒子,是定义事物接口的行为。信息隐藏(information hiding) 限制外部对类属性(数据成员)的访问。封装(encapsulation) 将某种保密和隐匿应用到类中的数据和一些方法(函数或子例程)上。封装确保一个对象只能通过确定的渠道(即类的公用方法)才可被修改。封装意味着将数据及相关函数打包到一个单一的单元(类)中。每个对象暴露一个接口(公用方法) ,规定其他对象可以如何读取或修改它。类(class) 问题的抽象,对象的模版,接口的实现。例如 int 是整数的模版、CPoint 是点的模版。对象(object) 问题中的事物,类的实例(变量) ,拥有数据和功能。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日8若 int i; CPoint p; 则 i 是 int 的实例变量,p 是 CPoint 的实例对象。实例(instance) 一个对象,是某个类的示例。实例化(intantiate) 由类定义创建对象。继承(inheritance) 创建子类的机制,一种“is a”或“is like”关系,形成类层次结构。是 OOP 中对象重用的核心概念。子类(subclass) 继承自另一个类的派生类(derived class) 。超类(superclass 父类) 被另一个类继承的基类(base class) 。虚函数(virtual function) 可以在子类中被覆盖(override)的函数。纯虚函数(pure virtual function) 只有声明没有定义的函数,必须在派生类中被覆盖。抽象类(abstract class) 至少包含一个纯虚函数的类,不能被实例化。具体类(concrete class) 可以实例化的类,不包含纯虚函数。接口(interface) 纯抽象的类,类的模版。接口中的所有的方法(成员函数)都只有声明,没有定义(都是纯虚函数) 。必须在接口的派生类中,实现接口的全部方法。接口可以看成是一个,定义了一套内部行为的,若干操作特征标记的集合。 (在 C+中,也把类的公用成员函数叫做接口) 。属性(attribute) 类和接口中的数据信息,又叫数据成员(data member)或成员变量(member variable) 。属性是类知道的事物。方法(method) 类操作的实现,又叫成员函数(member function) 。方法是类要做的事情。 (在 C+中,也把虚函数叫做方法) 。重载(overload) 一个类中的,参数的数目、类型或排列顺序不同的多个同名方法(成员函数) 。覆盖(override) 在子类中重新定义(与父类中的定义有区别的)属性和方法。持久化(persistence) 将对象存入永久存储中(如文件、数据库等) 。持久对象(persistent object) 存入永久存储的对象。1.4.21.4.2 面向对象的面向对象的 C#C# 编程编程1类类类型定义包含数据成员、函数成员和嵌套类型的数据结构,其中数据成员包太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日9括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。类类型支持继承,继承是派生类可用来扩展和专门化基类的一种机制。功能与 C+/CLI 的可见性说明符类似,只是增加了 static 修饰符。partial(分部的)用于定义分部类、结构和接口等对象类型,即将它们的定义分成多个部分,保存到多个代码文件中。这是 C# 2.0 新引进的功能,用于解决大型对象类型的定义问题,因为 C# 不支持类体之外的方法和函数体定义。(1)访问修饰符类成员可以有如下访问修饰符(access modifiers):public(公用的)访问无限制。protected(保护的)只可被包含类(containing class)或其派生的类型访问。internal(内部的)只能被此程序访问。protected internal(保护内部的)只能被此程序或其包含类所派生的类型访问。private(私有的)只能被其包含类访问,为默认的。C# 类的 public、protected、private 等成员修饰符,每次只能修饰一个成员,直接位于成员声明的开始处,而且没有冒号分隔符。而不是像 C+那样,一个修饰符可以修饰位于其后(直到下一个修饰符为止)的若干成员。(2)数据成员类的数据成员(data member)有: 属性 常量修饰符 const 标识符 = 常量表达式 , ;其中,常量修饰符有:new、public、protected、internal、private 及它们的有效组合。类的数据成员可以是静态数据(使用了 static 修饰符) ,也可以是实例数据(未使用 static 修饰符) 。静态数据为类的所有实例对象所共有,而实例数据则每个实例对象都自己的副本。常量默认是(总是)静态的。字段还可以是只读的(使用了 readonly 关键字,这是 C# 新增的)和易变的(使用了 volatile 关键字,字段值一般位于 CPU 中的寄存器中,高效但是有效期短太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日10暂) 。(3)函数成员类的函数成员(function member)有:属性(property)提供对对象或类的特性(characteristic)进行访问的成员。声明格式为:其中,属性修饰符与方法修饰符相同,访问修饰符有protected、internal、private、protected internal 和 internal protected,与类成员的普通访问修饰符相比,没有 public、多了 internal protected(内部保护的) 。事件(event)定义该类可生成的通知(notifications) 。在发生某些行为时,可让对象通知程序。客户程序可以调用事件处理程序代码来响应该事件。声明格式为:其中,事件修饰符与方法修饰符相同。索引器(indexer)允许对象像数组一样被索引的一种成员。声明格式为:其中,索引器修饰符与方法修饰符类似,只是少了 static。用户定义的运算符(operator)运算符重载函数。声明格式为:构造函数(constructor)包括实例构造函数和静态构造函数。实例构造函数(instance constructor)实现初始化一个类实例所需的行为,会在创建每个类实例时被系统调用。注意:因为 C# 会自动给字段初始化,所以构造函数在 C# 中的作用没有在 C+的大。格式为:类型名(参数列表);注意:即使调用没有任何参数的默认构造函数,也不能省去后面的圆括号“()” ,不然是语法错误。例如:A a = new A();静态构造函数(static constructor)实现初始化一个类所需的行为,会在程序装入时被系统调用。为类编写无参数的具体构造函数是 C# 的一个新特征,主要用于类的静态字段或属性的运行时初始化。格式为:static 类型名(参数列表);太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日11终结器(finalizer)在 C# 的旧版本中叫析构函数(destructor) ,但由于引用类型的对象是位于具有垃圾内存自动回收功能的 CLR 堆上,所以C# 中的析构函数的功能与 C+的很不一样。为了与 C+的析构函数有所区别,在 C# 的新版本中,改叫终结器。格式(与 C+的析构函数相同)为:类型名();。2结构C# 中的结构(struct)与 C+中的类似,也可以封装数据和函数(属性和行为),是一种轻量级的类。但是它与 C# 的(位于 CLR 堆中的)类(为引用类型)不同,它是一种(位于局部栈中的)值类型。1)结构与类的区别C# 中的结构与类的区别有:结构是值类型,而类是引用类型。结构是密封的(sealed) ,因此不能被继承。结构不能继承类和其他的结构。结构隐式地继承了 System.ValueType 类型。结构的(无参数)默认构造函数不能被自定义的构造函数取代。结构的自定义的构造函数,必须初始化结构中全部成员的值。结构没有析构函数。不允许初始化结构的字段,但是可以初始化结构的常量成员。2)结构声明结构的完整声明格式为:其中,结构的修饰符与枚举修饰符相同:new、public、protected、internal、private,但是与类的有所不同:因为 C# 的结构不支持继承,所以没有类的 sealed 和 abstract 修饰符;也没有 static 修饰符;还与C+一样,结构的默认修饰符为 public(类的默认修饰符为 private) 。结构成员声明与类的基本相同,只是没有 finalizer-declaration(终结器声明,即析构函数定义) 。C# 的结构和类一样,其 public、protected、private 等成员修饰符,每次只能修饰一个成员,也是直接位于成员声明的开始处,而且也没有冒号分隔符。而不是像太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日12C+那样,一个修饰符可以修饰位于其后(直到下一个修饰符为止)的若干成员。3分部类和静态类分部类和静态类都是 C# 所特有的,而且都是 C# 2.0 版新增加的。前者允许将一个类、结构或接口的定义,放到多个文件中;后者则是仅包含静态成员的类。1)分部类分部类和结构是在类和结构的声明中,使用了 partial 修饰符的类和结构。位于不同文件中的同一个分部类,必须位于同一个命名空间或包含类型(对嵌入式分部类)之中,而且在所有类修饰符必须完全一致。对泛型类,还要求声明中的类型参数和对类型参数的约束也完全一致。但是类的属性、基类和实现接口的列表却可以不同。另外,分部类也可以用作嵌套类,不过其包含类必须也是分部类。编译时,编译器会合并位于不同文件中的同一个分部类的 XML 注释、属性、基类、接口和成员。2)静态类静态类是在类的声明中,使用了 static 修饰符的类。静态类中只能包含静态成员,可以用静态构造函数来初始化这些静态成员。静态类是密封的(不能派生其他类) ,静态类不能被实例化,也不能包含实例构造函数。静态类一般用于定义公用的常数和方法(如.NET 中的 Math 类) ,使用时不需要创建实例,直接用“类名.字段”或“类名.方法”即可。例如:1.4.31.4.3 接口与继承接口与继承继承(inheritance)是面向对象的基本特征,所有的 C# 类和结构都是直接或间接地从类 Object 派生的。C# 中没有明确指出基类的类,都以 Object 作为其默认基类。C# 中的结构不支持继承,但是 C# 支持类的单一继承(single inheritance) ,多重继承的问题(与 Java 一样)需通过接口来解决。1接口接口(interface,界面)的概念来源于组件编程的思想。接口定义统一的公用方法的原型,但是不包含方法的具体实现代码,方法体(代码)由实现接口的类来定义(编写) 。所以接口定义的是一种契约(contract) ,实现该接口的类则遵守(adhere)此契约。接口相当于组件的界面,供使用组件的用户查询和调用,而实现接口的类则是组件的编码模块本身。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日13在 C# 中,一个接口可以继承自多个接口,一个类也可以实现多个接口。实现某个接口的类,必须实现该接口中的所有方法。2继承的种类C# 中的继承有两种类型:实现继承(类继承)派生类型继承了基类型的所有成员,包括方法、属性、事件和索引的实现代码,派生类既可以直接调用基类的各种函数成员的实现代码,也可以自己编写代码来覆盖或重写它们,还可以为派生类添加新的数据和函数成员。接口继承(非实现继承)派生类型只继承了基类型中的函数签名(signature of a function) ,包括函数名、类型参数的个数、每个形参(formal parameter)的类型和种类(kind,值、引用、输出) ,从左到右的顺序,但是不包括函数的返回类型、参数名称、类型参数的名称、以及可对最右边的参数指定的参数修饰符。而没有继承基类型中的实现代码。接口继承主要用于指定派生类应该具有什么特性和功能。接口继承相当于接口的实现。C+只支持实现继承,VB 则只支持接口继承,C+/CLI、Java 和 C# 都既支持实现继承,也支持接口继承,所以非常适用于编写基于组件的分布式软件。C# 中的结构,支持(多重)接口继承,但是不支持实现继承。即,你可以在结构中实现多个接口中定义的函数成员,但是你却不能从类或结构来派生新的结构,也不能从结构派生新的类。不过,用户定义的结构,总是自动派生于System.ValueType 抽象类,还可以派生于(实现)多个接口。C# 中的类,则支持单一实现继承和多重接口继承。3方法的继承C# 中方法的继承关系非常多样,除了传统 C+的虚函数(C# 增加了 override修饰符)和纯虚函数(即 C# 的 abstract 抽象函数)外,还增加了隐藏方法(new) 、密封方法(sealed)和基类方法的调用指令(base.方法名)等诸多新方式。1)虚方法 override虚函数是面向对象编程中实现运行时多态性的标准途径,而编译时的多态性则是由具有同样函数名,但是函数签名不同的多个重载(overload)函数来实现的。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日14与 C+不同的是,在 C# 中重写基类的虚方法时,必须使用 C# 特有的重写修饰符 override(覆盖) 。2)隐藏方法 new在 C+中,不需要添加任何修饰符,就可以任意重载或覆盖基类的虚函数和非虚函数,但是在 C# 中,这样做会得到一个编译警告。目的是,为了避免程序员的笔误,也为了适应代码的维护与升级。解决办法是,上面介绍过的使用 override 修饰符来明确重载基类的虚方法,以及使用 new 修饰符来显式隐藏(覆盖)基类中具有同样签名的(非虚)方法。第二章 系统开发背景当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统、规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日15方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。基于这些问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。第三章 需求分析3.13.1 应用需求分析应用需求分析图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护及系统状态的查看、维护并生成催还图书报表。3.23.2 实际需求分析实际需求分析图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日16登陆本模块进行更多的考虑。在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息。 第四章第四章 可行性分析可行性分析4.14.1 环境可行性分析环境可行性分析由于本系统管理的对象单一,都是学生,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。因此,比较适合于采用数据库管理。在技术难度方面,由于有指导老师的指导和相关参考文献,特别是网上资料,特别是参考其它程序的功能,因此完全可以实现。本系统的设计是在 Windows XPXP 操作系统环境下,使用 Visual Studio.NET 2003 中文版开发成功的。Visual Studio 具有以下特点:4.24.2 面向对象的程序面向对象的程序分析分析1、面向对象设计不再是单纯的从代码的第一行一直编到最后一行,而是考虑如何创建类和对象,利用类和对象来简化程序设计,并提供代码的封装和可重用性,便于程序的维护与扩展。2、所谓的对象是一种抽象的名称,用来对应实现世界存在的“东西” 。一个窗口、一个按钮、一个菜单都可视为一个对象,而按钮对象、菜单对象、又会出现在窗口对象中,因此按钮对象、菜单对象便是窗口的组件之一。对象内部的数据是不能随意更改的,必须由外部向其传递信息,再由对象按其方法加以处理。用户无需太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日17知道其任何细节,操作是封闭的,对象之间能通过函数调用相互通信。3、类可视为一个产品模具、一个模块。在面向对象设计中,类是对象的原型,是对象的制作器。类的概念是面向对象程序设计最重要的特征。所谓类,是指由数据结构及其相关操作所形成的集合,描述该类任一对象的共同的行为特征,是对一组性质相同的对象的程序描述,概括了对象的共同性质和数据。4、面向对象设计的核心是类的设计。例如:可以定义一个“成绩查询”类,该类中可以定义查询的姓名、学号、班级等信息,则以此类为原型可以设计出众多的“成绩查询”类的对象实例,这些实体都具有类中所定义的特征。第五章第五章 系统概要设计系统概要设计5.15.1 模块分析模块分析5.1.15.1.1 功能模块图功能模块图 太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日18图示 3.2.15.25.2 模块分析模块分析5.2.15.2.1 “图书资料管理图书资料管理”模块模块“图书资料管理”模块主要实现图书资料的分条浏览、添加、修改、删除、查询和打印功能。在表单的“书籍资料”页框中可以通过“移动记录工具栏”分条查看系统内所有的图书的详细资料,包括图书的名称、类别、作者、出版社、购买日期等。单击“命令按钮工具栏”中的按钮可以对 “书籍资料”页框中的记录进行相应的操作。5.2.25.2.2 “学生资料管理学生资料管理”模块模块“学生资料管理”模块主要实现学生资料的分条浏览、添加、修改、删除、查询和打印功能。在表单的“学生资料”页框中可以通过“移动记录工具栏”分条查看系统内所有的学生详细资料,包括学生姓名、性别、系别、班级等资料。单击“命令按钮工具栏”中的按钮可以对“学生资料”页框中的记录进行相应的操作。5.2.35.2.3 “借还书操作借还书操作”模块模块“借还书操作”模块主要实现读者借书记录的查看、借还书操作、图书借阅排行榜、查看逾期未归还图书和记录打印等功能。读者借书记录查看功能可以查看所有的借书记录 ,也可以只查看目前尚未归还的借书记录。在“读者借书记录”表单中单击“借书”按钮 ,在打开的“输入”表单中 ,输入要借出的图书编号 ,如果该图书在馆中而且该读者还能借书 , 则借书成功。“读者借书记录”表单中单击“还书”按钮 , 在打开的“输入”表单中输入要归还的图书的图书编号 ,如果该图书是被当前读者借出 ,则还书成功。当表单中显示的是读者未归还的图书列表时 , 在列出借书记录的表格中双击要归还的图书的“图书编号”栏即可将此图书还入。在“读者借书记录”表单中 , 单击“过期”按钮 , 可以查看系统内到了归还日期而未归还的图书的借阅记录。在“读者借书记录”表单中 ,单击“排行”按钮 ,可以查看系统内借阅次数在所有图书内排行前 10 名的图书的列表。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日19第六章第六章 详细设计详细设计6.16.1 设计创建数据库设计创建数据库6.1.16.1.1 设计数据库设计数据库本系统实现了系统登录功能 , 而系统登录需要账号和密码 , 这就需要 创建一个“系统帐号”(Accounts) 数据表 , 用来存储系统登录用的账号和密码。本系统要实现图书资料和学生资料的管理 , 所以需要创建 “学生信息” (Student)数据表和“图书信息 ”(Book) 数据表。 “学生信息 ”(Student) 数据表中包含了学生的“系别”信息 , 在本系统中为了简化系别的管理 , 另外创建了一个“系别”(Xibie)数据表用来存储系别的信息 , 在“学生信息”(Student) 数据表中只存储系别的编号。由于系统要实现读者借还书功能、还要实现读者借还书记录的查看 ,所以还需创建一个“读者借书记录 ”(JyRec) 数据表来保存读者的借阅记录。6.1.26.1.2 创建数据库创建数据库“图书借阅管理系统”作为一个完整的数据库管理系统 , 在创建阶段利用项目管理器可以更好组织管理各种格式的文件 , 因此首先需要创建一个项目 , 然后在项目管理器创建其他格式的文件。在 VFP 主窗口中选择“文件”菜单下“新建”子菜单 , 在打开的“新建”对话框的“文件类型“区域中选中”项目”,然后单击右侧的”新建文件”按钮,打开”创建“对话框中的”项目文件“文本框中输入项目名称 , 在此输入 Tushu”,单击“保存”按钮即创建了一个项目。在项目管理器的“数据”选项卡中选中“数据库”单击右侧的“新建”按钮,在弹出的“新建数据库”对话框中单击“新建数据库”, 在弹出的“创建”对话框的“数据库名”文本框中输入数据库的名称 , 在此输入“Tushu”作为数据库名 , 单击“保存“按钮即创建了一个空的数据库。在项目管理器的“数据”选项卡中打开刚才创建的“Tushu”数据库的目录树,选中“数据表”,单击右侧的“新建”按钮即可开始数据表的创建。系统关系图如下图所示太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日20图示 4.1.2本系统中要用到的数据表的字段的属性设置分别设置如下。“系统账号”(图书卡号) 数据表的宇段属性设置如表 1 所示。表 1“图书卡号” (LentCardType)数据表字段属性设置字段名数据类型说明帐号字符型字段宽度 20,主索引字段,不能为空姓名字符型字段宽度 20密码字符型字段宽度 20创建“系统账号”(图书卡号) 数据表后向数据库中添加一条记录作为系统的默认帐号,该记录的各字段的值如下 :“cyr”,“cyr”,“楚雅茹”。“学生信息”(BookInformation) 数据表各字段的属性设置如表 2 所示。表 2“图书类型” ( BookInformation)数据表字段属性设置图书 Id数据类型说明图书编号字符型字段宽度 6,主索引字段,输入掩码为“999999”太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日21书名字符型字段宽度 20作者名字符型字段宽度 20出版社字符型字段宽度 4,为普通索引出版日期字符型字段宽度 10图书价格字符型字段宽度 12,输入掩码为“999#9999999”邮件字符型字段宽度 30借出次数数据类型整数据;图书状态字符型字段宽度 10“系别信息” (图书类别)数据表各字段的属性设置如表 3 所示表 3“图书类别” ( 图书类别)数据表字段属性设置类型编号字符型字段宽度 4,主索引字段,输入掩码为“9999”类型名称字符型字段宽度 20“图书信息” (Book)数据表各字段的属性设置如表 4 所示表 4“图书信息” (Tushu)数据表字段属性设置字段名数据类型说明图书编号字符型字段宽度 6,主索引字段,输入掩码为“AA9999”图书类别字符型字段宽度 10图书名称字符型字段宽度 40图书作者字符型字段宽度 20出版社字符型字段宽度 40购买日期日期型字段宽度 8购买价格货币型字段宽度 8借阅次数数值型字段宽度 4,默认值 0是否借出逻辑型字段宽度 1,默认值“.F.”对“图书信息” (Book)数据表的字段属性设置需要说明的是“借阅次数”和“是否借出”字段的默认值一定要设置,因为对于新添加的图书,其一定是没有被借出的,而且其借阅次数一定是 0,所以在表单中向数据表添加记录时,这两个字段应该是不需要添加的,可以由默认值生成。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日22“读者借书记录” (JyRec)数据表的字段属性如表 5 所示。表 5“读者借书记录” (ReaderInfor)数据表字段属性设置字段名数据类型说明学号字符型字段宽度 6,普通索引字段,输入掩码为“999999”图书编号字符型字段宽度 6,普通索引字段,输入掩码为“AA9999”借阅日期日期型字段宽度 8归还日期日期型字段宽度 8数据表之间的关系,将在具体表单的数据环境中设置。将“借书卡” (LentBookCard)数据表、 “借书卡类别” (LentCardType)数据表、 “图书信息” (BookInformation)数据表、 “读者借书记录” (LentNoteInfor)数据表添加到表单的数据环境中,用主外键建立关联。6.26.2 创建系统主程序创建系统主程序WinForm 是.Net 开发平台中对 Windows Form 的一种称谓。 .Net 为开发WinForm 的应用程序提供了丰富的 Class Library(类库) 。这些 WinForm 类库支持 RAD(快速应用程序开发 ),这些类库被封装在一个名称空间之中,这个名称空间就是 System.Windows.Forms。在此名称空间中定义了许多类,在开发基于.Net 的 GUI 应用程序的时候,就是通过继承和扩展这些类才使得我们的程序有着多样的用户界面。将一个文件设为项目主文件的方法是在项目管理器中选中该文件 , 然后在右键快捷菜单中选择“设为主文件”子菜单或者选择“项目”菜单下“设为主文件”子菜单即可。一个文件设为项目的主文件后 , 该文件的将以粗体显示LibraryLogin 程序的代码为:(见附表)6.36.3 创建系统常用类创建系统常用类系统主表单中“学生资料”和“书籍资料”页框控件中都需要用到“移动记录工具栏”和“命令按钮工具栏”, 这两个命令按钮工具栏如果在表单中分别创建会太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日23使工作变得繁琐,可以采用创建工具栏类 , 然后在表单中用实例化的方式来简化工作。6.3.16.3.1 创建创建“移动记录工具栏移动记录工具栏”类类“移动记录工具栏”类基于“CommandGroup”基类,存储于“AdminButton”可视类库中,命名为“MoveRecord”。“移动记录工具栏”类包括“首记录”、“上一个”、“下一个”和“末记录”4 个按钮,在表单中可以利用这 4 个按钮定位数据表中的记录指针。需要指出的是,在本系统中当鼠标移动到按钮上时,鼠标指针变为一个特定指针,这就需要一个鼠标指定文件,在本系统中使用“H_point.cur”文件,将该鼠标指针文件放在系统的根目录下,添加按钮“MouseMove”事件如下:(见附表)6.3.26.3.2 创建创建“命令按钮工具栏命令按钮工具栏”类类与“移动记录工具栏”类相同,为了改变鼠标停留在按钮时的指针,还需添加按钮的“MouseMove”事件,代码与“移动记录工具栏”类中的相同。6.46.4 创建登录表单创建登录表单 6.4.16.4.1 系统主表单的功能系统主表单的功能为了系统有安全,一般系统都设有登录窗体,登录该系统除了输入正确的用户名和密码外,还必须选择用户登录的权限.不同权限的用户登录系统分别执行不同有操作. 本系统登录权限分为四类:图书管理员:能够对图书进行增加,删除,修改,查询,以及图书证件的查询操作.证件管理员:能对图书证件进行增加,删除,修改,查询操作等.普通管理员:能对图书信息进行增,删,改,查,并能对图书证件进行增,删,改,查.高级管理员:能执行本系统全部功能.太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日24图示 6.4.16.4.26.4.2 创建系统主表单界面创建系统主表单界面设计 Winform 父窗体,命名为“LibraryMainWindow” 。创建好的表单效果中有两个页框,其中“学生资料”页面效果如下图所示。图示 6.4.2太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日25图书管理主窗体主窗体主要包括:标题栏:图书管理系统;菜单栏:图书管理(新书入库,图书查询,图书借阅,图书归还,图书信息修改,旧书销毁),证件管理(新证办理,证件信息修改,图书证挂失、注销) ,图书预览(热门图书排行) ,信息统计(库存借出比例,类别信息统计) ,系统设置(用户设置) ,帮助(关于窗体) 。工具栏:相当于工具栏的快捷方式,包括图书信息(图书查询,图书借阅,图书归还) ,修改信息(图书修改,证件修改,添加代码) ,新书入库,新政办理,证件挂失、注销,旧书销毁,借出比例,图书类别信息,用户设置,窗体容器区:存放子窗体;状态栏(初始化信息,系统当前时间) ;6.4.3.6.4.3. 新书入库新书入库 当图书馆新进一批图书时,管理员要通过该系统将所有图书添加到系统数据库中。为了保证系统的安全性和 健壮性,该系统的文本框。 使用设置掩码控件限制用户的输入。从而保证系统的安全性。该窗体用 TabCotrol 控件将同类型的信息层叠在一个窗体以方便操作。如果用户输入有误将给出提示,不得将错误信息插入数据库。可以点击重置按钮清空文本框。以便重新输入。如果用户输入正确无误,单击保存,将输入的图书信息插入库存中。如果用户要退出系统,单击退出按钮,用户还可以通过点击 page 页查看其它页面。也可以点击下一页按钮跳到下一页。控件中的数据处于可修改状态, “移动记录工具栏”处于不可用状态, “命令按钮工具栏”中除了“保存”和“取消”按钮外其他按钮都处于不可用状态, “借还书”按钮处于可用状态, “书籍信息”页面处于不可用状态。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日26图示 6.4.36.4.46.4.4 图书借阅图书借阅在“学生信息” (StuPage)被激活时,应该将“学生信息” (Student)数据表所在工作区作为表单的当前工作区,取消由其他表单设置的过虑条件,并且使页面进入浏览状态。添加“学生信息”页面的 Activate 事件代码如下:(见附表)“学生信息”页面中的“系别”组合框中选择某一个系编号后,要在“名称”栏显示系统编号所代码的系别名称,由于在数据环境中将两者做了关连,所以在选择了某个系编号后只需要刷新表单即可。图书借阅介绍:首先用户先选定自己要借阅的图书,然后通过管理员输入用户的卡号,然后要判断用户的卡号是否正确,如果不正确给出提示,其次判断用户的卡号是普通卡还是贵宾卡,是否能满足用户借阅图书的数量。如果不能满足用户的借阅将给出提示。当用户借阅图书成功后,将更新图书信息,用户图书证件性息。单击退出将退出此窗体。单击上一页可以跳转至图书查询。单击下一页可以跳至图书归还。 太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日27图示 6.4.4 6.4.56.4.5 图书归还图书归还在“书籍信息” (BookPage)页面被激活时,表单中的当前数据工作期应该变为“图书信息”数据表所在的工作期,将可能由其他表单对该数据表设置的过虑条件去掉,同时要使该页面进入浏览状态。用户归还图书时,管理员先输入图书编号,点击显示图书信息。显示图书的其他信息。然后输入用户的图书证件号,点击显示图书证件信息,显示图书证件的其他信息。检查用户信息无误后,点击还书。点击还书后,系统将更改用户的图书卡的借阅信息。并修改图书信;。上一页跳至图书借阅;下一页跳至旧书销毁;点击退出将退出该窗体。单击“还书”按钮 ,可以调用“输入”表单用来输入要归还的图书编号,如果该图书由当前读者借出,则还书成功,否则失败。另外,当表单中的表格控件中显示的是当前读者的“已借出”图书记录时,可以通过双击列表中的某本书的“图书编号”栏来快速还书。太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日28图示 6.4.56.4.66.4.6 图书信息查询图书信息查询左边采用树控件显示图书信息当用户单击该数节点是将展开以下信息。如果用户单击图书编号节点以及字节点后,单击工具栏上对应的按钮将在表里显示对应的图书信息。右边的图书信息表采用分页技术将成千上百条信息分成多页,管理员上一页按钮,下一页按钮,首页按钮,尾页按钮,分别浏览图书所有信息。左上角按钮上一页可以跳至图书归还,下一页跳至旧书销毁;退出-退出窗体。在对图书信息查询,为了能快速查询所要显示的图书信息,设置了多个条件查询,如按照作者信息查询,按照出版社信息查询,按照图书名称信息查询,按照图书类别信息查询等条件,查询显示页面为了美观,采取了分页功能,单击上一页,可以浏览上一页的信息,单击下一页能浏览下一页的信息,也可以直接浏览首页和尾页的信息。 太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日29图示 6.4.66.4.76.4.7 图书信息修改图书信息修改图书信息修改表采用分页技术。通过单击按钮分别浏览图书所有信息。并且在文本框能显示数据表的当前页数和总页数。在数据表可以执行增加,删除,修改等的批量更新。刷新按钮可以将修改的最新信息显示到表中。关闭按钮退出该窗体图书管理系统示例代码:如下1.MessageBox.Show(您确定要修改该图书信息吗?, 系统提示, MessageBoxButtons.YesNo, MessageBoxIcon.Information)太原理工大学高等教育自学考试 学生:郑莉 2010 年 5 月 10 日30图示 6.4.76.4.86.4.8 旧书销毁旧书销毁 “书籍信息”页面的查询功能由“输入查询条件”表单和“图书信息查询结果”表单组成。图书高级管理员在城需求下要销毁一部分旧书,按照多个条件进行查询所有要销毁的图书信息,同样也提供了分页功能,单击按钮查询,根据图书编号查询到要删除的图书,单击销毁按钮即删除该图书。此“输入查询条件”表单也是用来向用户收集查询条件。单击“过期”按钮可以查看系统中的逾期未归还的图书的列表。单击“排行”按钮可以查看系统中借出次数最多的 10 本书的列表。 void btnDestroyBook_Click(object sender, EventArgs e) BookInformationModel objBookInformationmodel = new BookInformationModel(); objBookInformationmodel.BookId = this.txtOldBookID.Text.Trim().ToString(); string bookstatus = null; if (BookInformationBll.SelectBookstatus(objBookInformationmodel).TablesBooktype.Rows.Count 0) foreach (DataRow r
展开阅读全文