MFC图书馆管理系统.doc

上传人:小飞机 文档编号:4219913 上传时间:2023-04-10 格式:DOC 页数:77 大小:236.50KB
返回 下载 相关 举报
MFC图书馆管理系统.doc_第1页
第1页 / 共77页
MFC图书馆管理系统.doc_第2页
第2页 / 共77页
MFC图书馆管理系统.doc_第3页
第3页 / 共77页
MFC图书馆管理系统.doc_第4页
第4页 / 共77页
MFC图书馆管理系统.doc_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《MFC图书馆管理系统.doc》由会员分享,可在线阅读,更多相关《MFC图书馆管理系统.doc(77页珍藏版)》请在三一办公上搜索。

1、MFC图书馆管理系统MFC课程设计 图书馆管理系统 图书馆管理系统 院 系: 计算机科学技术学院二系 班 级: 计07 2班 姓 名: 白杨(07) 合 作 者: 刘飞 指导教师: 王双利 2010 年 01 月 4 日 MFC课程设计任务书 一、题目:图书馆管理系统 二、设计要求 (1)刘飞(组长)和白杨组成设计小组。 (2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。 (3)查阅相关资料,自学具体课题中涉及到的新知识。 (4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。 (5)所设计的系统要至少应用一个课程中或者与其密切相关的算法。

2、(6)按要求写出课程设计报告。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计阐述本人设计模块部分的设计思想、应用到的理论和算法、程序流程等等,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。 (7)课程设计报告中的软件总体设计、详细设计、软件的调试等主体内容要以文字描述、图表等形式

3、为主,可配以主要核心代码,在附录中附程序清单。 三、课程设计工作量 由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。 四、课程设计工作计划 2009年12月07日,指导教师讲课,学生根据题目准备资料; 2009年12月08日,设计小组进行总体方案设计和任务分工; 2009年12月09日,2009年12月14日,每人完成自己承担的程序模块并通过独立编译; 2009年12月15日,2009年12月17日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行; 2009年12月18日,验收、开始撰写报告; 2009年12月21日前,提交课程设计报告。 指

4、导教师签章: 教研室主任签章 2 MFC课程设计指导教师评语与成绩 指导教师评语: 课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2009年 12 月 26 日 3 目 录 第1章 概 述 . 5 1.1性能需求 . 5 1.2功能需求 . 5 第2章 概要设计 . 6 2.1功能模块设计 . 6 2.2算法分析和设计 . 6 第3章 详细设计 . 7 3.1数据库操作 . 7 3.2模块设计详细设计 . 7 3.3程序流程图 . 8 4.1调试分析 . 9 4.2测试结果 . 9 第5章 总 结 . 22 参考文献 . 22 附 录 . 23

5、4 第1章 概 述 1.1性能需求 本系统选用VC做为设计语言,开发工具选用Visual C+6.0作为开发工具,本系统可广泛应用于以Windows为平台的PC上,由于当前主流操作系统即为Windows,顾客广泛推广。 1.2功能需求 一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉。在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工。一个最典型的手工处理还书过程就是:读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片和读者的借阅证放在一个小格栏里,并在借阅证和每本书贴的借阅条上填写借阅信息。这样借书过程就

6、完成了。还书时,读者将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息,这样还书过程就完成了。 以上所描述的手工过程的不足之处显而易见,首先处理借书、还书业务流程的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。我们将会看到排队等候借书、还书的队伍不再那么长,工作人员出错的概率也小了,读者可以花更多的时间在选择书和看书上。 为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还

7、可以对当前图书借阅情况进行一些统计,给出统计表格,以便全面掌握图书的流通情况。 图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书、读者的管理,其实是对图书、读者数据的管理。本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。 5 第2章 概要设计 2.1功能模块设计 首先需要对图书管理系统详细地了解和分析,一个功能完全满足基本需要的系统,必须包括以下的几个模块。 (1)基本数据维护功能模块 在这个功能模块中,提供了使用者录入、修改并进行维护基本数据的途径。比如在这个模块中可以输入读者的信息、书籍的各项信息,也可以对这些信息做修改、更新。 (2)基本业务功能模块 这个功能模

8、块主要实现对读者利用图书馆借还书籍的管理,比如根据读者的借用书籍要求更新图书馆书籍数据库系统,如果书籍已经借出,可以进行预留操作。用户每次还书也要进行数据库记录的各项更新。这个模块是整个图书管理系统的关键部分。 (5)安全/使用管理功能模块 这是任何一个信息管理系统都需要的部分,图书管理系统的操作也只能由回主菜专人进行,只有图书管理部门的工作人员才能拥有权限,特别是图书的借书状况,输出单 如果没有安全管理部分,后果难以想象,可能每次登录都需要用户身份的验证。 Hash表 图书管理系统 基基安本本全 数业使据务用 维功管 护能理 功模 能块 图 1 系统问倒功能需求框图 2.2算法分析和设计 本

9、系统数据库操作部分采用DAO技术,并应用了多线程技术,各模块均有自己独立的线程进行操作,但由于DAO本身并不支持多线程,故所有与数据库相关的操作均在主线程中,各模块通过发送自定义消息与主线程通信来获取数据库信息。 6 第3章 详细设计 3.1数据库操作 数据库操作部分采用DAO技术,DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。 3.2模块设计详细

10、设计 1.基本数据维护 在这个功能模块中,提供了使用者录入、修改并进行维护基本数据的途径。比如在这个模块中可以输入读者的信息、书籍的各项信息,也可以对这些信息做修改、更新。 2.基本业务功能 这一部分主要包括以下五部分: (1)库存图书信息 该部分主要是列出所有库存图书,在管理员和员工登录模式下提供对图书信息的修改等功能,在读者的登录模式下提供借阅功能。详细代码及截图见调试分析部分。 (2)员工信息 该部分主要列出所有员工信息,并提供信息修改功能,且本部分只有在以管理员权限登录后才可用,在以普通员工登陆和读者登陆时无效。详细代码及截图见调试分析部分。 (3)读者信息 该部分主要列出所有读者信息

11、,并提供添加修改功能,本部分只有在以管理员或普通员工模式登陆时才有效,读者登陆时无效。详细代码及截图见调试分析部分。 (4)图书入库 该部分主要提供图书的入库功能,在以管理员和普通员工登录时有效。详细代码及截图见调试分析部分。 (5)借阅信息 该部分主要列出读者的借阅信息,借阅的图书数量,及日期信息等。详细代码及截图见调试分析部分。 7 3.3程序流程图 登陆 权限, 读者 普通员工 管理员 图员读图借书工者书阅信信信入信息息息库息 信息添加、修改、删除 8 第4章 调试分析与测试结果 4.1调试分析 通过老师的验收和自己的总结,我们程序能正常的完成上述所叙述的项目。虽然程序各项功能都能很好的

12、实现,但仍有许多不足之处,因为我们目前能力还很有限,时间也有些紧,所以有很多地方还没有做到位。例如:该次课程设计中的一些功能没有得到很好的实现,像动画都没有很好的实现。不过,我们在整个程序中实现了所要求的内容,整体也算完整,弥补了上述带来的缺憾。 4.2测试结果 (1)登陆 代码如下: CLoadDlg dlg; aa: if(dlg.DoModal() = IDOK) if(!m_bAccept) AfxMessageBox(用户名或密码错误,请重新输入); goto aa; else return FALSE; 图片: 9 (2)库存图书信息 void CTestView:OnBook()

13、 CTestDoc *pDoc = GetDocument(); m_nTableNO = 1; if(m_strDatabase != ) pDoc-OpenMdb(); else MessageBox(未设置数据库,请退出并设置数据库); void CBookDlg:OnButtonAdd() if(m_nTableNO = 1) SetValue(); :SendMessage(hwnd,WM_USER_ADD,0,0); else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonDel() if(m_nTableNO = 1) :SendMes

14、sage(hwnd,WM_USER_DEL,0,0); OnButtonFirst(); else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonEdit() if(m_nTableNO = 1) SetValue(); :SendMessage(hwnd,WM_USER_EDIT,0,0); 10 else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonFirst() if(m_nTableNO = 1) :SendMessage(hwnd,WM_USER_FIRST,0,0); GetValue();

15、else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonLast() if(m_nTableNO = 1) :SendMessage(hwnd,WM_USER_LAST,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonNext() if(m_nTableNO = 1) :SendMessage(hwnd,WM_USER_NEXT,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButton

16、Prv() 11 if(m_nTableNO = 1) :SendMessage(hwnd,WM_USER_PREV,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CBookDlg:OnButtonRequary() if(m_nTableNO = 1) :SendMessage(hwnd,WM_USER_REQUERY,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); 图片: (3)员工信息 void CTestView:OnStaff() if(m_nPurview = 0) CTestDoc

17、 *pDoc = GetDocument(); 12 m_nTableNO = 2; if(m_strDatabase != ) pDoc-OpenMdb(); else MessageBox(未设置数据库,请退出并设置数据库); else MessageBox(对不起,您没有此权限); void CStaffDlg:OnButtonAdd() if(m_nTableNO = 2) SetValue(); :SendMessage(hwnd,WM_USER_ADD,0,0); else MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonDel() if

18、(m_nTableNO = 2) :SendMessage(hwnd,WM_USER_DEL,0,0); OnButtonFirst(); else MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonEdit() if(m_nTableNO = 2) SetValue(); :SendMessage(hwnd,WM_USER_EDIT,0,0); else 13 MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonFirst() if(m_nTableNO = 2) :SendMessage(hwnd,WM_US

19、ER_FIRST,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonLast() if(m_nTableNO = 2) :SendMessage(hwnd,WM_USER_LAST,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonNext() if(m_nTableNO = 2) :SendMessage(hwnd,WM_USER_NEXT,0,0); GetValue(); else MessageBox(系统忙,请

20、稍后再试); void CStaffDlg:OnButtonPrv() 14 if(m_nTableNO = 2) :SendMessage(hwnd,WM_USER_PREV,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); void CStaffDlg:OnButtonRequary() if(m_nTableNO = 2) :SendMessage(hwnd,WM_USER_REQUERY,0,0); GetValue(); else MessageBox(系统忙,请稍后再试); 图片: (4)读者信息 void CTestView:OnRead

21、er() if(m_nPurview != 2) CTestDoc *pDoc = GetDocument(); 15 m_nTableNO = 0; if(m_strDatabase != ) pDoc-OpenMdb(); else MessageBox(未设置数据库,请退出并设置数据库); else MessageBox(对不起,您没有此权限); void CStudentDlg:OnButtonAdd() if(m_nTableNO = 0) SetValue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; :Sen

22、dMessage(hwnd,WM_USER_ADD,0,0); else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonDel() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_DEL,0,0); OnButtonFirst(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonEdit() if(m_nTableNO = 0) 16

23、 SetValue(); :SendMessage(hwnd,WM_USER_EDIT,0,0); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonFirst() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_FIRST,0,0); GetValue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else Mes

24、sageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonNext() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_NEXT,0,0); GetValue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonPrv() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_PREV,0,0); 17 GetVal

25、ue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonRequary() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_REQUERY,0,0); GetValue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnB

26、uttonLast() if(m_nTableNO = 0) :SendMessage(hwnd,WM_USER_LAST,0,0); GetValue(); m_strReaderID = m_strID; m_strBookNumber = m_strNumber; else MessageBox(系统忙,请稍后再试); void CStudentDlg:OnButtonBorrow() if(m_nTableNO = 0) if(m_strBookNumber = 0) MessageBox(该用户借阅记录为零); 18 else CDialog:OnOK(); :SendMessage

27、(hwnd,WM_USER_DEMAND,0,0); else MessageBox(系统忙,请稍后再试); 图片: (5)图书入库 void CTestView:OnAdd() if(m_nPurview != 2) CTestDoc *pDoc = GetDocument(); m_nTableNO = 3; if(m_strDatabase != ) pDoc-OpenMdb(); else MessageBox(未设置数据库,请退出并设置数据库); else MessageBox(对不起,您没有此权限); 19 void CAddDlg:OnButtonAdd() if(m_nTabl

28、eNO = 3) SetValue(); :SendMessage(hwnd,WM_USER_ADD,0,0); else MessageBox(系统忙,操作无效); 图片: (6)借阅信息 void CTestView:OnReaderBook() CTestDoc *pDoc = GetDocument(); if(m_strDatabase != ) if(m_nPurview = 2) if(m_strInfo = 0) MessageBox(您的借阅记录为空); else if(m_nTableNO = 0) 20 m_nTableNO = 4; if(AfxMessageBox(该

29、用户借阅记录为空是否创建,MB_YESNO) = IDYES) m_nFieldRow = m_nSelectedRow; pDoc-OnDemand(); if(AfxMessageBox(数据库已建立是否添加,MB_YESNO) = IDYES) /* m_strReaderID = m_arrayFieldValue5; pDoc-OpenMdb();*/ else MessageBox(未设置数据库,请退出并设置数据库); 图片: 21 第5章 总 结 本程序主要实现了; 经过两年半的学习在编程方面了很的大进步,尤其在课程设计的时候更能锻炼我们的综合能力,在这次课程设计的时候也遇到了不

30、少麻烦,同时也认识到自己的能力还有待提高,但是这次在老师和同学们的热情帮助下,比较圆满的完成了任务,以后要更加努力,不断的吸取知识,让自己的编程能力不断提高 最后,要非常感谢王双利老师,这一次课程设计给予了我们很大的帮助,也让我们学到了更多技巧和知识。还要感王双利老师对我们一学期的支持和耐心的指导,他不仅教会了我们知识还教会了我们许多人生的道理,让我们受益匪浅。 参考文献 1 任哲,MFC Windows应用程序设计(第二版),北京,清华大学出版社,2007年9月。 2 武莹,彭文明,Visual C+开发实用编程200例,中国铁道出版社,2006年1月。 3 任哲,高诚,软件工程,中国水利水

31、电出版社,2008年10月 4 VC+技术内幕(第四版) 22 附 录 Test.cpp #include stdafx.h #include test.h #include MainFrm.h #include testDoc.h #include testView.h #include LoadDlg.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif extern int m_nPurview; extern BOOL m_bAccept; / / CT

32、estApp BEGIN_MESSAGE_MAP(CTestApp, CWinApp) /AFX_MSG_MAP(CTestApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) / NOTE - the ClassWizard will add and remove mapping macros here. / DO NOT EDIT what you see in these blocks of generated code! /AFX_MSG_MAP / Standard file based document commands ON_COMMAND(ID_F

33、ILE_NEW, CWinApp:OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen) / Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup) END_MESSAGE_MAP() / / CTestApp construction CTestApp:CTestApp() / TODO: add construction code here, / Place all significant initialization

34、 in InitInstance 23 / / The one and only CTestApp object CTestApp theApp; / / CTestApp initialization BOOL CTestApp:InitInstance() AfxEnableControlContainer(); / Standard initialization / If you are not using these features and wish to reduce the size / of your final executable, you should remove fr

35、om the following / the specific initialization routines you do not need. CLoadDlg dlg; aa: if(dlg.DoModal() = IDOK) if(!m_bAccept) AfxMessageBox(用户名或密码错误,请重新输入); goto aa; else return FALSE; #ifdef _AFXDLL Enable3dControls(); / Call this when using MFC in a shared DLL #else Enable3dControlsStatic();

36、/ Call this when linking to MFC statically #endif / Change the registry key under which our settings are stored. / TODO: You should modify this string to be something appropriate / such as the name of your company or organization. SetRegistryKey(_T(Local AppWizard-Generated Applications); LoadStdPro

37、fileSettings(); / Load standard INI file options (including MRU) / Register the applications document templates. Document templates 24 / serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME

38、_CLASS(CTestDoc), RUNTIME_CLASS(CMainFrame), / main SDI frame window RUNTIME_CLASS(CTestView); AddDocTemplate(pDocTemplate); / Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); / Dispatch commands specified on the command line if (!Pr

39、ocessShellCommand(cmdInfo) return FALSE; / The one and only window has been initialized, so show and update it. m_pMainWnd-ShowWindow(SW_SHOW); m_pMainWnd-UpdateWindow(); return TRUE; / / CAboutDlg dialog used for App About class CAboutDlg : public CDialog public: CAboutDlg(); / Dialog Data /AFX_DATA(CAboutDlg) enum IDD = IDD_ABOUTBOX ; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号