文档库 最新最全的文档下载
当前位置:文档库 › 毕业设计 图书管理系统毕业设计

毕业设计 图书管理系统毕业设计

继续教育学院综合作业报告Array

二〇一〇年五月十五日

摘要

本文首先介绍了数据库管理系统(DBMS)的基本概念及关系模型等。然后对问题的来源进行深入分析,指出图书借阅者、图书馆工作人员和图书馆管理人员是问题主要来源,并指出本数据管理系统的实用性功能就是管理好图书馆信息,提高工作效率,避免数据处理手工操作,工作量大,出错率高的弊端。接着对需求分析进行细致的分析,特别对图书借阅者、图书馆工作人员和图书馆管理人员三者权限进行分配。接着对系统功能模块进行分析,指出本系统功能模块主要分为“图书资料管理”模块、“学生资料管理”模块、“借还书操作”模块。总的来说,本图书管理系统,介绍了该系统组成结构、功能特点、使用原理和方法,本系统实现了系统登陆、图书管理、学生管理图书的借阅与归还、图书借阅排行榜和查看逾期未还图书以及各种信息的打印等功能。有了这个系统就使图书馆的工作变得简单了许多,使图书馆的图书管理形成了一个整体自动化管理模式。

管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,企业要生存要发展,要高效率地把企业活动有机地组织起来,就必须加强企业管理,即加强对企业内部的各种资源(人、财、物等)的有效管理,建立与自身特点相适应的管理信息系统。图书馆管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端的应用程序的开发两个方面。对于前者要求建立数据的一致性和完整性,对于后者则要求应用程序功能的完备,易用等的特点。基于上述考虑本系统主要利用Microsoft Visual Studio 2005作前端的应用开发工具,利用SQL Server 2000 作为后台的数据库,利用WINDOWS作为系统平台开发的图书管理系统。另外本图书馆管理系统利用软件工程化思想和方法,总体上是采用结构化生命法进行系统分析和设计的,而系统实现等步骤则采用了原型法和面对对象的方法。

关键词:C#程序设计语言, SQL SERVER 2000,软件工程

目录

摘要 (2)

第1章基础理论知识 (5)

1.1数据库应用系统开发简介 (5)

1.2数据库管理系统 (5)

1.3M ICROSOFT V ISUAL S TUDIO 2005简介 (6)

1.4C#语言简介 (6)

1.4.1 C#中OOP概述 (6)

1.4.2 面向对象的C# 编程 (8)

1.4.3 接口与继承 (12)

第二章系统开发背景 (14)

第三章需求分析 (15)

3.1应用需求分析 (15)

3.2实际需求分析 (15)

第四章可行性分析 (16)

4.1环境可行性分析 (16)

4.2面向对象的程序分析 (16)

第五章系统概要设计 (17)

5.1模块分析 (17)

5.1.1 功能模块图 (17)

5.2模块分析 (17)

5.2.1 “图书资料管理”模块 (17)

5.2.2 “学生资料管理”模块 (18)

5.2.3 “借还书操作”模块 (18)

第六章详细设计 (18)

6.1设计创建数据库 (18)

6.1.1 设计数据库 (18)

6.1.2 创建数据库 (19)

6.2创建系统主程序 (22)

6.3创建系统常用类 (22)

6.3.1 创建“移动记录工具栏”类 (23)

6.3.2 创建“命令按钮工具栏”类 (23)

6.4创建登录表单 (23)

6.4.1 系统主表单的功能 (23)

6.4.2 创建系统主表单界面 (24)

6.4.3. 新书入库 (25)

6.4.4 图书借阅 (26)

6.4.5 图书归还 (27)

6.4.6 图书信息查询 (28)

6.4.7 图书信息修改 (29)

6.4.8 旧书销毁 (30)

6.4.9 图书证的办理及证件信息修改 (32)

6.4.10证件挂失与注销 (32)

6.4.11 图书类别信息排行 (33)

6.4.12 库存外借信息 (34)

6.4.13 图书借阅排行榜 (35)

第七章结果分析 (36)

项目学习心得体会 (37)

结束语 (38)

致谢 (39)

第1章基础理论知识

1.1 数据库应用系统开发简介

在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。

数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。

数据库技术在计算机软件邻域研究中一直是非常重要的主题,产生于60年代,40多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术一时成为最热门技术之一。

1.2 数据库管理系统

数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、更新及各种控制,都是通过DBMS进行的。DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。根据数据模型的不同,DBMS可以分成层次型、网状型、关系型、面向对象型等。SQL Server 2000就是一种关系型数据库管理系统。

关系模型。关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。

关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。

1.3 Microsoft Visual Studio 2005简介

2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的 Visual Studio Express 版本

运行库实际上在组件的运行时和开发时操作中都起到很大的作用,尽管名称中没有体现这个意思。在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。

1.4 C#语言简介

C#(C Sharp)是微软于2000年提出的一种源于C++、类似于Java的面向对象编程语言,适合于分布式环境中的组件开发。C# 是专门为.NET设计的,也是.NET 编程的首选语言。

1.4.1 C#中OOP概述

程序设计语言,在思想上发展很快,在技术上也是不断创新。经历了手工操作(控制面板)、机器语言、汇编语言、宏汇编语言、高级语言和第4代语言等多个阶段。OOP只是在高级程序设计语言中,流行的多种编程技术之一。

1.基本特征

面向对象编程的三个基本特征是:

封装(encapsulation)——是对问题的抽象,以达到信息隐藏的目的。通过类和对象,将属性(数据/变量)和方法(操作/函数)封装在一个黑箱内,

将细节隐藏起来。既可以保护数据不被他人恶意或大意地修改,又能防止其

他程序员编写高耦合度的代码,还方便了今后对对象内部的修改和升级。

●继承(inheritance)——利用问题和事物的相似性,通过类的(多层)继承

机制,可以达到减少软件开发难度和重用已有对象的属性和方法之目的。

●多态(polymorphism)——同一操作或响应,可以同时针对多个可选的类

型和对象,并且能够自动在它们中间选择最合适的来进行。多态可以分为:

?编译时多态:包括函数和运算符的重载(overload),通过早期的静态绑

定(binding)来实现。

?运行时多态:通过继承结合晚期动态绑定来实现——用同一基类的指

针,可以访问各个不同派生类中的同名方法和函数。

2.基本概念

面向对象编程的基本概念(类似的概念多、表达不够准确、各处的用法各异):

●抽象(abstraction)——一个问题的本质特征。忽略一个对象的细节,致力

于一般的合适级别的程序能力。抽象是在事物的周围绘制透明的盒子,是定

义事物接口的行为。

●信息隐藏(information hiding)——限制外部对类属性(数据成员)的访问。

●封装(encapsulation)——将某种保密和隐匿应用到类中的数据和一些方法

(函数或子例程)上。封装确保一个对象只能通过确定的渠道(即类的公用

方法)才可被修改。封装意味着将数据及相关函数打包到一个单一的单元

(类)中。每个对象暴露一个接口(公用方法),规定其他对象可以如何读

取或修改它。

●类(class)——问题的抽象,对象的模版,接口的实现。例如int是整数的

模版、CPoint是点的模版。

●对象(object)——问题中的事物,类的实例(变量),拥有数据和功能。

若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.2 面向对象的C# 编程

1.类

类类型定义包含数据成员、函数成员和嵌套类型的数据结构,其中数据成员包括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。类类型支持继承,继承是派生类可用来扩展和专门化基类的一种机制。

功能与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中的寄存器中,高效但是有效期短暂)。(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 类型名([参数列表]);

●终结器(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等成员修饰符,每次只能修饰一个成员,也是直接位于成员声明的开始处,而且也没有冒号分隔符。而不是像C++那样,一个修饰符可以修饰位于其后(直到下一个修饰符为止)的若干成员。3.分部类和静态类

分部类和静态类都是C# 所特有的,而且都是C# 2.0版新增加的。前者允许将一个类、结构或接口的定义,放到多个文件中;后者则是仅包含静态成员的类。

1)分部类

分部类和结构是在类和结构的声明中,使用了partial修饰符的类和结构。位于不同文件中的同一个分部类,必须位于同一个命名空间或包含类型(对嵌入式分部类)之中,而且在所有类修饰符必须完全一致。对泛型类,还要求声明中的类型参数和对类型参数的约束也完全一致。但是类的属性、基类和实现接口的列表却可以不同。另外,分部类也可以用作嵌套类,不过其包含类必须也是分部类。

编译时,编译器会合并位于不同文件中的同一个分部类的XML注释、属性、基类、接口和成员。

2)静态类

静态类是在类的声明中,使用了static修饰符的类。静态类中只能包含静态成员,可以用静态构造函数来初始化这些静态成员。静态类是密封的(不能派生其他类),静态类不能被实例化,也不能包含实例构造函数。

静态类一般用于定义公用的常数和方法(如.NET中的Math类),使用时不需要创建实例,直接用“类名.字段”或“类名.方法”即可。例如:

1.4.3 接口与继承

继承(inheritance)是面向对象的基本特征,所有的C# 类和结构都是直接或间接地从类Object派生的。C# 中没有明确指出基类的类,都以Object作为其默认基类。C# 中的结构不支持继承,但是C# 支持类的单一继承(single inheritance),多重继承的问题(与Java一样)需通过接口来解决。

1.接口

接口(interface,界面)的概念来源于组件编程的思想。接口定义统一的公用方法的原型,但是不包含方法的具体实现代码,方法体(代码)由实现接口的类来定义(编写)。

所以接口定义的是一种契约(contract),实现该接口的类则遵守(adhere)此契约。接口相当于组件的界面,供使用组件的用户查询和调用,而实现接口的类则是组件的编码模块本身。

在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)函数来实现的。

与C++不同的是,在C# 中重写基类的虚方法时,必须使用C# 特有的重写修饰符override(覆盖)。

2)隐藏方法new

在C++中,不需要添加任何修饰符,就可以任意重载或覆盖基类的虚函数和非虚函数,但是在C# 中,这样做会得到一个编译警告。目的是,为了避免程序员的笔误,也为了适应代码的维护与升级。解决办法是,上面介绍过的使用override修饰符来明确重载基类的虚方法,以及使用new修饰符来显式隐藏(覆盖)基类中具有同样签名的(非虚)方法。

第二章系统开发背景

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。

图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统、规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。

数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。

基于这些问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。

第三章需求分析

3.1 应用需求分析

图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人员、图书借阅者、图书进行管理和维护及系统状态的查看、维护并生成催还图书报表。

3.2实际需求分析

图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他借阅者的借书情况和个人信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。

图书馆工作人员有修改图书借阅者借书和还书记录的权限,所以需对工作人员登陆本模块进行更多的考虑。在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录,并打印生成相应的报表给用户查看和确认。

图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和统计、工作人员和管理人员信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改、统计图书的基本信息;浏览、查询、统计、添加、删除和修改图书借阅者的基本信息,浏览、查询、统计图书馆的借阅信息。

相关文档