您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页图书管理系统(完成版)

图书管理系统(完成版)

来源:纷纭教育


《Visual C++》课程大作业

题目名称: 图书馆管理系统 系 名 称: 计算机科学与信息工程学院 专业班级: 12级软件工程一班 姓名学号: 王 停 ************ 姓名学号: 徐开放 ************ 指导老师: * *

2013 年 6 月

目 录

第1章 组员分工 ..................................................................................................... 1 第2章 需求分析 ..................................................................................................... 2 第3章 总体设计 ..................................................................................................... 3

3.1 系统功能模块图 ......................................................................................................... 3 3.2系统设计流程图 ........................................................................................................... 3 3.3数据库设计 ................................................................................................................... 4

第4章 功能模块详细设计 ..................................................................................... 8 第5章 系统测试 ................................................................................................... 27 第6章 总结 ........................................................................................................... 31 第7章 参考文献 ................................................................................................... 32

- I -

第1章 组员分工

图书管理系统是一个比较大的系统,本系统有两名成员共同完成。

王停主要负责系统中对整个数据库的操作、管理和设置部分,包括权限验证、用户管理、基础数据设置、数据库的备份与恢复,以实现对数据库的管理和维护工作,并提高系统的数据安全性等工作。

徐开放主要负责实现对数据库中的具体表的数据项的管理和操作,包括借阅管理、书库管理、读者管理等模块,通过添加、删除、修改等操作,来实现对图书信息、读者信息、借阅信息的管理和登记,从而能够为借阅者提供方便快捷的服务,同时也提高了操作人员的管理效率。

- 1 -

第2章 需求分析

该图书管理系统是基于利用计算机管理图书信息的需求而设计的,主要致力于为图书借阅人提供方便快捷的服务,以及为图书管理人员提供准确可靠的信息,旨在提高图书管理的效率,节约相关的管理成本,增强图书管理的安全性,为学校的信息化建设提供必要的支持。

其具体需求分析如下: 1. 系统需求

该系统需提供给图书借阅者、信息管理员和图书馆管理人员共三方面的需求,图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;信息管理员对图书借阅者的借阅及还书要求进行操作,同时对借书或还书信息进行查询;图书馆管理员实现图书采购及验收编目入库。它要满足图书借阅管理、图书书库管理、图书借阅人管理的基本要求,并能实现方便的操作和扩展,满足图书馆发展的需要,保障图书管理书籍的安全、准确。

2. 功能需求

该图书管理系统主要有以下几项基本功能:

⑴用户管理:用于管理系统用户,并能设置用户口令和权限,实现用户的添加、修改和删除,从而为系统的安全性提供保障。

⑵ 基础数据管理:负责维护图书管理相关的基础数据,主要包括对图书逾期罚款、图书类别、读者类别的设置。

⑶ 借阅管理:完成图书的借出登记,归还登记信息,以及借书信息和还书信息的查询浏览等借阅相关的管理功能。

⑷ 书库管理:维护书库中的图书信息,能够完成新书的入库登记,图书信息的查询以及图书丢失处理等功能。

⑸ 读者管理:维护读者的相关信息,能够完成新读者信息的登记,读者信息的查询以及读者注销等功能。

⑹ 数据库管理:对现有的数据库进行管理,包括数据备份和恢复,以方便用户对数据库的管理和维护工作,提高系统的数据安全性。

3. 性能需求

Windows XP/2000/98/ME中的Visual C++开发环境,Microsoft Access 2003数据库使用软件。

- 2 -

第3章 总体设计

3.1 系统功能模块图

通过建立该图书馆电子系统,实现借书人员的权限验证,实现管理员对其用户进行管理的使用性能,及借阅图书和借阅用户的管理,同时可实现系统管理员对整个图书馆的数据库的管理。

图书管理系统功能模块图如图3-1 所示:

图书管理系统

图3-1 图书管理系统功能模块图

权 限 验 证 用户管理 基 础 数 据 设 置 借阅 管理 书库 管理 读者管理 数据库管理 3.2 系统设计流程图

图书管理系统流程图如图3-2所示:

图3-2 图书管理系统流程图

- 3 -

3.3 数据库设计

数据库的好坏关系到系统的运行速率、存储数据的效率,合理的数据库设计可以提高系统的性能。数据库结构要能充分满足各种信息的输入和输出,收集基本数据,数据结构处理的流程,组成一份详尽的数据字典,为具体设计做准备。针对一般图书管理系统的需求,通过对数据管理工作过程的内容和数据流程的分析,得到其系统的逻辑模型,根据综合条件的需求为本系统的数据库设计如下数据项和数据结构:

1. 用户表:用户名、用户密码、用户类型。 用户表(user)具体设计如表3-1所示。

表3-1 用户表(user)

名称 用户名 用户密码 用户类型 字段名称 user passward isAdmin 类型 文本 文本 是/否 主键 Yes No No 非空 Yes No Yes 2. 罚款设置表:罚款类型、罚款金额。

罚款设置表(publishType)具体设计如表3-2所示。

表3-2 罚款设置表(publishType)

名称 罚款类型 罚款金额 字段名称 type money 类型 文本 文本 主键 Yes No 非空 Yes Yes 3. 图书类型设置表:类别名称、可借出天数。 图书类型设置表(bookType)具体设计如表3-3所示。

表3-3 图书类型设置表(publishType)

名称 类别名称 可借出天数 字段名称 type number 类型 文本 数字 主键 Yes No 非空 Yes Yes 4. 读者类型设置表:类别名称、可借书册数。

读者类型设置表(readerType)具体设计如表3-4所示。

- 4 -

表3-4 读者类型设置表(readerType)

名称 类别名称 可借书册数 字段名称 type number 类型 文本 数字 主键 Yes No 非空 Yes Yes 5. 归还信息表:记录号、读者编号、读者姓名、图书编号、图书名称、图书类别、图书价格、借出日期、归还日期、罚款金额、其他金额、总计金额、操作员。

图书信息表(bookInfo)具体设计如表3-5所示。

表3-5 图书信息表(bookInfo)

名称 图书编号 图书名称 图书类别 出版社 作者 图书价格 登记日期 是否借出 借阅人编号 说明 字段名称 code name type press writer price in_date isBorrow reader_code brief 类型 文本 文本 文本 文本 文本 文本 日期/时间 是/否 文本 文本 主键 Yes No No No No No No No No No 非空 Yes Yes Yes No No No Yes No No No 6. 读者信息表:读者编号、读者姓名、读者性别、读者类别、注册日期、联系电话、单位部门、住址、说明。

读者信息表(readerInfo)具体设计如表3-6所示。

表3-6 读者信息表(readerInfo)

名称 读者编号 读者姓名 读者性别 读者类别 注册日期 联系电话 单位部门 字段名称 code name sex type reg_date phone dept 类型 文本 文本 文本 文本 日期/时间 文本 文本 - 5 -

主键 Yes No No No No No No 非空 Yes Yes Yes Yes Yes No No

住址 说明 address brief 文本 文本 No No No No 7. 借出信息表:记录号、读者编号、读者姓名、图书编号、图书名称、图书类别、图书价格、借出日期、归还日期、是否归还、操作员。

借出信息表(borrowInfo)具体设计如表3-7所示。

表3-7 借出信息表(borrowInfo)

名称 记录号 读者编号 读者姓名 图书编号 图书名称 图书类别 图书价格 借出日期 归还日期 是否归还 操作员 字段名称 ID reader_code reader_name book_code book_name book_type price borrow_date return_date isReturn operator 类型 自动编号 文本 文本 文本 文本 文本 文本 日期/时间 日期/时间 文本 文本 主键 Yes No No No No No No No No No No 非空 Yes Yes Yes Yes Yes No No Yes Yes No Yes 8. 归还信息表:记录号、读者编号、读者姓名、图书编号、图书名称、图书类别、图书价格、借出日期、归还日期、罚款金额、其他金额、总计金额、操作员。

归还信息表(returnInfo)具体设计如表3-8所示。

表3-8 归还信息表(returnInfo)的结构

名称 记录号 读者编号 读者姓名 图书编号 图书名称 图书类别 图书价格 字段名称 ID reader_code reader_name book_code book_name book_type price 类型 自动编号 文本 文本 文本 文本 文本 文本 - 6 -

主键 Yes No No No No No No 非空 Yes Yes Yes Yes Yes No No

借出日期 归还日期 罚款金额 其他金额 总计金额 操作员 borrow_date return_date punish other total operator 日期/时间 日期/时间 文本 文本 文本 文本 No No No No No No Yes Yes No No No Yes

- 7 -

第4章 功能模块详细设计

1. 基本界面

创建一个基于单文档的MFC应用程序,建立系统主体框架,生成应用程序类、文档类、视图类等;在菜单项中添加相应的子菜单项;在工具栏中选择必要的控件置于菜单栏,在相应的视图类中添加消息处理函数;按功能模块的划分,使用资源编辑器创建系统菜单;在视图类的Paint事件处理函数OnPaint()中添加代码,实现加载背景图片的功能。

基本界面设计如下图4-1所示。

图4-1 基本界面

2. 登录界面

即为权限验证模块,主要是根据用户输入的用户名和密码验证用户身份并决定其操作权限,而且会对用户的输入情况给出相应的提示信息。在添加过相应的“用户名”、“密码”、“登录”、“退出”等功能键的基本控件后,在类视图中添加相应的消息处理函数;在视图类的Paint事件处理函数OnPaint()中添加代码,实现加载背景图片使登陆界面更加美观。

登陆界面如图4-2所示。

- 8 -

图4-2 登陆界面

登录界面的实现核心代码如下:

CUserSet recordset;

m_ctrUser.SetFocus(); //用户身份分配权限设置 m_ctrPass.SetFocus();

CLibraryApp* ptheApp = (CLibraryApp *) AfxGetApp(); CArchive ar(&file,CArchive::store); //密码设置

在用户登录时,如果密码错误时,系统会给出提示 “密码错误,请重新输入!”,同时系统内部会进行信息初始化,供用户进行重新输入操作。

密码验证界面如图4-3所示。

图4-3 错误提示

- 9 -

完成初始化工作,从数据表中提取用户名列表中的数据,以便用户选择并登录

CDialog::OnInitDialog(); CUserSet recordset ;

m_ctrUser.AddString(recordset.m_user); recordset.MoveNext();//用户信息初始化

3. 用户管理模块

提供添加新用户、删除指定用户、修改用户的密码和权限的功能,该模块功能只限于具有系统管理员权限的用户使用。

模块结构:包括添加新用户、修改用户口令、修改用户权限、删除用户。 用户管理界面设计如图4-4所示。

图4-4 用户管理界面

用户管理模块实现的核心代码如下:

CUserSet::CUserSet(CDatabase* pdb) {

m_user = _T(\"\"); m_passwd = _T(\"\"); m_isadmin = FALSE; m_nFields = 3;

m_nDefaultType = snapshot; : CRecordset(pdb)

}//新增用户设置

CString CUserSet::GetDefaultConnect()

- 10 -

CString CUserSet::GetDefaultSQL()

void CUserSet::DoFieldExchange(CFieldExchange* pFX) { }

CRecordset::AssertValid(); CRecordset::Dump(dc);

pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T(\"[user]\"), m_user); RFX_Text(pFX, _T(\"[passwd]\"), m_passwd); RFX_Bool(pFX, _T(\"[isadmin]\"), m_isadmin);

4. 基础数据设置模块

主要通过图书逾期罚款设置、图书类别设置和读者类别设置三个子模块分别来实现相应子基础数据的维护和管理。

模块结构:罚款设置、图书类别设置、读者类别设置。 ⑴ 罚款设置界面设计如下:

图4-5 罚款设置界面

罚款设置核心代码如下:

void CPunishTypeDlg::OnOK() {

UpdateData();

if(m_strMoney.IsEmpty()) {

- 11 -

AfxMessageBox(\"请输入罚款金额\"); return;

}//检查金额输入 rs.Close(); CDialog::OnOK(); }// 罚款金额设置

⑵ 读者类型设置可根据读者类别设置可节约图书的数量,可以增加、修改和删除读者的类别设置、可借阅图书量。

读者类型设置界面如图4-6所示。

图4-6 读者类型界面

读者类型模块实现核心代码如下:

CReaderTypeDlg::OnInitDialog() //初始化读者类型对话框

m_ctrList.InsertColumn(0,\"类别名称\");

m_ctrList.SetColumnWidth(0,120); m_ctrList.InsertColumn(1,\"可借册数\"); m_ctrList.SetColumnWidth(1,60);

m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

CReaderTypeDlg::RefreshData() //刷新读者类型对话框的数据

m_ctrList.SetFocus(); //清空列表 m_ctrList.DeleteAllItems(); m_ctrList.SetRedraw(FALSE); UpdateData(TRUE); //打开记录集

- 12 -

m_ctrList.InsertItem(i,m_recordset.m_type); itoa(m_recordset.m_number,buffer,10); m_ctrList.SetItemText(i,1,buffer); m_recordset.MoveNext(); //添加记录

CReaderTypeDlg::OnButtonNew() //添加新读者类型

m_recordset.AddNew();

m_recordset.m_type = dlg.m_strType; m_recordset.m_number = dlg.m_nNumber; m_recordset.Update(); m_recordset.Close();

CReaderTypeDlg::OnButtonModify() //修改读者类别数据

m_recordset.Edit();

m_recordset.m_type = dlg.m_strType; m_recordset.m_number = dlg.m_nNumber; m_recordset.Update(); m_recordset.Close();

CReaderTypeDlg::OnButtonDelete() //删除读者类别数据

m_recordset.Delete(); m_recordset.Close();

⑶ 图书类别设置主要包括图书类别名称和可借出天数,并且带有增加、修改、删除图书类别的功能。

图书类型设置功能界面如图4-7所示。

图4-7 图书类别设置功能界面

- 13 -

CBookTypeDlg::OnButtonNew() // 新增图书类型

m_recordset.AddNew();

m_recordset.m_type = dlg.m_strType; m_recordset.m_number = dlg.m_nNumber;

CBookTypeDlg::OnButtonModify() // 修改图书类型

m_recordset.Edit();

m_recordset.m_type = dlg.m_strType; m_recordset.m_number = dlg.m_nNumber;

RefreshData();CBookTypeDlg::OnButtonDelete()// 删除图书类型 CBookTypeDlg::OnInitDialog() // 初始化对话框

m_ctrList.SetColumnWidth(0,120); m_ctrList.SetColumnWidth(1,60);

CBookTypeDlg::RefreshData() ///刷新图书类型数据

m_ctrList.InsertItem(i,m_recordset.m_type);

itoa(m_recordset.m_number,buffer,10); m_ctrList.SetItemText(i,1,buffer); m_recordset.MoveNext();

5. 借阅管理模块

该模块主要实现借书和还书的登记功能,同时提供借录和还录的查询和浏览功能。

模块结构:借书、借书查询、还书、还书查询。 ⑴ 借书设置界面如图4-8所示。

图4-8 借书设置界面

- 14 -

借书设置实现的核心代码如下:

CBorrowDlg::CBorrowDlg(CWnd* pParent /*=NULL*/)

: CDialog(CBorrowDlg::IDD, pParent) //借书对话框的构建 BEGIN_MESSAGE_MAP(CBorrowDlg, CDialog)

CBorrowDlg::OnChangeEditReaderCode() //设置读者编号

m_nAlready=rs_BookInfoSet.GetRecordCount();

m_nLeft = m_nAllow - m_nAlready; rs_BookInfoSet.Close(); m_bReaderEnable = TRUE;

CBorrowDlg::OnChangeEditBookCode() //设置图书编号

m_strBookName = rs_book.m_name;

m_strBookType = rs_book.m_type; m_strBookPrice = rs_book.m_price; rs_book.Close();

m_nDays = rs_bookType.m_number; rs_bookType.Close(); m_bBookEnable = TRUE;

CBorrowDlg::OnOK() //借书对话框确定键函数

rs_book.Edit();

rs_book.m_isBorrow = TRUE;

rs_book.m_reader_code = m_strReaderCode; rs_book.Update(); rs_book.Close(); m_recordset.AddNew();

m_recordset.m_book_code = m_strBookCode m_recordset.m_book_name =

;

;

; ;

;

m_strBookName

m_recordset.m_book_type = m_strBookType

m_recordset.m_borrow_date = CTime::GetCurrentTime() m_recordset.m_operator = ptheApp->m_strOperator m_recordset.m_price = m_strBookPrice ; m_recordset.m_reader_code = m_strReaderCode ; m_recordset.m_reader_name = m_strReaderName ;

m_recordset.m_return_date = CTime::GetCurrentTime()+m_nDays*24*3600 ; m_recordset.m_isReturn = FALSE; m_recordset.Update(); m_recordset.Close();

m_strBookCode=\"\"; //更新界面显示 m_strBookName=\"\";

- 15 -

m_strBookType=\"\"; m_strBookPrice=\"\"; m_nDays=0; m_nAlready++; m_nLeft--;

m_bBookEnable = FALSE; UpdateData(FALSE); RefreshData();

CBorrowDlg::RefreshData() //刷新借书对话框数据

m_ctrList.InsertItem(i,m_recordset.m_book_code);

m_ctrList.SetItemText(i,1,m_recordset.m_book_name); m_ctrList.SetItemText(i,2,m_recordset.m_price); m_ctrList.SetItemText(i,3,m_recordset.m_book_type);

strTime.Format(\"%d-%d-%d\m_borrow_date.GetMonth(),m_recordset.m_borrow_date.GetDay());

m_ctrList.SetItemText(i,5,strTime);

m_ctrList.SetItemText(i,6,m_recordset.m_operator); i++;

m_recordset.MoveNext();

CBorrowDlg::OnInitDialog() //初始化借书对话框

⑵ 还书设置界面如图4-9所示。

图4-9 还书设置界面

还书设置实现的核心代码如下:

CReturnDlg::CReturnDlg(CWnd* pParent /*=NULL*/)

- 16 -

: CDialog(CReturnDlg::IDD, pParent)

CReturnDlg::DoDataExchange(CDataExchange* pDX) CReturnDlg::OnInitDialog()

m_bntReturn.EnableWindow(FALSE); CReturnDlg::OnButtonReturn()

rs_book.Edit();

rs_book.m_isBorrow = FALSE; rs_book.m_reader_code = _T(\"\"); rs_book.Update(); rs_book.Close();

if(m_BorrowSet.GetRecordCount()!=0) {

m_BorrowSet.Edit();

m_BorrowSet.m_isReturn = TRUE; m_BorrowSet.Update();

}

m_BorrowSet.Close();

strSQL.Format(\"select * from borrowInfo where book_code = '%s' and isReturn = False \m_ReturnSet.AddNew();

m_ReturnSet.m_book_code = m_strBookCode; m_ReturnSet.m_book_name = m_strBookName; m_ReturnSet.m_book_type = m_strBookType; m_ReturnSet.m_borrow_date = m_tmBorrow; m_ReturnSet.m_operator = ptheApp->m_strOperator; gcvt(m_fOther,7,buffer); m_ReturnSet.m_other = buffer; m_ReturnSet.m_price = m_strPrice; gcvt(m_fPunish,7,buffer); m_ReturnSet.m_punish = buffer;

m_ReturnSet.m_reader_code = m_strReaderCode; m_ReturnSet.m_reader_name = m_strReaderName; m_ReturnSet.m_return_date = CTime::GetCurrentTime(); m_ReturnSet.m_total = buffer; m_ReturnSet.Update(); m_ReturnSet.Close();

AfxMessageBox(\"图书归还成功!\恢复到初始状态 CReturnDlg::OnButtonClear()

m_strBookCode = _T(\"\");

- 17 -

m_strBookName = _T(\"\"); m_strBookType = _T(\"\"); m_nOverDays = 0; m_strPrice = _T(\"\"); m_strReaderCode = _T(\"\"); m_strReaderName = _T(\"\"); CReturnDlg::OnChangeEditBookcode()

m_strBookName = m_BorrowSet.m_book_name;

m_strBookType = m_BorrowSet.m_book_type; m_strPrice = m_BorrowSet.m_price;

m_strReaderCode = m_BorrowSet.m_reader_code; m_strReaderName = m_BorrowSet.m_reader_name; m_tmBorrow = m_BorrowSet.m_borrow_date; m_tmReturn = m_BorrowSet.m_return_date; CPunishTypeSet rs; //显示罚款数据

rs.Open(AFX_DB_USE_DEFAULT_TYPE,\"select * from punishtype\"); m_fPunish =(float)( m_nOverDays*(atof(rs.m_money))); m_fTotal = m_fOther + m_fPunish; m_BorrowSet.Close();//设置按钮状态 m_bntReturn.EnableWindow(); CReturnDlg::OnChangeEditOther() m_fTotal = m_fOther + m_fPunish;

⑶ 还书查询设置界面如图4-10所示。

图4-10 还书查询设置界面

- 18 -

还书查询设置实现的核心代码如下:

CReturnSearchDlg::CReturnSearchDlg(CWnd* pParent /*=NULL*/)

: CDialog(CReturnSearchDlg::IDD, pParent) m_strBookCode = _T(\"\"); m_strReaderCode = _T(\"\"); CReturnSearchDlg::OnButtonSearch()

m_ctrList.DeleteAllItems();

m_ctrList.InsertItem(i,m_recordset.m_reader_code);

m_ctrList.SetItemText(i,2,m_recordset.m_book_code);

strTime.Format(\"%d-%d-%d\m_borrow_date.GetMonth(),m_recordset.m_borrow_date.GetDay()); m_ctrList.SetItemText(i,6,strTime);

m_return_date.GetMonth(),m_recordset.m_return_date.GetDay()); m_ctrList.SetItemText(i,7,strTime);

m_ctrList.SetItemText(i,8,m_recordset.m_punish); m_ctrList.SetItemText(i,9,m_recordset.m_other); m_recordset.MoveNext();

5. 书库管理模块

实现对所有图书信息的管理功能,包括新书的入库登记,图书信息的查询浏览,以及图书的挂失等。

模块结构:新书登记、图书信息查询、图书挂失。

⑴ 新书登记设置界面如图4-11所示。

图4-11 新书登记设置界面

新书登记界面实现核心代码如下:

- 19 -

CNewBookDlg::CNewBookDlg(CWnd* pParent /*=NULL*/)

: CDialog(CNewBookDlg::IDD, pParent) m_strBookType = _T(\"\"); m_strBookCode = _T(\"\"); m_strBookName = _T(\"\"); m_strPrice = _T(\"\"); m_strPress = _T(\"\"); m_strWriter = _T(\"\"); m_strBrief = _T(\"\");

CDialog::DoDataExchange(pDX);

DDX_CBString(pDX, IDC_COMBO_BOOKTYPE, m_strBookType); DDX_Text(pDX, IDC_EDIT_BOOK_CODE, m_strBookCode); DDX_Text(pDX, IDC_EDIT_BOOK_NAME, m_strBookName); DDX_Text(pDX, IDC_EDIT_BOOK_PRICE, m_strPrice); DDX_Text(pDX, IDC_EDIT_PRESS, m_strPress); DDX_Text(pDX, IDC_EDIT_WRITER, m_strWriter); DDX_Text(pDX, IDC_EDIT_BRIEF, m_strBrief);

CNewBookDlg::DoDataExchange(CDataExchange* pDX)

CNewBookDlg::OnInitDialog() CNewBookDlg::OnButtonNew()

AfxMessageBox(\"请输入图书编号!\"); AfxMessageBox(\"请输入图书类型!\"); AfxMessageBox(\"请输入图书名称!\");

MessageBox(\"打开数据库失败!\数据库错误\AfxMessageBox(\"该图书编号已经存在,请重新输入!\"); MessageBox(\"打开数据库失败!\数据库错误\

CNewBookDlg::OnButtonAll()

m_ctrList.DeleteAllItems();

strSQL.Format( \"select * from bookInfo \");

MessageBox(\"打开数据库失败!\数据库错误\

while(!m_recordset.IsEOF())

m_ctrList.InsertItem(i,m_recordset.m_code); m_ctrList.SetItemText(i,1,m_recordset.m_name); m_ctrList.SetItemText(i,2,m_recordset.m_type); m_ctrList.SetItemText(i,3,m_recordset.m_writer); m_ctrList.SetItemText(i,4,m_recordset.m_press); m_ctrList.SetItemText(i,5,m_recordset.m_price); m_ctrList.SetItemText(i,6,strTime);

- 20 -

m_ctrList.SetItemText(i,7,m_recordset.m_brief); i++;

m_recordset.MoveNext();

int i = m_ctrList.GetSelectionMark();

AfxMessageBox(\"请选择一条记录进行删除!\");

CNewBookDlg::OnButtonDelete()

strSQL.Format(\"select * from bookInfo where code = '%s' \

AfxMessageBox(\"打开数据库失败!\");

m_recordset.Delete(); m_recordset.Close(); m_ctrList.DeleteItem(i);

⑵ 图书信息查询界面如图4-12所示。

图4-12 图书信息查询界面

图书信息查询界面实现代码如下:

CBookSearchDlg::CBookSearchDlg(CWnd* pParent /*=NULL*/)

: CDialog(CBookSearchDlg::IDD, pParent) m_strCode = _T(\"\");

CBookSearchDlg::DoDataExchange(CDataExchange* pDX)

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_LIST1, m_ctrList); CBookSearchDlg::OnButtonSearch()

- 21 -

strSQL=\"select * from bookInfo\";

strSQL.Format(\"select * from bookInfo where code = '%s'\

RefreshData(strSQL); CBookSearchDlg::OnButtonAll()

strSQL.Format( \"select * from bookInfo \");

CBookSearchDlg::RefreshData(CString strSQL)

m_ctrList.DeleteAllItems(); m_ctrList.SetRedraw(FALSE);

MessageBox(\"打开数据库失败!\数据库错误\

⑶ 图书挂失设置界面如图4-13所示。

图4-13 图书挂失设置界面

图书挂失设置界面实现核心代码如下:

CBookLostDlg::OnButtonLost()

if(m_strCode.IsEmpty())

AfxMessageBox(\"请输入待挂失的图书编号!\");

strSQL.Format(\"select * from bookInfo where code = '%s' \ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))

AfxMessageBox(\"打开数据库失败!\"); if(m_recordset.GetRecordCount()==0)

AfxMessageBox(\"没有找到该图书!\"); m_recordset.Close();

- 22 -

m_recordset.Delete(); m_recordset.Close();

AfxMessageBox(\"图书挂失成功!\",MB_ICONINFORMATION ); m_ctrList.DeleteAllItems(); m_strCode = _T(\"\"); CBookLostDlg::OnButtonAll()

strSQL.Format( \"select * from bookInfo \");

7. 读者管理模块:实现对所有读者信息的管理功能,如读者登记,读者信息的查询浏览,以及读者信息的注销等。

模块结构:读者登记、读者信息查询、读者注销 ⑴ 读者登记界面设置如图4-14、4-15所示。

图4-14 读者登记界面

读者登记界面实现核心代码如下:

CReaderInfoSet::CReaderInfoSet(CDatabase* pdb): CRecordset(pdb)

m_code = _T(\"\"); m_name = _T(\"\"); m_sex = _T(\"\"); m_type = _T(\"\"); m_phone = _T(\"\"); m_dept = _T(\"\"); m_address = _T(\"\"); m_brief = _T(\"\");

- 23 -

CReaderInfoSet::GetDefaultConnect()

return _T(\"ODBC;DSN=LibraryDB\"); CReaderInfoSet::GetDefaultSQL() return _T(\"[readerInfo]\");

CReaderInfoSet::DoFieldExchange(CFieldExchange* pFX) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, _T(\"[code]\"), m_code); RFX_Text(pFX, _T(\"[name]\"), m_name); RFX_Text(pFX, _T(\"[sex]\"), m_sex); RFX_Text(pFX, _T(\"[type]\"), m_type); RFX_Date(pFX, _T(\"[reg_date]\"), m_reg_date); RFX_Text(pFX, _T(\"[address]\"), m_address);

⑵ 读者信息查询界面设置如图4-15所示。

图4-15 读者信息查询界面

读者信息查询界面实现核心代码如下:

CReaderSearchDlg::CReaderSearchDlg(CWnd* pParent /*=NULL*/)

: CDialog(CReaderSearchDlg::IDD, pParent) m_strType = _T(\"\"); m_strCode = _T(\"\");

CReaderSearchDlg::DoDataExchange(CDataExchange* pDX) CReaderSearchDlg::OnInitDialog()

CReaderTypeSet recordset ; //添加读者类型数据

- 24 -

strSQL=\"select * from readerType\";

MessageBox(\"打开数据库失败!\数据库错误\

CReaderSearchDlg::OnButtonSerach()

strSQL=\"select * from readerInfo\";

strSQL.Format(\"select * from readerInfo where code = '%s'\ strSQL.Format(\"select * from readerInfo where type = '%s'\ MessageBox(\"打开数据库失败!\数据库错误\

8.数据库管理模块:实现对数据库的基本操作,包括数据库的备份和恢复,以提高数据库的安全性。

模块结构:数据库备份、数据库恢复 数据库管理界面如图4-15所示。

图4-15 数据库管理界面

数据库管理界面实现核心代码如下:

CMainFrame::OnDatabaseBackup() //数据库的备份

if(AfxMessageBox(\"您确定要备份数据库吗?\ if(CopyFile(\".\\\\libDB.mdb\

AfxMessageBox(\"数据库备份成功!\");

else

AfxMessageBox(\"数据库备份失败!\");

- 25 -

CMainFrame::OnDatabaseRecover()数据库的恢复

if(AfxMessageBox(\"还原数据库将覆盖原来的数据库。您确定要还原吗?\

if(CopyFile(\".\\\\libDB.bak\

AfxMessageBox(\"数据库还原成功!\");

else

AfxMessageBox(\"数据库还原失败!\");

- 26 -

第5章 系统测试

1.登陆界面的测试

图5-1 登陆界面

登陆界面的设计中对用户名的下拉菜单添加变量时添加控件变量m_ctrUser,和字符串型变量m_strUser两个变,用户名调用数据库里的内容;用户类型可以自行选择,当密码不正确时弹出提示信息。

2. 图书类型设置的测试

图5-2 图书类型设置界面

- 27 -

2

图5-3 新增图书类型操作界面

图书类型设置可以对图书的类型进行添加、删除、修改;进行添加时的弹出添加对话框,添加、删除、修改后的内容和数据库连接,可直接显示在左边的列表里面。

2. 还书设置的测试

图5-4 还书设置界面

此对话框只需要输入所借图书的编号,图书的信息以及读者信息都会自动连接到数据库生成,相应的归还信息也会自动生成,方便管理者进行管理。

3. 图书信息查询的测试

- 28 -

图5-5 图书信息查询界面

图书信息查询时,只需输入图书的编号进行查询,当点击“显示全部”时数据库里包含的所有书籍的信息都会显示出来,图书编号查询可以使读者更方便快捷地查找到自己所需要的书籍信息。

图5-6 图书挂失操作界面

对图书进行挂失操作,系统正常显示挂失成功页面。

4. 读者登记的测试

- 29 -

图5-7 读者登记设置界面

读者登记,把督责的相应信息填写完整后,点击“确定”添加的读者信息会自动添加到数据库中,以后查阅时也会有此读者的相应信息。

5. 数据库备份

图5-8

备份数据库,可以保存用户表、系统表、索引、视图和存储过程等所有数据库对象,防止信息丢失。

- 30 -

第6章 总结

经过小组成员的共同努力,在老师规定的时间内基本实现了图书管理系统的所有功能,现将对该系统的总结和报告阐述如下:

此系统包含了图书管理系统中需要的基本功能。对话框中添加的列表控件可以使查询或添加的内容显示在对话框中,使人一目连然;在“还书”对话框的“归还信息”里“借书日期”“还书日期”控件关联到日历表,方便管理者记录日期信息。

对于借书对话框,允许借出和已经借出的数据相等时,应该弹出“借阅已满,禁止借阅”对话框;对于“读者信息查询”“读者注销”“图书信息查询”“借书查询”“还书查询”对话框中的查询按钮,当查询时需要输入的内容为空时,应弹出“请输入查询信息”对话框,但该系统并没有实现这以功能。由于时间和技术欠缺,整个系统只是实现了基本的实用功能,在美化方面缺少设计。

通过对此图书管理系统的设计与制作,使自己更全面的了解了图书管理系统的管理流程和操作原理,并学会了其各项功能的实现方法。同时对于VC++所学内容有了更全面的认识、了解和补充。学会了怎样验证用户的身份的方法,并再次熟悉了添加、删除、修改等基本的数据操作的实现方法,对各种函数的使用功能和使用方法有了深入的理解和亲身实践;掌握了MFC下基于单文档程序系统生成的工具栏的显示与消除以及自定义工具栏的添加;最重要的是学会了对话框与数据表的关联,以及他们之间传递信息的方法。

感谢小组成员的努力和李源老师在课堂上的认真授课和在课下的认真指导。

- 31 -

第7章 参考文献

[1] 郑阿奇,等 Visual C++实用教程 [M]. 北京:电子工业出版社,2008

[2] 黄明,等 Visual C++ 信息系统设计与开发实例 [M]. 北京: 机械工业出版社,2005 [3] 陈锵,等 Visual C++2005从入门到精通 [M]. 北京:电子工业出版社,2007 [4] 陈志泊,等 Visual C++ 程序设计 [M]. 北京:中国铁道出版社, 2008 [5] 管西京. VC++项目开发 [M]. 北京:清华大学出版社,2010

- 32 -

教师评语: 1、大作业报告: a、内容: 不完整□ 完整 □ 详细 □ b、系统设计: 较差 □ 合理 □ 非常合理□ c、实现: 未实现□ 部分实现□ 全部实现□ d、文档格式: 不规范□ 基本规范□ 规范 □ 2、系统演示: a、系统正确运行无误 □ b、系统能运行但在演示过程中有小的错误 □ c、系统不能运行 □ 3、回答问题情况 a、未能完全理解题目,回答情况较差 □ b、部分理解题目,部分问题回答正确 □ c、理解题目较清楚,问题回答基本正确 □ d、理解题目透彻,问题回答流利 □ 大作业报告成绩: ,占总成绩: 30 系统演示及回答问题成绩 ,占总成绩: 20 总 成 绩: 组员姓名 成绩 组员姓名 成绩 组员姓名 成绩 指导教师签字: 年 月 日 - 33 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务