vc图书馆管理系统实验报告.docx
《vc图书馆管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《vc图书馆管理系统实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
vc图书馆管理系统实验报告
长安大学
VC++图书馆管理系统设计
课程名称:
VisualC++教程
题目:
图书馆管理系统
专业班级:
自动化4班
姓名:
褚惠芬,姜毅佳
学号:
1绪论
需求背景
随着科学技术的不断提高,计算机科学日渐成熟,作为计算机应用的一部分,使用计算机对图书信息进行管理,具有手工管理所无法比拟的优点。
图书管理系统的开发是一个老生常谈的问题,以其作为数据库开发的示例不仅是因为它的开放性,而且还因为它是一个开放的系统,比较成熟。
用计算机制作的图书信息管理系统还可以通过功能强大的Internet网及时的向读者发布图书的最新动态,因此,开发这样一套管理软件成为很有必要的事情。
而今,这类相关的管理系统已广泛的应用在各行各业,成为各行业提高相关管理效率的重要手段。
图书信息管理系统也在日益广泛地应用于各图书馆的管理中,大大提高了图书管理的相关管理效率,其在图书管理中所起的作用是显而易见的。
1.1.1开发目标
本次课题为图书信息管理系统,其主要包含图书基本信息和图书借阅系统,能进行图书信息的录入、读者登记、查询等功能。
该软件为学校图书信息管理系统软件,是鉴于目前学校图书数剧增,图书信息呈爆炸性增长的前提下,图书馆对图书信息管理的自动化与准确化的要求日益强烈的背景下构思出来的,该软件设计完成后可用于所有中小型图书馆的图书信息的管理。
1.1.2开发意义
目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息,图书管理系统也是有了很大的发展,商业化的图书信息管理软件也不少,但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。
1.1.3主要工作内容
本课题研究内容本次毕业设计通过对管理系统模型的研究,提出了一套构造图书信息管理系统模型的方法,提出了图书管理系统的一般建立方法,并且利用数据库、信息系统分析所学知识,结合其它相关管理常识,通过对某图书馆图书流通过程的分析,建立相关数据模型,利用面向对象开发工具对其进行设计与开发。
系统主要由两大子系统组成:
图书管理和维护子系统以及图书信息服务子系统。
系统主要有四个数据库表:
图书信息表,用户信息表,学生信息表和借出信息表本课题研究方案1.以现代软件工程原理和思想指导整个课题的开发过程,要经过系统可行性分析、需求分析、概要设计、详细设计、编码、调试维护和安装实施等步骤。
2.要有详细的设计说明书;3.每一模块的流程图要很清晰;4.本系统能够正常的运行,能较好得完成预定的功能;5.系统要有完整的帮助文件,供前台操作员能方便的操作本系统。
2设计方案简述
图书馆管理系统功能介绍
本系统主要实现对图书馆信息的管理,主要可以分为两大块:
图书信息的服务系统和图书的综合管理系统。
图书的使用对象是借阅者,例如学生,教师;管理者是图书馆的管理员。
因此根据这些信息,本系统的主要功能就是:
实现图书馆图书信息的管理和维护,如用户信息管理,图书馆规则维护,新书入库,整理图书,修改图书信息和进行查询等;以及服务系统的图书信息查询,图书的借出和归还等功能图书信息管理系统能够为用户提供充足的信息和快捷的查询手段。
例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高图书信息管理的效率,也是图书管理的科学化、数字化、正规化管理,与世界接轨的重要条件。
程序开发环境和基本开发软件
2.2.1VC++开发软件
对于小型应用软件的开发,VC++易操作,并且有强大的调试和纠错功能,对于经验不多的开发者来说,VC++应该是首先选择的工具。
这款软件主要基于MFC(MicrosoftFoundationClasses)卡发环境,MFC是以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC中有大量的美观的使用控件,对于程序界面的设计十分方便。
2.2.2数据库开发软件
在这里采用了MicrosoftAcessODBC数据库,来实现对数据的存储与更新。
MicrosoftAcessODBC数据库具有操作简便,性能良好等特点,便于vc++编程初学者使用
2.2.3环境搭建
首先,构建数据库,在构建完成之后,进行配置MicrosoftAcessODBC数据库。
配置完成之后,新建单文档,导入数据源文件即可。
程序设计流程图
系统的功能模块划分
整个图书管理系统分为四个模块。
分别为图书管理模块、借阅管理模块、读者管理模块和系统管理模块。
3详细设计
数据库的建立及更新
3.1.1数据库的建立
用ACCESS2007建立名为“Library”的数据库,创建5个表,分别为:
BOOK,CLERK,READER,BORROW和FINE。
图3-1ACCESS数据表
图3-2ODBC数据源管理器配置
图3-3利用ODBC数据源管理器创建数据源
图3-4建立名为“Library”的MFC单文档应用程序向导
系统登录模块设计
图3-5添加系统登录对话框
图3-6属性设置
系统主界面设计
图3-12主界面
其中系统登录可以登录和退出系统,登录后可以查看图书资料、读者资料,进行图书馆里和读者管理;图书资料中可以增加、修改、删除、查询图书信息;读者资料中可以增加、修改、删除、查询读者信息;借书管理中可以借阅相关图书;还书管理可以归还借阅图书;版权测试可以查看版本信息。
添加系统登陆对话框,属性设置为IDD_DIALOG_LOGIN,宋体,9号字体。
为IDD_DIALOG_LOGIN添加成员变量。
创建一个新类,名为CClerkDataSet,添加消息映射,最后输入按钮代码。
图书信息管理模块设计
图3-13图书信息界面
添加书籍信息对话框,属性设置为IDD_DIALOG_BOOK,宋体,9号字体,为IDD_DIALOG_BOOK添加成员变量。
创建一个新类,名为CBookDataSet,方法步骤同CClerkDataSet,添加消息映射,最后输入按钮代码。
读者信息管理模块设计
图3-14读者信息管理
添加读者信息对话框,属性设置为IDD_DIALOG_READER,宋体,9号,为IDD_DIALOG_READER添加成员变量。
建立新类CReaderDataSet,按上述步骤做相似操作,添加消息响应,最后输入按钮代码。
借书管理
添加借书查询对话框,属性设置为IDD_DIALOG_BORROW,宋体,9号,为IDD_DIALOG_BORROW添加成员变量,建立新类CBorrowDataSet,按上述步骤做相似操作,添加消息映射,最后输入代码
还书管理
添加图书归还对话框,属性设置为IDD_DIALOG_RETURN,微软雅黑,10号,为IDD_DIALOG_RETURN添加成员变量,建立新类CReturnDataSet,按上述步骤做相似操作,添加消息映射,最后输入代码。
版权测试
版权测试对话框,属性设置为IDD_ABOUTBOX
4设计结果及分析
测试
对功能进行逐一测试,在输入合理及不合理的数据后测试系统的正常运作情况
测试1:
系统登录测试
测试2:
图书资料测试
测试3:
读者资料测试
测试4:
借书管理测试
测试5:
还书测试
测试6:
版权测试
测试结果
4.2.1登录测试
密码正确输入后显示如下界面:
密码输入错误时,显示如下界面:
图书资料测试
增加图书:
读者资料测试
增加读者资料:
借书管理测试
还书管理测试
版权测试
5.总结
小结
在这次的课程设计中,让我学到了很多在课堂上和书本上学不到的知识,我在这次课程设计中最大的收获有以下几方面:
领略到了数据库设计在计算机领域的重要性。
数据库作为一个永久存储形式在应用中发挥着重要的作用。
在数据库设计中,我明白了数据库设计不是范式越高越好的,我们要根据我们的应用来决定,一切应该以需求为首要选择。
对编程环境、一些控件的使用和界面的设计更加熟悉。
因为《图书管理系统》中设计到很多控件的使用,只有很好的使用这些控件才可以给出一个很好的界面呈现在用户面前。
这样更有利于数据库和用户之间的交流。
利用软件工程学开发系统。
虽然这个《图书管理系统》是一个小的系统,但从这个小的项目中也让我明白了数据库作为任何一个系统的后台的重要性,在开发系统设计和实现中学到和总结很多经验和教训。
主要程序代码
1,登录代码
m_bCanBorrow=TRUE;
();
}
}
();
if(!
m_bCanBorrow)
{
AfxMessageBox("读者不能借书!
");
return;
}
mSqlStr="SELECT*FROMBOOKWHEREBOOK_ID='"+m_strBookID;
mSqlStr=mSqlStr+"'";
if(!
(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))
{
AfxMessageBox("数据表打开错误!
");
return;
}
if(!
())
{
if=="Y")
{
m_bCanLendOut=TRUE;
}
else
{
AfxMessageBox("此书不外借!
");
();
return;
}
}
else
{
AfxMessageBox("无此书!
");
();
return;
}
();
CStringm_strUserID;
m_strUserID=;
COleDateTimem_CurrentTime=COleDateTime:
:
GetCurrentTime();
CStringstrTime;
inty=();
intm=();
intd=();
("%d-%d-%d",y,m,d);
mSqlStr="INSERTINTOBORROW(READER_ID,BOOK_ID,BORROW_DATE,B_CLERK_ID)VALUES('";
mSqlStr=mSqlStr+m_strReaderID;
mSqlStr=mSqlStr+"','";
mSqlStr=mSqlStr+m_strBookID;
mSqlStr=mSqlStr+"','";
mSqlStr=mSqlStr+strTime;
mSqlStr=mSqlStr+"','";
mSqlStr=mSqlStr+m_strUserID;
mSqlStr=mSqlStr+"')";
CDatabasemDB;
if(!
(_T("Library")))
{
AfxMessageBox("无法打开数据库!
");
return;
}
try
{
(mSqlStr);
}
catch(CDBExceptione)
{
AfxMessageBox("执行错!
");
return;
}
();
AfxMessageBox("操作成功!
");
}
voidCBorrowDlg:
:
OnCancel()
{
ormat("%Y,%B%d")+"')";
try
{
();
(m_strsql);
();
}
catch(CDBExceptione)
{
AfxMessageBox("数据库执行出错");
return0;
}
return1;
}
intCReturnDlg:
:
SetTxtNull()
{
CWnd*pWnd;
m_Book_ID="";
m_BorrowDate="";
m_Days=0;
m_ReaderName="";
m_ReturnDate="";
UpdateData(false);
pWnd=GetDlgItem(IDC_BOOK_ID);
return1;
}
intCReturnDlg:
:
setTxtDisable()
{
CWnd*pWnd;
pWnd=GetDlgItem(IDC_READERNAME);
pWnd->EnableWindow(false);
pWnd=GetDlgItem(IDC_BORROWDATE);
pWnd->EnableWindow(false);
pWnd=GetDlgItem(IDC_RETURNDATE);
pWnd->EnableWindow(false);
pWnd=GetDlgItem(IDC_DAYS);
pWnd->EnableWindow(false);
return1;
}
BOOLCReturnDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
returntrue;
}
voidCReturnDlg:
:
OnConfirm()
{
intrs;
CWnd*pWnd;
CStringm_strtmp;
rs=QryBorrow();
if(rs==1)
{
("超期%d天,确认还书?
",m_Days);
if(:
:
MessageBox(this->m_hWnd,m_strtmp,"提示",MB_YESNO)==IDYES)
{
Insert_History();
Delete_Borrow();
SetTxtNull();
}
else
{
return;
}
}
elseif(rs==2)
{
if(:
:
MessageBox(this->m_hWnd,"确认还书?
","提示",MB_YESNO)==IDYES)
{
Insert_History();
Delete_Borrow();
SetTxtNull();
}
else
{
return;
}
}
elseif(rs==0)
{
if(m_Book_ID=="")
return;
:
:
MessageBox(this->m_hWnd,"该书号信息不存在!
","警告",MB_OK);
}
//TODO:
Addyourcontrolnotificationhandlercodehere
pWnd=GetDlgItem(IDC_BOOK_ID);
pWnd->SetFocus();
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCReturnDlg:
:
Delete_Borrow()
{
CDatabasemdb;
CStringm_strsql;
if(!
(_T("library")))
{
AfxMessageBox("数据库执行出错");
return;
}
("DELETEFROMBORROWWHEREBOOK_ID='%s'",m_Book_ID);
/*m_strsql="DELETEFROMBORROWWHEREBOOK_ID=";
m_strsql+="'";
m_strsql+=m_Book_ID;
m_strsql+="'";
*/
try
{
();
(m_strsql);
();
}
catch(CDBExceptione)
{
AfxMessageBox("数据库执行出错");
return;
}
}
BOOLCReturnDlg:
:
PreTranslateMessage(MSG*pMsg)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_RETURN)
{
QryBorrow();
returnTRUE;
}
}
returnCDialog:
:
PreTranslateMessage(pMsg);
}