范文一:图书管理系统实现步骤
用 VC++制作一个图书出版管理系统
关键词 :DAO 数据源创建 系统集成 消息函数 数据记录导航器 制作
3.1 系统设计的目的和意义
出版社图书出版管理是一个庞大的任务, 传统方式的图书管理将会 造成巨大的人力和物力的浪费,因此能否实现计算机管理呢 ? 回答是可 以的。本案例将用 VC++制作一个图书出版管理系统,他可以基本实现 图书出版管理的大部分功能。在参考文献 [1]、 [2]中,均有图书管理系 统制作的介绍。参考文献 [2]是基于 Visual FoxPr06.0实施的,而参考文 献 [1]则是基于 Visual C++6.0制作的 。在参考文献 [1]中,仅作了一个单 一的界面,而且使用的代码过于复杂,往往令初学者难以接受,因此, 本案例将采用简化的过程代码和完整的系统集成技术,并采用 DAO 数 据源创建方法。在以 DAO 方式创建数据环境时,采用了与参考文献 [1]以及本书中的案例一、案例二完全不同的方式,实现了数据源的引入和 应用程序的制作。 在程序中我们利用了消息函数, 并创建了一组自己数 据记录导航程序和数据修改程序,程序利用了简单的消息映射过程代 码,实现了对数据集的导航、浏览、增加和删除的功能,这也是与参考 文献 [1]中的代码不一样的,他是一种方便快捷的构建应用系统的方法。 3.2 系统功能设计
本系统具有一般系统的数据处理功能,如数据录入、增加、修改、 删除等,另外,本系统将涉及多个对话框及对话框之间的相互切换。
3.3 数据库与数据表的设计
本系统将首先创建一个“ 图书管理系统”数据库 ,并在他之中 创 建三个数据表 ,一个是“ 图书基本信息 ”数据表,一个是“ 图书借阅信 息 ”表,一个是“ 图书归还信息 ”表。
3.3.1定义数据表结构
数据表是数据库中的“元素”,数据库是数据表的集合。数据库和 数据表是任何数据库应用系统所不可缺少的基本要素, 因此我们需要首 先创建数据表。 先定义 “图书基本信息” 数据表的结构, 如表 3.1所示, 他专门用于记录出版社出版的图书的基本情况。
表 2.1 “图书基本信息”数据表结构
“图书借阅信息”数据表的结构定义如表 3.2所示。 参照此表!!
“图书归还信息”数据表的结构如表 3.3所示。
参照此表!!
3.3.2 数据库与数据表创建过程
利用 Microsoft Access创建数据库及其数据表的步骤如下:
(1) 启动 Microsoft Office 2003中的 Microsoft Access 2003应用程 序,出现图 3.1所示对话框。
图 3.1 新建数据库选择
(2)选择创建一个空数据库,单击“确定”按钮之后出现保存对 话框,确定保存数据库的文件位置(创建的数据库保存的位置为 D: \ VC++写作案例 \CH3\)和创建的数据库名称为“图书出版管理系统”即 可,随后出现图 3.2所示界面。
图 3.2 数据库中的数据表操作界面
在数据库操作界面中, 用户可以打开已经存在的数据表, 并进行数 据处理操作,也可以创建新的数据表或删除已经存在的表。
(3)双击“设计”菜单,即可以设计一个新的数据表结构:图 3.3是“图书出版基本信息”数据表结构的创建界面,用户可按表 3.1定义 的结构进行创建即可。
图 3.3 “ 图书出版基本信息 ” 数据表设计
用同样的方法, 可以创建其他两个数据表, 这在后面的系统制作中 将会用到。
数据表结构一经创建, 用户可以打开该数据表, 在数据表输入一些 基本数据,以在后面的系统设计中体现设计的效果。
3.4 图书出版管理系统应用程序框架
在 VC++中创建应用程序, 可以通过向导首先创建一个应用程序的 框架,应用程序框架为用户提供了一个基本购开发过程。在这里,首先 介绍制作 “图书出版管理系统” 的基本框架的过程和方法。 其过程如下:
(1)启动 VC++程序,出现 VC+开发平台。
(2)在 VC++主菜单中单击“文件 |新建”菜单项,出现工程类型 选 择 对 话 框 , 在 工 程 类 型 选 择 对 话 框 中 选 择 工 程 类 型 为 “ MFC AppWizard [exe]”。
(3)在“工程”编辑框中输入“图书出版管理系统”。
(4)在“位置”列表框中选择“ D: \ VC++写作案例 \CH3\”。
(5)选择创建新工作区和适应的 Win32平台,如图 3.4所示。
图 3.4 新工程创建设置
(6)单击“确定”按钮,出现应用程序类型选择对话框,如图 3.5所示。
图 3.5 设置应用程序类型
(7)在应用程序类型选择对话框中选择“单个文档”、“文档查 看体系结构支持”并设置资源语言为“中文”。
(8)单击“下一步”按钮进行进一步的设置;选择包含的数据库, 如图 3.6所示。
图 3.6 选择包含的数据库
(9)选择“查看数据库不使用文件支持”返项。
(10)中击“ Data Source”按钮,出现图 3.7所示的数据源创建对 话框。 在数据源连接方式中选择 ODBC 方式, 并通过开关按钮选样 “ D : \ VC++写作案例 \Ch3\图书出版管理系统 .mdb ”作为系统制作的数据源, 如图 3.7所示。
图 3.7 数据源连接方式与数据源选择
(11)单击 OK 按钮,出现“图书出版管理系统”数据库中的“出 版图书基本信息”数据表,回到图 3.6所示对话框。
(12)在图 3.6所示刘话框中单击“完成”按钮,即出现创建应用 程序基本框架的全部信息提示:
Application type of 图书出版管理系统:
Single Document Interface Application targeting:
Win32
Classes to be created:
Application: CMyApp in 图书出版管理系统 .h and 图书出版 管理系统 .cpp
Frame: CMainFrame in MainFrm.h and MainFrm.cpp
Document: CMyDoc in 图书出版管理系统 Doc.h and 图书出版 管理系统 Doc. Cpp
DaoRecordView : CMyView in 图书出版管理系统 View. h and 图书出版管理系统 View. cpp
DaoRecordset : CMySet in 图书出版管理系统 Set.h and 图书出 版管理系统 Set. Cpp
(connected to table ?[基本信息 ]? in data source ?D: \ \ VC++写作 案例 \ \ Ch3 \ \ 图书出版管理系统 .mdb?)
Features:
+ Initial toolbar in main frame
+ Initial status bar in main frame
+ Printing and Print Preview support in view
+ 3D Controls
+ Uses shared DLL implementation (MFC42. DLL)
+ Database support, without file support
+ ActvieX Controls support enabled
+ Localizable text in:
中文 [中国 ]
该信息提示总结了创建应用段序框架全部的设置内容, 用户可以浏 览该信息,如果与需要的设置不符,则需要重新创建应用程序框架,以 满足后面程序开发的需要:否则,在后面已经制作了一定内容之后再来 修改框架,将造成一定的损失。
单击“确定”按钮后即出现新创建的应用程序的工作区,如图 3.8所示。
图 3.8 工程工作区显示
3.5 开发图书出版基本信息处理对话框
在图书出版管理系统中, 图书出版的基本信息处理是一个重要的方 面, 为此我们首先需要创作这样一个界面。在工程向导生成的两个对话 框中,一个是主界面,一个是 About 对话框。我们就需要在主界面中制 作图书出版的基本信息处理功能。
3.5.1 在对话框中放入控件并进行属性设置
对话框的制作开发就是对控件进行开发制作, 一个对话框只是—个 容器,他可以容纳别的控件并产生作用,为此,制作开发对话框,首先 需要在对话框中放入必要的控件,操作步骤如下:
(1)删除对话框 IDD_MY_FORM中的 “ TODO :在这个对话框里 设置表格控制”文本提示框。
(2)在对话框中放入一些标签控件、分组框控件、编辑框控件及 命令按钮控件,对话框布局如图 3.9所示。
图 3.9 对话框布局
其中,标签控件的属性如表 3.4所示。
表 3.4标签对象的基本属性
两个分组框控件的基本属性如表 3.5所示。 表 3.5 分组框对象的基本属性
编辑框控件的属性设置如表 3.6所示。 表 3.6 编辑框对象的基本属性
命令按钮控件的基本属性如表 3.7所示。 表 3.7 命令按钮对象的基本属性
3.5.2 对编辑框进行数据绑定
在以上对话框的控件中, 除标签控件用于标示之外, 编辑框控件必 须与数据集进行数据绑定, 命令按钮必须进行过程代码编制才能执行相 应的任务。 因此用户需要首先将每一个编辑框控件与工程中引入的数据 源中的字段进行数据绑定。如何进行数据绑定呢?
由于存在多个编辑框控件,因此我们仅以 “图书编号” 编辑框控件 的数据绑定为例加以说明, 其他编辑框控件的数据绑定操作可以如法炮 制。
首先修改数据源的字段映射的成员变量,其方法如下:
(1) 用鼠标选中编辑框 IDC_EDIT_BH控件,然后单击鼠标右键, 出现一个快捷菜单。
(2)快捷菜单中单击“建立类向导”菜单项,出现一个消息映射 对话框。
(3)将消息映射选项卡切换到“成员变量”选项卡,如图 3.10所 示。
图 3.10 “ 成员变量 ” 选项卡
(4)在“成员变量”选项卡的 Class name 列表框中选择数据集 CmySet ,此时将出现创建数据源时产生的数据源字段的全部成员变量。 往往全部字段的成员变量名为自动生成的,而且按自然编号排列, 这样 在建立编辑框与字段映射时很不方便, 因此需要修改其数据集中全部字 段的成员变量名称, 通常按字段名称的中文拼音字母重新定义字段的成 员变量,重新定义字段的成员变量之前,需要先删除原字段成员变量, 然后再单击“增加成员变量”按钮定义新的成员变量,其全部字段的成 员变量如图 3.11所示。
图 3.11 重新定义成员变量的结果
接下来, 我们就可以为“图书编号”编辑框控件与字段成员变量进 行映射。
(5) 在图 3.11所示的对话框的 Class name列表框中选择 CmyView , 出现对话框全部成员列表,如图 3.12所示。
图 3.12 成员名称列表
(6) 在成员名称列表中选择 IDC_EDIT_BH编辑框, 然后单击 Add Variable 按钮,出现选择字段映射成员变量的列表框,在字段映射成员 变量列表框中选择“图书编号”字段的成员变量名称即可,如图 3.13所示。
图 3.13 编辑框控件与字段成员变量的映射
用同样的方法可以完成其他编辑框与相应的字段成员变量之间的 映射关系。 这样就将对话框中的编辑控件与数据源中的字段一一对应起 来, 并可以通过编辑框控件对数据集中的字段进行修改、增加与删除等 数据操作。
3.5.3 为每一个命令按钮编制过程代码
命令按钮是用于事务处理的, 但没有过程代码是不能进行任何操作 的, 因此我们需要为每一个命令按钮编制过程代码, 我们以 “增加记录” 命令按钮为例来说明编制过程代码的方法。
(1)用鼠标右键单击“增加记录”命令按钮,出现一个快捷菜单。
(2)在快捷菜单中单击“创建类向导”菜单项,出现消息映射对 话框。
(3)在消息映射对话框的第一个页面中选择 BN_CLICKED单击 事件句柄,并单击“增加函数”按钮,出现“增加记录”按钮的函数定 义界面,直接接受系统建议的函数名即可。
(4)单击“编辑代码”按钮,可以为“增加记录”按钮编辑过程 代码,其代码如下所示:
void CMyView : : OnButtonaddnew ()
{
//TODO: Add your control notification handler code here
m_pSet - > AddNew ();
UpdateData (FALSE);
}
其他几个命令按钮的过程代码编制可采用完全相同的方法, 他们的 过程代码如下:
“删除记录”命令按钮的过程代码如下所示:
void CMyView : : OnButtondelete ()
{
//TODO: Add your control notification handler code here
m_pSet - > Delete ();
m_pSet - > MoveNext ();
if (m_pSet - > IsEOF())
m_pSet - > MoveLast ();
if (m_pSet - > IsEOF ())
m_pSet - > SetFieldNull (NULL);
UpdateData (FALSE);
}
“刷新记录”命令按钮的过程代码如下所示:
void CMyView : : OnButtonupdate ()
{
//TODO: Add your control notification handler code here
UpdateData ();
m_pSet -> Update ();
m_pSet - > Requery ();
//m_pSet - > CancelUpdate ();
}
注意:在对话框运行时, 只有在有新记录增加、记录删除或记录修 改的情况下才能刷新记录,否则会出现信息提示。
“第一条记录”命令按钮的过程代码如下所示:
void CMyView : : OnButtonfirst ()
{
//TODO: Add your control notification handler code here
m_pSet - > MoveFirst ();
if (m_pSet - > IsBOF ())
{
MessageBox (“ 记录已经在第一条! ”);
m_pSet -> MoveNext ();
UpdateData (FALSE);
return;
}
UpdateData (FALSE);
}
“下一条记录”按钮的过程代码如下所示:
{
//TODO: Add your control notification handler code here m_pSet - > MoveNext ();
if (m_pSet - > IsEOF()) {
MessageBox (“ 记录已经在最后一条 !”);
m_pSet - > MovePrev ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
“前一条记录”命令按钮的过程代码如下所示: void CMyView : : OnButtonprev ()
{
//TODO: Add your control notification handler code here m_pSet - > MovePrev ();
if (m_pSet - > IsBOF()) {
MessageBox (“ 记录已经在第一条! ”);
m_pSet - > MoveNext ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
“最后一条记录”命令按钮的过程代码如下所示:
{
//TODO: Add your control notification handler code here
m_pSet - > MoveLast ();
if (m_pSet - > IsEOF ())
{
MessageBox (“ 记录已经在最后一条! ”) ;
m_pSet - > MovePrev ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
这样我们便完成了对话框 IDD_MY_FORM的全部制作过程。编译 运行工程,出现该对话框的运行效果,如图 3.14所示。
图 3.14 对话框运行效果
3.6 制作图书销售处理对话框
在图书出版管理系统中, 图书销售管理是一个重要的方面, 需要一 个专门的对话框来对图书销售进行记录、编辑、增加或删除。
3.6.1 增加新的对话框资源并创建一个新类
要制作进行图书销售处理的对话框,首先需要增加一个新的对记 框资源,并为该资源创建一个新类,以便系统按类进行调用。其操作如 下:
(1)在 VC++主菜单中单击 “插入 |资源” 菜单项, 出现一个资源类型 选择列表。
(2)在资源类型列表中选择对话框 Dialog , 单击 “新建” 按钮, 则在 工程中增加一个新的对话框,其自动生成的资源索引号 ID 为: IDD_DIALOG1;修改他的标题属性为“图书借阅信息”。
为新的对话框创建一个新的类。
(3)用鼠标右键单击新的对话框 IDD_DIALOG1,出现一个快捷菜 单,在快捷菜单中单击“建立类向导”,出现一个类创建选择对话框, 如图 3.15所示。
图 3.15 创建类选择
(4)选择创建一个新的类, 单击 OK 按钮, 即进入创建新的类设置对 话框,在类名设置对话框中设置该对话框的类名称为 CMyDlg1,并作 如下选择:
File Name: MyDlg1.cpp //类文件名
Base Class: Cdialog //所属基类
Dialog ID: IDD_DIALOG1 //索引号
Automation: None //处理自动化
图 3.16类创建设置
单击 OK 按钮结束类创建。
3.6.2 对新类进行声明
由于需要通过主控界面的对话框调用新的对话框, 因此需要在应用 系统的主对话作程序文档中对两个新的对话框资源进行声明, 以明确其 身份。声明新类的方法如下:
(1)在资源管理器中切换到 FileView 页面,如图 3.17所示。
图 3.17 主对话框视图文档页面
(2)在 Source File 文档中双击“ MyDlg.cpp ,即出现该文件的开 始部分,该部分是对工程中的类进行声明,增加新的声明,如下所示: //MyDlg.cpp : implementation file
# include “stdafx.h”
# include “ 图书出版管理系统 .h”
# include “MyDlg.h”
//开始声明
# include “MyDlg1.h”
//结束声明
# ifdef _DEBUG
# define new DEBUG_NEW
# undef THIS_FILE
Static char THIS_FILE [] = _FILE_;
# endif
3.6.3 用主对话框 IDD_MY_FORM调用新的对话框 IDD_DIALOG1前面我们已经创建了一个新的对话框资源并创建一个新类, 同时对 该类进行了声明。如何通过主对话框 IDD_MY_FORM对新的对话框进 行调用,这是关键的问题。为了能够对新的对话模型进行调用,我们光 对主对话框进行修改并增加控件,其操作如下:
(1)调整主对话框宽度,以适合系统制作和功能执行的需要。
(2)在主对话框中放入一个分组框控件。
(3)在分组框控件中放入两个选项按钮:对话框布局如图 3.18所示
图 3.18 主对话框布局
其中分组框控件和两个选项按钮的基本属性如表 3.8所示。 表 3.8 分组框与选项按钮的基本属性
选项按钮 IDC_RADIO2, 即 “图书分类” 按钮, 将用于调用图书分 类对话框。接下来我们为“图书销售”选面按钮编制过程代码。
(4)用鼠标右键单击“图书销售”选项按钮,出现一个快捷菜单。
(5)在快捷菜单中选择“创建类向导”,出现消息映射对话框,如 图 3.19所示。
图 3.19 消息映射对话框
(6)在 消 息 映 射 对 话 框 中 选 择 IDC_RADIO1并 选 择 消 息 BN_CLICKED。
(7)单击 Add Function 按钮,出现函数名定义对话框,直接接受系 统建议的函数名称即可。
(8)单击 Edit Code按钮,为选项按钮 1编制过程代码,该过程用于 调用对话框 IDD_DIALOG1;其代码如下所示:
void CMyView: : OnRadio1 ()
{
//TODO: Add your control notification handler code here
CMyDlg1 MyDlg1; //主对话框
MyDlg1. DoModal (); //显示调用对话框 1
//结束代码编辑
}
先检验选项按钮对 IDD_DIALOG1的调用情况, 这样可以保证后面 程序的有效性。其运行效果如图 3.20所示。
图 3.20 对话框调用效果
3.6.4 制作图书销售界面
前面我们已经通过主对话框 IDD_MY_FORM实现了对对话框 IDD_DIALOG1的调用,但对话框 IDD_DIALOG1还不具备任何功能, 这就需要我们为他创建一个图书销售的管理功能。
(1)在工程资源管理器中选择 IDD_DIALOG1。
(2) 将 IDD_DIALOG1中的 Cancel 按钮删除并调整 OK 按钮的布 局。
(3)在对话框 IDD_DIALOG1中放入一个标签控件。
(4)在对话框 IDD_DIALOG1的空白处单击鼠标右键,出现一个 快捷菜单。
(5)在快捷菜单中单击“ Insert ActiveX Control”菜单项,即插入 一个 ActiveX 控件;在控件列表中出现所有的 ActiveX 控件,如图 3.21所示。
图 3.21 ActiveX 类控件列表
(6)在 ActiveX 控件列表中选择“ Microsoft ADO Data Control, Version 6.0”,并单击“确定”按钮,即将一个 ADODC 控件放入到对 话框中。
ADODC 控件是一个数据源连接控件, 他专门用于为应用系统创建 数据环境,其作用与 ODBC 数据源一样,但使用方法和功能上有一定 的区别。同时数据环境一经建立, ADODC 控件又可以作为一个数据导 航控件,专门用于对数据环境中的数据记录进行浏览查询。对话框 IDD_DIALOG1是专门用于处理图书销售情况的一个对话框,因此他需 要引入数据源,即用户需要为他引入数据源中的数据表,作为该对话框 进行数据处理的“对象”。
(7)用鼠标右键单击 ADODC 控件,出现一个快捷菜单。
(8) 在快捷菜单中单击 “属性” , 出现控件属性设计器, 如图 3.22所示。
图 3.22 ADODC 控件属性设计器 (9)设置控件的基本属性,如表 3.9所示。 表 3.9 ADODC 控件的基本属性
表 3.9所示内容是 ADODC1控件的基本属性,他还有许多其他的 属性,我们仅列出其基本属性,其他属性可随着不同项目的需要而加以 设置。在基本属性中,连接字符串和记录数据两个属性尤其重要。设置 这两个属性的过程如下:
(10)在图 3.22中将选项卡页面切换到 Control 页面:在该页面中 选择 Use ODBC Data Source Name选项。如图 3.23所示。
图 3.23 数据控件属性设置页面
(11)单击 New 按钮,出现一个创建数据源类型的选择对话框, 如图 3.24所示。
图 3.24 数据源类型选择
(12)在数据源类型的选择对话框中,选择“用户数据源”,出现 图 3.25所示的驱动程序选择对话框。
图 3.25 数据源驱动程序选择
(13) 由于我们采用了 Microsoft Access 2000创建数据库和数据表, 因此我们也相应地选择 Microsoft Access Driver驱动程序。
(14)单击“下一步”按钮,出现一个数据源设置完成的对话框。 (15)单击“完成”按钮,即出现确定数据源位置和为数据源命名 的对话框,如图 3.26所示。
图 3.26 数据源命名及数据库选取
(16)在图 3.26中将数据源命名为“图书管理数据库”,确定位 置 (选取数据库位置 ) 后单击“确定”按钮即完成数据源设置;此时可以 发现, 在 Use ODBC Data Source Name数据源列表框中已经存在了新创 建的数据源,即图书管理数据库,如图 3.27所示。
图 3.27 新创建的数据源显示
数据源的创建本质上就是为应用系统引入一个数据库文件, 但一个 数据库中往往存在多个数据表,因此需要为对话框选择一个记录源,即 一个具体的数据表文件。
(17)将图 3.27所示选项卡页面切换到记录源页面。在记录源页 面中打开数据源命令类型列表框,任其中选择“ 2-adCmdTable ”方式,
此时对话柜中将列出数据库户的所有表供用户选择,选择其中的“出售 信息”表即可,如图 3.28所示。
图 3.28 命令类型及表选取
以上过程即为对话框 IDD_DIALOGl完成了—个数据环境的创建过 程。
数据源或数据环境的创建仅为对话框设置了一个可用的数据环境, 但如何在对话框中处理数据环境户的数据, 是对话框制作的又一关键问 题。 这里, 我们为对话框引入一个专门用于数据操作和数据编辑的控件, 即数据表格控件, 他也是微软公刘所提供的专用数据控件。 其操作如下: (1) 在 对 话 框 IDD_DIALOG1中 放 入 一 个 数 据 表 格 控 件 IDD_DATAGRID1; 数据表格控件也不是对话框的基本控件, 他仍需要 采用插入的方法加以进行。
(2)在对话框的空白处单击鼠标右键,出现一个快捷菜单。
(3)在快捷菜单中单击 Insert ActiveX Control 菜单项,即插入一 个 ActiveX 控件;在控件列表中选择数据表格控件,如图 3.29所示。
图 3.29 微软数据表格控件
(4)单击“确定”按钮,即在对话框中插入一个“ Microsoft DataGrid Control, Verison 6.0”控件。
(5)设置该控件的属性,如表 3.10所示。
表 3.10 DataGrid 控件的基本属性
同样, 表格属性也有许多其他属性, 用户可以根据不同的系统开发 的需要,设置不同的属性,其中表格的初始状态是不允许修改、删除和 刷 新 记 录 的 , 因 此 需 要 设 置 他 的 AllowAddNew 、 AllowDelete 和 AllowUpdate 属性为 True 。这样在工程的运行期,用户就可以通过表格 控件对表中的记录进行编辑、修改和添加。
表格的一个重要属性是他使用什么样的数据源 DataSource , 即该表 格控件与什么样的数据源进行绑定。很显然, 我们已经创建的数据源是 通过 IDC_ADODC1进行连接的,因此直接在属性列表中选择他即可。 (6)在表格控件的数据源属性项中,单击“ DataSource ”右边的 开关按钮, 出现一个绑定数据源列有, 选择相应的数据源即可, 如图 3.30所示。
最后, 编译执行工程, 并调用 IDD_DIALOG1对话框, 即显示图书 销售记录对话框, 可以在表格控件中对数据进行编辑、 修改和用 ADODC 控件进行浏览查询,如图 3.31所示。
图 3.30 数据源绑定属性设置
图 3.31 对话框运行效果
3.7 制作“图书分类”对话框
在工程系统设计时, 我们将系统分为三个大的模块, 即基本信息处 理模块、 图书销售处理模块和图书分类管理模块。 我们已经在前面制作 了两个模块, 并进行了成功的运行。 接下来, 我们需要制作第三个模块, 即图书分类管理模块。该模块主要是用于图书分类编码查询, 他是前面 两个模块的辅助功能模块。
图书分类管理模块的制作与前面的两个模块的制作有许多相似之 处, 主要包括增加对话框、 创建新类、 创建数据环境与表格控件设置等。 以下我们简单地介绍一下“图书分类”对话框的制作过程。
3.7.1 插入一个新的对话框资源
对于图书分类管理,我们采用一个独立的对话框加以进行,为此, 需要增加一个新的对话框 IDD_DIALOG2。增加新的对话框的方法可参 考对话框 IDD_DIALOGl的增加方法。
设置对话框 IDD_DIALOG2的标题属性为“图书分类”:删除 IDD_DIALOG2中的 Cancel 命令按钮, 并调整对话框的大小和 OK 按钮 的位置,其布局如图 3.32所示。
图 3.32 IDD_DIALOG2布局
3.7.2 为对话框 IDD_DIALOG2创建数据源
与对话框 IDD_DIALOGl的制作一样,我们需要为 IDD_DIALOG2创 建 一 个 数 据 源 , (过 程 我 们 将 有 所 省 略 (具 体 步 骤 请 参 考 IDD_DIALOGl的制作 ) ,大致步骤如下:
(1)在对话框 IDD_DIALOG2中放入一个标签控件。
(2)在对话框 IDD_DIALOG2中插入一个 IDC_ADODC1控件, 设置该控件的数据源如图 3.33所示。
图 3.33 IDC_ADODC1控件数据源
(3)设置 IDC_ADODCl控件的命令类型与记录源,如图 3.34所 示。
图 3.34 IDC_ADODC1命令类型与记录源
ADODCl 控件的具体属性如表 3.11所示。
表 3.11 ADODC1控件的基本属性
以上过程即为对话框 IDD_DIALOG2创建了一个数据环境。 数据源或数据环境的创建仅为对话框设置了一个可用的数据环境, 同样,如何在对话框中处理数据环境中的数据,是对话框制作的一个关 键问题。 这里, 我们为对话框引入一个专门用于数据操作和数据编辑的 控件,即数据表格控件,他也是微软公司所提供的专用数据控件; (1) 在 对 话 框 IDD_DIALOG2中 放 入 一 个 数 据 表 格 控 件 IDC_DATAGRIDl,其方法参考对话框 IDD_DIALOGl的制作过程。 (2)设置该控件的属性,如表 3.12所示。
表 3.12 DataGrid 控件的基本属性
3.7.3 为对话框 IDD_DIALOG2创建并声明新类
作为工程中所出现的新资源, 往往必须首先为他声明一个新类并对 该类进行声明,否则,该资源在工程中是不可识别的。关于对话框 IDD_DIALOG2的新类的创建过程可参考对话框 IDD_DIALOGl的新类 的创建方法,其类名称为 CmyDlg2。
进行了类声明之后, 就需要对该类进行声明, 其声明的文件内容如 下所示:
//图书出版管理系统 View. cpp : imkplementation of the CMyView class
//
# include “stdafx.h??
# include “ 图书出版管理系统 .h”
# include “ 图书出版管理系统 Set.h”
# include “ 图书出版管理系统 Doc.h”
# include “ 图书出版管理系统 View.h”
//开始声明
# include “MyDlg1.h”
# include “MyDlg2.h”
//结束声明
# ifdef_DEBUG
# define new DEBUG_NEM
# undef THIS_FILE
static char THIS_FILE [] = _FILE_;
# endif
3.7.4 用主对话框调用对话框 IDD_D1ALOG2
对话框 IDD_DIALOG2作为系统的一个功能模块,他与对话框 IDD_DIALOG1一样,需要通过主对话框加以调用,在前面制作的主对 话框 IDD_MY_FORM中, 我们已经布置了一个 “图书分类” 选项按钮, 如图 3.35所示,其目的就 用该按钮调用“图书分类”对话框,即对话 框 IDD_DIALOG2。
图 3.35 主对话框 IDD_MY_FORM
对于“图书分类”选项按钮,我们仍然需要为他建立消息映射,创 建消息函数并编制过程代码。其方法请参考“图书销售”选项按钮的消 息映射和函数的建立方法,其过程代码如下所示:
void CMyView : : OnRadio2 ()
{
/ / TODO: Add your control notification handler code here
CMyDlg2 MyDlg2;
MyDlg2. DoModal ();
}
最后运行工程,并检验对话框 IDD_DIALOG2的调用效果,如图 3.36所示。
范文二:JAVA设计文档_图书管理系统
目 录
1 绪论 ................................................... 0 1.1课题背景 . ...................................................................................... 0
1.2系统开发关键技术介绍 . .............................................................. 1
2 系统分析 ............................................... 1 2.1 图书管理工作流程 . ..................................................................... 1
2.2 图书管理需求 . ............................................................................. 1
3 系统设计 ............................................... 1 3.1 设计思想 . ..................................................................................... 1
3.3模块功能设计 . .............................................................................. 2
4 系统数据库设计 ......................................... 2 4.1系统数据库的建立 . ...................................................................... 3
4.2 系统 E-R 图 ................................................................................. 3
4.3 各个数据表的创建 . ..................................................................... 3
4.4 数据库的连接 . ............................................................................. 4
5 系统实现 ............................................... 6 5.1 系统实现工具与支持平台 . ......................................................... 6
5.2系统界面及其实现方法 . .............................................................. 7
6 总结与展望 ............................................ 17 6.1收获与体会 . ................................................................................ 17
参考文献 ................................................ 18 1 绪论
1.1课题背景
图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传
统的图书管理方式彻底地解脱出来,提高效率,减轻工作人员以往繁忙的工作,
减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更
多时间来获取信息、了解信息和掌握信息。一个好的图书馆不仅仅看它的藏书的
种类和数量是否齐全,还要看它的管理机制是否健全。本系统根据图书馆的日常
业务运作而设计,更好的管理借书,还书,统计图书类别等业务,系统操作流程
与图书馆的业务流程相一致。 界面友好、 操作容易、 维护简单;系统数据库稳定、
安全,有图书管理业务操作知识的人皆能方便操作。
1.2系统开发关键技术介绍
此模型具有架构清晰、 模块独立性强、 以及易维护和扩展等优点, 采用 Eclipse 作为前端开发工具,后台用 SQL Server 2000实现数据存取,另外还通过存储过程 的实现把一些处理放在数据库端执行,使的数据存取效率大大提高,系统的性能 也得以提升。通过 Java 类连接数据库,为各种常用数据库提供无缝联接的技术。 2 系统分析
2.1 图书管理工作流程
系统完成就图书借阅管理的借书、还书、操作;书籍、学生、借阅记录的查 阅、添加、更新及删除等功能,此外系统还具备管理员注册管理等功能。能更好 的对图书进行分类管理,提高了利用率,为读者借阅提供方便 。
2.2 图书管理需求
图书馆要求能随时查询书库中图书的库存量,以便及时准确、及时、方便地 为读者提供借阅信息,但不能修改数据 , 无信息处理权,即可以打印清单、浏览数 据等,管理权限由系统管理员掌握和分配。
图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传 统的图书管理方式彻底的解脱出来,提高效率,减轻工作人员以往繁忙的工作, 减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更 多时间来获取信息、了解信息、掌握信息。图书馆作为提供学习的场所,不仅要 求便于管理,而且要求对读者和借阅者提供方便快速的查找,借阅和登记手续。 3 系统设计
3.1 设计思想
(1) 进行合理的需求分析,用 Eclipse 实现前台的应用程序框架。
(2) 详细的数据库系统设计,用 SQL Server 2000实现数据存取。
(3) 选择合理的数据库连接。
图书管理系统
3.2 系统功能结构图
3.3模块功能设计
(1)管理员注册模块:
填写注册的用户名和密码,就可以完成注册,主要是为了管理的方便,添加 了该模块。
(2)图书查询模块:
完成以图书名称, 索引号, 图书编号, 模糊查询,分类名, 出版社进行查询, 考虑到用户的方便性,本查询,除了索引号和图书编号进行查询外,全部采用模 糊查询。大大的方便了借阅者的查询。
(3)读者查询模块:
通过输入要查询读者的借阅证号或者姓名,将符合其一要求的信息查询并显 示在下面的图标中。采用图标显示的方式,在查到的信息内容之上显示相应的数 据的标题,便于用户的理解。
4 系统数据库设计
4.1系统数据库的建立
该系统采用 C/S模式设计, 数据库部分同应用程序一样起着至关重要的作用, 因此必须对数据库进行详细的设计。
该系统使用 SQL Server 2000数据库,首先应以保证数据的独立性和一致性 作为出发点,避免数据冗余,在设计方面,把数据库分模块相应内容存在相应的 数据库中。
4.2 系统 E-R 图
E-R 模型
4.3 各个数据表的创建
数据库共有六个表,分别包括:书籍表(book ) ,借书表 (borrow),登陆表
图书管理系统
(login),读者信息表 (reader),图书分类信息表(index ) ,读者类别表 (reader_class)
4.4 数据库的连接
DBAccess.java
package com.book.Dbconn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBAccess {
private Connection m_conn;
private Statement m_stmt;
private String driver =
private String url =
private String uPwd =
public DBAccess() {
this.setDriver(driver);
this.setConnection(url, uName, uPwd);
}
public DBAccess(String driver, String url, String userName, String userPWD) {
try {
m_conn = DriverManager.getConnection(url, userName, userPWD);
m_stmt = m_conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean setDriver(String driver) {
try {
Class.forName(driver);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean setConnection(String url, String userName, String userPWD) {
try {
m_conn = DriverManager.getConnection(url, userName, userPWD);
m_stmt = m_conn.createStatement();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
图书管理系统
public ResultSet sendQuery(String sql) {
try {
ResultSet m_rs = m_stmt.executeQuery(sql);
return m_rs;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public int sendUpdate(String sql) {
try {
return m_stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}
public static void main(String[] arg) {
DBAccess db = new DBAccess();
String sql =
ResultSet rs = db.sendQuery(sql);
try {
if (rs != null) {
while (rs.next()) {
System.out.println(rs.getString(
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
5 系统实现
5.1 系统实现工具与支持平台
(1) 用户界面
本系统采用 Eclipse 设计, 用户交互界面采用的是基于 Windows 的窗口界面。 (2) 硬件接口
运行本系统的硬件基本要求如下:
CPU :Intel P4及以上;
内存:512MB 及以上;
硬盘:80GB 及以上。
(3) 软件接口
数据库服务器:SQL Server 2000。
5.2系统界面及其实现方法
1. 下面为运行后的界面图 :
实现如下: Mainwin.java
public class mainwin { private ButtonGroup buttonGroup = new ButtonGroup(); private JFrame frame; public static void main(String args[]) { try { mainwin window = new mainwin(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } public mainwin() { createContents(); } private void createContents() { frame = new JFrame(); frame.setTitle(
_GB2312
图书管理系统
label.setText(
label.setBounds(38, 76, 58, 18);
frame.getContentPane().add(label);
final JTextField textField = new JTextField();
textField.setBounds(92, 75, 92, 20);
frame.getContentPane().add(textField);
final JLabel label_1 = new JLabel();
label_1.setForeground(new Color(0, 128, 0));
label_1.setFont(new Font(
label_1.setBounds(225, 76, 59, 18);
frame.getContentPane().add(label_1);
final JPasswordField passwordField = new JPasswordField();
passwordField.setBounds(290, 77, 92, 18);
frame.getContentPane().add(passwordField);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
if(textField.getText().equals(
||passwordField.getText().equals(
JOptionPane.showMessageDialog(null,
}else{
String sql =
ResultSet rs = db.sendQuery(sql);
try {
if(rs != null){
if(rs.next() && rs.getInt(1)>0){
ManageMain manageMain = new ManageMain();
manageMain.getFrame().setVisible(true);
getFrame().setVisible(false);
}else{
JOptionPane.showMessageDialog(null,
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
}
}
}
});
button.setText(
button.setBounds(429, 76, 66, 18);
frame.getContentPane().add(button);
final JButton button_1 = new JButton();
button_1.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
ManagerAdd managerAdd = new ManagerAdd();
managerAdd.getFrame().setVisible(true);
getFrame().setVisible(false);
}
});
button_1.setText(
button_1.setBounds(560, 76, 66, 18);
frame.getContentPane().add(button_1);
final JRadioButton radioButton = new JRadioButton();
radioButton.setForeground(new Color(0, 128, 0));
radioButton.setFont(new Font(
buttonGroup.add(radioButton);
radioButton.setBounds(35, 125, 84, 26);
frame.getContentPane().add(radioButton);
final JRadioButton radioButton_1 = new JRadioButton();
radioButton_1.setForeground(new Color(0, 128, 0));
radioButton_1.setFont(new Font(
buttonGroup.add(radioButton_1);
radioButton_1.setText(
radioButton_1.setBounds(141, 125, 77, 26);
frame.getContentPane().add(radioButton_1);
final JRadioButton radioButton_2 = new JRadioButton();
radioButton_2.setForeground(new Color(0, 128, 0));
radioButton_2.setFont(new Font(
buttonGroup.add(radioButton_2);
radioButton_2.setText(
radioButton_2.setBounds(246, 125, 92, 26);
frame.getContentPane().add(radioButton_2);
final JRadioButton radioButton_3 = new JRadioButton();
radioButton_3.setForeground(new Color(0, 128, 0));
radioButton_3.setFont(new Font(
图书管理系统
14));
buttonGroup.add(radioButton_3);
radioButton_3.setText(
radioButton_3.setBounds(352, 125, 92, 26);
frame.getContentPane().add(radioButton_3);
final JRadioButton radioButton_4 = new JRadioButton();
radioButton_4.setForeground(new Color(0, 128, 0));
radioButton_4.setFont(new Font(
buttonGroup.add(radioButton_4);
radioButton_4.setText(
radioButton_4.setBounds(462, 125, 77, 26);
frame.getContentPane().add(radioButton_4);
final JRadioButton radioButton_5 = new JRadioButton();
radioButton_5.setForeground(new Color(0, 128, 0));
radioButton_5.setFont(new Font(
buttonGroup.add(radioButton_5);
radioButton_5.setText(
radioButton_5.setBounds(569, 125, 77, 26);
frame.getContentPane().add(radioButton_5);
final JTextField textField_1 = new JTextField();
textField_1.setBounds(45, 162, 270, 22);
frame.getContentPane().add(textField_1);
final JLabel label_2 = new JLabel();
label_2.setForeground(new Color(0, 0, 255));
label_2.setFont(new Font(
label_2.setBounds(25, 105, 84, 18);
frame.getContentPane().add(label_2);
final JTable table = new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setName(
table.setBounds(10, 219, 676, 247);
frame.getContentPane().add(table);
final JLabel label_5 = new JLabel();
label_5.setForeground(new Color(255, 0, 255));
label_5.setFont(new Font(
label_5.setBounds(133, 9, 406, 60);
frame.getContentPane().add(label_5);
final JButton button_2 = new JButton();
button_2.setAutoscrolls(true);
button_2.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
String sql = null;
if(textField_1.getText().equals(
JOptionPane.showMessageDialog(null,
}else{
if(radioButton.isSelected()){
sql =
}else if(radioButton_1.isSelected()){
sql =
}else if(radioButton_2.isSelected()){
sql =
}else if(radioButton_3.isSelected()){
sql =
}else if(radioButton_4.isSelected()){
sql =
}else if(radioButton_5.isSelected()){
sql =
}else{
JOptionPane.showMessageDialog(null,
return;
}
DBAccess db = new DBAccess();
ResultSet rs = db.sendQuery(sql);
/**/
boolean hasRecords;
try {
hasRecords = rs.next();
if (!hasRecords) { // 记录集为空, 提示一条消息 JOptionPane.showMessageDialog(table,
return;
}
} catch (SQLException e) {
e.printStackTrace();
}
Vector try { ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i <= rsmd.getcolumncount();="">=> 图书管理系统 columnHeads.addElement(rsmd.getColumnName(i)); do {// 获取记录集 rows.addElement(getNextRow(rs, rsmd)); } while (rs.next()); // 建立相应的 TableModel, 并将 TableModel 应 用到 Table 中显示出来 DefaultTableModel model = new DefaultTableModel(rows, columnHeads); table.setModel(model); return; } catch (SQLException exc) { JOptionPane.showMessageDialog(table, exc.toString(), return; } } } }); button_2.setText( button_2.setBounds(532, 162, 92, 22); frame.getContentPane().add(button_2); } } 2. 下图为查询读者的信息图 实现代码如下: UserInfo .java public class UserInfo { private JFrame frame; public static void main(String args[]) { try { UserInfo window = new UserInfo(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } public UserInfo() { createContents(); } private void createContents() { frame = new JFrame(); frame.getContentPane().setLayout(null); frame.setBounds(100, 100, 700, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JLabel label = new JLabel(); label.setForeground(new Color(255, 0, 255)); label.setFont(new Font( label.setText( label.setBounds(125, 24, 412, 47); frame.getContentPane().add(label); final JLabel label_7 = new JLabel(); label_7.setForeground(new Color(0, 0, 255)); label_7.setFont(new Font( label_7.setBounds(377, 77, 135, 28); frame.getContentPane().add(label_7); final JLabel label_1 = new JLabel(); label_1.setForeground(new Color(0, 128, 0)); label_1.setFont(new Font( label_1.setBounds(77, 155, 77, 18); frame.getContentPane().add(label_1); final JLabel label_2 = new JLabel(); label_2.setForeground(new Color(0, 128, 0)); label_2.setFont(new Font( label_2.setBounds(253, 155, 77, 18); frame.getContentPane().add(label_2); final JTextField textField = new JTextField(); textField.setBounds(160, 154, 87, 22); frame.getContentPane().add(textField); final JTextField textField_1 = new JTextField(); textField_1.setBounds(323, 154, 87, 22); frame.getContentPane().add(textField_1); final JTable table = new JTable(); table.setBounds(39, 233, 616, 223); frame.getContentPane().add(table); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { String sql = 图书管理系统 readercardnum=' DBAccess db = new DBAccess(); ResultSet rs = db.sendQuery(sql); boolean hasRecords; try { hasRecords = rs.next(); if (!hasRecords) { // 记录集为空,提示一条消息 JOptionPane.showMessageDialog(table, return; } } catch (SQLException e) { e.printStackTrace(); } Vector V ector try { // 获取字段的名称 ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i <= rsmd.getcolumncount();="" ++i)="">=> do {// 获取记录集 rows.addElement(getNextRow(rs, rsmd)); } while (rs.next()); // 建立相应的 TableModel, 并将 TableModel 应用到 Table 中显示出来 DefaultTableModel model = new DefaultTableModel(rows, columnHeads); table.setModel(model); return; } catch (SQLException exc) { JOptionPane.showMessageDialog(table, exc.toString(), return; } } }); button.setText( button.setBounds(451, 151, 60, 28); frame.getContentPane().add(button); final JButton button_1 = new JButton(); button_1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { ManageMain managemain = new ManageMain(); managemain.getFrame().setVisible(true); getFrame().setVisible(false); } }); button_1.setText( button_1.setBounds(552, 151, 60, 28); frame.getContentPane().add(button_1); } private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException { Vector for (int i = 1; i <= rsmd.getcolumncount();="">=> currentRow.addElement(rs.getString(i)); return currentRow; // 返回一条记录 } } 3. 管理员注册界面如下: 实现方法如下: ManagerAdd.java public class ManagerAdd { private JPasswordField passwordField_1; private JPasswordField passwordField; private JFrame frame; public static void main(String args[]) { try { ManagerAdd window = new ManagerAdd(); window.frame.setVisible(true); } catch (Exception e) { 图书管理系统 e.printStackTrace(); } } public ManagerAdd() { createContents(); } private void createContents() { frame = new JFrame(); frame.setTitle( frame.getContentPane().setLayout(null); frame.setBounds(100, 100, 600, 450); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JLabel label = new JLabel(); label.setForeground(new Color(255, 0, 255)); label.setFont(new Font( label.setBounds(191, 28, 209, 43); frame.getContentPane().add(label); final JLabel label_1 = new JLabel(); label_1.setForeground(new Color(0, 128, 0)); label_1.setFont(new Font( label_1.setBounds(163, 116, 60, 18); frame.getContentPane().add(label_1); final JTextField textField = new JTextField(); textField.setBounds(316, 114, 111, 22); frame.getContentPane().add(textField); final JLabel label_2 = new JLabel(); label_2.setForeground(new Color(0, 128, 0)); label_2.setFont(new Font( label_2.setBounds(163, 196, 65, 18); frame.getContentPane().add(label_2); final JPasswordField passwordField = new JPasswordField(); passwordField.setBounds(315, 194, 112, 22); frame.getContentPane().add(passwordField); final JLabel label_3 = new JLabel(); label_3.setForeground(new Color(0, 128, 0)); label_3.setFont(new Font( label_3.setBounds(163, 256, 86, 18); frame.getContentPane().add(label_3); final JPasswordField passwordField_1 = new JPasswordField(); passwordField_1.setBounds(316, 254, 112, 22); frame.getContentPane().add(passwordField_1); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { String sql = DBAccess db = new DBAccess(); int result = db.sendUpdate(sql); if (passwordField.getText().equals(passwordField_1.getText())){ if(result == -1){ JOptionPane.showMessageDialog(null, }else{ JOptionPane.showMessageDialog(null, } }else{ JOptionPane.showMessageDialog(null, } } }); button.setText( button.setBounds(143, 331, 106, 28); frame.getContentPane().add(button); final JButton button_1 = new JButton(); button_1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { mainwin mainwin = new mainwin(); mainwin.getFrame().setVisible(true); getFrame().setVisible(false); } }); button_1.setText( button_1.setBounds(322, 331, 106, 28); frame.getContentPane().add(button_1); } } 6 总结与展望 6.1收获与体会 通过这次课程设计,我学到了很多东西。在此期间我对这个系统的设计有了 更深一层的认识。整个系统采用了层次化的设计,融入了对软件工程和软件开发 图书管理系统 标准化的认识,第一次做到了文档指导系统开发,这个系统严格按照文档的内容 来设计和实现。对数据库进行了细致的设计,保证了数据库部分在应用程序设计 时不做任何修改。并最终层次化的实现了目标设想的系统。在此系统中采用的层 次结构保证了系统更新时,改动能做到最小,可以把各个部分作为单独的组件, 采用面向对象设计实现的特点对各个组件进行替换,以此来逐个部分的升级整个 系统。 参考文献 [1 ] D.M. 吉瑞 , A.L.麦克莱伦 . JAV A 图形设计 [M]. 机械工业出版社 , 1997.7 [2 ] SQL Server实用大全 [M].北京 :中国水利水电出版社 , 2000 [3 ] George Reese. JDBC与 java 数据库编程 [M]. 中国 :电力出版社 , 2002.3 [4 ] 郑阿奇 . SQLServer实用教程(第 2版) [M]. 北京 : 电子工业出版社 , 2003.10 [5 ] time 研究室 . JDBC数据库程序设计 [M]. 中国铁道出版社 , 2004.2 [6 ] 张海藩 . 软件工程 [M]. 人民邮电出版社 , 2002.3 [7 ] 彭晨阳 . JAV A 实用系统开发指南 [M]. 机械工业出版社 , 2004.1 [8 ] 印旻 . java与面向对象程序设计教程 [M]. 高等教育出版社 , 2002.5 [9] 彭波 . 数据结构 [M] .北京 :清华大学出版社 , 2002:15-146. [10] 林杰斌 , 刘明德 . MIS 管理信息系统 [M] .北京 :清华大学出版社 , 2006:12-400. 图图管理系图的图图图图与 概要图图图明图 姓名,王婷 学号,0903017 目图 引言 1 ............................................................................................................................... ........................ 3 图目的写 1.1 ............................................................................................................................................. 3 图目背景 1.2 ............................................................................................................................... .............. 3 参考图料 1.3 ............................................................................................................................... .............. 3 需求述概 2 ................................................................................................................................................. 3 目图 2.1 ............................................................................................................................... ...................... 3 运行图境 2.2 ............................................................................................................................... .............. 4 功能需求 2.3 ............................................................................................................................... ............ 4 性能需求 2.4 ............................................................................................................................... ............ 4 系图要图图概 3 ............................................................................................................................... ............... 4 系图系图体构 3.1 ............................................................................................................................... ........ 4 系图功能模图 3.2 ............................................................................................................................... ........ 5 工作”模图 3.2.1“ ............................................................................................................................... .. 6 图料图图”模图 3.2.2“ ............................................................................................................................... 6 图图”模图 3.2.3“ ............................................................................................................................... ...... 6 系图管理”模图 3.2.4“ ........................................................................................................................... 6 程序据流图数 3.3 ............................................................................................................................... ...... 7 系图功能流程图 3.3.1 ............................................................................................................................ 7 图图图料图图”据流图数 3.3.2“ ................................................................................................................... 7 系图据图图图数构 4 ............................................................................................................................... ........... 8 系图据分析数 4.1 ............................................................................................................................... ...... 8 系图据图描述数构 4.2 ............................................................................................................................... 8 图图信息据数 4.2.1 ............................................................................................................................... . 8 会数图信息据 4.2.2 .............................................................................................................................. 9 2 用图信息据数 4.2.3 .............................................................................................................................. 9 借图登图信息据数 4.2.4 ........................................................................................................................ 9 借图图史信息据数 4.2.5 ........................................................................................................................ 9 图款信息据数 4.2.6 .............................................................................................................................. 9 图款图史信息据数 4.2.7 ...................................................................................................................... 10 图图分图信息据数 4.2.8 ........................................................................................................................ 10引言 1 图目的写1.1 本文的目的是图述图图图管理系图的要图图。本要图图图明图图的目的在于全面图档概概写 明图图图管理系图第一图段中的图图考图~包括程序系图的基本图理流程、程序系图的图图图、构模图分和功能分配~图程序的图图图图提供基图。划 本图明图的图期图者图任本系图图图人图、图件图图人图的本小图成图。担 图目背景1.2 ,本系图定位于中小型图图图~图图考图图机图境下的图图~操作系图图图目前常用的 。系图性图图管理信息系图;,。Windows XPMIS ,本系图采用图制管理~系图功能图包含图图管理、图图图料管理、图图流通、图管理、图图会会 图图、系图图置等。系图界面力求图图、易用~在图准化的基图上考图界面的美图和新图。 参考图料1.3 ,《图图图管理系图需求图格图明图》 ,《图图图明图图图范》写 需求述概2 目图2.1 系图面向中小型图图图~用图群图图图图管理图和图图图的图。体会 ,能图图入图图的图合情和图行新图入图、图有图图信息修改以及图除~况 ,能图图图图图图案的图图和图图管理~会档 3 ,能图图行图款功能~ ,能图图行借图图史的图图功能~ 运行图境2.2 ,图件图境,兼容前主流操作系图 当等。Windows 95/98 /2000/XP/vista ,硬件图境,奔图以上图算机~打印机、图描图等。CPUIII 功能需求2.3 系图的图功能如下,体 ,能图图入图图的图合情和图行新图入图、图有图图信息修改以及图除。况 ,能图图图图图图案的图图和图图管理。会档 ,能图图行图款功能。 ,。能图图行借图图史的图图功能具图,体 ,密图图置,不同图图的用图有不同的图限~管理图和图有自己的密图~登图系图后分图会 图行自己图限的操作~可以防止越图操作。内 ,图料图图,图了存放图图、图案的全部据~本系图每一本图图和每位图图的信息会档数将会 图行管理。系图图图包括图各图表图图的修改、图除、添加等操作。 ,系图图图,可以按图图图、借图图图等相图信息图行图图。号号 ,系图管理,图行图管理、据图等。会数份 ,图表图图,包括图图图图信息、图信息、借图信息和图款信息等。会 ,其操作,包括修改密图、添加用图、图面图置等。它 性能需求2.4 ,系图安全、可。靠 ,功能图全。 ,操作方便、界面友好。 ,易于图图和图充。 系图要图图概3 系图系图体构3.1 图图管理系图图图三图系图图图。如图所示。系图由体构来个个图点图成~图用服图器图图整5 系图的行图图图工作~据图服图器图图据图的管理。图图管理、图图管理以及图图管理分运体数数 4 管各模图的容。个内 数据库 服器库库 库用服 库器 库库管库库管库库管理理理 系图系图图体构 系图功能模图3.2 图图图管理系图需要图图的功能主要有四大图,“日常工作管理”、“基本图料图图”、 “图图”、和“系图管理”模图。其中日常工作管理和基本图料图图是整系图的核心。个 模图架图框 5 工作”模图3.2.1“ ,借图图理,主要功能是图图借图图图和图图图~图行借图图程。在据图中入一借图号号数插条 图图~图图图包括图会、图图、借出日期、图图期限。IDID ,图图图理,主要功能是图入借图图图、图图号~在借图登图表中到相图的图图~图图图的找将ID 相图据入到图图图图中~同图借图图图图除~保存在借图图史图图表中。数插将并 ,图图图金,图入图会图示图图的姓名、图图图、图款金图和图款原因~如果图交图了图会号会ID, 金~图借图登图表的允图借图图志置图“将。图除图款图图表中图图图图的图图~图一图会将条Y” 图同图入到图款图史图图表中。插 图料图图”模图3.2.2“ ,图图图料图图,包括新图的入图~以及图有图籍图料的修改~图除。,会会会图图料图图,包括新图的图料入图~以及图有图图料的修改和图除 图图”模图3.2.3“ ,图图图料图图,根据相图的图图信息图所有图籍图行所需图图。此图图包括,”图图分图”、”图图 号称”、”图图名”、”作者”、”出版社”。 ,会会号会份图图料图图,根据相图的图图料图行所需图图。 “借图图图”、”图姓名”、”身 图”以及”止借图志”。号 ,借图图史图图图图,根据相图的借图信息图行所需图图。此图图包括,”借图图”、”图图号 号”、”借图日期”、”图图日期”。 ,图款图史图图图图,根据相图的图款信息图行所需图图。此图图包括,”借图图”、”图款日号 期”、”图款原因”。 系图管理”模图3.2.4“ ,系图登图,管理图和图登图系图~系图按照身图予他图各自不同的图限。会份 ,会册会册图注,图图新图注功能。 ,数份数据图,图图有的据图信息的保存。 6 程序据流图数3.3 系图功能流程图3.3.1 图图图料图图”据流图数3.3.2“ 7 系图据图图图数构4 系图据分析数4.1 通图图图图图管理系图的分析~可以得出图系图涉及三图,图图、图图、管理图。通图图各个体会图据图系的整理~我图可以出如下体数画图E—R: 会图 图图借图 图图图 图管理图 系图图E-R 图些图涉及的据图有,体数 ,会号份号数图,借图图图、姓名、身图、最大借图图、止借图志。,图图,图图图、图图名、作者、出版社、价格、图存量。号称 ,用图,用图、用图姓名、用图性图、身图图、登图密图。份号ID 图之图的图系涉及的据图有,体数 ,借图信息表,借图图图~图图图号号~图图图号~图图图号~借图日期~借图日期~12312 借图日期~操作图姓名。3 ,图款信息表,借图图图~图姓名~图图图~图图名~图款原因~图款金图~图款日号会号称 期~操作图姓名。 系图据图描述数构4.2 图图信息据数4.2.1 图图信息据表的主要功能在于新图入图以及保存在图图图的主要信息和相图信息。数 包括,”图图图”、”图图名”、”作者”、”出版社”、”图价”以及”图存号称 量”图图图字段图主图图字段~图名字段、作者字段、出版社字段、图价字段和图存量字段号 8 分图图图图图的图名、作者、出版社、图图图价和图存量的信息。 会数图信息据4.2.2 会数会册册会图信息据表的主要功能是新图的注以及保存已注的图相图信息。 它号会会份号数包括,”借图图图”、”图姓名”、”图身图”、”最多借图图”和”止借图志”。图图字段图主图图字段~图姓名字段、身图字段、最大借图图字段和”会号会份号数 止借图志”字段分图图图图的借图图图、图姓名、图的身图、最大借图图和”止借图会号会会份号数 志”信息。 用图信息据数4.2.3 用图信息据表,管理图表和图信息据表。数会数 管理图表中存有管理图用图名和密图~他具有最高图限~可以图系图图行所有操作。 会数会册册会它图信息据表的主要功能是新图的注以及保存已注图的相图信息。包括,“图图”、“图姓名”、“图身图”、“图图性图”和“登图密图”。会号会会份号会 会号份号图图字段图主图图字段~姓名字段、性图字段、身图图字段、登图密图字段分图图图会会号会会会份号图的图图、图姓名、图性图、图的身图图以及登图密图。 借图登图信息据数4.2.4 借图登图信息据表的主要功能是图行有图借图图图图程中信息的图理。数 它号号包括,“借图图图”、“图图图、“图图图号、“图图图号、“借图图图、“借图1”2”3”1”图图、“借图图图和“图姓名”。会2”3” 借图图史信息据数4.2.5 借图图史信息据表的主要功能是图借图图史的信息图行图图。数 它号会号称包括,”借图图图”、”图姓名”、”图图图”、”图图名”、”借图图图”、”图图图图”和”图注”。 图款信息据数4.2.6 图款信息据表的主要功能是图因不正常图图而被图款的图图。数会 9 它号会号称包括,”借图图图”、”图姓名”、”图图图”、”图图名”、”借图图图”、”图款原因”、”图款金图”和”图款日期”。 图款图史信息据数4.2.7 图款图史信息据表的主要功能是图某位图图款图史的信息图行图图。数会 它号会号称包括, “借图图图”、”图姓名”、”图图图”、”图图名”、 “图款原因”“图款金图”、”图款日期”和”截止日期”。 图图分图信息据数4.2.8 图图分图信息据表的主要功能是图图图图行分图。数 它号包括,”分图图”和”图名”。 5、 图用程序图图图图技图 5.1 界面图图 主控界面是本图图借图管理系图的服图器端界面。一操作方便~界面友好和个 富有性化的图用程序图用图图是首图。本系图利用面向图象图程的 个来Vb6.0图图了管理图和一般图者的主控界面。界面主要由菜图图和快捷按图图成~在系图管理图未登图之前~只有“登图”菜图和“登图”快捷按图可用~登图之后其菜图和按图才可用~登图模图它 用 API 函 数GetUserName;sBuffer,lSize,图取图图管理图的系图图作图默图用图名来号~密图采用次图图的方式~提高了系图的安全性。两 10 5.2 据图理模图图图 数 据图理模图的功能是图行图图的据图理~ 包括据图图和借图图史图图图图直数数数份 方图。图了小硬件故减坏数来障、图件图图、病毒、图操作图故意破等无法避免的事故图据图图的危害~提高据图的安全性和数数份数完整性~本文提供了据图的图功能~图图图据提供了重要的保图手段。服图器图界面如图份5所示。系图同图图具有图图功能~把图史借图信息在一直方图中个来教学况学形象直图地图示出~便于图掌握生的借图情~图接地了解生的图好和图趣所在。图图直方图界面如图6 所示。 11 据图图功能可以在服图器上图~数份份数份也可以在客图机上图图图程据图图到本地。在服图器上可以在据图管理系图既数SQL Server management studio直接图图图份~也可以在图界面下通图 份VB代图图图。其重要代图如下, et mrc = New ADODB.Connection mrc.Open ConnectString With mrc '本图接图 ADODB.connection图型的图接 txtSQL = "use book" '使用book数据图图行工作 .Execute txtSQL '同上 txtSQL = "exec sp_addumpdevice 'disk','" & Trim(Text1.Text) & "','" & BackupPath & "\" & Trim(Text1.Text) & ".bak'" .Execute txtSQL '图建一图图图图 个份 txtSQL = "backup database book to " & Trim(Text1.Text) '图始图据图份数…… .Execute txtSQL End With mrc.Close MsgBox "数份据图图成功", vbOKOnly, "数份据图图" 在图据图图图图~份数用 Animation 控件图图图制文件的图画并播放~通图改图MousePointer 图图图来份状忙图图。 用 DriveListBox 与DirListBox图合图图了图文件图的图图~界面友好~可操作性份强。同图图图直方图界面采用 MSChart 与HScrollBar 图合图图了直方图的放大图小~与使管理图和图者更加清晰地图看借图图史信息图图直方图。 5.3 图图 图系图可以着手图行图图~图了管理工作量~具有友好的操作界面~便捷的操作流减 程~高效的管理功能~直图的图图功能~图用性很个强~完全可以图足人图图管理工作的需求~同图图界面的个布局美图性有待于图一步的改图和完善。 12 以下是图送图料图图合同~不需要下图后可以图图图除,, 图图合同 13 一、方在图图本合同前~图图图图本合同图。本合同一图图图~具有双真即双法律效力~方必图图格履行。 二、本合同必图由用人图位(甲方)的法定代表人(或者委托代理人)和图工(乙方)图自图章~加并盖用人图位公章(或者图图合同图用章)方图有效。 三、本合同中的空图~由方图双确填写并填写划商定后~不得图反法律、法图和相图图定~不需的空图~上“,”。 四、工图制度分图图准工图、不定图、图合图算工图三图。 图行不定图、图合图算工图工作制的~图图图图保障部图批准。 五、本合同的未尽另与并事宜~可行图图图充图图~作图本合同的附件~本合同一履行。 六、本合同必图图~字真填写清确并涂迹楚、文字图图、准~不得擅自改。 七、本合同(含附件)图图后~甲乙双份方各保管一图图。 甲方(用人图位), 乙方(图工), 名,称 姓名, 法定代表人, 身图图图,份号 地址, 图住址, 图图图型, 图系图图, 图系图图, 根据(中图人民共和图图国国双法》和家及省的有图图定~甲乙方按照平等自愿、图商一致的原图图立本合同。 一、合同期限 (一)合同期限 双方同意按以下第 图方式定本合同期限,确 1、有固定期限,从 年 月 日起至 年 月 日止。 2、无固定期限,从 年 月 日起至本合同图定的图止件出图图止条(不得将条法定解除件图定图图止件条)。 3、以完成一定的工作图期限,从 年 月 日起至 工作任图完成图止。 (二)图用期限 双方同意按以下第 图方式定图用期期限确(图用期包括在合同期内), 1、无图用期。 2、图用期从 年 月 日起至 年 月 日止。 (图用期最图不超图六月个个个。其中合同期限在六月以下的~图用期不得超图十五日~合同期限在六月以上一年以下的。图用期不得超图三十日~合同期限在一年以上两年以下的~图用期不得超图六十日。) 二、工作容内 (一)乙方的工作图位(工作地点、部图、工图或图图)图 (二)乙方的工作任图或图图是 (三)甲方因生图图图需要图整乙方的工作图位~按图更本合同图理~方图双确章图的图图或通知图作图本合同的附件。 (四)如甲方派乙方到外图位工作~图图图图充图图。 三、工作图图 (一)甲乙双方同意按以下第 图方式定确乙方的工作图图, 1、图准工图制~每日工作即 小图~每周工作 天~每周至少休息一天。 2、不定图工作制~图图图保即障部图图批~乙方所在图位图行不定图工作制。 3、图合图算工图工作制~图图图保即障部图图批~乙方所在图位图行以 图周期~图工图 小图的图合图算工图工作制。 (二)甲方因生图(工作)需要~图工和与会乙方图商后可以延图工作图图。除(图图法)第四十二条图定的情形外~一般每日不得超图一小图~因特殊原因最图每日不得超图三小图~每月不得超图三十六小图。 四~工图待遇 (一)乙方正常工作图图的工图按下列第( )图形式图行~不得低于当地最低工图图准。 1、乙方图用期工图 元,月~图用期图工图 元,月(——元,日)。 2、其他形式,。 (二)工图必图以法定图图支付~不得以图物及有价图券替代图图支付。 14 (三)甲方根据企图的图图和状况内异依法制定的工图分配图法图整乙方工图~乙方在六十日未提出图的图图同意。(四)甲方每月 日图放工图。如遇图假日或休息日~图提前到最近的工作日支付。(五)甲方依法安排乙方延图工作图图的~图按(图图法)第四十四的图定条支付延图工作图图的工图图酬。 (一)任何一方要求图更本合同的有图容~内都图以图面形式通知图方。 (二)甲乙双并方图图商一致~可以图更本合同~图理图更本合同的手图。 九、本合同的解除 (一)图甲乙双方图商一致~本合同可以解除。由甲方解除本合同的~图按图定支付图图图图金。(二)属下列情形之一的~甲方可以图方解除本合同, 1、图用期图明内条乙方不符合图用件的~ 2、乙方图重图反图图图律或甲方图章制度的~ 3、图重失图、图私舞弊~图甲方利益造成重大图害的~ 4、乙方被依法追究刑事图任的~ 5、甲方歇图、停图、图图破图图于法定整图期图或者生图图图图状况生图重困图的~6、乙方患病或非因工图图~图期图后不能医从从另事本合同图定的工作~也不能事由甲方行安排的工作的~7、乙方不能图任工作~图图培图或者图整工作图位~仍不能图任工作的~ 8、本合同图立图所依据的客图情图况当达生重大图化~致使本合同无法履行~图事人图商不能就图更本合同成图 图的~ 9、本合同图定的解除件出图的。条 甲方按照第5、6、7、8、9图图定解除本合同的~需提前三十日图面通知乙方~按图定向并乙方支付图图图图金~ 其中按第6图解除本合同并医符合有图图定的图需支付乙方图图助图。 (三)乙方解除本合同~图提前三当属随十日以图面形式通知甲方。但下列情形之一的~乙方可以图解除本 合同, 1、在图用期的~内 2、甲方以暴力、威图或者非法限制人身自由的手段强迫图图的~ 3、甲方不按本合同图定支付图图图酬~克或无扣故拖欠工图的~ 4、图国确条体家有图部图图~甲方图图安全图生件图劣~图重危害乙方身健康的。(四)有下列情形之一的~甲方不得解除本合同, 1、乙方患病或非因工图图~在图定的图期的~医内 2、乙方患有图图病或因工图图~图图图能力图定并会确委图图~图失或部分图失图图能力的~3、女图工在孕期、图期、哺乳期的~内 4、法律、法图图定的其他情形。 (五)解除本合同后~甲乙双内方在七日图理解除图图合同有图手图。 十、本合同的图止 本合同期图或甲乙双条即方图定的本合同图止件出图~本合同行图止。 本合同期图前一个并月~甲方图向乙方提出图止或图图图图合同的图面意向~及图图理有图手图。甲方,;盖章, 乙方,;图名或盖章, 法定代表人, ;或委托代理人, 20 年 月 日 20 年 月 日 图图机;构盖章,, 图图人, 图图日期,20 年 月 日 15 计算机科学与工程学院 项目开发实践 2011 / 2012 学年 第 1 学期 题 目: 网上书店系统 小组成员: 090509203 俞 健 : 090509209 李 宥 : 090509219 杨怿炜 班 级: 09计科(2) 计算机科学与工程学院 2011.12.20 1 系统简介 1.1 系统基本功能描述 网上书店系统图书的浏览与查询分类显示图书类目,点击某类目可显示下一 级类目,直到显示出图书列表。点击书名可显示该书的基本信息,包括作者、 出版社、价格、内容简介等。可按分类和关键词查询图书信息。购物车功能 客户点击图书列表页面上某图书前的“选购”按钮就可以把该书放入购物车 准备购买,并且在购买之前可以随时查看已选图书,或者修改已选图书的定 购数量或删除已选图书。点击“放弃购买”按钮则放弃此次购买并清空购物 车。点击“结算”按钮则转入结算系统进行购买结算。结算管理客户确认购 买后点击“结算”按钮可以进行结算,结算时首先要填写定单,定单信息存 入服务器端的定单表中。管理员处理订单,发货。客户收货后,反馈信息, 评论。 1.2 需求分析 通过对系统需求进行分析,我们可以确定系统中有两类用户:管理员、客户。各类用户的具体描述如下: (1) 管理员 描述:管理员维护整个系统,管理员管理包括用户信息,非法用户和过期用 户的删除等;图书管理,图书的分类,购进;订单处理,包括订单的审核, 处理;报表,主要体现销售的状况。 (2) 客户 描述:用户可以直接浏览图书、进行图书查询、查看书店简介、登录和注册查看图书详细资料、将图书加入购物车。用户在前台首先通过浏览或查询等手段找到要购买的图书,然后将选定的图书放入购物车中。用户完全选定了要购买的图书后,就可以提交购物车并生成订单系统。此后用户还可以查询订单执行情况。会员客户在购书时还享受打折优惠。 1.2.1 业务流程分析 (1) 网上书店系统总体业务流程图如下所示 管理员客户 管理图书登录注册浏览 管理用户 登录 用户信 反馈信息处理订单息 订单选购图书 评论信验收图书息 (2) 登录系统分为管理员登录和普通用户登录,根据权限的不同,进行不同的操作。用户只需浏览、搜索、购买等的功能实现,而管理员则负责整个数据库的管理。其业务流程图大致如下: 管理员用户 输入登录信息 用户信息 验证登入信息输入登入信息 验证登入信息 修改密码 显示验证结果登入失败 登入系统 退出系统 (3)用户子系统,即购书系统,在没有登录时,也可浏览图书,但若要进行买书等操作,则系统会跳入登录页面。本系统提供根据客户的购物积分,设计了会员(VIP)升级,客户购物后,获得积分,累计到一定量的积分,会自动升级为VIP会员,享受打折优惠。其业务流程图如下所示: 客户 用户信息 注册 浏览图书搜索图书 登入书店 找回密码 选定图书, 加入购物车 删除图书结算 生成定单订单信息 确认收货评论信息积分累加 评论图书vip升级 (3) 管理员子系统,在登录后,具有很强大的功能,主要包括,图书管理,用户管理,订单管理,以及水晶报表的生成管理。对于管理图书,不仅是图书的增、删、改,也要根据图书的类别分类图书,以方便用户的查询,以及图书的批量处理。其业务流程图如下所示: 管理员 进入管理系 统 客户 生成报表 进入管理图进入管理客进入定单管 书户理生成订 单客户信息 销售信息图书信息处理订单 客户信息管 理 交易信息发货确认收货图书基本管分类管理理 完成交易 1.2.2 数据流分析 根据业务流程分析,我们可以得到系统的数据流图。 (1) 网上书店系统顶层数据流图如下所示: 图书信息生成报表 评论信息客户订单客户管理员 网上书店系统订单客户评价 图书管理 (2) 网上书店系统第一层数据流图如下所示 客户信息 图书信息541用户管图书管姓名,密码管理员登录理理回收站 发货报表 3浏览图订单处客户评论书积分累计理信息 想要购书生成订单客户 姓名,密码21确认收评论图购买图收到登录货书书 选定图书 (3) 根据不同的用户权限,展开登录处理过程,数据流图如下所示: 1(管理员登录系统 登录失败 1.21.31.11.4用户名,密码用户名,密码核实管理员输入登录核对系统进入管理退出系统信息用户信息员系统 用户信息 1.5输入新密码修改密码 2.客户登录系统 邮箱丢失等 1.61.71.8跳转登录失败用户名,邮箱发送密码注册找回密码修改页面页面1.11.21.31.4用户名,密码用户名,密码核实客户输入登录核对系统进入书店退出系统信息用户信息 用户信息 1.5输入新密码修改密码 输入新密码 (4) 用户购书的数据流图如下所示: 2.3 删除欲购 图书 2.1 继续浏览订单加入购物 车 2.4客户浏览图书结算 2.2继续浏览加入书架 个人书架 (5)管理员订单处理的数据流图如下所示: 管理员 报表 订单 3.33.13.2客户客户已收接收订单发货货 确认收货 (6)管理员图书管理的数据流图如下所示: 图书信息4.3 批量购进 4.14.4管理员管理基本新书推荐图书 4.2 图书分类 管理 (7)管理员客户管理的数据流图如下所示: 客户信息积分累计 5.15.25.3 添加客户用户升级打折优惠 5.5管理员恢复客户 回收站 5.4 删除客户 1.2.3 数据字典 根据数据流程分析,对系统数据进行分析和汇总,建立系统数据字典。下面 列出部分数据字典内容。 (1) 购买图书 系统名称:网上书店 条目名:购买图书 输入:图书列表 输出:购物车,个人书架表,订单列表 描述:用户在登录后方可购买图书,想要购买图书,只需将图书加入购物车,然后结算即可,加入购物车后,可选择继续购买,或删除已加入购物车的图书。但若有喜欢的图书,暂时还不想买,便可加入客户的个人书架。个人书架,以及 购物车都是存放在客户端的。结算后,系统自动生成定单,发送给管理员,管理员处理后发货。 (2) 订单处理 系统名称:网上书店 条目名:定单处理 输入:订单列表 输出:报表 描述:报表即为交易后的记录表,其内容包括:订单编号,订单日期,用户姓名,用户编号,总价。主要用于体现销售的整体状况。 客户生成订单后,管理员处理,发货,当然也会有无效的订单,删除即可。每一份订单都是要存入数据库的,以应付意外情况。 (3)用户管理 系统名称:网上书店 条目名:定单处理 输入:客户备份表(回收站),用户信息表 输出:客户备份表 描述:客户注册后,信息写入用户信息表。管理员在特殊情况下,需要删除用户。客户从用户表中除去,移入客户备份表。客户备份表即是为了防止误删了客户的信息,以及需要再找回客户信息而创建的表。故若删除后需要恢复用户信息,从客户备份表中读取即可。 2 系统设计 2.1 数据库设计 2.1.1 概念结构设计 (一) 用户购书系统 1. 系统涉及到的实体 购书中所涉及的主要实体及其属性有: (1) 用户{客户编号,客户姓名,地址,邮政编码,联系方式,是否在线, 登录名,登录密码,客户角色,性别,积分} (2) 订单{订单编号,用户编号,图书编号,购买数量,价格 } (3) 图书{图书编号,标题,作者,分类编号,价格,数量,点击量,出版 社编号,出版日期,ISBN,总字数,内容简介,作者简介,编者评论, 目录} 2. E-R模型如下 是否在联系方线登录名式 邮政编登录密 码码用户住用户角址色客户姓性别名 客户客户编用户积号分 购买数量 价格用户编号 订单编号订单 数量 价格点击量 分类编号出版社编号作者出版日期标题ISBN 图书 总字数图书编号 目录内容简介 编者寄语作者简介 购书过程ER图如下: 图书 n 评论数量 n 1购书n订单客户 n 浏览编号 n 图书 (二)管理员系统 1.管理员管理中所涉及的主要实体及其属性有: (1) 管理员{客户编号,客户姓名,地址,邮政编码,联系方式,是否在 线,登录名,登录密码,客户角色,性别,积分} (2) 图书{图书编号,标题,作者,分类编号,价格,数量,点击量,出 版社编号,出版日期,ISBN,总字数,内容简介,作者简介,编者评 论,目录} (3) 客户{客户编号,客户姓名,地址,邮政编码,联系方式,是否在线, 登录名,登录密码,客户角色,性别,积分} (4) 订单{订单编号,用户编号,图书编号,购买数量,价格 } 3. 管理员和客户同属与用户,故实体属性是相同的,其他实体及其属性,由下图表现出: 是否在联系方线登录名式 邮政编登录密 码码用户住用户角址色客户姓性别名 管理员客户编用户积号分 数量 价格点击量 分类编号出版社编号作者出版日期标题ISBN 图书 总字数图书编号 目录内容简介 编者寄语作者简介 是否在联系方线登录名式 邮政编登录密 码码用户住用户角址色客户姓性别名 用户客户编用户积号分 购买数量 价格用户编号 订单编号订单 管理员管理系统ER图如下: 图书 n 管理 1 n订单管理员1处理 1 管理 n 用户 合并上述两个分E-R 图,得到系统的总E-R 图,如图所示: 图书图书 nn 评论数量管理 n1 客户1购书n订单n处理1管理员 n1 管理浏览编号 nn 图书用户 2.1.2 逻辑结构设计 根据以上的分析,将E-R模型转换成逻辑模型,设计出本系统数据库。根据 需要,设计了 12 个数据表,3个视图。如下所示: (1) 用户信息表,该表记录了本系统的所有用户(即管理员和客户),用 户的编号,姓名,地址,邮政编码,手机号码,邮箱,是否在线,登 录名,登录密码,用户角色,性别,积分。 (2) 用户角色表,该表主要是区分管理员与客户,及用普通户与会员用户, 包含用户编号,用户类型。 (3) 用户备份表,该表主要是为了记录被删除的用户信息,包含了与用户 表一样的字段,管理员也会有误操作,便可通过此表找回信息。 (4) 图书信息表,包含了图书的基本信息,图书编号,标题,作者,分类 编号,价格,数量,点击量,出版社编号,出版日期,ISBN(国际标 准书号)。 5) 出版社表,包含出版社编号,及出版社名称,由于出版社固定的一些,( 所以为了减少管理的麻烦,用编号表示。 (6) 图书分类表,包含图书分类编号,分类名称,由于图书繁多,所以特 设此表以管理图书。 (7) 关键查询表,记录了关键字编号,关键字,搜索数量。此功能还不完 善,不能面面俱到,由于时间问题,表里也写得不全面。 (8) 订单表,记录了订单编号,订单日期,客户编号,总价,订单状态。 订单是分了三份表来储存的,这里是主表。 (9) 订单状态表,包含两个部分,状态编号,状态。以此显示订单是否被 处理。 (10) 售出图书记录表,包含了,售书编号,客户编号,图书编号,图书 数量,单价。也在订单了,主要记录图书的销售。 (11) 图书评论表(BookRatings)记录了,售书编号,图书编号,客户编 号,评价等级,评论。为方便客户购买图书,以作参考。 以上是在数据库中的基本表。在具体查询过程中,如果全部直接从基本表查 询,则要建立多重的联合(内联)查询,这样用起来很不方便,也容易出错;同 时影响系统效率。因此建立3个视图,方便查询。 (1) 图书评论信息视图(vw_BookRatings_Books_Users),包括售书编号, 图书编号,书名,分类编号,客户编号,客户姓名,评价等级,评 论,ISBN。 (2) 图书信息总汇视图(vw_books_category_Publishers),包括图书编 号,书名,作者,分类编号,分类名称,价格,数量,点击量,出 版社编号,出版社名称,出版日期,ISBN,总字数,图书简介,作 者简介,编者寄语,目录。 (3) 订单信息视图(vw_OrderBook_Books_Orders_Users),售出图书编 号,客户编号,购买日期,用户编号,用户姓名,图书编号,书名, 订购数量,单价,订单状态编号,订单状态,ISBN。 根据上面的逻辑结构设计,我们在数据库中也建立的相应的表,其结构如下: (1) 用户信息表(Users),主要记录了用户的编号,姓名,地址,邮政编码, 手机号 码,邮箱,是否在线,登录名,登录密码,用户角色,性别, 积分。 其结构如下表: 字段 说明 类型(长度) 备注 Id 用户编号 int 主键,不为空 Name 用户姓名 nvarchar(50) 不为空 Address 地址 nvarchar(200) 不为空 Postalcode 邮编 varchar(50) Phone 手机号码 Nvarchar(100) 不为空 Mail 邮箱 Nvarchar(100) 不为空 IsOnLine 是否在线 int LoginId 登录名 Nvarchar(50) 不为空 LoginPwd 登录密码 Nvarchar(50) 不为空 UserRoleId 用户角色 int Gender 性别 int Intergral 积分 int (2) 用户角色表(UserRols),该表主要包含用户编号,用户类型,其结构如 下表: 字段 说明 类型(长度) 备注 Id 用户编号 Int 主键,外键,不为空 Name 用户类型 Nvarchar(50) 不为空 (3) 用户备份表(UserBackup),该表主要是为了记录被删除的用户信息,包 含了与用户表一样的字段,其结构也如用户表(Users): 字段 说明 类型(长度) 备注 Id 用户编号 int 主键,不为空 Name 用户姓名 nvarchar(50) 不为空 Address 地址 nvarchar(200) 不为空 Postalcode 邮编 varchar(50) Phone 手机号码 Nvarchar(100) 不为空 Mail 邮箱 Nvarchar(100) 不为空 IsOnLine 是否在线 int LoginId 登录名 Nvarchar(50) 不为空 LoginPwd 登录密码 Nvarchar(50) 不为空 UserRoleId 用户角色 int Gender 性别 int Intergral 积分 int (4) 图书信息表(Books),包含了图书的基本信息,图书编号,标题,作者, 分类编号,价格,数量,点击量,出版社编号,出版日期,ISBN(国际标 准书号),其结构如下所示 字段 说明 类型(长度) 备注 Id 图书编号 int 主键,不为空 Title 标题 nvarchar(200) 不为空 Author 作者 nvarchar(200) 不为空 CategoryId 分类编号 int 不为空 Phone 价格 money 不为空 Mail 数量 int 不为空 IsOnLine 点击量 int 不为空 LoginId 出版社编号 datatime 不为空 LoginPwd 出版日期 nvarchar(50) 不为空 UserRoleId ISBN国际标准书号 int 不为空 (5) 出版社表(Pulishers),包含出版社编号,及出版社名称,结构如下表: 字段 说明 类型(长度) 备注 Id 出版社编号 int 主键,外键,不为空 Name 出版社名称 nvarchar(200) 不为空 (6) 图书分类表(Categories),包含图书分类编号,分类名称,结构如下表: 字段 说明 类型(长度) 备注 Id 分类编号 int 主键,外键,不为空 Name 分类名称 nvarchar(200) 不为空 (7) 关键查询表(SearchKeywords),该表记录了关键字编号,关键字,搜索 数量,结构如下表: 字段 说明 类型(长度) 备注 Id 关键字编号 int 主键,外键,不为空 Keyword 关键字 nvarchar(50) 不为空 SearchCount 搜索数量 Int 不为空 (8) 订单表(Orders),该表记录了订单编号,订单日期,客户编号,总价, 订单状态。其结构如下表: 字段 说明 类型(长度) 备注 Id 订单编号 int 主键,不为空 OrderDate 订单日期 nvarchar(200) 不为空 userId 客户编号 int 不为空 TotalPrice 总价 decimal(10,2) 不为空 OrderStateId 订单状态 int (9) 订单状态表(OrderStates),包含两个部分,状态编号,处理状态,其结 构如下表: 字段 说明 类型(长度) 备注 Id 状态编号 int 主键,外键,不为空 Name 处理状态 varchar(50) 不为空 (10) 卖出图书记录表(OrderBook),包含了,售书编号,客户编号,图书编 号,图书数量,单价。其结构如下表所示: 字段 说明 类型(长度) 备注 Id 售书编号 int 主键,外键,不为空 OrderId 客户编号 int 不为空 BookId 图书编号 int 不为空 Quantity 数量 int 不为空 UniPrice 单价 decimal(18,0) 不为空 (11) 图书评论表(BookRatings)记录了,售书编号,图书编号,客户编号, 评价等级,评论,结构如下表: 字段 说明 类型(长度) 备注 Id 售书编号 int 主键,不为空 BookId 图书编号 int UserId 客户编号 int Rating 评价等级 int Comment 评论 varchar(50) 2.2系统模块设计: 模块设计主要采用了结构化方法,主导思想是以系统的逻辑功能设计和数据流关系为基础,采用“自顶向下,逐步分解”的设计方法,将本系统分解为大小适中的模块。本系统一共分为:登入,用户购物,管理员管理三个大模块。 用户注册 用户登录用户登录 登录用户修改密码 管理员登录 浏览图书 将书加入购物车 用户购物将书加入书架网上购填写订单信息并书提交系统 评价图书 添加用户 删除用户 用户管理用户列表修改用户 查看详细信息 恢复用户 添加图书 管理员管理添加图书分类 图书管理为书籍分类 查看详细信息 书籍列表 删除图书 添加图书数量 订单处理 生成报表 1 登陆模块 (1)选择不同身份登陆系统 本系统主要分为两种不同的身份登陆:管理员和用户。通过不同的身份登陆 的时候,将获得不同的权限。当通过用户身份登陆时,用户可以进行书籍的购买, 查询,加入购物车等操作,实现网上书店的基本购物功能。而当通过管理员身份登陆时,管理员不但拥有用户的所有权限,并且可以对书籍、用户、订单等信息进行管理。 (2)修改密码 用户登陆后,可以自行对自己的密码进行修改,以提高系统安全性。 (3)注销 当用户不想使用账户时,可以点击注销,取消登陆信息,删除Session。使得用户的个人信息不至于泄密。加强了系统的安全性。 2 用户购物 (1)浏览图书 当用户登陆本网站时,便可浏览本网站拥有的所有图书。并可以通过网站推荐、图书分类、搜索等功能,寻找自己需要的图书。单击所选图书后,便会出现图书的详细信息,供用户仔细判断。 (2)将书加入购物车 当用户决定需要购买的图书时,便可以将图书加入购物车,然后选择继续购物或者生成订单。加入购物车的信息可以随时取消。加入购物车并不需要用户进行账户的登陆。 (3)将书加入书架 当用户对某本书感兴趣,却无法确定是否真的要购买时,可以暂时将信息存入书架。注意购物车的信息是通过Session保存,一旦用户关闭浏览器便会失效。而书架信息通过Cookie保存,只要不清除Cookie,信息可以持久保存下来。当然,保存在书架中的书籍可以直接加入购物车。 (4)填写订单信息并提交 当用户真正购买时,点击提交订单。系统会自动判断用户是否登陆,如果没有登陆,系统会强制要求用户登陆。提交订单时,系统会再三提醒用户是否正的确定,当用户全部都进行肯定的答复后,系统自动将订单提交给后台。 (5)评价图书 用户购买图书后,可以更具自身读后的感想,提交评价。为以后其他用户购 买进行导向。当然,只有在用户登陆后才能进行图书的评价。以防未知人士的恶意攻击。 3 管理员管理 (1)用户管理 包含了对用户的所有管理操作。其中又分了三个小部分: 1、添加用户 管理员手动增加一位新的用户。可以分配给他用户、VIP用户、管理员三种角色。当然必须填写所有基本信息。 、用户列表 2 包含有所有注册用户的基本信息。可以通过选择不同角色,浏览拥有相应角色的所有用户。同时在浏览时还拥有三个功能: ?查看详细信息:浏览相对应用户的所有个人信息。 ?修改用户:修改用户的个人信息。 ?删除用户:通过单击CheckBox后,点击删除按钮。删除所有选中的用户。 3、恢复用户 删除用户时并不会真正删除用户信息。而是将用户信息放入另外的一张表内。管理员可以通过恢复用户的功能,重新将用户信息恢复。避免了误删除。 (2)图书管理 包含了对图书的所有管理。包括增删改查。下分五个子模块: 1、添加图书 管理员手动添加一本新书。可以通过下拉列表选择图书的出版社和图书分类。可以实现书籍的增加。 2、添加图书分类 添加图书的类别。增加类别以后,添加图书时类别的选项会增加,同时在首页上图书的类别分类也会增加。 3、为书籍分类 当图书类别有了修改或在添加图书时选错类别的情况下可以使用。能进行图书类别的修改。 4、书籍列表 展示了本书店拥有的所有书籍,内有两个子功能: ?删除图书:当某本图书已经过时或不再出售时,便可以删除这本图书。以防用户进行错误购买。 ?查看详细信息:点击后,显示这本图书的所有信息。 5、添加图书数量 通过图书的库存情况,修改现有图书数量。进货时可以手动添加。保证图书的供应。 (3)订单处理 对用户提交的订单进行处理。如果满足发货的条件,便可将订单状态修改为已阅,进行发货。如果用户不符合规定或有违约情况,管理员有权利将订单驳回,禁止用户的购书行为。 (4)生成报表 通过浏览水晶报表,可以获得书籍的销售情况。掌握哪些书热销。为下一次进货时,不同书的进货量决定提供情报支持。也为上层决策提供信息辅助。 3 系统实现 3.1 实现概况 本系统只有三个子系统,即登录、用户购物和管理员管理。其中,登录子系统是前提,管理员管理子系统是基础,选课子系统是关键。登录子系统分成两块,一块是管理员登录的,还有一部分是用户的,可以登录注册,如果忘记密码还可以通过用户名和注册的邮箱修改密码。用户登录之后就可以进行图书的选择,选择加入购物车或者加入书架,购物车是使用session存数据的,而书架是通过Cookie存数据的,所以暑假里面的书,只要在同一个浏览器访问网站和在不清除Cookie的情况下是继续可以存在数据的,而购物车里面的数据只在一次登录用户可以用,而重新打开网站的时候会失效。进入购物车之后可以将购物车中已选择的书进入订单处理页面,可以提交订单,此时可以修改订单信息,提交之后就等待管理员相应订单信息了。最后对购买的书可以进行评价。过程之用户可以享受 积分,积分达到一定的数量可以自动触发触发器对普通用户进行升级成VIP会员,享受9折优惠。管理员登陆后主要对四个部分进行处理,一个是图书信息的管理,一个是用户信息的管理,还有一个是要处理用户提交的订单,最后可以生成报表,将图书的买卖情况进行汇总,计算收入等。 在本系统的开发过程中用到了一个核心的存储过程有Pr_UserInfo_Login 用于验证管理员的登录。使用触发器DelUser完成用户的家删除功能。使用触发器Levelup控制用户的级别,达到一定的积分就自动升级为会员可以享受打着优惠。 存储过程是存储在服务器上的一组预编译的Transact-SQL语句,当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用,就可自动完成命令。编写存储过程可以优化整个系统数据库管理的速度、安全性和灵活性,同时大大提高系统代码的模块化和封装性。 本系统建立了5个视图,vw_BookRatings_Books_Users(用户评价信息视图),vw_books_category_Publishers(图书出版社详细信息视图),vw_OrderBook_Books_Orders_Users(订单信息视图),vw_Orders_Users(订单用户信息视图),vw_Users_UserStates_UserRoles(用户角色视图)。视图从表中将用到的一组记录提取出来组成一个虚拟表,而不管数据源中的其他信息,它可以改变这些记录的值,并把更新结果送回到源表中。 下面详细介绍各个子系统的具体实现。 3.2 登录模块 3.2.1 程序流程图 登录子系统主要分为两块,一块是用户部分,一块是管理员部分,用户部分有份为三部分,一个是单纯的登录功能,一个是注册功能,还有一个是密码丢失后的处理功能,注册功能里面主要是将信息通过存储过程将信息插入用户表Users,而密码丢失处理则是先输入用户的用户名和注册邮箱,通过与数据库中的信息进行对比,如果对则允许输入新密码,也可以选择重新注册。而登录部分,普通用户和管理员的验证则是基本相同的,都是通过使用存储过程将输入的用户名和密码与数据库表Users中的用户信息进行对比,如果正确则让其进入。 其流程图如下所示: 管理员登录 开始 管理员输入 身份信息 验证信息 信息是否正确否清空输入框 是 进入后台管理用户登录 结束 开始 修改密码注册用户 普通用户输 入身份信息 验证信息 信息是否正确否清空输入框 是 进入后台管理 结束 3.2.2 关键代码 登录子系统的关键页面是Adminlogin.asp。这个页面为一个功能模块,按照用户身份的不同进行不同的处理,最后将登录信息写到session变量中供其他页面使用,其功能核心为一个名为“Pr_UserInfo_Login”的存储过程,用汉语登录的验证。存储过程“Pr_UserInfo_Login”的代码如下所示: Create PROCEDURE [dbo].[Pr_UserInfo_Login] @userID nvarchar(50), @userPassword nvarchar(50), @reason varchar(50) output As begin -----1 select * from Users where LoginId=@UserID if(@@ROWCOUNT<1)>1)> begin set @Reason='noEmp' end else begin select * from Users where (LoginId=@UserID) and (LoginPwd=@userPassword)and UserRoleId=3 if(@@ROWCOUNT<1)>1)> begin set @Reason='passwordErr' end else begin set @Reason='access' end end return end ------1 DAL层调用代码方法 public static string CheckUser(ref User user) { string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["TimeBookShop"].ConnectionString; using(SqlConnection conn = new SqlConnection(strConn)) { SqlCommand command = new SqlCommand("Pr_UserInfo_Login", conn); command.CommandType = CommandType.StoredProcedure; SqlParameter parameterUserID = new SqlParameter("@userID", SqlDbType.NVarChar, 50); parameterUserID.Value = user.LoginId; command.Parameters.Add(parameterUserID); SqlParameter parameterUserPassword = new SqlParameter("@userPassword", SqlDbType.NVarChar, 50); parameterUserPassword.Value = user.LoginPwd; command.Parameters.Add(parameterUserPassword); SqlParameter parameterReason = new SqlParameter("@reason", SqlDbType.VarChar, 50); parameterReason.Direction = ParameterDirection.Output; command.Parameters.Add(parameterReason); conn.Open(); command.ExecuteNonQuery(); string result=""; if (parameterReason.Value.ToString() == "access") { result = "成功"; } else if (parameterReason.Value.ToString() == "noEmp") { result = "无用户"; } else if (parameterReason.Value.ToString() == "passwordErr") { result = "密码错误"; } return result; } } 页面调用代码 protected void btnLogin_Click(object sender, EventArgs e) { MyBookShop.Models.User user = new MyBookShop.Models.User(); if (this.txtName.Text.Trim() != null && this.txtPwd.Text.Trim() != null) { user.LoginId = this.txtName.Text.Trim(); user.LoginPwd = this.txtPwd.Text.Trim(); HttpCookie cookie = Request.Cookies["CheckCode"]; if (this.txtCode.Text.ToLower() == cookie.Value.ToString().ToLower()) { string result=UserManager.Login(ref user); if (result=="成功") { FormsAuthentication.SetAuthCookie(user.Name, false); Session["admin"] = user; Response.Redirect("ListOfBooks.aspx"); } else { Session["admin"] = null; string warn=""; this.Page.ClientScript.RegisterStartupScript(this.GetType(), "str", warn); } } else { this.Page.ClientScript.RegisterStartupScript(this.GetType(), "str", ""); } } } 3.3 用户购物模块 3.3.1 程序流程图 购物模块是整个网上书店的核心模块。用户通过登录书店浏览自己感兴趣的图书。当找到符合自己需求的图书时,可以选择将书籍加入购物车或加入书架。加入书架的书籍可以选择加入购物车。这并不需要登入。当用户希望购买时,点击生成订单。系统会提示用户登入。只有当用户登入后,才能将购物车中的书籍转入订单中。最后,确定购买。流程图如下: 开始 否是否要浏览图书信息 是否是否要浏览浏览图书信息书架信息 是选择图书否浏览书架是否要放入购物车是否要购买书 否是是查看购物车是点击购书 否是否继续购买 否 填写身份验证信息 验证登录身份 登录成功 生成提交订单信息 是否提交成功 是否取消订单 否 是否支付 是 支付货款 支付成功 结束 3.3.2关键代码 购物车在BookCart.aspx中存储暂时的Session信息,最后转发到生成订单 的页面。代码如下: public void ModifyNumber() { DataTable cart = (DataTable)Session["Cart"]; for (int i = 0; i < gvbookcart.rows.count;="" i++)=""> { TextBox txtNumber = gvBookCart.Rows[i].FindControl("txtNumber") as TextBox; int bookId = int.Parse(this.gvBookCart.DataKeys[i].Value.ToString()); int num = int.Parse(txtNumber.Text); Book book = GetBookByBookId(bookId); if (book.Quantity < num)=""> { txtNumber.Text = book.Quantity.ToString(); ScriptManager.RegisterStartupScript(this, this.GetType(), "str", "", false); } else { cart.Rows[i]["number"] = num; } } Session["Cart"] = cart; } 订单页面BookOrder.aspx在结算后转发数据到RedactMyOrder.aspx,代码如 下: public void DisplayDataBind() { //计?算?总哩?价? Price = 0; if (Session["Cart"] != null) { DataTable cart = (DataTable)Session["Cart"]; this.gvOrderBook.DataSource = cart; this.gvOrderBook.DataBind(); foreach (DataRow dr in cart.Rows) { int num = int.Parse(dr["number"].ToString()); decimal unitPrice = decimal.Parse(dr["unitPrice"].ToString()); Price += num * unitPrice; } this.lblSum.Text = Price.ToString() + "元"; } } 最终在RedactMyOrder.aspx上提交订单。 protected void ImageButton5_Click(object sender, ImageClickEventArgs e) { if (this.txtValidate.Text.ToLower() == Session["Code"].ToString().ToLower()) { if (Session["user"] != null) { DataTable cart = (DataTable)Session["Cart"]; foreach (DataRow dr in cart.Rows) { Order order = new Order(); order.OrderDate = DateTime.Now.Date; User u = (User)Session["user"]; order.User = u; if (u.UserRole.Id == 2) { order.TotalPrice = decimal.Parse(this.lblSaleSum.Text); } else { order.TotalPrice = Price; } int orderId = OrderManager.AddOrder(order); order.Id = orderId; OrderBook orderBook = new OrderBook(); orderBook.Order = order; Book book = new Book(); book.Id=int.Parse(dr["id"].ToString()); orderBook.Book = book; orderBook.Quantity = int.Parse(dr["number"].ToString()); orderBook.UnitPrice=decimal.Parse(dr["unitPrice"].ToString()); bool b = OrderBookManager.AddOrderBook(orderBook); if (b) { string[] Integral = dr["unitPrice"].ToString().Split('.'); bool b1 = UserManager.ModifyUserIntegralByUser(u.Id, int.Parse(Integral[0])); book.Quantity = int.Parse(dr["number"].ToString()); bool b2 = BookManager.ModifyBookQuantity(book); } } Response.Redirect("MyOrder.aspx"); } else { Response.Redirect("UserLogin.aspx?PageName=BookOrder"); } } else { ScriptManager.RegisterStartupScript(this, this.GetType(), "str", "", false); } } 3.4 管理员管理模块 3.4.1 程序流程图 管理员管理用户信息,主要有如下的功能,通过一个GriedView控件绑定数据库中的数据,显示用于管理员选择,主要有查看详细信息,并编辑的功能,还可以选择删除用户,并可以根据下拉列表框选择数据的范围。具体流程图如下: 开始 显示用户列表 通过下拉列表框选择用户类型 显示管理员列表管理员判断类型普通用户显示普通用户列表 VIP用户 显示VIP用户列表 判断选择修改修改用户信息 删除用户 结束 3.4.2关键代码 主要页面是ListAllUsers.aspx,页面处理代码 (1)选择显示的用户类型 protected void ddlUserRoles_SelectedIndexChanged(object sender, EventArgs e) { IList list = UserManager.GetUsersByUserRoleId(Convert.ToInt32(ddlUserRoles.Selecte dValue)); this.gvUser.DataSourceID = null; this.gvUser.DataSource = list; this.gvUser.DataBind(); } DAL层代码 public static IList { string sql = "SELECT * FROM vw_Users_UserStates_UserRoles WHERE URId=@URId"; IList SqlParameter[] para = new SqlParameter[] { new SqlParameter("@URId",UserRoleId) }; using (SqlDataReader dr = DBHelper.GetReader(sql, CommandType.Text, para)) { while (dr.Read()) { User user = new User(); user.Id = (int)dr["Id"]; user.Name = dr["Name"].ToString(); user.Address = dr["Address"].ToString(); user.Postalcode = dr["Postalcode"].ToString(); user.Phone = dr["Phone"].ToString(); user.Mail = dr["Mail"].ToString(); if (dr["IsOnLine"].ToString() != null && dr["IsOnLine"].ToString() != "") { user.IsOnLine = (int)dr["IsOnLine"]; } user.LoginId = dr["LoginId"].ToString(); user.LoginPwd = dr["LoginPwd"].ToString(); UserRole ur = new UserRole(); ur.Id = (int)dr["URId"]; ur.Name = dr["URName"].ToString(); user.UserRole = ur; user.Gender = (int)dr["Gender"]; user.Integral = (int)dr["Integral"]; list.Add(user); } } return list; } (2)删除用户(用Checkbox选择之后删除) protected void btnDel_Click(object sender, EventArgs e) { for (int i = 0; i < gvuser.rows.count;="" i++)=""> { CheckBox cb = (CheckBox)gvUser.Rows[i].FindControl("chkOne"); if (cb.Checked == true) { UserManager.DeleteUser(Convert.ToInt32(gvUser.DataKeys[i].Value.ToStr ing())); cb.Checked = false; } } BindGridView(); } DAL层代码 public static bool DeleteUser(int id) { string sql = "DELETE FROM Users WHERE id=@Id"; SqlParameter[] para = new SqlParameter[] { new SqlParameter("@Id",id) }; int count = DBHelper.ExecuteCommand(sql, CommandType.Text, para); if (count > 0) { return true; } else { return false; } } 3.5 其他模块简介 本系统中所有模块的功能如下所示: (1) 恢复用户 真正删除用户信息。而是将用户信息放入另外的一张 删除用户时并不会 表内。管理员可以通过恢复用户的功能,重新将用户信息恢复。避免了误删除。 (2)添加图书 管理员手动添加一本新书。可以通过下拉列表选择图书的出版社和图书分类。可以实现书籍的增加。 (3)添加图书分类 添加图书的类别。增加类别以后,添加图书时类别的选项会增加,同时在首页上图书的类别分类也会增加。 (5)为书籍分类 当图书类别有了修改或在添加图书时选错类别的情况下可以使用。能进行图书类别的修改。 (5)书籍列表 展示了本书店拥有的所有书籍,内有两个子功能: ?删除图书:当某本图书已经过时或不再出售时,便可以删除这本图书。以防用户进行错误购买。 ? 查看详细信息:点击后,显示这本图书的所有信息。 (6)添加图书数量 通过图书的库存情况,修改现有图书数量。进货时可以手动添加。保证图书的供应。 (7)订单处理 对用户提交的订单进行处理。如果满足发货的条件,便可将订单状态修改 为已阅,进行发货。如果用户不符合规定或有违约情况,管理员有权利将订单驳回,禁止用户的购书行为。 (8)生成报表 通过浏览水晶报表,可以获得书籍的销售情况。掌握哪些书热销。为下一次进货时,不同书的进货量决定提供情报支持。也为上层决策提供信息辅助。 3.6 系统界面设计 3.6.1 系统首页 在首页中可以实现用户登录功能,用户注册功能,进入购物车功能,查看广告信息(中间的js)还有右边的友情链接可以连接到其他网站。首页还列出了一些热门图书和新书等信息,而且左侧有图书类别分类可以点击连接到该分类的图书列表,通过首页还可以进入管理员页面,还可以使用关键字搜索图书信息。用户进入可以下拉,有用户注册,用户登录和我的订单,可以点击进入相应界面。 其界面如下所示: 3(6.2 管理员页面 管理员,主要功能都体现在管理首页了,用户管理,图书管理,以及订单管理,报表的生成。在用户管理页面,管理员可手动添加用户,通过用户列表查看 用户基本信息;图书管理中,可添加图书和图书分类,购进图书也在此增加;订单根据客户生成,报表主要根据订单生成。 其界面如下所示: 3(6.3购物车页面 客户在购书是,加入购物车,进入购物车页面,可以选择继续购物,点击“继续购物”便可,也可选择进行结算,点击“结算”,生成订单,提交。若在购物车内又不想买的书,可选择删除。 其界面如下所示: 3(6.4订单页面 订单页面主要确认,修改客户信息,交易方式。也可在提交前返回继续购 物。 4 网上书店功能展望 1、 效率上面的考虑 可以使用一些脚本语句用浏览器自动解析,减少服务器压力,既可以带 来界面的美观,又可以加快速度,使用更多数据库端执行的方式编写代 码,将很多功能放在数据库直接完成,提高安全性和效率。 2、 界面上的设计 管理员可以参与更多的主业信息的修改功能,比如添加管理员推荐的图 书等。界面的图形设计和LOGO等可以进行美化和设计,要让用户体验 变得更好。 3、 功能上的完善图书的图片信息不能存在数据库外,应该以数据的形式存 在数据库中,使数据更加集中,ISBN号最好能够与书匹配起来,更加与 实际相符,而且设计价格金额等数据的数据库信息最好备份,一面丢失。 5 个人小结 杨怿炜: 随着时光的流逝,项目也逐渐趋近于完成。在这次项目的开发中,我主要进行了网页后台代码的编写。当然,数据库和页面方面也参加了一部分的开发。总体来说,这次的项目开发给我带来了不少的收获,下面便从不同方面进行说明。 首先,项目的开发强化了编程技巧。在编写项目的过程中,我们遇到了许许多多不同的问题。有些是我们可以解决的,有些是需要查阅资料的,而有些则是直到最后都无法解决,不得不更换开发方法的。理论与实际之间永远拥有着巨大的差异,有许多方法在理论上是行的通的,但真正做起来却会遇到无法解决的问题。虽说所谓的无法解决是建立在当前的知识水平上的,现在的无法解决并不代表没有解决的方法。但是,面对困难是选择迎头而上还是避其锋芒,永远是一个值得思考的问题。例如在开发的开始阶段,我对Gridview、TreeView、ObjectDataSource、XMLDataSource等等控件的使用方法都处于一知半解的阶段。通过查阅了相关资料和书籍,最终才大致掌握了相关方法。这些都是属于可以克服的困难。而当我发现Treeview无法实现动态绑定时,经过百般思索,不 得不承认这个问题暂时无法解决。最终,换了一种后台绑定的方法才得以解决。 其次,对于团队来说互相间的人际交流也很重要。在一个团队中,并不是只有你一个在工作,如果人与人之间没有进行充分的交流,非常容易产生无用功或重复做工。而这些重复做工会导致团队内不和谐因素产生,从而进一步减少了团队间的交流。这样的死循环,一旦陷进去便很难逃脱出来。所以,在一开始就建立良好的团队合作关系是非常重要的。 最后,这次项目开发给了我一些真正做项目的经验。毕竟还处于在校的阶段,我能经历的真正项目开发的机会是十分有限的。所以,在这次项目开发的过程中,能体会到从需求分析到概要设计到详细设计这一全过程的机会是十分难得的。虽然同时有分工不明确的弊端,但是这为我们未来的工作,打下了一份坚实的基础。 俞健: 我们选择的项目是:网上书店。此次项目三人一组,我主要负责文档及数据库的设计。当然,此次的项目很多都是经过大家在一起讨论,总结而得出结论,最后由三人中的一个去完成,在完成的过程中,遇到了难以解决的问题,也是大家通过一起讨论,上网或图书馆查阅资料等方式来解决。 在项目刚开始时,文档是首先编写的,当然由于时间的紧迫,我们文档的设计与项目的着手几乎是同时进行的。本学期的多门课程都与文档有关,为我们编写文档省下了很多的时间,也大大减少了编写的难度。由于老师先前发给我们一篇参考文档,为了符合老师的要求,我们也是在很多格式上都参考了范例。 由于本次的项目着重点不同,所以我们在系统分析上,虽做了不少工作,却没有写进文档,文档的系统简介主要是各种图的展示,对于整个项目的各个功能,基本上也是一目了然。这些图是整个系统的框架,是我们一起讨论很久才决定的,中间也有争执,最后还是统一了意见,由我画出。基本上所有的图都是用office自带的visio制作的,但由于用到了不同的电脑,图的背景不一致。通过文档的编写我学到了很多知识,对于系统流程图,数据流图及其数据字典都更进一步深的了解。 除了文档的工作以外,管理员页面也是我的工作,这里运用到了ASP.NET 的很多技术;项目里,需要各种控件的使用,有很多是我们不熟悉的,也耗费了我们大量的时间,譬如验证控件,分页控件等,看上去简单,实则很棘手,当然这都是我们的知识点学习不够牢固所致;数据库方面,除去大家一起制作的各张表,我负责了数据库的存储过程,项目里需要对数据库进行操作的方法,我们都运用了存储过程。 在这次项目设计的过程中,使我深深的了解到自己的不足,有很多东西还有待去了解和学习。一直以来我犯了一个错误,那就是我误以为ASP、ado没有起多大的作用,但经过这近一个月来对它的了解,才知道它们的功能是那么的齐全和广泛。对于数据库,我是了解到她的强大和不可替代的地位,深知学好数据库的必要性,更坚定了我的学习之路。我知道自己以前的想法是大错特错同时,也知道自己所学到的东西是那么的微不足道。同时我也认识到,跟计算机相关的是团队,一个强大的团队,并不在于个人,而是我们是否协调的分配好各自的任务,各尽其能才是最重要的。在此,我学会了很多,也感到自身知识的贫乏,希望在日后的努力中能和各位队友做出更完善的系统。 李宥: 1、 此次项目的团队组成,协调,工作分配。 我此次做的是网上书店系统,我的团队成员三人,俞健对细节比较注重,杨怿炜对代码比较在行,而我重设计,三人技术上各有侧重,相辅相成,互相帮助,书店从结构上采用B/S模式,使用三层架构,连接数据库。还涉及网页设计。 从功能需求上我们各自提出想法,参考一些已有的网上书店系统的功能流程结构等进行整合,最终确定我们要完成的系统的功能,然后由我分配好任务,同时开始各自的工作。 我主要页面设计和一些代码的设计,对一些功能进行合理设计。俞健主要是完成数据库的设计和文档的编写,杨怿炜主要是设计一些代码的方法以及方法的实现。 2、本项目主要涉及的技术包括 (1)数据库的设计 建表、视图、存储过程、触发器,数据库的并发,数据库的规范,数据库安全控制,常用SQL语句 (2)数据库连接技术ADO.NET 数据库的一般连接,连接、非连接状态,水晶报表 (3)ASP.NET 三层架构,常用控件使用,C#语言,缓存,网页设计CSS、DIV,js (4)软件工程 整个软件开发过程都以软件工程规范开展,并编写文档 3、 我主要做的部分 我的工作主要是对页面的设计和布局,总共做了两个母版页,一个是前台的, 另一个是管理员后台的,首先是布局问题,对于母版页,我选择常见的布局 方式,特别的士使用它table将系统的界面居于浏览器中央,在其他布局中 海使用了Div辅助布局,使页面的格局在风格上趋于一体化,使用到很多CSS 对页面元素进行设置,然后使用到一些javascript脚本语句。在一些页面中, 比如注册页面和图书插入页面中使用了验证控件,在一些显示数据的页面中 使用了griedview控件和Detailsview等还要对这些控件进行配置,为了使 用三层架构,主要用Objectdatasource做数据源,在页面上使用session 和cookie等技术保证用户登录和退出的安全性和购物车和暂存架的保持等, 购物车里面的信息是放在session里面的,而暂存架里面的内容是放在 cookie里面的。还有一些数据库中的设计,比如会员积分上涨自动触发触发 器改变用户角色的设计等,首页里面还插了一些比较丰富的js,使页面更加 接近一些商用化的已有书店。 4、 书店功能上的展望 网站内搜索的高级化,对于搜多功能还需要很多的提高,而对于数据量大的 数据搜索更能体现出搜索算法的优劣,所以搜索对于网站还是很重要的。 在线支付的功能,网上书店如果不能实现网上支付的话就失去了很多方便性, 所以可以增加这个支付宝和网银的功能。 对于用户的级别可以多设置几个,让打折优惠也有层次,促进书店经营销售。 图书的种类也可以再向上分一个类别,让图书种类不局限于计算机种类,最 好使用更加好的导航方式。 从性能上还有很多可以值得提高的地方,对于很多东西,可以直接用非连接状态下实现,可以使用Ajax技术,减少服务器的压力,还可以用很多页面技术实现一些本来不需要使用数据库却使用了数据库的地方。比如一些js代码,代替一些控件的功能。 图书管理系统详细设计说明书 1 功能模块图 1.1 系统模块设计概述 模块化设计不仅是将一个系统划分成一些小的部件所构成的系统即可, 同时 要满足模块化组合原则、 模块化可解性原则、 模块化保护性原则、 模块化连续性 原则等。 模块化的连续性完全取决于模块的信息隐蔽的能力。 对于模块化保护性 部分取决于信息隐蔽, 如错误数据不传送到程序的全局变量中去。 要实现完全的 模块保护性,要求模块的实现包括例外处理部分。 一个模块化系统是指该系统由一系列松散耦合的模块组成。 模块是一个适当 尺寸能独立执行一个特定的功能的子程序。 它应该具备下述 3个性质:第一, 对 一个模块作某些改变, 该变化影响不应超出该模块的边界。 第二, 从系统中消去 该模块, 将仅仅影响它执行的功能。 第三, 用一个具有相同接口和功能的新模块 代替旧模块, 将不改变原系统的功能, 而可能影响的仅仅是系统的性能, 如执行 速度。上述 3个性质可概括为模块的有界性、可插拔性和可互换性。 1.2 系统模块功能设计 本系统主要实现对图书馆信息的管理, 主要功能为管理有关读者, 书籍, 借 阅和管理者的信息等。本系统结构分为 读者信息管理模块,书籍信息管理模块, 借阅信息管理模块,管理者信息管理模块 。读者信息管理部分有两方面的功能, 可以浏览读者的信息, 可以对读者信息进行维护 。 书籍信息管理可以 浏览书籍的 信息, 可以对书籍信息进行维护。 借阅信息管理可以 显示当前数据库中书籍借阅 情况, 可以对借阅信息进行维护 。 管理者信息管理可以 显示数据库中管理者的情 况,可以对管理者信息进行维护 。可见,本系统并不复杂,主要解决的问题是利 用关键字对数据库进行查询。 根据需求分析,得出我们图书管理系统的设计与实现 系统的功能模块图见图 1-1。 2 数据流程图 数据流程图是一种能全面地描述信息系统逻辑模型的主要工具, 它可以用少 数几种符号综合地反映出信息在系统中的流动、 处理和存储情况。 数据流程图具 有以下两个特性: (1)抽象性:表现在它完全舍去了具体的物质,只剩下资料的流动、加工 处理与存储。 (2)概括性:表现在它可以把信息中的各种不同业务处理过程联系起来, 形成一个整体。 数据流程图由以下四种基本元素组成,既外部实体、数据流、处理(功能) 、 资料存储,如图 1-2所示。 数据的源点和终点 数据处理 数据存储 数据流 图 1-2 数据流程图所用符号 每个模块用数据流程图来表示数据的来源,以及数据之间的关系。 系统的总体图见图 第一层图: (1) :登陆子系统 (3)查询模块 第二层图: (1) :处理新书购入(略) (2)处理学生借书 (3) :处理学生还书(略) (4) (5 (6 Ⅳ、 功能分配 3 数据库设计 人们在总结信息资源开发、 管理和服务的各种手段时, 认为最有效的是数据 库技术。 数据库的应用已越来越广泛。 从小型的单项事务处理系统到大型复杂的 信息系统大都用先进的数据库技术来保持系统数据的整体性、完整性和共享性。 目前,一个国家的数据库建设规模(指数据库的个数、种类) 、数据库信息量的 大小和使用频度已成为衡量这个国家信息化程度的重要标志之一。 数据库设计是建立数据库及其应用系统的技术, 是信息系统开发和建设中的 核心技术, 具体说, 数据库的设计是指对于一个给定的应用环境, 构造最优的数 据库模式, 建立数据库及其应用系统, 使之能够有效的存储数据, 满足各种用户 的应用需求(信息要求和处理要求) 。这个问题是数据库在应用领域的主要研究 课题。在数据库领域中,常常把使用数据库的各类系统统称为数据库应用系统。 从使用者的角度看, 信息系统是提供信息、 辅助人们对环境进行控制和进行 决策的系统。 数据库是信息系统的核心和基础。 它把信息系统中大量的数据按一 定的模型组织起来,提供存储、维护、检索数据的功能,使信息系统可以方便、 及时、 准确地从数据库中获得所需要的信息。 一个信息系统的各部分能否紧密的 结合在一起以及如何结合, 关键在数据库。 因此只有对数据库进行合理的逻辑设 计和有效的物理设计才能开发出完善而高效的信息系统。 数据库设计是信息系统 开发和建设的重要组成部分。 大型数据库的设计和开发是一项庞大的工程, 是涉 及多学科的综合性技术。其开发周期长、耗资多、失败的风险也大。必须把软件 工程的原理和方法应用到数据库建设中来。对于从事数据库设计的专业人员来 讲, 应该具备多方面的技术知识。 应用领域的知识随着应用系统所属的领域不同 而不同。 数据库设计人员必须深入实际与用户密切结合, 对应用环境、 专业业务 有具体深入的了解才能设计出符合具体领域要求的数据库应用系统。 3.1 ER图设计 概念结构是对现实世界的一种抽象。 所谓抽象是对实际的人、 物、 事和概念 进行人为处理, 抽取所关心的共同特性, 忽略非本质的细节, 并把这些特性用各 种概念精确的加以描述,这些概念组成了某种模型。 数据表设计 : 对图书馆管理系统,可以分为两大模块,一个小模块:分别为管理子系统,查询 子系统两大模块;基础信息管理小模块; 在管理子系统中: 1) :新书购入处理模块只要是针对采购员在根据计划在外采购新书之后的处 理, 所以当采购员采购到新书后, 系统根据原先计划采购的新书进行核查, 如果 符合计划预定, 则将新书入库; 否则退货; 该模块主要是处理购入的新书是否符 合要求; 图书入库: 2) :处理学生借书模块: 该模块主要是处理学生借书业务,在图书馆管理人员输入学生信息的时 候, 系统会根据学生文件对该学生进行查询, 看看是否存在该学生, 如果不存在, 则系统给出警告信息:该学生不存在; 如果存在该学生, 则系统根据罚款单对该 学生的欠款情况进行查询, 如果欠款超过一定金额, 则借书失败, 否则接受借书, 更新借书文件,在显示器上面显示借书成功; 3) :处理学生还书模块: 该模块主要是处理学生还书业务,在图书馆管理人员输入要还的图书字 段时, 系统会在借书文件中查找该图书信息, 之后对借书文件, 学生文件中的该 学生已借书数, 图书目录文件进行更新; 然后在借书文件中提取学生数据, 根据 图书的还书日期和借出日期对学生的欠款金额进行计算, 如果没有超期, 则欠款 金额在原来的基础上加 0;之后将结果显示出来; 4) :处理图书注销模块: 该模块主要是针对图书注销业务; 在查询子系统中: 有两个查询内容: 1) 学生信息查询:学生信息查询子模块主要是对学生信息的查询; 2) 图书信息查询:图书信息查询子模块主要是对图书信息的查询; 这些模块, 是针对学生或者图书馆管理人员这两个不同的对象, 查询子系统主要 是让用户了解信息, 所以不需要进行用户密码登陆, 直接可以进行查询, 而管理 模块是涉及到图书馆内部的重要信息管理方面, 所以必须要设置用户密码登陆和 权限等等,以保数据的安全性和系统的安全性; 输入: 图书查询模块 学生登录模块 输出: 学生登录模块:输出当前正借阅的图书信息 转载请注明出处范文大全网 » 图书管理系统实现步骤范文三:图书管理系统概要设计
范文四:图书管理系统设计文档
范文五:图书管理系统详细设计