1院系:计算机科学技术学院二系班级:计07–1班姓名:方茂傲(1)合作者:贾海(33)指导教师:王双立2010年1月1日MFC课程设计物物资资管管理理系系统统2MFC课程设计任务书一、题目:物资管理系统二、设计要求(1)方茂傲、贾海组成设计小组。(2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。(3)查阅相关资料,自学具体课题中涉及到的新知识。(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(5)所设计的系统要至少应用一个课程中或者与其密切相关的算法。(6)按要求写出课程设计报告。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用TimeNewRoma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计阐述本人设计模块部分的设计思想、应用到的理论和算法、程序流程等等,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。(7)课程设计报告中的软件总体设计、详细设计、软件的调试等主体内容要以文字描述、图表等形式为主,可配以主要核心代码,在附录中附程序清单。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2009年12月22日,指导教师讲课,学生根据题目准备资料;2009年12月23日,设计小组进行总体方案设计和任务分工;2009年12月24日~2009年12月29日,每人完成自己承担的程序模块并通过独立编译;2009年12月30日~2010年1月1日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2010年1月2日,验收、开始撰写报告;2010年1月7日前,提交课程设计报告。指导教师签章:教研室主任签章3MFC课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩:课程设计验收成绩:课程设计报告成绩:课程设计总成绩:指导教师签章2010年1月日4目录一.概述.....................................................................................................5二.总体方案设计....................................................................................6三.详细设计............................................................................................8四.课程设计总结..................................................................................25五.后记...................................................................................................26六.参考文献..........................................................................................275一概述1.课程设计的目的1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法,体会MFC中的程序运行机制。2.培养学生综合运用所学知识独立完成课题的能力。3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。2.课程设计的要求及功能分析要求掌握MFC中的程序结构的基本理论知识和熟练运用C++或c语言数据结构数据结构及Microsoftaccess2003桌面数据库的基本知识,熟悉程序的编辑、编译、调试和运行过程,了解功能模块各部分的涉及的理论知识并能熟练的运用所学知识。同时查找书籍对程序设计进行创新,添加界面,并将运行程序变得更完美。用VC++语言编写系统,实现物资管理系统,程序实现功能应包括如下几个方面:本系统分为登录模块、入库模块、新建物资模块、删除物资模块、出库模块、归还模块、报表模块。系统模块划分成四个层次,每个层次负责的功能相对专一。本系统采用Access数据库。数据库访问层,包括数据库连接模块、通用数据命令模块、和特定表相关的命令和访问模块群。这层的作用是隔离数据库和系统中的业务逻辑,使数据库的变化对系统的影响减到最低。功能模块层:包括登录、入库、新建物资、删除物资、出库、归还和报表7个模块。这层的作用是完成系统中的各项业务需求。主界面:主界面层的作用是保存全局的变量和激活各个业务模块。其中全局变量是指每个业务模块都会使用到的变量,例如数据库连接对象。另外,如果需要,主界面层也可以做各个功能模块间通信的中介者。6二总体方案设计物资管理系统的主要目的就是利用软件实现仓库物资的入库、出库、和归还等功能,使工作人员对仓库的管理更加容易,而提高工作效率、降低管理成本。下面具体介绍各项功能。1.新增物资当用户新增物资时,用户可在“新增物资”对话框中输入物资的详细信息。用户单击“新增物资”对话框的“确定”按钮后,系统即可将该物资信息保存到后台数据库中。2.删除物资当用户执行删除物资功能是,在“删除物资”对话框中的物资号列表框中要列出当前库中所有物资供用户选择。如果用户删除的物资数量不为0,则不允许删除。3.入库当用户执行入库功能时,在“入库”对话框的物资号列表框中将列出当前库中所有物资供用户选择。不允许用户直接输入物资号。当用户选择了指定物资后,“入库数量”选项后面的单位应跟物资的单位保持一致。当用户单击“入库”窗户中的“确定”按钮后,系统将自动检查入库后的数量是否合法,检查通过后,则要将入库的数据保存到后台数据库中。4.出库当用户执行出库功能时,在“出库”对话框中的物资号列表框中将列当前库中所有物资供用户选择。不允许用户直接输入物资号。当用户选择了指定物资后,“出库数量”选项后面的单位应跟物资的单位保持一致。当用户单击“出库”窗口中的“确定”按钮后,系统将自动检查出库的数量是否合法,检查如下两种情况保存数据的方式。需要归还:将数据保存到借用表中,并提示用户借用号供归还时使用。不需要归还:将数据保存到出库表中。5.归还当用户执行出库功能时,在“归还”对话框中的借用号列表框中将列出当前库中所用借用情况供用户选择。不允许用户直接输入借用号。当用户选择了指定借用号后,“借用数量”选项后面的单位都应跟借用物资的单位保持一致。当用户单击归还窗口的“确定”按钮后,系统将自动检查归还的数量是否合法。如果用户只归还部分物资,系统应在借用表中减去已归还的数量。当用户全部物资归还后,系统应在借用表中删除当前借用。76.报表报表中的作用是将当前仓库的信息以表格的方式显示给用户。7.用户登录出于对数据安全的保护,系统应该只允许指定的用户对数据库进行存取操作,所以还应设计一个“登录”窗口。8三详细设计主程序的初始化主程序在初始化时,需要添加如下功能:初始化并打开数据库连接对象;用户登录。这些初始化代码应该放到CwhMgrApp类的InitInstance方法中。具体代码如下:BOOLCWhMgrApp::InitInstance(){//初始化Com::CoInitialize(NULL);//初始化数据库连接m_pConn=newCDBConnection;//得到当前程序所在的文件夹CStringstrCommandLine=::GetCommandLine();inti;intnLen=strCommandLine.GetLength();for(i=nLen-1;i=0;i--){CHARa=strCommandLine.GetAt(i);if(a=='\\'){break;}}strCommandLine.ReleaseBuffer(i+1);strCommandLine.Delete(0,1);//打开数据库连接,数据库地址为:当前程序所在文件夹\WhMgrDB.mdbif(!m_pConn-Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=+strCommandLine+WhMgrDB.mdb;PersistSecurityInfo=False)){::AfxMessageBox(打开数据库失败!);returnFALSE;}//用户登录BOOLbLogined;CLoginDlgloginDlg;CUserInfoDataSetdsUserInfo;9dsUserInfo.m_cnn=m_pConn;bLogined=FALSE;//给3次登录机会for(i=0;i3;i++){if(loginDlg.DoModal()==IDOK){dsUserInfo.LoadData(loginDlg.m_strUserName);if(!dsUserInfo.IsEOF()){if(dsUserInfo.GetPassword()==loginDlg.m_strPassword){bLogined=TRUE;break;}}else{::AfxMessageBox(用户名或者密码不正确,请重试!);}dsUserInfo.Close();}else{break;}}if(!bLogined){returnFALSE;}AfxEnableControlContainer();//Standardinitialization//Ifyouarenotusingthesefeaturesandwishtoreducethesize//ofyourfinalexecutable,youshouldremovefromthefollowing//thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLLEnable3dControls();//CallthiswhenusingMFCinasharedDLL10#elseEnable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically#endifCWhMgrDlgdlg;//给dlg的m_pConn成员变量赋值dlg.m_pConn=m_pConn;m_pMainWnd=&dlg;intnResponse=dlg.DoModal();if(nResponse==IDOK){//TODO:Placecodeheretohandlewhenthedialogis//dismissedwithOK}elseif(nResponse==IDCANCEL){//TODO:Placecodeheretohandlewhenthedialogis//dismissedwithCancel}//Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe//application,ratherthanstarttheapplication'smessagepump.returnFALSE;}从上面的代码可知,程序初始化的时候初始化了