《高级语言程序设计C--课程答辩课件.ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计C--课程答辩课件.ppt(39页珍藏版)》请在三一办公上搜索。
1、高级语言程序设计(C+)课程答辩,题 目:图书馆管理系统院 系:班 级:学 号:姓 名:,系统开发背景 某民办高校在创办初期,办学规模比较小。学校的图书数量,以及借阅人数都比较少,所以,一直以来对图书管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况的统计和审核等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。近年来由于国家对民办教育的大力扶持,该民办高校的办学规模迅速扩大,学校的硬件设施以及在校学生和职工数都在成倍增长,给学校的图书馆管理也带来了巨大的压力,早期的手工图书管理方式已经不能满足日益增长的图书借阅需求。使用计算机对图书信息进
2、行管理,具有手工管理所无法比拟的特点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。为了适应学校迅速发展的趋势,解决日益尖锐的图书馆管理矛盾,该校提出了采用计算机管理图书信息的需求。本系统就是基于这个需求进行开发的。,系统需求在图书管理信息系统开发时应该满足以下具体的系统需求:1)满足图书借阅管理的基本需求2)满足图书书库管理的基本需求3)满足图书借阅人管理的基本需求4)对操作人员的技能要求比较低,操作方便。5)能够实现方便的扩展,满足图书馆发展的需要。6)能够保障图书馆管理数据的安全、准确。,系统层次模块图某学校图书管理信息系统可以分为5个子模块:系统登录、图书信
3、息管理、读者信息管理、借书服务管理、还书服务管理,如图所示。,数据库设计 根据系统功能设计的要求以及功能模块的划分,对于本系统的数据库,可以列出以下数据项和数据结构:(1)名称:登录信息表表名标识符:CLERK,(2)名称:书籍信息表表名标识符:BOOK,(3)名称:读者信息表表名标识符:READER,(4)名称:借书信息表表名标识符:BORROW,(5)名称:借还书历史表表名标识符:HISTORY,创建项目 创建一个基于对话框的MFC AppWizard(exe)项目,项目名为Library。为了能在对话框中用ODBC编写数据库,需在stdafx.h中手动添加支持:#include,登录模块
4、(1)模块的功能书籍市图书馆最宝贵的财产,它的借进借出都应该保证安全。每个管理员用自己的用户名和密码登陆,来使用图书馆管理系统。通过某管理员借进和借出的书都有他的标记。这样就保证了书籍的安全。(2)界面设计设计界面如图所示。,对话框属性设置为:IDD_DIALOG_LOGIN。为IDD_DIALOG_LOGIN添加CLoginDlg类其中主要控件的属性、功能及成员变量如图所示。,(3)添加CClerkDataSet类与登录信息表连接,(4)代码编写“取消”按钮取消输入,并关闭登录对话框:“登录”按钮当管理员填完用户名和密码后,单击“登录”按钮,先检查用户名和密码是否合法。然后查找数据库中是否有
5、该管理员的信息,若有则登陆成功。具体代码如下:,void CLoginDlg:OnConfirm()/TODO:Add your control notification handler code hereCClerkDataSet mrsDataSet;/*声明记录集*/CString mSqlStr;UpdateData(TRUE);if(m_strName.IsEmpty()/*判断用户名信息是否为空*/AfxMessageBox(请输入用户名!);return;mSqlStr=SELECT*FROM CLERK WHERE NAME=;,mSqlStr=mSqlStr+m_strNam
6、e;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 userCDialog:OnOK();CLibraryDlg dlg;dlg.DoModal();elseAfxMessageBox(登录失败!);return;,主界面模块(1)
7、模块的功能通过主界面可以进入每个模块,是各个模块切换和联系的桥梁。主界面力求简单,对每个按钮的功能给予适当简介。从主界面中可以退出系统。(2)界面设计设计界面如图所示,其中主要控件的属性、功能及成员变量如图所示。,图书信息模块(1)模块的功能图书信息模块主要完成图书信息管理功能,包括浏览、查找、添加、删除和修改。管理员可以根据使用的需要,依次单击对应按钮,来实现这些功能。浏览功能:管理员可以查看全部图书信息。查找功能:因为书籍条码和书籍是一一对应的关系,所以通过书籍条码可以查找到任意一本书的信息并显示出来。添加功能:可以向书籍表中添加新的书籍信息,系统会自动检测新的书籍信息中书籍条码是否在书籍
8、表中存在,确保每本书具有唯一的书籍条码。删除功能:删除界面上当前现实的书籍信息,系统会弹出确认对话框,提示是否确认删除,得到确认后,便会删除该书信息。修改功能:实现对当前信息的修改,为安全起见,系统默认书籍条目不能修改。,(2)界面设计设计的界面如图所示:,对话框属性设置:IDD_DIALOG_BOOK为IDD_DIALOG_BOOK添加CBookDlg类其中主要控件的属性、功能及成员变量如图所示。(3)添加CCBookDataSet类与书籍信息表连接,(3)添加CCBookDataSet类与书籍信息表连接(4)代码编写功能函数:把一些常用的功能封装为成员函数。,DisplayRecord对话
9、框各控件显示当先记录:BOOL CBookDlg:DisplayRecord()if(m_rsDataSet.IsEOF(),elseif(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_rsDataSet.m_FLAG_BORROW;m_strPressDate=m
10、_rsDataSet.m_PRESS_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_NEXT);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);
11、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);pWnd=GetDlgItem(IDC_DELETE);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(
12、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-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_LAST);pWn
13、d-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_NEW);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_EDIT);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_ENQUERY);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_DELETE);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_SAVE);pWnd-EnableWindow(TRUE);pWnd=GetDlgItem(IDC_
14、CANCEL_REC);pWnd-EnableWindow(TRUE);return TRUE;,if(m_rsDataSet.IsBOF()pWnd=GetDlgItem(IDC_FIRST);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_PRIOR);pWnd-EnableWindow(FALSE);elsepWnd=GetDlgItem(IDC_FIRST);pWnd-EnableWindow(TRUE);pWnd=GetDlgItem(IDC_PRIOR);pWnd-EnableWindow(TRUE);if(m_rsDataSet.IsEO
15、F()pWnd=GetDlgItem(IDC_NEXT);pWnd-EnableWindow(FALSE);pWnd=GetDlgItem(IDC_LAST);pWnd-EnableWindow(FALSE);elsepWnd=GetDlgItem(IDC_NEXT);pWnd-EnableWindow(TRUE);pWnd=GetDlgItem(IDC_LAST);pWnd-EnableWindow(TRUE);,if(m_rsDataSet.IsBOF(),SetButtonState根据不同的情况,调整按钮的状态。如:当到首记录的时候,“上一条”按钮无效。初始化显示记录,设置按钮、编辑框
16、状态。BOOL CBookDlg:OnInitDialog()CDialog:OnInitDialog();/TODO:Add extra initialization herem_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 the focus to a control/EXCEP
17、TION:OCX Property Pages should return FALSE,查询不同条件下进行查询,显示查询记录,设置按钮状态。,void CBookDlg:OnEnquery()/TODO:Add your control notification handler code hereUpdateData(TRUE);if(m_strBookIDQ.IsEmpty(),if(!m_strBookNameQ.IsEmpty()if(mAll)m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+AND BOOK_NAME=;m_rsDataS
18、et.m_strFilter=m_rsDataSet.m_strFilter+m_strBookNameQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+;elsem_rsDataSet.m_strFilter=BOOK_NAME=+m_strBookNameQ;m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+;m_rsDataSet.Requery();DisplayRecord();SetButtonState();,保存适用于增加和修改状态,判断信息的合理性,并进行增加和修改操作。,void
19、 CBookDlg:OnSave()/TODO:Add your control notification handler code hereUpdateData(TRUE);if(m_strBookID.IsEmpty()|m_strBookName.IsEmpty()AfxMessageBox(请输入相应数据!);return;if(m_bAdd)m_rsDataSet.AddNew();elsem_rsDataSet.Edit();,m_rsDataSet.m_AUTHOR=m_strAuthor;m_rsDataSet.m_BOOK_NAME=m_strBookName;m_rsDat
20、aSet.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();SetTextState();,全部图书资料,借书服务模块(1)模块的功能借书模块主要完成借书操作。首先检查读者是否有权借书,
21、超期还书的读者需与管理员协商后方可获得权限再次借书,接着检查需要借的书籍是否可借,馆内保留的书籍不可借,一切正常后,登记借书时间、借书管理员ID完成借书。(2)界面设计设计界面如图所示,对话框属性设置为:IDD_DIALOG_BORROW。为IDD_DIALOG_BORROW添加CBorrowDlg类其中主要控件的属性、功能及成员变量如图所示。,(3)添加CBorrowDataSet类与登录信息表连接(4)代码编写“确定”按钮检查读者和书籍是否合理,若任意一项不合理,则给出警告信息,若合理,添加成功。,void CBorrowDlg:OnConfirm()/TODO:Add your cont
22、rol notification handler code here/TODO:Add your control notification handler code hereBOOL 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_st
23、rFilter=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_DEFA
24、ULT_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.Close();m_rsReaderDataSet.Close();if(!m_bCanBorrow)AfxMessageBox(读者不能借书!);return;,mSqlStr=SELECT*FROM BOOK WHERE BOOK_ID=+m_s
25、trBookID;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;elseAfxMessageBox(此书不外借!);m_rsBookDataSet.Close();return;elseAfxMessageBox(无此书!);m_rsBookDataSet.Close();
26、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_CurrentTime.GetDay();strTime.Format(%d-%d-%d,y,m,d);mSqlStr=INSERT INTO B
27、ORROW(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+);CDatabase mDB;if(!mDB.Open(_T(Library)AfxMessageBox(无法打开数据库!);r
28、eturn;,trymDB.ExecuteSQL(mSqlStr);catch(CDBException e)AfxMessageBox(执行错!);return;mDB.Close();AfxMessageBox(操作成功!);,还书服务模块(1)模块的功能还书模块主要完成还书工作,首先检查此次行为是否超期还书,若是,则锁定读者然后办理还书业务。被锁定的读者需与管理员协商后,方可解锁继续借书。(2)界面设计设计的界面如图所示:,对话框属性设置:IDD_DIALOG_RETURN为IDD_DIALOG_RETURN添加CReturnDlg类其中主要控件的属性、功能及成员变量如图所示。,(3)添加CBorrowSet类与书籍信息表连接(4)代码编写:功能函数:把一些常用的功能封装为成员函数。QryBorrow根据输入的书籍条目,自动查询借此书的借阅信息,计算是否超期等。Insert_History书的借还还应做记录,以备以后查用SetTxtNull清空编辑框。setTxtDisable使编辑框处于只读状态Delete_Borrow当还书成功时,应该从借书信息表中删除该信息回车事件管理员输入书籍条目后,按下Enter键,开始分析此书的借阅情况。按键功能还书分析书籍借阅信息,根据返回结果进行相应处理。,