C++图书馆管理系统课程设计报告

面向对象课程设计

图书馆管理系统

院(系)别 信息工程系 班 级 学 号 姓 名 指导教师 时 间

课 程 设 计 任 务 书

题 目 图书管理系统C++语言

课程设计 系 (部) 信息工程系

专 业 信息管理与信息系统

班 级

学生姓名

学 号

10 月 10 日至 10 月 21 日 共 2 周

指导教师(签字)

系 主 任(签字)

年 月 日

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

成 绩 评 定 表

C图书馆管理系统课程设计报告

目 录

摘要····························· 2

1.图书管理系统概述················3

1.1图书管理系统总体设计思想·····3

1.2总体设计流程图···············4

2.图书管理系统详细设计·············5

2.1新建数据库(SQL server)········5

2.2 创建数据源···················5

2.3 C++中MFC应用程序编程·····5

2.3.1 建立基本对话框并与数据库连

接································5

2.3.2主要功能函数源代码········7

3.课程设计总结和体会··············19

1

摘要

图书馆管理系统创建基于MFC APPWizard[exe],利用SQLSERVE2000和MFC ODBC进行数据库的连接,在可视化的界面上进行用户名、图书及借书卡的查询、添加、修改、删除,对数据库表内的信息列表进行操作。

图书馆管理系统主要完成了用户登录功能、新建/删除用户功能、用户管理功能,对数据库内图书、借书卡和用户信息进行查询、添加、删除、修改功能。

图书馆管理系统设计是有下列几步完成的:首先对整体功能进行分析,开始是用户登录,登陆成功后显示主界面,其分为图书资料、读者资料、借书管理、还书管理和退出五个菜单;第二步是对五个菜单继续划分成具体的类进行实现;第三步是根据课程设计的要求在数据库内的建立具体的表,并且进行连接,及对数据库数据库内容的操作,与此同时完成界面的退出操作;第四步是对图书馆管理系统进行的全面优化,修改不足。

关键词:MFC,数据库,图书,管理

2

1.图书管理系统概述

1.1图书管理系统总体设计思想

图书馆管理系统的功能为读者提供借书、 还书和查询所需图书及图书、读者卡的管理等功能。

图书馆管理系统的功能模块有:

(1)登录界面 只有管理员才能使用全部功能,更好的保护图书馆内的一些信息不被破坏。

(2)读者资料 能实现对读者的显示、读者信息增加、读者查询、读者信息修改和读者信息删除功能。

(3)图书资料 能实现对图书显示、图书信息增加、图书查询、图书信息修改和图书信息删除功能。

(4)借书管理 可与数据库中的图书信息表连接实现借书的功能。

(5)还书管理 可与数据库中的图书信息表连接实现还书的功能

(6)退出 退出程序,结束运行。

通过SQL server建立一个图书馆管理系统的数据库,在控制面板的管理工具上用手动方式添加数据源进行连接。而与数据表的连接采用记录集的形式一一建立连接,可以进行图书资料和读者资料的管理,图书资料管理包括图书信息增加、图书查询、图书信息修改和图书信息删除四项,读者资料管理管理包括读者信息增加、读者查询、读者信息修改和读者信息删除。

用ODBC语言将数据库与C++连接起来,首先是登录界面,只有管理员才可进入。登陆成功后,管理员可在系统界面进行读者资料、图书资料、借书管理、还书管理等功能,通过对话框的跳转实现借书、还书、图书新增、查询等功能。在每个对话框都可实现新增、查询、删除、修改等功能顺利的对图书馆进行管理。

程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。

1.2总体设计流程图

3

C图书馆管理系统课程设计报告

4

2.图书管理系统详细设计

2.1新建数据库(SQL server)

新建数据库名为library,然后在数据库下建立五个表,分别为BOOK、BORROW、CLERK、HISTORY、READER。其中,BOOK是存放图书信息的,BORROW是存放借书信息的,CLERK是存放管理员信息的,READER是存放读者信息的。然后设计各个表中的字段,并定义主键,然后输入数据即可。

2.2 创建数据源

此次课程设计用ODBC语言将数据库与C++连接,在连接之前应创建数据源。在控制面板上打开管理工具,可以找到数据源(ODBC),添加数据源,可以创建不同类型的数据库,此次设计用到了SQL Server,便选择其,打开SQL Server中的服务管理器可找到服务器的名称,将默认数据库改为自己的数据库。点下一步直至完成。这样,数据源创建成功了。

2.3 C++中MFC应用程序编程

2.3.1 建立基本对话框并与数据库连接

其步骤如下所示

1双击新建的对话框或建立类向导,如下图:

C图书馆管理系统课程设计报告

5

2点击OK,则如下图所示: ○

3在所示对话框中输入Name,然后Base class中选择CRecordset,点击OK,○

出现下图:

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

6

4既连接数据源,注意选择记录集类型为Dynaset。点击OK,出现下图: ○

5选择要连接的数据库表(此例选择dbo.BOOK),点击OK,就完成了与数据库○

表的连接。其他对话框同此例。

2.3.2主要功能函数源代码

1登录函数 ○

void CLoginDlg::OnConfirm() //登录函数

{

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

// TODO: Add your control notification handler code here

7

CClerkDataSet mrsDataSet; /*声明记录集*/ CString mSqlStr; UpdateData(TRUE); //将相应控件上的值反应到变量上 if (m_strName.IsEmpty()) /*判断用户名信息是否为空*/ { AfxMessageBox("请正确输入用户名!"); return; }

mSqlStr = "SELECT * FROM CLERK WHERE NAME='"; //查询数据库

中表CLERK中名字是输入的

mSqlStr = mSqlStr + m_strName; mSqlStr = mSqlStr + "' AND PASSWORD='"; mSqlStr = mSqlStr + m_strPassword; mSqlStr = mSqlStr + "'"; if (!mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE, mSqlStr)) { AfxMessageBox("CLERK表打开失败!"); return; } if (!mrsDataSet.IsEOF()) { // Open all function for user CDialog::OnOK(); } else { AfxMessageBox("登录失败,请重新输入!"); return; } }

登录界面为

8

登录成功为

2图书资料中的查询函数 ○

void CBookDlg::OnEnquery() {

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

// TODO: Add your control notification handler code here UpdateData(TRUE); if (m_strBookIDQ.IsEmpty() && m_strBookNameQ.IsEmpty()) {

9

} m_rsDataSet.m_strFilter = ""; m_rsDataSet.Requery(); DisplayRecord(); SetButtonState(); return; } BOOL mAll = 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) { } else { } } m_rsDataSet.Requery(); DisplayRecord(); SetButtonState(); m_rsDataSet.m_strFilter = "BOOK_NAME='" + m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + " AND m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + "'"; BOOK_NAME='"; m_strBookNameQ; m_strBookNameQ; m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + "'";

10

3图书资料中的修改函数 ○

void CBookDlg::OnEdit() {

}

4图书资料中的删除函数 ○

void CBookDlg::OnDelete() {

}

5图书资料中的增加函数 ○

void CBookDlg::OnNew() {

// TODO: Add your control notification handler code here m_strBookID = ""; m_strBookName = ""; m_strAuthor = ""; m_strPress = ""; m_strFlag = "Y"; UpdateData(FALSE); m_bEdit = TRUE; m_bAdd = TRUE; SetButtonState(); SetTextState(); // TODO: Add your control notification handler code here m_rsDataSet.Delete(); DisplayRecord(); SetButtonState(); // TODO: Add your control notification handler code here m_bEdit = TRUE; SetButtonState(); SetTextState(); CWnd *pWnd; pWnd = GetDlgItem(IDC_BOOKNAME); pWnd->SetFocus();

11

} CWnd *pWnd; pWnd = GetDlgItem(IDC_BOOKID); pWnd->SetFocus();

6图书资料中的保存函数 ○

void CBookDlg::OnSave() //保存书籍 {

// TODO: Add your control notification handler code here UpdateData(TRUE); if (m_strBookID.IsEmpty() || m_strBookName.IsEmpty()) { } if (m_bAdd) { } else { } 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(); m_rsDataSet.Edit(); m_rsDataSet.AddNew(); AfxMessageBox("请输入相应数据!"); return;

12

SetTextState();

}

图书资料界面如下图所示:

读者资料界面如下图:

读者资料中的函数与图书资料中的函数基本一致。 7借书函数 ○

void CBorrowDlg::OnConfirm()

C图书馆管理系统课程设计报告

C图书馆管理系统课程设计报告

{

13

// TODO: Add your control notification handler code here

BOOL m_bCanBorrow;

BOOL m_bCanLendOut;

m_bCanBorrow = FALSE;

m_bCanLendOut = FALSE;

CString mSqlStr;

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 * FROM BORROW WHERE READER_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

+ +

{ } mSqlStr = "SELECT * FROM BOOK WHERE BOOK_ID='" + m_strBookID; mSqlStr = mSqlStr + "'"; if(!m_rsBookDataSet.Open(AFX_DB_USE_DEFAULT_TYPE, mSqlStr)) { } if (!m_rsBookDataSet.IsEOF()) { } else { } m_rsBookDataSet.Close(); CString m_strUserID; m_strUserID = theApp.m_strUserName ; COleDateTime m_CurrentTime=COleDateTime::GetCurrentTime(); CString strTime; AfxMessageBox("无此书!"); m_rsBookDataSet.Close(); return; if (m_rsBookDataSet.m_FLAG_BORROW == "Y") { } else { } AfxMessageBox("此书不外借! "); m_rsBookDataSet.Close(); return; m_bCanLendOut = TRUE; AfxMessageBox("数据表打开错误!"); return ; AfxMessageBox("读者不能借书!"); return; 15

} int y=m_CurrentTime.GetYear(); int m=m_CurrentTime.GetMonth(); int d=m_CurrentTime.GetDay(); strTime.Format("%d-%d-%d",y,m,d); mSqlStr = "INSERT INTO BORROW (READER_ID, BOOK_ID,BORROW_DATE, mSqlStr = mSqlStr + m_strReaderID; mSqlStr = mSqlStr + "','"; mSqlStr = mSqlStr + m_strBookID; mSqlStr = mSqlStr + "','"; mSqlStr = mSqlStr + strTime; mSqlStr = mSqlStr +"','"; mSqlStr = mSqlStr + m_strUserID; mSqlStr = mSqlStr + "')"; CDatabase mDB; if (!mDB.Open(_T("Library"))) { } try { } catch(CDBException e) { } mDB.Close(); AfxMessageBox("操作成功!"); AfxMessageBox("执行错!"); return; mDB.ExecuteSQL(mSqlStr); AfxMessageBox("无法打开数据库!"); return; B_CLERK_ID) VALUES('";

void CBorrowDlg::OnCancel() {

// TODO: Add your control notification handler code here 16

} CDialog::OnCancel();

借书界面

8还书函数 ○

void CReturnDlg::OnConfirm() {

int rs; CWnd *pWnd; CString m_strtmp; rs=QryBorrow(); if(rs==1) {

C图书馆管理系统课程设计报告

m_strtmp.Format("超期%d天,确认还书?",m_Days); if(::MessageBox(this->m_hWnd,m_strtmp,"提示",MB_YESNO)==IDYES) { } else { } } return; Insert_History(); Delete_Borrow(); SetTxtNull(); 17

}

} else if(rs==2) { if(::MessageBox(this->m_hWnd,"{ } else { } return; Insert_History(); Delete_Borrow(); SetTxtNull(); 确认还书?","提示",MB_YESNO)==IDYES) else if(rs==0) { if (m_Book_ID == "") return; ::MessageBox(this->m_hWnd,"该书号信息不存在!","警告",MB_OK); } pWnd=GetDlgItem(IDC_BOOK_ID); pWnd->SetFocus();

还书界面

C图书馆管理系统课程设计报告

18

8退出函数 ○

void CLibraryDlg::OnButtonGoodbye()

{

// TODO: Add your control notification handler code here

}

退出界面 int nResponse=MessageBox("真得要离开吗?","退出提示",MB_YESNO); if(nResponse==IDYES) { } OnOK();

3.课程设计总结和体会

在此次图书管理课程设计过程中,有很多东西值得我们思考并总结。

设计过程大体可分为以下几个步骤:

(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的Visual C++语言基本操作符、语句等。

(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。

(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。

C图书馆管理系统课程设计报告

19

(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。

(5)代码的调试:在Visual C++6.0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。

通过对图书馆系统利用,我们对数据库和MFC编程有了更深刻的认识,深刻认识到需求分析的重要性,更加了解了一个系统各部门的工作流程细节。对概念设计的步骤掌握的更加清晰,促进了对分析过程中的原则要求及所得到的数据结果的原因认识。逻辑设计阶段中,由于整个系统数据复杂性和实际应用的交叉性,发现我们在理论和实际的操作中无论是关系模型设计还是vc++中功能的实现都有很多不足。

总之,通过此次课程设计,让我更加明白了主动学习是最好的方法。主动动手去做,广泛查阅资料,多次进行修改和完善,只有这样,才能有好的设计呈现出来。

20

相关推荐