1、VC+ MFC药品销售管理系统设计(含源文件) 作者: 日期:I 个人收集整理 勿做商业用途课 程 设 计设计题目: 高级程序设计课程设计 - 药品销售管理系统 课程设计任务书 课程设计题目: 药品销售管理系统 一、课程设计的原始资料及依据查阅有关资料,进一步理解面向对象程序设计的思想,并利用MFC框架编写一个简单的windows系统.通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力.二、课程设计主要内容及要求设计内容:主要完成药品销售信息的管理1) 实现销售登记,并作相应纪录,将记录保存在文件中2) 实现销售退货,并作相应纪录,将记录保
2、存在文件中3) 实现销售查询4) 实现销售退货查询设计要求:(1)要求利用面向对象的方法以及MFC框架来完成系统的设计;(2)要求在设计的过程中建立清晰的类层次,并画出类图;(3)设计功能满足要求、易于操作的友好界面;(4)界面中需有菜单、工具栏、状态栏;(5)在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;(6)在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。三、对课程设计说明书撰写内容、格式、字数的要求1课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等
3、.一般不应少于3000字。2在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。应做到文理通顺,内容正确完整,书写工整,装订整齐。3设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。4课程设计说明书手写或打印均可.手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅.文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。5课程设计说明书装订顺序为:封面、任务书、成绩评定表、目
4、录、正文、参考文献。四、设计完成后应提交成果的种类、数量、质量等方面的要求1完成“任务书中指定的功能,运行结果正确。2课程设计说明书。五、时间进度安排顺序阶段日期计 划 完 成 内 容备注1第1天进行设计准备,阅读资料,分析设计任务书,明确设计要求、内容和步骤2第24天编写相应的程序代码3第57天程序调试4第89天整理程序,撰写课程设计报告5第10天成绩评定六、主要参考资料(文献)1 王育坚. 主编Visual C+面向对象编程教程(第二版)。 北京:清华大学出版2 陈维兴, 林小茶。C高级程序设计教程. 北京:清华大学出版社3 谭浩强。C程序设计教程。 北京:中国科学技术出版社4 王燕.面向
5、对象的理论与C实践. 北京:清华大学出版社5 马石安, 魏文平。 主编Visual C+程序设计与应用教程。 北京:清华大学出版社6郑莉 董渊 张瑞丰 编着。 C+语言程序设计(第3版)。 北京:清华大学出版社。2006 高级程序设计 课程设计成绩评定表系 (部): 信息工程系 班 级: 学生姓名 : 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0
6、.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘8) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力0。25432工作量工作量饱满,难度适中。0。55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0。35432评阅教师评审成绩(加权分合计乘以4)分加权分合计评 阅 教 师
7、 签 名: 年 月 日答 辩 小 组 评 审 意 见评价内容具 体 要 求权重评 分加权分学生汇报汇报准备充分,思路清晰;语言表达准确,概念清楚,论点正确,有层次,有重点,基本上反映了所完成任务的全部内容;时间符合要求。0。55432答 辩思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。0.55432答辩小组评审成绩(加权分合计乘以8)分加权分合计答辩小组教师签名: 年 月 日课 程 设 计 总 评 成 绩分摘 要伴随着社会的复杂化,传统的“一支笔,一本帐簿”的药品销售管理方式也慢慢的无法适应形势的变化。随着信息技术的发展,计算机已被广泛的用于社会的各个领域,成为
8、推动社会发展的技术动力。而在计算机应用中,软件的作用十分突出,软件已经发展成为信息技术的核心,主导着信息产品的开发和信息技术市场的进一步的开拓。软件产业已成为社会信息化进程中的一个战略性产业。在软件技术的应用中软件的开发技术尤其是应用型软件产品的开发技术成了重中之重。不断开发适应用户需求、市场需要的新型软件产品.随着社会的发展,软件也在不断的更新换代。随着信息化的发展,为了让管理更快捷、更准确,实现商业活动的信息化管理已经成为各个领域的当务之急。我们知道Visual C+有许多组件组成,包括编辑器、编译器、调试器以及程序向导AppWizard、类向导ClassWizard等,这些组件通过一个名
9、为Developer Studio的组件集成为一个和谐的开发环境。利用这个开发环境,我们可以很容易的编写一个应用于一个特定环境的软件系统.本次课设我们小组就是利用这个环境来开发我们的应用系统的。我们的这个系统主要是针对医药管理行业的,主要是用来对药品销售的商业活动进行管理的。应用本系统,我们可以使药品销售管理简单而有效的运行,这就是计算机的优点。下来我来简单介绍一下我们所开发出来的这个系统,在我们的这个系统中,主要有四大方面的功能,即登录系统功能、药品采购管理、药品销售管理、药品退货管理。另外,利用我们利用文件来对数据进行管理,从而使系统更加完善,功能更加强大.关键词:Visual C+、Ap
10、pWizard、ClassWizard、文件、Developer StudioI目 录 摘 要I第1章 绪 论1第2章 系统功能介绍22。1系统功能总框图22.2 模块功能介绍2第3章 文件介绍33。1 文件的总体介绍33。2 保存文件33.3 打开文件4第4章 系统功能实现74.1 系统登录模块的实现74。2 采购模块的实现84.3 销售模块的实现104.4 退货模块的实现15结 论20致 谢21参考文献22附 录 小组内部分工23II第1章 绪 论紧张而又繁忙的课程设计过去了,在这一个星期里,让我尝到了以前我没有体验过的辛苦与劳累。经过本次的课程设计,使我克服了很多在程序设计上的弊端和难点
11、,也让我体会到了冲出重围的幸福与喜悦。编写了几百行的代码最后写出一个程序觉得很有成就感.对Visual C+的掌握提高到了一个新的水平,能够利用Visual C+编程平台编写出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力.掌握了很多新的编程技巧,积累了一些编程经验.世纪之初,以微电子、计算机、软件和通信技术为主导的信息技术革命给我们生存的社会所带来的变化令人目不暇接。Visual C+由许多组件组成,包括编辑器、编译器、调试器、以及程序向导AppWizard、类向导ClassWizard等,这些组件通过一个名为Developer Studio的组件集成为一个和谐的开发环境
12、。这给我们的编程提供了很大的方便。本组选择药品销售管理系统,它可以应用在任何医药企业和和医药销售有关的事业单位的药品销售管理中,为药品销售的各项管理及信息保存提供了一个良好的操作环境,为这些单位提供了很大的方便。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对药品销售进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高企业对药品销售管理的效率,从而使企业取得更大的利润。同时,这也是企业的科学化、正
13、规化管理,与世界接轨的重要条件.我们的课程设计结束了,但是它留给我的印象是不可磨灭的.无论我以后会不会涉及这方面的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多.紧张的设计时光接近收尾,我们的设计成果也达到了设计的要求,我们每个人的心里头都画上了圆满的句号,在这次实践中,让我感受到了团队的力量,无论我们遇到多么大的困难,只要我们齐心协力,没有什么事情可以难倒我们,虽然我们很累,但是我们很满足,因为我们学到了知识,学到了人与人之间更好的配合与合作.、3第2章 系统功能介绍2。1系统功能总框图在本次课程
14、设计中,我们小组所做的课设题目是药品销售管理系统,根据它的基本要求和经过我们查阅相关资料。经过我们组组员之间的讨论研究,最后我们终于制定出了本系统的总体功能.因为我们所做的系统涉及到了销售,所以我们为它设计了四个主要的功能模块,即系统登录管理模块、药品采购管理模块、药品销售管理模块和药品退货管理模块。另外还有两个文件管理模块,即文件的保存和文件的打开。系统总体功能框图如图2.1所示。药品销售管理系统药品采购管理药品销售管理药品退货管理系统登录管理保存文件打开文件图2.1 药品销售管理总框图2。2 模块功能介绍在系统功能总框图中我们已经介绍了我们这个系统的总体功能模块,即系统登录管理模块、药品采
15、购模块、药品销售管理模块、药品退货管理模块、打开文件和保存文件。下面我来具体介绍一下它们。(1)系统登录模块:此模块用来管理系统用户的登录,禁止非法的用户进入系统。(2)药品采购模块:此模块主要用来管理系统药品采购中的一些操作。有药品采购、显示采购的药品列表、显示采购的药品的单个信息和修改已采购药品的信息。(3)药品销售模块:此模块主要用来管理系统药品销售中的一些操作。有销售记录、修改销售的药品信息、显示销售列表、显示单个货物的销售具体信息、计算销售总价和查询系统中当前的销售情况.(4)药品退货模块:此模块主要用来管理系统药品退货中的一些操作。有退货记录、退货列表、修改单个物品的退货信息、查询
16、当前系统的退货情况和计算归还总价。第3章 文件介绍3。1 文件的总体介绍如图3。1所示为本系统的主操作界面。本系统采用文件的方式对系统中的信息进行管理。有保存文件、打开文件和关闭文件等操作。系统中定义一条信息的属性包括:药名、种类、数量、价格,其作为文件保存的基本单位。系统首先采用三组动态数组用来保存信息在内存中的存储,分别用来保存采购信息、销售信息、退货信息。当保存文件时,就将三组信息分别写到三个文件之中。当文件打开时,就将文件中的内容依次读到三个动态数组之中。图3。1 系统总体界面3。2 保存文件(1)当单击保存文件按钮时,系统就会出现如图3。2所示的保存文件的界面.再此界面中,我们可以看
17、到文件被默认为.ALC格式的,这是我们在代码中规定的.文件的保存类型为药品销售文件(*.ALC),这也是我们根据系统的功能设定的。当你选择好保存文件的路径,然后点击确定按钮,文件就可以顺利的被保存到你所选择的位置。当然,在此过程中,你最好能给文件起一个新的名称,因为我们一次性必须保存的文件有三个,即药品采购文件、药品销售文件、药品退货文件。这样就可以防止所要保存的文件被覆盖的情况。图3。2 保存文件界面(2)核心代码bool SinInf::WriteFile(CString &m_OFile,int a) /文件写入函数,参数为要写入的文件路径 CMedManageApp app = (CM
18、edManageApp )AfxGetApp();ofstream OFile(m_OFile);if(OFile。fail())TRACE(”文件创建失败!”);return false;int index=app-single.GetYaoNum(a);for(int i=0;iindex;i+) OFilesingle.GetYao(i,a)YNameendl single。GetYao(i,a)-YKindendl (LPTSTR)(LPCTSTR)app-single.GetYao(i,a)-YNumberendl single.GetYao(i,a)YPriceP3P4;CStri
19、ng TName(P1);CString TKind(P2);CString TNumber(P3);CString TPrice(P4);appsingle.AddYao(TName,TKind,TNumber,TPrice,a);delete P1;delete P2;delete P3;delete P4;IFile。close();return true;21第4章 系统功能实现4.1 系统登录模块的实现(1)在此模块中,主要实现对用户登录系统的管理。我们知道,对于每个软件应用系统都有其特定的使用人员,尤其是用于商业活动的软件系统,就更应该注意它的保密功能,所以我们必须为我们的系统设计
20、一个用于保护本系统的密码登录功能。如图4。1所示为我们药品销售管理系统的登录界面。它所具有的功能是验证用户的登录信息,即用户名和对应的用户密码,检验预进入本系统的用户是不是合法用户。另外,为了加强其安全性,我们设定如果用户输入的非法信息超过三次,系统将强制退出,不允许其登录到主界面。图4.1 登录界面(2)核心代码int nCount=0;while(nCount3)DengLu PassDlg;if(PassDlg。DoModal()=IDOK)if((strcmp(PassDlg.m_UserName,”song”)!=0)(strcmp(PassDlg.m_strPassword,”so
21、ng)!=0)MessageBox(NULL,”用户名或口令错误,请重试!,错误信息”,MB_ICONERROR);nCount+;else break;else return FALSE; if(nCount=3)MessageBox(NULL,口令输入已经超过3次,请退出!, 错误信息”,MB_OKMB_ICONERROR); return FALSE;4。2 采购模块的实现(1)药品销售系统的药品采购功能模块实现药品采购的相关操作,如图4.2 所示.为药品采购功能界面药品采购功能模块由药名、类别、数量、价格组成,此对话框由四个静态文本框、四个可编辑文本框、一个按钮构成,实现采购药品的功能
22、,主要输入购买的药品的药名、类别、数量及价格即可完成,对库存已有的药品不可再进行采购,否则,显示“列表已有该项。图4.2 药品采购功能模块(2)各控件的说明如下:药品:输入销售的药品名,为字符型变量,否则出错类别:输入销售的药品类别,为字符型变量数量:输入销售的药品数量,为整形变量,其值不能小于0,大于采购的数量,否则库存不够,无法进行销售价格:输入销售的药品价格,为整形变量,其值大于0OK按钮:点击,采购完毕,保存到库存(3)核心代码:bool Check1(CString &m_Numberx) /检查是否含不是数字的项 for(int i = 0;i single。GetYaoNum(1
23、);while(Index1-) if(appsingle.GetYao(Index1,1)-YName=m_Name) MessageBox(列表中已经有该项了);Jin=false; if(Jin=true) app-single。AddYao(m_Name,m_Kind,m_Number,m_Price,1); CDialog:OnOK();4.3 销售模块的实现(1)药品销售系统的药品销售功能模块实现药品销售的相关操作,如图4。3所示,为药品销售界面。药品销售功能模块由药名、类别、数量、价格、总价、销售列表和销售详情组成,此对话框由七个静态文本框、四个可编辑文本框、列表和四个按钮构成,
24、实现销售药品的功能,分为售出、查询、修改和退出等功能,在药品采购完之后,从库存里售出相应的药品,如果库存里没有相应药品的采购,则无法进行销售。 图4.3 药品销售界面 (2)各控件的说明如下:药品:输入销售的药品名,为字符型变量,否则出错;类别:输入销售的药品类别,为字符型变量.数量:输入销售的药品数量,为整形变量,其值不能小于0,大于采购的数量,否则库存不够,无法进行销售.价格:输入销售的药品价格,为整形变量,其值大于0.总价:在输入完药品名、类别、数量和价格之后,进行相应的操作时,总价会显示总的价格.销售列表:在输入完药品名、类别、数量和价格,售出药品之后,销售列表会显示当前销售的药品名.
25、销售详单:在售出药品之后,在销售列表中有相应的药品名,而对应的销售记录在销售详单里,通过列表显示出来。售出:在输入完药品名、类别、数量和价格,点击售出,则将相应的药品名和记录添加到销售列表和销售详单里。查询:点击查询按钮之后,销售列表里会显示售出的药品名进行查询,通过销售详单显示相应的记录.修改:只能对销售的数量进行修改,修改成功后将记录添加到销售列表和销售详单里.退出:点击该按钮即实现退出销售界面.(3)核心代码:bool Check(CString m_Numberx) /检查是否含不是数字的项 for(int i = 0;i YName) if(atoi(appsingle.GetYao
26、(Index1,1)YNumber)atoi(m_Number)) MessageBox(库存不够”);Kcheck=false; else JiShu=Index1; Kcheck=true; break; else Kcheck=false; if(Kcheck=true) Index1=appsingle.GetYaoNum(2); while(Index1) if(appsingle。GetYao(Index1,2)YName=m_Name) MessageBox(”列表中已经有该项了); Jin=false; if(Jin=true) appsingle.AddYao(m_Name,
27、m_Kind,m_Number,m_Price,2); int temp=atoi(appsingle.GetYao(JiShu,1)-YNumber)atoi(m_Number); appsingle.GetYao(JiShu,1)-YNumber.Format(”d,temp); m_Total。Format(”d,atoi(m_Number)*atoi(m_Price); UpdateData(false); int Index; Index=appsingle.GetYaoNum(2); m_XiaoList。ResetContent(); /列表清空 for(int i=0;iYNa
28、me); else MessageBox(库存中没有此货物”); MessageBox(库存中还没有此货物); void Sell:OnOK() CDialog:OnOK();void Sell:OnSelchangeList1() CMedManageApp *app = (CMedManageApp *)AfxGetApp();int nIndex=m_XiaoList。GetCurSel();m_SingXiao。ResetContent();if(nIndex!=LB_ERR) m_SingXiao.AddString(app-single。GetYao(nIndex,2)-YName
29、); m_SingXiao.AddString(app-single。GetYao(nIndex,2)YKind); m_SingXiao。AddString(app-single。GetYao(nIndex,2)-YNumber); m_SingXiao。AddString(app-single。GetYao(nIndex,2)YPrice); m_Name=app-single。GetYao(nIndex,2)YName; m_Kind=app-single.GetYao(nIndex,2)YKind; m_Number=appsingle。GetYao(nIndex,2)YNumber;
30、 m_Price=app-single。GetYao(nIndex,2)YPrice; UpdateData(false);void Sell::OnButsearch() int Index;CMedManageApp *app = (CMedManageApp *)AfxGetApp(); Index=app-single.GetYaoNum(2);m_XiaoList。ResetContent(); /列表清空 for(int i=0;iIndex;i+) /逐条加入信息 m_XiaoList.AddString(appsingle.GetYao(i,2)-YName);void Sel
31、l:OnButalter() UpdateData(true);CMedManageApp app = (CMedManageApp )AfxGetApp(); int nIndex=m_XiaoList.GetCurSel();CString temp;if(nIndex!=LB_ERR) temp=app-single。GetYao(nIndex,2)YNumber; app-single。GetYao(nIndex,2)-YName=m_Name; appsingle。GetYao(nIndex,2)-YKind=m_Kind; appsingle。GetYao(nIndex,2)-YN
32、umber=m_Number; app-single.GetYao(nIndex,2)YPrice=m_Price; int nIndex1=appsingle。GetYaoNum(1); while(nIndex1-) if(app-single.GetYao(nIndex1,1)YName=m_Name) int temp1=atoi(appsingle。GetYao(nIndex1,1)YNumber)+atoi(temp)atoi(m_Number); appsingle。GetYao(nIndex1,1)YNumber。Format(d”,temp1); m_Total。Format
33、(”d”,atoi(m_Number)*atoi(m_Price);break; UpdateData(false);4.4 退货模块的实现(1)药品销售系统的退货功能模块,如图4。4所示,为退货功能界面。本功能界面由六个静态文本框、五个可编辑文本框、一个不可编辑文本框和四个按钮组成的。在退货这一功能模块中,主要有三大功能来实现药品的退货功能,分别是归还、查询和修改功能。其中在第一次归还药品的前提是,作为药品管理者,只有销售给客户才能实现退货,否则是不能进行退货的。图4.4 退货功能模块界面(2)各控件的说明如下药名:输入要退货的药品名称,字符型变量m_Name。类别:输入药品的类别,如处方类
34、和非处方类等,字符型变量m_Kind。数量:输入要退货药品的数量,整形变量m_Number,其值为小于销售的数量并且不小于0.(如果在本栏输入其他类型变量会出现报错警告)价格:输入药品的退货价格,整形变量m_Price,其值为大于等于0。(如果在本栏输入其他类型变量会出现报错警告)应归还金额:系统自动计算出应退还给客户药品的金额,整形变量m_Money.退货列表:显示退货信息,包括药名、类别、数量和价格。归还:再输入退货信息后,点击该按钮,实现退货功能。查询:点击该按钮,可以查询已退货的相关信息.修改:在第一次归还按钮后,想继续退货相同的药品,点击该按钮,此时只能改变药品的数量和价格但不能修改其他信息。退出:点击该按钮将推出退货这一功能模块.(3)核心代码bool Check2(CString &m_Numberx) /检查是否含不是数字的项 for(int i = 0;i m_Numberx.GetLength();i+)if(!isdigit(m_Nu