《高级语言程序设计(C++)》课程答辩_第1页
《高级语言程序设计(C++)》课程答辩_第2页
《高级语言程序设计(C++)》课程答辩_第3页
《高级语言程序设计(C++)》课程答辩_第4页
《高级语言程序设计(C++)》课程答辩_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级语言程序设计(高级语言程序设计(C+)课程答辩课程答辩 题 目:图书馆管理系统 院 系: 班 级: 学 号: 姓 名: 系统开发系统开发背景背景 某民办高校在创办初期,办学规模比较小。学校的图书数量, 以及借阅人数都比较少,所以,一直以来对图书管理的主要方式是 基于文本、表格等纸介质的手工处理,对于图书借阅情况的统计和 审核等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、 以及借阅天数等用人工计算、手抄进行。近年来由于国家对民办教 育的大力扶持,该民办高校的办学规模迅速扩大,学校的硬件设施 以及在校学生和职工数都在成倍增长,给学校的图书馆管理也带来 了巨大的压力,早期的手工图书管理方

2、式已经不能满足日益增长的 图书借阅需求。 使用计算机对图书信息进行管理,具有手工管理所无法比拟的 特点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性 好、寿命长、成本低等。为了适应学校迅速发展的趋势,解决日益 尖锐的图书馆管理矛盾,该校提出了采用计算机管理图书信息的需 求。本系统就是基于这个需求进行开发的。 系统需求系统需求 在图书管理信息系统开发时应该满足以下具体的系统需求: 1)满足图书借阅管理的基本需求 2)满足图书书库管理的基本需求 3)满足图书借阅人管理的基本需求 4)对操作人员的技能要求比较低,操作方便。 5)能够实现方便的扩展,满足图书馆发展的需要。 6)能够保障图书馆管

3、理数据的安全、准确。 系统层次模块图系统层次模块图 某学校图书管理信息系统可以分为5个子模块:系统登录、图书信 息管理、读者信息管理、借书服务管理、还书服务管理,如图所示。 数据库设计数据库设计 根据系统功能设计的要求以及功能模块的划分,对于本系统的 数据库,可以列出以下数据项和数据结构: (1)名称:登录信息表 表名标识符:CLERK (2)名称:书籍信息表 表名标识符:BOOK (3)名称:读者信息表 表名标识符:READER (4)名称:借书信息表 表名标识符:BORROW (5)名称:借还书历史表 表名标识符:HISTORY 创建项目创建项目 创建一个基于对话框的MFC AppWiza

4、rd(exe)项目, 项目名为Library。为了能在对话框中用ODBC编写数据库, 需在stdafx.h中手动添加支持:#include 登录模块登录模块 (1)模块的功能 书籍市图书馆最宝贵的财产,它的借进借出都应该保证安全。每 个管理员用自己的用户名和密码登陆,来使用图书馆管理系统。 通过某管理员借进和借出的书都有他的标记。这样就保证了书籍 的安全。 (2)界面设计 设计界面如图所示。 对话框属性设置为:IDD_DIALOG_LOGIN。 为IDD_DIALOG_LOGIN添加CLoginDlg类 其中主要控件的属性、功能及成员变量如图所示。 (3)添加CClerkDataSet类与登录

5、信息表连接 (4)代码编写 “取消”按钮取消输入,并关闭登录对话框: “登录”按钮当管理员填完用户名和密码后,单击“登录”按钮,先检 查用户名和密码是否合法。然后查找数据库中是否有该管理员的信息,若有则 登陆成功。 具体代码如下: void CLoginDlg:OnConfirm() / TODO: Add your control notification handler code here CClerkDataSet mrsDataSet; /*声 明记录集*/ CString mSqlStr; UpdateData(TRUE); if (m_strName.IsEmpty() /*判 断

6、用户名信息是否为空*/ AfxMessageBox(请输入 用户名!); return; mSqlStr = SELECT * FROM CLERK WHERE NAME=; 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表打开失 败!); retur

7、n; if (!mrsDataSet.IsEOF() / Open all function for user CDialog:OnOK(); CLibraryDlg dlg; dlg.DoModal(); else AfxMessageBox(登录失败!); return; 主界面模块主界面模块 (1)模块的功能 通过主界面可以进入每个模块,是各个模块切换和联系的桥梁。 主界面力求简单,对每个按钮的功能给予适当简介。从主界面 中可以退出系统。 (2)界面设计 设计界面如图所示 其中主要控件的属性、功能及成员变量如图所示。 图书信息模块图书信息模块 (1)模块的功能 图书信息模块主要完成图书信

8、息管理功能,包括浏览、查找、添 加、删除和修改。管理员可以根据使用的需要,依次单击对应按 钮,来实现这些功能。 浏览功能:管理员可以查看全部图书信息。 查找功能:因为书籍条码和书籍是一一对应的关系,所以通过书 籍条码可以查找到任意一本书的信息并显示出来。 添加功能:可以向书籍表中添加新的书籍信息,系统会自动检测 新的书籍信息中书籍条码是否在书籍表中存在,确保每本书具有 唯一的书籍条码。 删除功能:删除界面上当前现实的书籍信息,系统会弹出确认对 话框,提示是否确认删除,得到确认后,便会删除该书信息。 修改功能:实现对当前信息的修改,为安全起见,系统默认书籍 条目不能修改。 (2)界面设计 设计的

9、界面如图所示: 对话框属性设置:IDD_DIALOG_BOOK 为IDD_DIALOG_BOOK添加CBookDlg类 其中主要控件的属性、功能及成员变量如图所示。 (3)添加CCBookDataSet类与书籍信息表连接 (3)添加CCBookDataSet类与书籍信息表连接 (4)代码编写 功能函数:把一些常用的功能封装为成员函数。 DisplayRecord对话框各控件显示当先记录: BOOL CBookDlg:DisplayRecord() if (m_rsDataSet.IsEOF() m_strBookName = ; m_strPress = ; m_strAuthor = ; m

10、_strFlag = ; m_strPressDate=; else if (m_rsDataSet.IsBOF() m_rsDataSet.MoveNext(); else if (m_rsDataSet.IsEOF() m_rsDataSet.MovePrev(); m_strBookID = m_rsDataSet.m_BOOK_ID; m_strBookName = m_rsDataSet.m_BOOK_NAME; m_strPress = m_rsDataSet.m_PRESS; m_strAuthor = m_rsDataSet.m_AUTHOR ; m_strFlag = m_r

11、sDataSet.m_FLAG_BORROW ; m_strPressDate=m_rsDataSet.m_PRES S_DATE; UpdateData(FALSE); return TRUE; SetButtonState根据不同的情况,调整按钮的状态。 如:当到首记录的时候,“上一条”按钮无效。 BOOL CBookDlg:SetButtonState() CWnd *pWnd; if(!m_rsDataSet.IsOpen() pWnd = GetDlgItem(IDC_FIRST); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_NE

12、XT); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_PRIOR); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_LAST); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_NEW); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_ENQUERY); pWnd-EnableWindow

13、(FALSE); pWnd = GetDlgItem(IDC_DELETE); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_SAVE); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CANCEL_REC); pWnd-EnableWindow(FALSE); return TRUE; if (m_bEdit) pWnd = GetDlgItem(IDC_FIRST); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_NEXT); pWnd-En

14、ableWindow(FALSE); pWnd = GetDlgItem(IDC_PRIOR); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_LAST); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_NEW); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_ENQUERY); pWnd-EnableWindow(FALSE); pWn

15、d = GetDlgItem(IDC_DELETE); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_SAVE); pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_CANCEL_REC); pWnd-EnableWindow(TRUE); return TRUE; if (m_rsDataSet.IsBOF() pWnd = GetDlgItem(IDC_FIRST); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_PRIOR); pWnd-Enab

16、leWindow(FALSE); else pWnd = GetDlgItem(IDC_FIRST); pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_PRIOR); pWnd-EnableWindow(TRUE); if (m_rsDataSet.IsEOF() pWnd = GetDlgItem(IDC_NEXT); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_LAST); pWnd-EnableWindow(FALSE); else pWnd = GetDlgItem(IDC_NEXT);

17、pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_LAST); pWnd-EnableWindow(TRUE); if (m_rsDataSet.IsBOF() pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_DELETE); pWnd-EnableWindow(FALSE); else pWnd = GetDlgItem(IDC_EDIT); pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_DELETE); pWnd-EnableWindow(TRUE);

18、 pWnd = GetDlgItem(IDC_NEW); pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_ENQUERY); pWnd-EnableWindow(TRUE); pWnd = GetDlgItem(IDC_SAVE); pWnd-EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CANCEL_REC); pWnd-EnableWindow(FALSE); return TRUE; SetButtonState根据不同的情况,调整按钮的状态。如:当 到首记录的时候,“上一条”按钮无效。 初始化显示记录

19、,设置按钮、编辑框状态。 BOOL CBookDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_bAdd = FALSE; m_bEdit = FALSE; if (!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE) AfxMessageBox(数据打开失败!); DisplayRecord(); SetButtonState(); SetTextState(); return TRUE; / return TRUE unless you set

20、 the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 查询不同条件下进行查询,显示查询记录,设置按钮状态。 void CBookDlg:OnEnquery() / TODO: Add your control notification handler code here UpdateData(TRUE); if (m_strBookIDQ.IsEmpty() m_rsDataSet.Requery(); DisplayRecord(); SetButtonState(); return; BOOL

21、 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) m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + AND BOOK_NAME=; m_rsDataSet.m_strFilter = m_rs

22、DataSet.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(); 保存适用于增加和修改状态,判断信息的合理性,并进行 增加和修改操作。 v

23、oid CBookDlg:OnSave() / TODO: Add your control notification handler code here UpdateData(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

24、 = 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_strP ressDate; m_rsDataSet.Update(); m_rsDataSet.Requery(); m_bAdd = FALSE; m_bEdit = FALSE; DisplayRecord(); SetButtonState(); SetTextState(); 全

25、部图书资料 借书服务模块借书服务模块 (1)模块的功能 借书模块主要完成借书操作。首先检查读者是否有权借书,超 期还书的读者需与管理员协商后方可获得权限再次借书,接着 检查需要借的书籍是否可借,馆内保留的书籍不可借,一切正 常后,登记借书时间、借书管理员ID完成借书。 (2)界面设计 设计界面如图所示 对话框属性设置为:IDD_DIALOG_BORROW。 为IDD_DIALOG_BORROW添加CBorrowDlg类 其中主要控件的属性、功能及成员变量如图所示。 (3)添加CBorrowDataSet类与登录信息表连接 (4)代码编写 “确定”按钮检查读者和书籍是否合理,若任意一项不合 理,

26、则给出警告信息,若合理,添加成功。 void CBorrowDlg:OnConfirm() / TODO: Add your control notification handler code here / 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.

27、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 =

28、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; / Add some code to determine the num of book which this reader borrowed. m_bCanBorrow = TRUE; m_rsDataSet.Cl

29、ose(); m_rsReaderDataSet.Close(); if (!m_bCanBorrow) AfxMessageBox(读者不能借书!); return; mSqlStr = SELECT * FROM BOOK WHERE BOOK_ID= + m_strBookID; mSqlStr = mSqlStr + ; if(!m_rsBookDataSet.Open(AFX_DB_USE_DEFAULT_TYPE, mSqlStr) AfxMessageBox(数据表打开错误!); return ; if (!m_rsBookDataSet.IsEOF() if (m_rsBook

30、DataSet.m_FLAG_BORROW = Y) m_bCanLendOut = TRUE; else AfxMessageBox(此书不外借! ); m_rsBookDataSet.Close(); return; else AfxMessageBox(无此书!); m_rsBookDataSet.Close(); return; m_rsBookDataSet.Close(); CString m_strUserID; m_strUserID = theApp.m_strUserName ; COleDateTime m_CurrentTime=COleDateTime:GetCurrentTime(); CString strTime; int y=m_CurrentTime.GetYear(); int m=m_CurrentTime.GetMonth(); int d=m_Curr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论