MFC图书馆管理系统.docx
《MFC图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《MFC图书馆管理系统.docx(70页珍藏版)》请在冰点文库上搜索。
![MFC图书馆管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-6/20/250cc0c2-2bf7-4dd6-8361-afae0081687c/250cc0c2-2bf7-4dd6-8361-afae0081687c1.gif)
MFC图书馆管理系统
MFC图书馆管理系统
MFC课程设计
图书馆管理系统图书馆管理系统
院系:
计算机科学技术学院二系
班级:
计07–2班
姓名:
白杨(07)
合作者:
刘飞
*********
2010年01月4日
MFC课程设计任务书
一、题目:
图书馆管理系统
二、设计要求
(1)刘飞(组长)和白杨组成设计小组。
(2)小组成员分工协作完成。
要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。
(3)查阅相关资料,自学具体课题中涉及到的新知识。
(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。
(5)所设计的系统要至少应用一个课程中或者与其密切相关的算法。
(6)按要求写出课程设计报告。
其主要内容包括:
封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、附录:
带中文注释的程序清单、参考文献。
报告一律用A4纸打印,中文字体为宋体,西文字体用TimeNewRoma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。
总体设计应配合软件总体模块结构图来说明软件应具有的功能。
详细设计阐述本人设计模块部分的设计思想、应用到的理论和算法、程序流程等等,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。
(7)课程设计报告中的软件总体设计、详细设计、软件的调试等主体内容要以文字描述、图表等形式为主,可配以主要核心代码,在附录中附程序清单。
三、课程设计工作量
由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。
四、课程设计工作计划
2009年12月07日,指导教师讲课,学生根据题目准备资料;
2009年12月08日,设计小组进行总体方案设计和任务分工;
2009年12月09日,2009年12月14日,每人完成自己承担的程序模块并通过独立编译;
2009年12月15日,2009年12月17日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;
2009年12月18日,验收、开始撰写报告;
2009年12月21日前,提交课程设计报告。
指导教师签章:
教研室主任签章
2
MFC课程设计指导教师评语与成绩
指导教师评语:
课程设计表现成绩:
课程设计验收成绩:
课程设计报告成绩:
课程设计总成绩:
指导教师签章
2009年12月26日
3
第1章概述.....................................................5
1.1性能需求....................................................5
1.2功能需求....................................................5第2章概要设计..................................................6
2.1功能模块设计................................................6
2.2算法分析和设计..............................................6第3章详细设计..................................................7
3.1数据库操作..................................................7
3.2模块设计详细设计............................................7
3.3程序流程图..................................................8
4.1调试分析....................................................9
4.2测试结果....................................................9第5章总结....................................................22参考文献.......................................................22附录........................................................23
4
第1章概述
1.1性能需求
本系统选用VC做为设计语言,开发工具选用VisualC++6.0作为开发工具,本系统可广泛应用于以Windows为平台的PC上,由于当前主流操作系统即为Windows,顾客广泛推广。
1.2功能需求
一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉。
在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工。
一个最典型的手工处理还书过程就是:
读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片和读者的借阅证放在一个小格栏里,并在借阅证和每本书贴的借阅条上填写借阅信息。
这样借书过程就完成了。
还书时,读者将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息,这样还书过程就完成了。
以上所描述的手工过程的不足之处显而易见,首先处理借书、还书业务流程的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。
利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。
我们将会看到排队等候借书、还书的队伍不再那么长,工作人员出错的概率也小了,读者可以花更多的时间在选择书和看书上。
为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。
使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便全面掌握图书的流通情况。
图书管理系统是一种基于集中统一规划的数据库数据管理新模式。
在对图书、读者的管理,其实是对图书、读者数据的管理。
本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。
5
第2章概要设计
2.1功能模块设计
首先需要对图书管理系统详细地了解和分析,一个功能完全满足基本需要的系统,必须包括以下的几个模块。
(1)基本数据维护功能模块
在这个功能模块中,提供了使用者录入、修改并进行维护基本数据的途径。
比如在这个模块中可以输入读者的信息、书籍的各项信息,也可以对这些信息做修改、更新。
(2)基本业务功能模块
这个功能模块主要实现对读者利用图书馆借还书籍的管理,比如根据读者的借用书籍要求更新图书馆书籍数据库系统,如果书籍已经借出,可以进行预留操作。
用户每次还书也要进行数据库记录的各项更新。
这个模块是整个图书管理系统的关键部分。
(5)安全/使用管理功能模块
这是任何一个信息管理系统都需要的部分,图书管理系统的操作也只能由回主菜专人进行,只有图书管理部门的工作人员才能拥有权限,特别是图书的借书状况,输出单如果没有安全管理部分,后果难以想象,可能每次登录都需要用户身份的验证。
Hash
表
图书管理系统
基基安
本本全数业使
据务用
维功管护能理功模能块
图1系统问倒功能需求框图
2.2算法分析和设计
本系统数据库操作部分采用DAO技术,并应用了多线程技术,各模块均有自己独立的线程进行操作,但由于DAO本身并不支持多线程,故所有与数据库相关的操作均在主线程中,各模块通过发送自定义消息与主线程通信来获取数据库信息。
6
第3章详细设计
3.1数据库操作
数据库操作部分采用DAO技术,DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的VisualBasic中,它允许程序员请求对微软的Access数据库的访问。
DAO是微软的第一个面向对象的数据库接口。
DAO对象封闭了Access的Jet函数。
通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。
3.2模块设计详细设计
1.基本数据维护
在这个功能模块中,提供了使用者录入、修改并进行维护基本数据的途径。
比如在这个模块中可以输入读者的信息、书籍的各项信息,也可以对这些信息做修改、更新。
2.基本业务功能
这一部分主要包括以下五部分:
(1)库存图书信息
该部分主要是列出所有库存图书,在管理员和员工登录模式下提供对图书信息的修改等功能,在读者的登录模式下提供借阅功能。
详细代码及截图见调试分析部分。
(2)员工信息
该部分主要列出所有员工信息,并提供信息修改功能,且本部分只有在以管理员权限登录后才可用,在以普通员工登陆和读者登陆时无效。
详细代码及截图见调试分析部分。
(3)读者信息
该部分主要列出所有读者信息,并提供添加修改功能,本部分只有在以管理员或普通员工模式登陆时才有效,读者登陆时无效。
详细代码及截图见调试分析部分。
(4)图书入库
该部分主要提供图书的入库功能,在以管理员和普通员工登录时有效。
详细代码及截图见调试分析部分。
(5)借阅信息
该部分主要列出读者的借阅信息,借阅的图书数量,及日期信息等。
详细代码及截图见调试分析部分。
7
3.3程序流程图
登陆
权限,
读者
普通员工管理员
图员读图借
书工者书阅
信信信入信
息息息库息
信息添加、修改、删除
8
第4章调试分析与测试结果4.1调试分析
通过老师的验收和自己的总结,我们程序能正常的完成上述所叙述的项目。
虽然程序各项功能都能很好的实现,但仍有许多不足之处,因为我们目前能力还很有限,时间也有些紧,所以有很多地方还没有做到位。
例如:
该次课程设计中的一些功能没有得到很好的实现,像动画都没有很好的实现。
不过,我们在整个程序中实现了所要求的内容,整体也算完整,弥补了上述带来的缺憾。
4.2测试结果
(1)登陆
代码如下:
CLoadDlgdlg;
aa:
if(dlg.DoModal()==IDOK)
{
if(!
m_bAccept)
{
AfxMessageBox("用户名或密码错误,请重新输入~");
gotoaa;
}
}
else
returnFALSE;
图片:
9
(2)库存图书信息
voidCTestView:
:
OnBook(){
CTestDoc*pDoc=GetDocument();
m_nTableNO=1;
if(m_strDatabase!
="")
pDoc->OpenMdb();
else
{
MessageBox("未设置数据库,请退出并设置数据库~");
}
}
voidCBookDlg:
:
OnButtonAdd(){
if(m_nTableNO==1)
{
SetValue();
:
:
SendMessage(hwnd,WM_USER_ADD,0,0);
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonDel(){
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_DEL,0,0);
OnButtonFirst();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonEdit(){
if(m_nTableNO==1)
{
SetValue();
:
:
SendMessage(hwnd,WM_USER_EDIT,0,0);
}
10
else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonFirst(){
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_FIRST,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonLast(){
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_LAST,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonNext(){
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_NEXT,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonPrv(){
11
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_PREV,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCBookDlg:
:
OnButtonRequary(){
if(m_nTableNO==1)
{
:
:
SendMessage(hwnd,WM_USER_REQUERY,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
图片:
(3)员工信息
voidCTestView:
:
OnStaff()
{
if(m_nPurview==0)
{
CTestDoc*pDoc=GetDocument();
12
m_nTableNO=2;
if(m_strDatabase!
="")
pDoc->OpenMdb();
else
{
MessageBox("未设置数据库,请退出并设置数据库~");
}
}else
{
MessageBox("对不起,您没有此权限~~");
}
}
voidCStaffDlg:
:
OnButtonAdd(){
if(m_nTableNO==2)
{
SetValue();
:
:
SendMessage(hwnd,WM_USER_ADD,0,0);
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonDel(){
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_DEL,0,0);
OnButtonFirst();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonEdit(){
if(m_nTableNO==2)
{
SetValue();
:
:
SendMessage(hwnd,WM_USER_EDIT,0,0);
}else
13
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonFirst(){
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_FIRST,0,0);
GetValue();
}
else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonLast(){
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_LAST,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonNext(){
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_NEXT,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonPrv(){
14
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_PREV,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStaffDlg:
:
OnButtonRequary(){
if(m_nTableNO==2)
{
:
:
SendMessage(hwnd,WM_USER_REQUERY,0,0);
GetValue();
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
图片:
(4)读者信息
voidCTestView:
:
OnReader()
{
if(m_nPurview!
=2)
{
CTestDoc*pDoc=GetDocument();
15
m_nTableNO=0;
if(m_strDatabase!
="")
pDoc->OpenMdb();
else
{
MessageBox("未设置数据库,请退出并设置数据库~");
}
}else
{
MessageBox("对不起,您没有此权限~~");
}
}
voidCStudentDlg:
:
OnButtonAdd(){
if(m_nTableNO==0)
{
SetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
:
:
SendMessage(hwnd,WM_USER_ADD,0,0);
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonDel(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_DEL,0,0);
OnButtonFirst();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonEdit(){
if(m_nTableNO==0)
16
{
SetValue();
:
:
SendMessage(hwnd,WM_USER_EDIT,0,0);
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonFirst(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_FIRST,0,0);
GetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonNext(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_NEXT,0,0);
GetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonPrv(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_PREV,0,0);
17
GetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonRequary(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_REQUERY,0,0);
GetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonLast(){
if(m_nTableNO==0)
{
:
:
SendMessage(hwnd,WM_USER_LAST,0,0);
GetValue();
m_strReaderID=m_strID;
m_strBookNumber=m_strNumber;
}else
{
MessageBox("系统忙,请稍后再试~");
}
}
voidCStudentDlg:
:
OnButtonBorrow(){
if(m_nTableNO==0)
{
if(m_strBookNumber=="0")
{
MessageBox("该用户借阅记录为零~");
18
}
else
{
CDialog:
:
OnOK();
:
:
SendMessage(hwnd,WM_USER_DEMAND,0,0);