C++图书馆管理系统课程设计报告.docx
- 文档编号:24886185
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:31
- 大小:701.34KB
C++图书馆管理系统课程设计报告.docx
《C++图书馆管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++图书馆管理系统课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
C++图书馆管理系统课程设计报告
面向对象课程设计
图书馆管理系统
院(系)别
信息工程系
班
学
姓
级
号
名
指导教师
时
间
2011-10-10—2011-10-21
课程设计任务书
题
目
图书管理系统C++语言课程设计
系(部)
信息工程系
专
班
业
级
信息管理与信息系统
学生姓名
学
号
10
月10
日至10
月21
日
共2
周
指导教师(签字)
系主任(签字)
年
月
日
一、
设计内容及要求
1.设计目的
学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。
2.设计内容
1.必须设计的基本数据表:
图书基本信息表,借书卡信息表,借阅信息表,图书分类信息表,代码表等。
2.功能模块:
1)图书基本情况的录入、修改、删除等基本操作。
2)办理借书卡模块。
3)实现借书功能。
4)实现还书功能。
5)能方便的对图书进行查询。
6)对超期的情况能自动给出提示信息。
三、设计完成后提交的文件和图表
1.计算说明书部分
1.课程设计报告(3000—5000字),纸质打印稿
(1)需求分析(功能模块层次图)
(2)系统设计(包括详细设计和界面设计)(3)代码设计(主要功能函数)
(4)测试记录(测试各项功能的正确性、容错性)(5)课程设计总结
2.系统程序演示及答辩。
3.课程设计任务书。
2.图纸部分:
程序流程图
程序结束
五、主要参考资料
[1]BeckZaratian.MicrosoftVisualVisualC++6.0程序员指南.希望设备创作室译.北京:
北京希望电脑公司出品,1998
[2]RichardC.Leinecker,TomArcher.VisualC++6宝典.张艳,张谦译.北京:
电子工业出版社,1999
[3]李强,贾云霞.VisualC++项目开发实践.北京:
中国铁道出版社,2004
[4]郑莉,董渊,张瑞丰.C++语言程序设计.2003.
[5]李闽溟等.VisualC++6.0数据库系统开发实例导航[M].北京:
人民邮电出版社
[6]闪四清.《数据库系统原理与应用教程[M].清华大学出版社
成绩评定表
作品成绩
报告成绩
口试(答辩)成
绩
总评成绩
摘要·····························2
1.图书管理系统概述················3
1.1图书管理系统总体设计思想·····31.2总体设计流程图···············4
2.图书管理系统详细设计·············52.1新建数据库(SQLserver)········52.2创建数据源···················52.3C++中MFC应用程序编程·····5
2.3.1
建立基本对话框并与数据库连
接································5
2.3.2主要功能函数源代码········73.课程设计总结和体会··············19
1
摘要
图书馆管理系统创建基于MFCAPPWizard[exe],利用SQLSERVE2000和
MFCODBC进行数据库的连接,在可视化的界面上进行用户名、图书及借书卡的查询、添加、修改、删除,对数据库表内的信息列表进行操作。
图书馆管理系统主要完成了用户登录功能、新建/删除用户功能、用户
管理功能,对数据库内图书、借书卡和用户信息进行查询、添加、删除、修改功能。
图书馆管理系统设计是有下列几步完成的:
首先对整体功能进行分析,
开始是用户登录,登陆成功后显示主界面,其分为图书资料、读者资料、借
书管理、还书管理和退出五个菜单;第二步是对五个菜单继续划分成具体的
类进行实现;第三步是根据课程设计的要求在数据库内的建立具体的表,并
且进行连接,及对数据库数据库内容的操作,与此同时完成界面的退出操作;第四步是对图书馆管理系统进行的全面优化,修改不足。
关键词:
MFC,数据库,图书,管理
2
1.图书管理系统概述
1.1图书管理系统总体设计思想
图书馆管理系统的功能为读者提供借书、还书和查询所需图书及图书、读者卡的管理等功能。
图书馆管理系统的功能模块有:
(1)登录界面些信息不被破坏。
(2)读者资料
只有管理员才能使用全部功能,更好的保护图书馆内的一
能实现对读者的显示、读者信息增加、读者查询、读者信
息修改和读者信息删除功能。
(3)图书资料
能实现对图书显示、图书信息增加、图书查询、图书信息
修改和图书信息删除功能。
(4)借书管理可与数据库中的图书信息表连接实现借书的功能。
(5)还书管理可与数据库中的图书信息表连接实现还书的功能
(6)退出
退出程序,结束运行。
通过SQLserver建立一个图书馆管理系统的数据库,在控制面板的管理工具上用手动方式添加数据源进行连接。
而与数据表的连接采用记录集的形式一一建立连接,可以进行图书资料和读者资料的管理,图书资料管理包括图书信息增加、图书查询、图书信息修改和图书信息删除四项,读者资料管理管理包括读者信息增加、读者查询、读者信息修改和读者信息删除。
用ODBC语言将数据库与C++连接起来,首先是登录界面,只有管理员才可进入。
登陆成功后,管理员可在系统界面进行读者资料、图书资料、借书管理、还书管理等功能,通过对话框的跳转实现借书、还书、图书新增、查询等功能。
在每个对话框都可实现新增、查询、删除、修改等功能顺利的对图书馆进行管理。
程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。
1.2总体设计流程图
3
程序开始
面
面
程序结束
4
2.图书管理系统详细设计
2.1新建数据库(SQLserver)
新建数据库名为library,然后在数据库下建立五个表,分别为
BOOK、BORROW、CLERK、HISTORY、READER。
其中,BOOK是存放图书信息的,BORROW是存放借书信息的,CLERK是存放管理员信息的,READER是存放读者信息的。
然后设计各个表中的字段,并定义主键,然后输入数据即可。
2.2创建数据源
此次课程设计用ODBC语言将数据库与C++连接,在连接之前应创建数据源。
在控制面板上打开管理工具,可以找到数据源(ODBC),添加数据源,可以创建不同类型的数据库,此次设计用到了SQLServer,便选择其,打开SQLServer中的服务管理器可找到服务器的名称,将默认数据库改为自己的数据库。
点下一步直至完成。
这样,数据源创建成功了。
2.3C++中MFC应用程序编程
2.3.1建立基本对话框并与数据库连接其步骤如下所示
双击新建的对话框或建立类向导,如下图:
5
点击OK,则如下图所示:
在所示对话框中输入Name,然后Baseclass中选择CRecordset,点击
OK,出现下图:
6
既连接数据源,注意选择记录集类型为Dynaset。
点击OK,出现下图:
选择要连接的数据库表(此例选择dbo.BOOK),点击OK,就完成了与数据库
表的连接。
其他对话框同此例。
2.3.2主要功能函数源代码
登录函数
voidCLoginDlg:
:
OnConfirm()//登录函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
7
CClerkDataSetmrsDataSet;/*声明记录集*/
CStringmSqlStr;
UpdateData(TRUE);//将相应控件上的值反应到变量上
if(m_strName.IsEmpty())/*判断用户名信息是否为空*/
{
AfxMessageBox("请正确输入用户名!
");
return;
}
mSqlStr="SELECT*FROMCLERKWHERENAME='";//查询数据库中表CLERK中名字是输入的
mSqlStr=mSqlStr+m_strName;
mSqlStr=mSqlStr+"'ANDPASSWORD='";
mSqlStr=mSqlStr+m_strPassword;
mSqlStr=mSqlStr+"'";
if(!
mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))
{
AfxMessageBox("CLERK表打开失败!
");
return;
}
if(!
mrsDataSet.IsEOF())
{
//Openallfunctionforuser
CDialog:
:
OnOK();
}
else
{
AfxMessageBox("登录失败,请重新输入!
");
return;
}
}
登录界面为
8
登录成功为
图书资料中的查询函数
voidCBookDlg:
:
OnEnquery()
{
//TODO:
AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);
if(m_strBookIDQ.IsEmpty()&&m_strBookNameQ.IsEmpty())
{
9
m_rsDataSet.m_strFilter="";
m_rsDataSet.Requery();
DisplayRecord();
SetButtonState();
return;
}
BOOLmAll=FALSE;
if(!
m_strBookIDQ.IsEmpty())
{
m_rsDataSet.m_strFilter="BOOK_ID='"+m_strBookIDQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'";mAll=TRUE;
}
if(!
m_strBookNameQ.IsEmpty())
{
if(mAll)
{
m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"
ANDBOOK_NAME='";
m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+
m_strBookNameQ;
m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'";}
else
{
m_rsDataSet.m_strFilter="BOOK_NAME='"+
m_strBookNameQ;
m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'";}
}
m_rsDataSet.Requery();
DisplayRecord();
SetButtonState();
}
10
图书资料中的修改函数
voidCBookDlg:
:
OnEdit()
{
//TODO:
Addyourcontrolnotificationhandlercodeherem_bEdit=TRUE;
SetButtonState();
SetTextState();
CWnd*pWnd;
pWnd=GetDlgItem(IDC_BOOKNAME);
pWnd->SetFocus();
}
图书资料中的删除函数
voidCBookDlg:
:
OnDelete()
{
//TODO:
Addyourcontrolnotificationhandlercodeherem_rsDataSet.Delete();
DisplayRecord();
SetButtonState();
}
图书资料中的增加函数
voidCBookDlg:
:
OnNew()
{
//TODO:
Addyourcontrolnotificationhandlercodeherem_strBookID="";
m_strBookName="";
m_strAuthor="";
m_strPress="";
m_strFlag="Y";
UpdateData(FALSE);
m_bEdit=TRUE;
m_bAdd=TRUE;
SetButtonState();
SetTextState();
11
CWnd*pWnd;
pWnd=GetDlgItem(IDC_BOOKID);
pWnd->SetFocus();
}
图书资料中的保存函数
voidCBookDlg:
:
OnSave()//保存书籍
{
//TODO:
AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);
if(m_strBookID.IsEmpty()||m_strBookName.IsEmpty())
{
AfxMessageBox("请输入相应数据!
");
return;
}
if(m_bAdd)
{
m_rsDataSet.AddNew();
}
else
{
m_rsDataSet.Edit();
}
m_rsDataSet.m_AUTHOR=m_strAuthor;
m_rsDataSet.m_BOOK_NAME=m_strBookName;
m_rsDataSet.m_BOOK_ID=m_strBookID;
m_rsDataSet.m_PRESS=m_strPress;
m_rsDataSet.m_FLAG_BORROW=m_strFlag;
m_rsDataSet.m_PRESS_DATE=m_strPressDate;
m_rsDataSet.Update();
m_rsDataSet.Requery();
m_bAdd=FALSE;
m_bEdit=FALSE;
DisplayRecord();
SetButtonState();
12
SetTextState();
}
图书资料界面如下图所示:
读者资料界面如下图:
读者资料中的函数与图书资料中的函数基本一致。
借书函数
voidCBorrowDlg:
:
OnConfirm()
{
13
//TODO:
Addyourcontrolnotificationhandlercodehere
BOOLm_bCanBorrow;
BOOLm_bCanLendOut;
m_bCanBorrow=FALSE;
m_bCanLendOut=FALSE;
CStringmSqlStr;
UpdateData(TRUE);
if(!
m_rsReaderDataSet.Open(AFX_DB_USE_DEFAULT_TYPE))
{
AfxMessageBox("数据表打开错误!
");
return;
}
m_rsReaderDataSet.m_strFilter="READER_ID='"+m_strReaderID;m_rsReaderDataSet.m_strFilter=m_rsReaderDataSet.m_strFilter+
"'";
m_rsReaderDataSet.Requery();
if(!
m_rsReaderDataSet.IsEOF())
{
if(m_rsReaderDataSet.m_FLAG_BORROW=="Y")
{
mSqlStr="SELECT*FROMBORROWWHEREREADER_ID='"+
m_strReaderID;
mSqlStr=mSqlStr+"'";
if(!
m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))
{
m_rsReaderDataSet.Close();
AfxMessageBox("数据表打开错误!
");
return;
}
m_bCanBorrow=TRUE;
m_rsDataSet.Close();
}
}
m_rsReaderDataSet.Close();
if(!
m_bCanBorrow)
14
{
AfxMessageBox("读者不能借书!
");
return;
}
mSqlStr="SELECT*FROMBOOKWHEREBOOK_ID='"+m_strBookID;mSqlStr=mSqlStr+"'";if(!
m_rsBookDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))
{
AfxMessageBox("数据表打开错误!
");
return;
}
if(!
m_rsBookDataSet.IsEOF())
{
if(m_rsBookDataSet.m_FLAG_BORROW=="Y")
{
m_bCanLendOut=TRUE;
}
else
{
AfxMessageBox("此书不外借!
");m_rsBookDataSet.Close();
return;
}
}
else
{
AfxMessageBox("无此书!
");
m_rsBookDataSet.Close();
return;
}
m_rsBookDataSet.Close();
CStringm_strUserID;
m_strUserID=theApp.m_strUserName;
COleDateTimem_CurrentTime=COleDateTime:
:
GetCurrentTime();
CStringstrTime;
15
inty=m_CurrentTime.GetYear();
intm=m_CurrentTime.GetMonth();
intd=m_CurrentTime.GetDay();
strTime.Format("%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(!
mDB.Open(_T("Library")))
{
AfxMessageBox("无法打开数据库!
");
return;
}
try
{
mDB.ExecuteSQL(mSqlStr);
}
catch(CDBExceptione)
{
AfxMessageBox("执行错!
");
return;
}
mDB.Close();
AfxMessageBox("操作成功!
");
}
voidCBorrowDlg:
:
OnCancel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
16
CDialog:
:
OnCancel();
}
借书界面
还书函数
voidCReturnDlg:
:
OnConfirm()
{
intrs;
CWnd*pWnd;
CStringm_strtmp;
rs=QryBorrow();
if(rs==1)
{
m_strtmp.Format("超期%d天,确认还书?
",m_Days);if(:
:
MessageBox(this->m_hWnd,m_strtmp,"提示",MB_YESNO)==IDYES){
Insert_History();
Delete_Borrow();
SetTxtNull();
}
else
{
return;
}
}
17
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);}
pWnd=GetDlgItem(IDC_BOOK_ID);
pWnd->SetFocus();
}
还书界面
18
退出函数
voidCLibraryDlg:
:
OnButtonGoodbye()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intnResponse=MessageBox("真得要离开吗?
","退出提示",MB_YESNO);if(nResponse==IDYES)
{
OnOK();
}
}
退出界面
3.课程设计总结和体会
在此次图书管理课程设计过程中,有很多东西值得我们思考并总结。
设计过程大体可分为以下几个步骤:
(1)思考总体设计方案:
总体结构和模块外部设计,功能分配。
思考要实现整个程序大体需要的几个模块和其中用到的VisualC++语言基本操作符、语句等。
(2)画出总体设计方案流程图:
用流程图的形式展现你的基本编程思想。
(3)流程图具体化:
即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。
19
(4)编辑程序代码:
这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 图书馆 管理 系统 课程设计 报告