方茂傲贾海课程设计_第1页
方茂傲贾海课程设计_第2页
方茂傲贾海课程设计_第3页
方茂傲贾海课程设计_第4页
方茂傲贾海课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在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日前,提交课程设计报告。 指导教师签章: 教研室主任签章 MFC课程设计指导教师评语与成绩指导教师评语:课程设计

4、表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2010年 1 月 日目 录一概述5二总体方案设计6三详细设计8四课程设计总结25五后记26六参考文献27一 概述1. 课程设计的目的1使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法,体会MFC中的程序运行机制。2培养学生综合运用所学知识独立完成课题的能力。3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5培养学生从资料文献、科学实验中获得知识的能力,提高学

5、生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。2. 课程设计的要求及功能分析要求掌握MFC中的程序结构的基本理论知识和熟练运用C+或c语言数据结构数据结构及Microsoft access2003桌面数据库的基本知识,熟悉程序的编辑、编译、调试和运行过程,了解功能模块各部分的涉及的理论知识并能熟练的运用所学知识。同时查找书籍对程序设计进行创新,添加界面,并将运行程序变得更完美。用VC+语言编写系统,实现物资管理系统,程序实现功能应包括如下几个方面:本系统分为登录模块、入

6、库模块、新建物资模块、删除物资模块、出库模块、归还模块、报表模块。系统模块划分成四个层次,每个层次负责的功能相对专一。本系统采用Access数据库。数据库访问层,包括数据库连接模块、通用数据命令模块、和特定表相关的命令和访问模块群。这层的作用是隔离数据库和系统中的业务逻辑,使数据库的变化对系统的影响减到最低。功能模块层:包括登录、入库、新建物资、删除物资、出库、归还和报表7个模块。这层的作用是完成系统中的各项业务需求。主界面:主界面层的作用是保存全局的变量和激活各个业务模块。其中全局变量是指每个业务模块都会使用到的变量,例如数据库连接对象。另外,如果需要,主界面层也可以做各个功能模块间通信的中

7、介者。二 总体方案设计物资管理系统的主要目的就是利用软件实现仓库物资的入库、出库、和归还等功能,使工作人员对仓库的管理更加容易,而提高工作效率、降低管理成本。下面具体介绍各项功能。1. 新增物资当用户新增物资时,用户可在“新增物资”对话框中输入物资的详细信息。用户单击“新增物资”对话框的“确定”按钮后,系统即可将该物资信息保存到后台数据库中。2. 删除物资当用户执行删除物资功能是,在“删除物资”对话框中的物资号列表框中要列出当前库中所有物资供用户选择。如果用户删除的物资数量不为0,则不允许删除。 3. 入库 当用户执行入库功能时,在“入库”对话框的物资号列表框中将列出当前库中所有物资供用户选择

8、。不允许用户直接输入物资号。 当用户选择了指定物资后,“入库数量”选项后面的单位应跟物资的单位保持一致。当用户单击“入库”窗户中的“确定”按钮后,系统将自动检查入库后的数量是否合法,检查通过后,则要将入库的数据保存到后台数据库中。4. 出库当用户执行出库功能时,在“出库”对话框中的物资号列表框中将列当前库中所有物资供用户选择。不允许用户直接输入物资号。当用户选择了指定物资后,“出库数量”选项后面的单位应跟物资的单位保持一致。当用户单击“出库”窗口中的“确定”按钮后,系统将自动检查出库的数量是否合法,检查如下两种情况保存数据的方式。需要归还:将数据保存到借用表中,并提示用户借用号供归还时使用。不

9、需要归还:将数据保存到出库表中。 5. 归还当用户执行出库功能时,在“归还”对话框中的借用号列表框中将列出当前库中所用借用情况供用户选择。不允许用户直接输入借用号。当用户选择了指定借用号后,“借用数量”选项后面的单位都应跟借用物资的单位保持一致。当用户单击归还窗口的“确定”按钮后,系统将自动检查归还的数量是否合法。如果用户只归还部分物资,系统应在借用表中减去已归还的数量。当用户全部物资归还后,系统应在借用表中删除当前借用。 6. 报表 报表中的作用是将当前仓库的信息以表格的方式显示给用户。 7. 用户登录 出于对数据安全的保护,系统应该只允许指定的用户对数据库进行存取操作,所以还应设计一个“登

10、录”窗口。 三 详细设计主程序的初始化 主程序在初始化时,需要添加如下功能:初始化并打开数据库连接对象;用户登录。这些初始化代码应该放到CwhMgrApp类的InitInstance方法中。具体代码如下:BOOL CWhMgrApp:InitInstance()/初始化Com:CoInitialize(NULL);/初始化数据库连接m_pConn = new CDBConnection;/得到当前程序所在的文件夹CString strCommandLine = :GetCommandLine();int i;int nLen = strCommandLine.GetLength();for(i

11、 = nLen - 1; i = 0; i-)CHAR a = 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;Data Source= + strCommandLine + WhMgrDB.mdb;Persist Security Info=False):AfxMess

12、ageBox(打开数据库失败!);return FALSE;/用户登录BOOL bLogined;CLoginDlg loginDlg;CUserInfoDataSet dsUserInfo;dsUserInfo.m_cnn = m_pConn;bLogined = FALSE;/给3次登录机会for(i = 0; i Close();delete m_pConn;:CoUninitialize();return CWinApp:ExitInstance();主界面对话框的设计将主界面的对话框的Caprion定义为“物资管理系统”。其中,该对话框中重要控件的ID设置如下图:向CReturnDi

13、alog类中添加如下变量。该变量用来保存全局的数据库连接指针。public: /数据库连接对象指针CDBConnection* m_pConn; 主界面对话框中重要控件的ID设置入库的实现:为“入库”按钮添加BN_CLICKED事件OnBtnIn;void CWhMgrDlg:OnBtnIn() CInDialog inDialog;inDialog.m_pConn = m_pConn;/显示入库对话框/如果用户单击了确定按钮if(inDialog.DoModal() = IDOK)/将入库材料的数量添加到材料信息表中CMaterialInfoDataSet dsMaterialInfo; /

14、物资信息dsMaterialInfo.m_cnn = m_pConn; /数据库连接对象的指针if(dsMaterialInfo.LoadDataByNum(inDialog.m_strMaterialNum)if(!dsMaterialInfo.IsEOF()CString strMaxCount = dsMaterialInfo.GetMaxCount();CString strCount = dsMaterialInfo.GetCount();double dMaxCount = atof(strMaxCount);double dCount = atof(strCount);doubl

15、e dCount_Add = atof(inDialog.m_strCount);if(dCount + dCount_Add dMaxCount):AfxMessageBox(入库失败:入库后,库存数量将大于最大数量。);elsedCount = dCount + dCount_Add;CString strNewCount;strNewCount.Format(%f, dCount);dsMaterialInfo.SetCount(strNewCount);dsMaterialInfo.Update();else:AfxMessageBox(入库失败!);dsMaterialInfo.Cl

16、ose();else:AfxMessageBox(入库失败!);/在入库表中添加记录CInCommand cmdIn;cmdIn.m_cnn = m_pConn;cmdIn.m_Buyer = inDialog.m_strBuyer;cmdIn.m_Count = inDialog.m_strCount;cmdIn.m_MaterialNum = inDialog.m_strMaterialNum;cmdIn.m_Price = inDialog.m_strPrice;cmdIn.m_Supplier = inDialog.m_strSupplier;if(!cmdIn.DoIn():AfxM

17、essageBox(添加入库信息失败!);出库的实现:为“出库”按钮添加BN_CLICKED事件OnBtnOut;void CWhMgrDlg:OnBtnOut() COutDialog outDialog;outDialog.m_pConn = m_pConn;if(outDialog.DoModal() = IDOK)/在材料信息表中减去出库的数量CMaterialInfoDataSet dsMaterialInfo;dsMaterialInfo.m_cnn = m_pConn;if(dsMaterialInfo.LoadDataByNum(outDialog.m_strMaterialN

18、um)if(!dsMaterialInfo.IsEOF()CString strCount = dsMaterialInfo.GetCount();double dCount = atof(strCount);double dCount_Out = atof(outDialog.m_strCount);if(dCount - dCount_Out 0):AfxMessageBox(出库失败:库存数量小于出库数量。);return;elsedCount = dCount - dCount_Out;CString strNewCount;strNewCount.Format(%f, dCount)

19、;dsMaterialInfo.SetCount(strNewCount);dsMaterialInfo.Update();else:AfxMessageBox(出库失败!);return;dsMaterialInfo.Close();else:AfxMessageBox(出库失败!);return;/如果是借出,将借出信息添加到借出表中if(outDialog.m_bNeedReturn)CBorrowCommand cmdBorrow;cmdBorrow.m_cnn = m_pConn;cmdBorrow.m_Count = outDialog.m_strCount;cmdBorrow.m

20、_Department = outDialog.m_strDepartment;cmdBorrow.m_Jsr = outDialog.m_strJsr;cmdBorrow.m_Lqr = outDialog.m_strLqr;cmdBorrow.m_MaterialNum = outDialog.m_strMaterialNum;cmdBorrow.m_State = outDialog.m_strState;cmdBorrow.m_Use = outDialog.m_strUse;CString strOutNum = cmdBorrow.DoBorrow();if(strOutNum =

21、 ):AfxMessageBox(出库失败!);return;elseCString strMsg = 借用成功,借用号为: + strOutNum;:AfxMessageBox(strMsg);/如果不是借出,将出库信息添加到出库表中elseCOutCommand cmdOut;cmdOut.m_cnn = m_pConn;cmdOut.m_Count = outDialog.m_strCount;cmdOut.m_Department = outDialog.m_strDepartment;cmdOut.m_Jsr = outDialog.m_strJsr;cmdOut.m_Lqr = o

22、utDialog.m_strLqr;cmdOut.m_MaterialNum = outDialog.m_strMaterialNum;cmdOut.m_State = outDialog.m_strState;cmdOut.m_Use = outDialog.m_strUse;if(!cmdOut.DoOut():AfxMessageBox(出库失败!);归还的实现:为“归还”按钮添加BN_CLICKED事件OnBtnReturn;void CWhMgrDlg:OnBtnReturn() CReturnDialog returnDialog;returnDialog.m_pConn = m_

23、pConn;if(returnDialog.DoModal() = IDOK)/在借用表中减去归还的数量/如果全部归还,则删除相应的借用号CString strMaterialNum;CBorrowDataSet dsBorrowDataSet;dsBorrowDataSet.m_cnn = m_pConn;if(dsBorrowDataSet.LoadDataByID(returnDialog.m_strOutNum)if(!dsBorrowDataSet.IsEOF()CString strCount = dsBorrowDataSet.GetCount();double dCount =

24、 atof(strCount);double dCount_Return = atof(returnDialog.m_strCount);if(dCount 0)CString strNewCount;strNewCount.Format(%f, dCount);dsBorrowDataSet.SetCount(strNewCount);dsBorrowDataSet.Update();elsedsBorrowDataSet.Delete();dsBorrowDataSet.Update();else:AfxMessageBox(归还失败!);return;dsBorrowDataSet.Cl

25、ose();else:AfxMessageBox(归还失败!);return;/将归还的物品入库CMaterialInfoDataSet dsMaterialInfo;dsMaterialInfo.m_cnn = m_pConn;if(dsMaterialInfo.LoadDataByNum(strMaterialNum)if(!dsMaterialInfo.IsEOF()CString strMaxCount = dsMaterialInfo.GetMaxCount();CString strCount = dsMaterialInfo.GetCount();double dMaxCount

26、 = atof(strMaxCount);double dCount = atof(strCount);double dCount_Add = atof(returnDialog.m_strCount);if(dCount + dCount_Add dMaxCount):AfxMessageBox(归还失败:归还后,库存数量将大于最大数量。);return;elsedCount = dCount + dCount_Add;CString strNewCount;strNewCount.Format(%f, dCount);dsMaterialInfo.SetCount(strNewCount)

27、;dsMaterialInfo.Update();else:AfxMessageBox(归还失败!);return;dsMaterialInfo.Close();else:AfxMessageBox(归还失败!);return;报表的实现:为“报表”按钮添加BN_CLICKED事件OnBtnReport;void CWhMgrDlg:OnBtnReport() CReportDialog repDialog;repDialog.m_pConn = m_pConn;repDialog.DoModal(); /弹出CReportDialog 定义的对话框新建物资的实现:为“新建物资”按钮添加BN_

28、CLICKED事件OnBtnNew;void CWhMgrDlg:OnBtnNew() CNewDialog newDialog;if(newDialog.DoModal() = IDOK)/将新建的物资添加到物资信息表中CMaterialInfoCommand cmdMaterialInfo;cmdMaterialInfo.m_cnn = m_pConn;cmdMaterialInfo.m_strMaterialName = newDialog.m_strMaterialName;cmdMaterialInfo.m_strMaterialNum = newDialog.m_strMateri

29、alNum;cmdMaterialInfo.m_strMaxCount = newDialog.m_strMaxCount;cmdMaterialInfo.m_strUnit = newDialog.m_strUnit;cmdMaterialInfo.DoNew();删除物资的实现:为“删除物资”按钮添加BN_CLICKED事件OnBtnDelete;void CWhMgrDlg:OnBtnDelete() CDeleteDialog delDialog;delDialog.m_pConn = m_pConn;if(delDialog.DoModal() = IDOK)/从物资信息表中删除CM

30、aterialInfoCommand cmdMaterialInfo;cmdMaterialInfo.m_cnn = m_pConn;cmdMaterialInfo.DeleteMaterial(delDialog.m_strMaterialNum);各功能对话框的实现:1.“删除物资”对话框的设计与实现:新建一个对话框,将其ID定义为IDD_DELETE_DIALOG , 其中Caption定义为“删除物资”。如下图: “删除物资”对话框中重要控件的ID设置为对话框定义类CdeleteDialog。为下拉列表框控件IDC_COMBO_MATERIALNUM定义CcomboBox类型的变量m_

31、MaterialNum。向CdeleteDialog类中添加如下两个变量:public: CDBConnection* m_pConn; Cstring m_strMaterialNum;2.“入库”对话框的设计和实现新建一个对话框,将其ID定义为IDD_IN_DIALOG,其Caption定义为“入库”。该对话框中重要控件的ID设置如下图: “入库”对话框中中重要控件的ID设置3.“登录”对话框的设计与实现 新建一个对话框,将其ID定义为IDD_LOGIN_DIALOG,其Caption定义为“登录”。如下图所示: “登录”对话框中重要控件的ID设置 4.“新增物资”对话框的设计与实现 新建

32、一个对话框,将其ID定义为IDD_NEW_DIALOG,其定义为“新增物资”。 “新增物资”对话框中重要控件的ID设置5.“出库”对话框的设计与实现 新建一个对话框,将其ID定义为IDD_OUT_DIALOG,其Caption定义为“出库”。如下图: “出库”对话框中重要控件的ID设置 6. “报表”对话框的设计与实现 新建一个对话框,将其ID定义为IDD_REPORT_DIALOG,其Caption定义为“报表”。注意:“Microsoft FlexGrid Control,version 6.0 (SP6)”控件的加入方法。“报表”对话框中重要控件及其ID设置 7. “归还”对话框的设计与

33、实现新建一个对话框,将其ID定义为IDD_RETURN_DIALOG,其Caption定义为“归还”。分析和创建数据库本例采用Access作为数据库。首先创建一个数据库文件,命名为WhMgrDB.mdb。该文件应该放接应用程序所在的目录中。1. 用户信息表2. 物资信息表3. 入库表4. 出库表5. 借用表数据库连接模块的实现本系统采用ADO作为数据源连接。本系统中,数据库连接层被定义为CDBConnection,其定义及实现源代码参见附录。从CDBConnection类的实现可以看出,他只是对ADO连接对象的简单封装。通用数据访问及访问模块的实现众所周知,ADO实际是一个COM对象,在VC+

34、中直接使用ADO的效率非常低,所以需要对其封装。其中数据访问模块就是对使用ADO的Recordset对象访问数据的封装,而通用数据命令模块是对ADO执行SQL命令的封装。具体代码见附录用户信息表访问类用户信息表访问类的作用是访问用户信息表,该类是给登录模块使用的。他需要完成以下功能。1. 据用户名加载数据2. 得到密码借用表命令类借用表命令类的作用是操作借用表。他需要完成的任务是将用户的借用信息添加到借用表中,并返回当前的借用号。借用表访问类借用表访问类的作用是访问借用表中的数据。他需要完成功能如下。1. 获得借用表个字段的数值2. 当用户归还时,修改借用的数量。入库表访问类入库表命令类的作用

35、是操作入库表中的数据。他需要完成的功能是将入库的物资添加到入库表中。入库表访问类入库表访问类的作用是访问入库表中的数据。他需要完成的功能是访问入库表中的每一个字段。物资信息表命令类其作用是操作物资信息表中的数据,需完成如下功能1. 当用户执行新增屋子命令时,向物资信息表中添加新的物资。2. 当用户执行删除物资命令时,将指定物资从物资信息表中删除。物资信息表访问类其作用是访问物资信息表中的数据。1 访问物资信息表中的每一个字段。2 设置物资信息表中的每一个字段。出库表命令类出库表命令类的作用是操作出库表中的数据。他需要完成的功能是将出库信息添加到出库表中。模块设计模块图如下,他将系统分为4个层次

36、,每个层次负责的功能相对专一。下面具体介绍各层的功能。l 数据库:本系统采用Access数据库。l 数据访问层:包括数据库连接模块,通用数据访问模块,通用数据命令模块,和特定表相关命令和访问模块群。这层的作用是隔离数据库与系统中的业务逻辑,是数据的变化对系统的影响减到最低。l 功能模块层:包括登录,入库,新建物资,删除物资,出库,归还和报表7个模块。这层的作用是完成系统中的各项业务需求。l 主界面:主界面的作用是保存全局的变量和激活各个业务模块。其中全局变量是每个模块都能够用到的变量。主界面登录模块入库模块新建物资模块删除物资模块出库模块归还模块报表模块和特定表相关的命令和访问模块群数据连接模块数据库通用数据访问模块通用数据命令模块课程设计总结本次课程设计主要是利用VC+实现利于企业管理物资的物资管理系统。通过此次的课程设计我们不仅在对课本知识得到进一步的巩固与熟练更重要的是我们学会了自己分析业务的需求,以及利用VC+设计出合理的数据访问应用程序。本系统是基于数据库的企业单位内的物资管理系统,本系统可以完成物资的入库,出库,借用和归

温馨提示

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

评论

0/150

提交评论