基于C++实现的药品销售管理系统

点击获取源码资源

一、课程设计的原始资料及依据

查阅有关资料,进一步理解面向对象程序设计的思想,并利用MFC框架编写一个简单的windows系统。通过本设计可以加深理解使用面向对象程序设计思想开发一个系统的方法,提高分析问题、解决问题和实际动手的能力。

二、课程设计主要内容及要求

设计内容:
主要完成药品销售信息的管理
1)实现销售登记,并作相应纪录,将记录保存在文件中
2)实现销售退货,并作相应纪录,将记录保存在文件中
3)实现销售查询
4)实现销售退货查询
设计要求:
(1)要求利用面向对象的方法以及MFC框架来完成系统的设计;
(2)要求在设计的过程中建立清晰的类层次,并画出类图;
(3)设计功能满足要求、易于操作的友好界面;
(4)界面中需有菜单、工具栏、状态栏;
(5)在系统的设计中,至少要用到面向对象的一种机制:继承、多态等;
(6)在完成该题目时,小组人员进行详细的任务分工,并要在报告中体现出来。
三、对课程设计说明书撰写内容、格式、字数的要求
1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。一般不应少于3000字。
2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
4.课程设计说明书手写或打印均可。手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。
四、设计完成后应提交成果的种类、数量、质量等方面的要求
1.完成“任务书”中指定的功能,运行结果正确。
2.课程设计说明书。

五、时间进度安排
顺序 阶段日期 计 划 完 成 内 容 备注
1 第1天 进行设计准备,阅读资料,分析设计任务书,明确设计要求、内容和步骤
2 第2—4天 编写相应的程序代码
3 第5—7天 程序调试
4 第8—9天 整理程序,撰写课程设计报告
5 第10天 成绩评定
六、主要参考资料(文献)
[1] 王育坚. 主编《Visual C++面向对象编程教程》(第二版). 北京:清华大学出版
[2] 陈维兴, 林小茶.《C++高级程序设计教程》. 北京:清华大学出版社
[3] 谭浩强.《C++程序设计教程》. 北京:中国科学技术出版社
[4] 王燕.《面向对象的理论与C++实践》. 北京:清华大学出版社
[5] 马石安, 魏文平. 主编《Visual C++程序设计与应用教程》. 北京:清华大学出版社
[6]郑莉 董渊 张瑞丰 编着. 《C++语言程序设计》(第3版). 北京:清华大学出版社.2006

摘 要

伴随着社会的复杂化,传统的“一支笔,一本帐簿”的药品销售管理方式也慢慢的无法适应形势的变化。随着信息技术的发展,计算机已被广泛的用于社会的各个领域,成为推动社会发展的技术动力。而在计算机应用中,软件的作用十分突出,软件已经发展成为信息技术的核心,主导着信息产品的开发和信息技术市场的进一步的开拓。软件产业已成为社会信息化进程中的一个战略性产业。在软件技术的应用中软件的开发技术尤其是应用型软件产品的开发技术成了重中之重。不断开发适应用户需求、市场需要的新型软件产品。随着社会的发展,软件也在不断的更新换代。随着信息化的发展,为了让管理更快捷、更准确,实现商业活动的信息化管理已经成为各个领域的当务之急。
我们知道Visual C++有许多组件组成,包括编辑器、编译器、调试器以及程序向导AppWizard、类向导ClassWizard等,这些组件通过一个名为Developer Studio的组件集成为一个和谐的开发环境。利用这个开发环境,我们可以很容易的编写一个应用于一个特定环境的软件系统。
本次课设我们小组就是利用这个环境来开发我们的应用系统的。我们的这个系统主要是针对医药管理行业的,主要是用来对药品销售的商业活动进行管理的。应用本系统,我们可以使药品销售管理简单而有效的运行,这就是计算机的优点。下来我来简单介绍一下我们所开发出来的这个系统,在我们的这个系统中,主要有四大方面的功能,即登录系统功能、药品采购管理、药品销售管理、药品退货管理。另外,利用我们利用文件来对数据进行管理,从而使系统更加完善,功能更加强大。

关键词:Visual C++、AppWizard、ClassWizard、文件、Developer Studio

目 录

摘 要 I
第1章 绪 论 1
第2章 系统功能介绍 2
2.1系统功能总框图 2
2.2 模块功能介绍 2
第3章 文件介绍 3
3.1 文件的总体介绍 3
3.2 保存文件 3
3.3 打开文件 4
第4章 系统功能实现 7
4.1 系统登录模块的实现 7
4.2 采购模块的实现 8
4.3 销售模块的实现 10
4.4 退货模块的实现 15
结 论 20
致 谢 21
参考文献 22
附 录 小组内部分工 23

第1章 绪 论

紧张而又繁忙的课程设计过去了,在这一个星期里,让我尝到了以前我没有体验过的辛苦与劳累。经过本次的课程设计,使我克服了很多在程序设计上的弊端和难点,也让我体会到了冲出重围的幸福与喜悦。
编写了几百行的代码最后写出一个程序觉得很有成就感。对Visual C++的掌握提高到了一个新的水平,能够利用Visual C++编程平台编写出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力。掌握了很多新的编程技巧,积累了一些编程经验。
世纪之初,以微电子、计算机、软件和通信技术为主导的信息技术革命给我们生存的社会所带来的变化令人目不暇接。Visual C++由许多组件组成,包括编辑器、编译器、调试器、以及程序向导AppWizard、类向导ClassWizard等,这些组件通过一个名为Developer Studio的组件集成为一个和谐的开发环境。这给我们的编程提供了很大的方便。本组选择药品销售管理系统,它可以应用在任何医药企业和和医药销售有关的事业单位的药品销售管理中,为药品销售的各项管理及信息保存提供了一个良好的操作环境,为这些单位提供了很大的方便。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对药品销售进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高企业对药品销售管理的效率,从而使企业取得更大的利润。同时,这也是企业的科学化、正规化管理,与世界接轨的重要条件。
我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及这方面的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。
紧张的设计时光接近收尾,我们的设计成果也达到了设计的要求,我们每个人的心里头都画上了圆满的句号,在这次实践中,让我感受到了团队的力量,无论我们遇到多么大的困难,只要我们齐心协力,没有什么事情可以难倒我们,虽然我们很累,但是我们很满足,因为我们学到了知识,学到了人与人之间更好的配合与合作。

第2章 系统功能介绍

2.1系统功能总框图

在本次课程设计中,我们小组所做的课设题目是药品销售管理系统,根据它的基本要求和经过我们查阅相关资料。经过我们组组员之间的讨论研究,最后我们终于制定出了本系统的总体功能。因为我们所做的系统涉及到了销售,所以我们为它设计了四个主要的功能模块,即系统登录管理模块、药品采购管理模块、药品销售管理模块和药品退货管理模块。另外还有两个文件管理模块,即文件的保存和文件的打开。系统总体功能框图如图2.1所示。

在这里插入图片描述

图2.1 药品销售管理总框图

2.2 模块功能介绍

在系统功能总框图中我们已经介绍了我们这个系统的总体功能模块,即系统登录管理模块、药品采购模块、药品销售管理模块、药品退货管理模块、打开文件和保存文件。下面我来具体介绍一下它们。
(1)系统登录模块:此模块用来管理系统用户的登录,禁止非法的用户进入系统。
(2)药品采购模块:此模块主要用来管理系统药品采购中的一些操作。有药品采购、显示采购的药品列表、显示采购的药品的单个信息和修改已采购药品的信息。
(3)药品销售模块:此模块主要用来管理系统药品销售中的一些操作。有销售记录、修改销售的药品信息、显示销售列表、显示单个货物的销售具体信息、计算销售总价和查询系统中当前的销售情况。
(4)药品退货模块:此模块主要用来管理系统药品退货中的一些操作。有退货记录、退货列表、修改单个物品的退货信息、查询当前系统的退货情况和计算归还总价。

第3章 文件介绍

3.1 文件的总体介绍

如图3.1所示为本系统的主操作界面。本系统采用文件的方式对系统中的信息进行管理。有保存文件、打开文件和关闭文件等操作。系统中定义一条信息的属性包括:药名、种类、数量、价格,其作为文件保存的基本单位。系统首先采用三组动态数组用来保存信息在内存中的存储,分别用来保存采购信息、销售信息、退货信息。当保存文件时,就将三组信息分别写到三个文件之中。当文件打开时,就将文件中的内容依次读到三个动态数组之中。

在这里插入图片描述

图3.1 系统总体界面

3.2 保存文件

(1)当单击保存文件按钮时,系统就会出现如图3.2所示的保存文件的界面。再此界面中,我们可以看到文件被默认为.ALC格式的,这是我们在代码中规定的。文件的保存类型为药品销售文件(*.ALC),这也是我们根据系统的功能设定的。当你选择好保存文件的路径,然后点击确定按钮,文件就可以顺利的被保存到你所选择的位置。当然,在此过程中,你最好能给文件起一个新的名称,因为我们一次性必须保存的文件有三个,即药品采购文件、药品销售文件、药品退货文件。这样就可以防止所要保存的文件被覆盖的情况。

在这里插入图片描述

图3.2 保存文件界面

(2)核心代码

bool SinInf::WriteFile(CString &m_OFile,int a)  //文件写入函数,参数为要写入的文件路径 
{
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
	ofstream OFile(m_OFile);	
	if(OFile.fail())
	{
		TRACE("文件创建失败!");
		return false;
	}
	int index=app->single.GetYaoNum(a);
	for(int i=0;i<index;i++)
		{			 OFile<<(LPTSTR)(LPCTSTR)app->single.GetYao(i,a)->YName<<endl
				 <<(LPTSTR)(LPCTSTR)app->single.GetYao(i,a)->YKind<<endl
				 <<(LPTSTR)(LPCTSTR)app->single.GetYao(i,a)->YNumber<<endl
				 <<(LPTSTR)(LPCTSTR)app->single.GetYao(i,a)->YPrice<<endl;
		}
	OFile.close();
	return true;
}

3.3 打开文件

(1)当点击从文件中打开按钮时,将会出现如图3.3所示的打开文件的界面。此界面虽然和保存文件界面相似,但其功能大不相同。当你单击你所要打开的文件时,文件名就会显示在文件名一栏中。然后单击打开按钮,文件就可以顺利的被保存在内存当中。当然,因为本系统有三个文件,所以每次必须依次性打开三个文件。

在这里插入图片描述

图3.3 打开文件界面

(2)核心代码

bool SinInf::ReadFile(CString &m_IFile,int a) //文件读入函数,参数为要读入的文件路径 
{
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
	ifstream IFile(m_IFile);
	if(IFile.fail())
	{
		TRACE("文件打开失败!");
		return false;
	}
	while(!IFile.eof())   //eof() 测试文件是否结束 
	{
		char *P1 = new char [20];
		char *P2 = new char [20];
		char *P3 = new char [20];
		char *P4 = new char [20];
		IFile>>P1>>P2>>P3>>P4;
		CString TName(P1);
		CString TKind(P2);
		CString TNumber(P3);
		CString TPrice(P4);
		app->single.AddYao(TName,TKind,TNumber,TPrice,a);
		delete []P1;
		delete []P2;
		delete []P3;
		delete []P4;
	}
	IFile.close();
	return true;
}

第4章 系统功能实现

4.1 系统登录模块的实现

(1)在此模块中,主要实现对用户登录系统的管理。我们知道,对于每个软件应用系统都有其特定的使用人员,尤其是用于商业活动的软件系统,就更应该注意它的保密功能,所以我们必须为我们的系统设计一个用于保护本系统的密码登录功能。如图4.1所示为我们药品销售管理系统的登录界面。它所具有的功能是验证用户的登录信息,即用户名和对应的用户密码,检验预进入本系统的用户是不是合法用户。另外,为了加强其安全性,我们设定如果用户输入的非法信息超过三次,系统将强制退出,不允许其登录到主界面。
在这里插入图片描述

图4.1 登录界面

(2)核心代码

int nCount=0;
while(nCount<3)
{
DengLu PassDlg;
if(PassDlg.DoModal()==IDOK)
if((strcmp(PassDlg.m_UserName,"song")!=0)||
(strcmp(PassDlg.m_strPassword,"song")!=0))
{
MessageBox(NULL,"用户名或口令错误,请重试!","错误信息",MB_ICONERROR);
nCount++;
}
else
          break;
else
          {
              return FALSE;
          }
}
if(nCount>=3)
{
MessageBox(NULL,"口令输入已经超过3次,请退出!",
                 "错误信息",MB_OK|MB_ICONERROR);
     return FALSE;
}

4.2 采购模块的实现

(1)药品销售系统的药品采购功能模块实现药品采购的相关操作,如图4.2 所示。为药品采购功能界面药品采购功能模块由药名、类别、数量、价格组成,此对话框由四个静态文本框、四个可编辑文本框、一个按钮构成,实现采购药品的功能,主要输入购买的药品的药名、类别、数量及价格即可完成,对库存已有的药品不可再进行采购,否则,显示“列表已有该项”。

在这里插入图片描述

图4.2 药品采购功能模块

(2)各控件的说明如下:
药品:输入销售的药品名,为字符型变量,否则出错
类别:输入销售的药品类别,为字符型变量
数量:输入销售的药品数量,为整形变量,其值不能小于0,大于采购的数量,否则库存不够,无法进行销售
价格:输入销售的药品价格,为整形变量,其值大于0
OK按钮:点击,采购完毕,保存到库存
(3)核心代码:

bool Check1(CString &m_Numberx) //检查是否含不是数字的项 
{
	      for(int i = 0;i <m_Numberx.GetLength();i++)
	    {
		    if(!isdigit(m_Numberx[i]))
			return false;
	    }
	     return true;
}
void GouMai::OnOK() 
{
	UpdateData(true);
	int Index1;
	bool Jin=true;
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
    
	if(m_Name.IsEmpty())  //若药名栏为空 
	{
		MessageBox("请输入药名!");
	}
	else if(m_Kind.IsEmpty()) //若类别栏为空 
	{
		MessageBox("请输入药品类别!");
	}
	else if(!Check1(m_Number))  //若类别栏中含非法字符 
	{
		MessageBox("数据栏含非法字符!");
	}
    else
	{
	Index1=app->single.GetYaoNum(1);
	while(Index1--)
	{
	    if(app->single.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所示,为药品销售界面。药品销售功能模块由药名、类别、数量、价格、总价、销售列表和销售详情组成,此对话框由七个静态文本框、四个可编辑文本框、列表和四个按钮构成,实现销售药品的功能,分为售出、查询、修改和退出等功能,在药品采购完之后,从库存里售出相应的药品,如果库存里没有相应药品的采购,则无法进行销售。

在这里插入图片描述

                               图4.3 药品销售界面

(2)各控件的说明如下:
药品:输入销售的药品名,为字符型变量,否则出错;
类别:输入销售的药品类别,为字符型变量。
数量:输入销售的药品数量,为整形变量,其值不能小于0,大于采购的数量,否则库存不够,无法进行销售。
价格:输入销售的药品价格,为整形变量,其值大于0。
总价:在输入完药品名、类别、数量和价格之后,进行相应的操作时,总价会显示总的价格。
销售列表:在输入完药品名、类别、数量和价格,售出药品之后,销售列表会显示当前销售的药品名。
销售详单:在售出药品之后,在销售列表中有相应的药品名,而对应的销售记录在销售详单里,通过列表显示出来。
售出:在输入完药品名、类别、数量和价格,点击售出,则将相应的药品名和记录添加到销售列表和销售详单里。
查询:点击查询按钮之后,销售列表里会显示售出的药品名进行查询,通过销售详单显示相应的记录。
修改:只能对销售的数量进行修改,修改成功后将记录添加到销售列表和销售详单里。
退出:点击该按钮即实现退出销售界面。
(3)核心代码:

bool Check(CString &m_Numberx) //检查是否含不是数字的项 
{
	for(int i = 0;i <m_Numberx.GetLength();i++)
	{
		if(!isdigit(m_Numberx[i]))
			return false;
	}
	return true;
}
void Sell::OnTotal() 
{
    UpdateData(true);
	int Index1,JiShu;
	bool Jin=true,Kcheck=true;
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
    
	if(m_Name.IsEmpty())  //若药名栏为空 
	{
		MessageBox("请输入药名!");
	}
	else if(m_Kind.IsEmpty()) //若类别栏为空 
	{
		MessageBox("请输入药品类别!");
	}
	else if(!Check(m_Number))  //若类别栏中含非法字符 
	{
		MessageBox("数据栏含非法字符!");
	}
	else if(!Check(m_Price))  //若类别栏中含非法字符 
	{
		MessageBox("价格栏含非法字符!");
	}
	
    else
	{
	  Index1=app->single.GetYaoNum(1);
	  if(Index1)
	  { while(Index1--)
	   {
	       if(m_Name==app->single.GetYao(Index1,1)->YName)
		   {
		     if(atoi(app->single.GetYao(Index1,1)->YNumber)<atoi(m_Number))
			 {MessageBox("库存不够");Kcheck=false;}
		     else
			  JiShu=Index1;
			 Kcheck=true;
             break;
		   }
		   else
			   Kcheck=false;
	   } 
	   if(Kcheck==true)
	   {
	      Index1=app->single.GetYaoNum(2);
	      while(Index1--)
		  {
	         if(app->single.GetYao(Index1,2)->YName==m_Name)
			 { 
		    	MessageBox("列表中已经有该项了");
		    	Jin=false;
			 }
		  }  
          if(Jin==true)
		  { 
	          app->single.AddYao(m_Name,m_Kind,m_Number,m_Price,2);
              int temp=atoi(app->single.GetYao(JiShu,1)->YNumber)-atoi(m_Number);
			  app->single.GetYao(JiShu,1)->YNumber.Format("%d",temp);
			  m_Total.Format("%d",atoi(m_Number)*atoi(m_Price));
			  UpdateData(false);
		  } 
	      int Index;
          Index=app->single.GetYaoNum(2);
	      m_XiaoList.ResetContent(); //列表清空 
	      for(int i=0;i<Index;i++)//逐条加入信息 
		  {   
		      m_XiaoList.AddString(app->single.GetYao(i,2)->YName);
		  }
	   }
	   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);
	     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=app->single.GetYao(nIndex,2)->YNumber;
         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;i<Index;i++) //逐条加入信息 
	{   
	     m_XiaoList.AddString(app->single.GetYao(i,2)->YName);
	}
}
void Sell::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;
         app->single.GetYao(nIndex,2)->YKind=m_Kind;
		 app->single.GetYao(nIndex,2)->YNumber=m_Number;
         app->single.GetYao(nIndex,2)->YPrice=m_Price;
		 int nIndex1=app->single.GetYaoNum(1);
		 while(nIndex1--)
		 {
		     if(app->single.GetYao(nIndex1,1)->YName==m_Name)
			 {
			    int temp1=atoi(app->single.GetYao(nIndex1,1)->YNumber)+atoi(temp)-atoi(m_Number);
	            app->single.GetYao(nIndex1,1)->YNumber.Format("%d",temp1);
	            m_Total.Format("%d",atoi(m_Number)*atoi(m_Price));
				break;
			 }
		 }
	     
	}
	
	UpdateData(false);
}

4.4 退货模块的实现

(1)药品销售系统的退货功能模块,如图4.4所示,为退货功能界面。本功能界面由六个静态文本框、五个可编辑文本框、一个不可编辑文本框和四个按钮组成的。在退货这一功能模块中,主要有三大功能来实现药品的退货功能,分别是归还、查询和修改功能。其中在第一次归还药品的前提是,作为药品管理者,只有销售给客户才能实现退货,否则是不能进行退货的。
在这里插入图片描述

图4.4 退货功能模块界面

(2)各控件的说明如下
药名:输入要退货的药品名称,字符型变量m_Name。
类别:输入药品的类别,如处方类和非处方类等,字符型变量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_Numberx[i]))
			return false;
	}
	return true;
}
void Back::OnButhuan() 
{
UpdateData(true);
	int Index1,JiShu;
	bool Jin=true,Kcheck=true;
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
   if(m_Name.IsEmpty())  //若药名栏为空 
	{
		MessageBox("请输入药名!");
	}
	else if(m_Kind.IsEmpty()) //若类别栏为空 
	{
		MessageBox("请输入药品类别!");
	}
	else if(!Check2(m_Number))  //若类别栏中含非法字符 
	{
		MessageBox("数据栏含非法字符!");
	}
	else if(!Check2(m_Price))  //若类别栏中含非法字符 
	{
		MessageBox("价格栏含非法字符!");
	}
	
    else
	{
	  Index1=app->single.GetYaoNum(2);
		    if(Index1)
		{
	  while(Index1--)
	   {
		   
	       if(m_Name==app->single.GetYao(Index1,2)->YName)
		   {
if(atoi(app->single.GetYao(Index1,2)->YNumber)<atoi(m_Number))
			 {MessageBox("退货过多");Kcheck=false;}
		     else
			 JiShu=Index1;
			 Kcheck=true;
             break;
		   }

		   else
			   Kcheck=false;
	   } 
	   if(Kcheck==true)
	   {
	      Index1=app->single.GetYaoNum(3);
	      while(Index1--)
		  {
	         if(app->single.GetYao(Index1,3)->YName==m_Name)
			 { 
		    	MessageBox("列表中已经有该项了");
		    	Jin=false;
			 }
		  }  
          if(Jin==true)
		  { 
	          app->single.AddYao(m_Name,m_Kind,m_Number,m_Price,3);
              int temp=atoi(app->single.GetYao(JiShu,2)->YNumber)-atoi(m_Number);//修改退货列表
			  app->single.GetYao(JiShu,2)->YNumber.Format("%d",temp); 
			  Index1=app->single.GetYaoNum(1);
	          while(Index1--)
			  {
	             if(app->single.GetYao(Index1,1)->YName==m_Name)
				 {
		            int temp1=atoi(app->single.GetYao(Index1,1)->YNumber)+atoi(m_Number);//修改库存
			        app->single.GetYao(Index1,1)->YNumber.Format("%d",temp1);
                    break;
				 }
			  } 
			  m_Money.Format("%d",atoi(m_Number)*atoi(m_Price));
			  UpdateData(false);
		  } 
	      int Index;
          Index=app->single.GetYaoNum(3);
	      m_BackList.ResetContent(); //列表清空 
	      for(int i=0;i<Index;i++) //逐条加入信息 
		  {   
		      m_BackList.AddString(app->single.GetYao(i,3)->YName);
		  }
	   }
	   else
		   MessageBox("销售列表中没有此货物");
		}
		 MessageBox("销售列表中还没有货物");
	 }
}

void Back::OnButcheck() 
{
	int Index;
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
    Index=app->single.GetYaoNum(3);
	m_BackList.ResetContent(); //列表清空 
	for(int i=0;i<Index;i++) //逐条加入信息 
	{   
	     m_BackList.AddString(app->single.GetYao(i,3)->YName);
	}
}

void Back::OnSelchangeList1() 
{
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
	int nIndex=m_BackList.GetCurSel();
	if(nIndex!=LB_ERR)
	{
         m_Name=app->single.GetYao(nIndex,3)->YName;
         m_Kind=app->single.GetYao(nIndex,3)->YKind;
	     m_Number=app->single.GetYao(nIndex,3)->YNumber;
         m_Price=app->single.GetYao(nIndex,3)->YPrice;
	}
	 UpdateData(false);
}
void Back::OnButalter() 
{
	UpdateData(true);
	CMedManageApp *app = (CMedManageApp *)AfxGetApp();
	int nIndex=m_BackList.GetCurSel();
	CString temp;
	if(nIndex!=LB_ERR)
	{
	 	 temp=app->single.GetYao(nIndex,3)->YNumber;
		  int nIndex1=app->single.GetYaoNum(2),nIndex2=app->single.GetYaoNum(1);
		 while(nIndex1--)
		 {
		     if(app->single.GetYao(nIndex1,2)->YName==m_Name)
			 {
			    int temp1=atoi(app->single.GetYao(nIndex1,2)->YNumber)+atoi(m_Number)-atoi(temp);				app->single.GetYao(nIndex1,2)->YNumber.Format("%d",temp1);
				while(nIndex2--)
				{
				    if(app->single.GetYao(nIndex1,1)->YName==m_Name)
					{
	        atoi(app->single.GetYao(nIndex1,1)->YNumber)+atoi(m_Number)-atoi(temp);						app->single.GetYao(nIndex1,2)->YNumber.Format("%d",(atoi(app->single.GetYao(nIndex1,1)->YNumber)+atoi(m_Number)-atoi(temp)));
					break;}
				}
	            m_Money.Format("%d",atoi(m_Number)*atoi(m_Price));
				break;
			 }
		 }
         app->single.GetYao(nIndex,3)->YName=m_Name;
         app->single.GetYao(nIndex,3)->YKind=m_Kind;
		 app->single.GetYao(nIndex,3)->YNumber=m_Number;
         app->single.GetYao(nIndex,3)->YPrice=m_Price;
	}	
}

结 论

时间就像流水,一去不复返。经过这样两周的C++课设,不但使我了解了许多专业方面的知识,也增强了我动手能力。
在课设中,我们小组的同学都很认真。也就是说,知识宝贵,团队精神同样可贵,我想任务分组完成就是出于这样的考虑吧,团队合作不是把任务简单分开就能实现的。每个人学习知识的侧重点不尽相同,每人解决问题的思路也不一样,几个人相互讨论,相互辩论的过程中往往会产生出人意料的好想法,也许这就叫做灵感。分歧过后达成共识,团结协作,最终使我们达成了共识。
在做C++课设时我们组主要分为几个部分,包括登陆界面,采购药物,销售药物,退货,文件存储等功能。对于登陆界面的设置我们想一些结构最终我们采用了我们学过的登陆界面形式。我们对用户名和密码进行设置。如果用户名或密码有一个不正确将弹出错误信息对话框。从新输入用户名和密码当我们输入错误超过三次将推出登陆对话框。
登陆成功后我们将进入销售主界面这个界面中有采购、销售、退货、保存文件等文件。以采购为例,当我们点击采购按钮时,会弹出采购对话框。我们将输入药品名、类别、数量和价格,当我们输入结束后点击OK就采购成功。销售和退货也同样如此。但是我们的程序仍然存在不完善的地方,像销售功能的销售按钮只能销售一次。如果在想销售只能点击修改按钮对再次销售的药品的数量进行修改。但是我们都尽了自己最大的努力,不断的将功能完善。
“书到用时方恨少!”每一门专业基础课都是我们手中不可替代的武器,只有把他们有机联系起来才有可能实现一个完整的功能,本次课设使我体会到只有付出才会有收获,只有平日认真学习关键时刻才会不捉襟见肘,只有团结一致才会成功,只有互助才会顺利
在课设过程中,只有自己亲手动手,不管它是否有结果。你要学的是知识,是解决问题的方法和思想,要端正学习态度,一时的成败不足以论英雄,每一次突破都是一种收获,就是在这样的过程中我们才能不断提高。在从开始接到课设结束,再到报告的完成,每走一步都渗透着努力和汗水。在收获知识的同时收获快乐。

致 谢

本次课程设计的选题,研究及论文的撰写均是在我们的指导教师的细心指导下进行的。设计中的每一个环节无不凝聚着老师的心血。在整个课程设计中老师对我们细心指导和帮助也是我们能够顺利完成此次课程设计任务的有力保障。而老师在我们面对问题的时候对我们虑心的指导和帮助及其他严谨的工作态度锐意创新的精神,使我们受益匪浅,在此特别向老师表示深深的感谢和由衷的敬意。
在这里,我想感谢张楠老师对我们的细心指导和帮助,让我们在整个课程设计过程中体会和学到了很多东西。同时本次C++程序设计也是在他们的细心指导下才得以顺利完成的。在我们课程设计期间,导师渊博的学识、严谨求实的科学精神、一丝不苟的治学态度和高尚的品格,深深的感染了我和每一个同学。程序的每次改动都离不开老师的辛勤工作,从各个方面来说,审查的工作往往比编写任务更复杂。正是导师百忙中不辞劳苦的帮助,才使我能够顺利完成这次课程设计。
想一想这两周的课程设计,如果没有老师的指导,我们也不会取得如此大的成绩,所以我们对两位指导老师深深的道一声“谢谢老师,老师您辛苦了!”。
在整个课程设计过程中,我们遇到了很多的困难。但我们小组所有成员并为因此而气馁,而是积极的去面对各种困难。在整个过程中我们查阅了大量的资料,也向老师和一些同学进行了虑心的请教。这让我体会到了一个团队的合作精神,也知道学校让我们课程设计的目的,它并不单单是考验一个学生的学习情况,同时也考验一个人的团队合作精神,只有很好的合作才能更好的完成这次C++课程设计,这对我们日后工作是有很大的帮助,我们也要感谢学校为我们提供这样一个团队合作的机会。
我要向这些帮助过我们的老师和同学表示感谢。老师在整个C++课程设计过程中帮助我解决了不少的难题,使得实验过程能顺利的进行。老师无论在理论上还是在实践中,都给予与我巨大的帮助和鼓励,并深入浅出的为我细心讲解C++的各方面知识,并把其它知识也扩展的讲解给我,这使我得到不少的长进,这对于我以后的工作和学习都起着巨大的影响。老师们的传道授业,不仅使我们开阔了视野,拓宽了思路,增长了学识,而且为我们今后的工作和学习打下了牢固的基础,也使增强我们对计算机的兴趣。
最后,我们再次对张楠老师表示衷心的感谢。在大学中我们也拥有一群共同学习和生活的同学,以及对我们有着深远影响的老师,这些都是我们在今后的学习或工作中的宝贵财富。在最后我们要在次感谢我们的学校以及对我们有深远影响的老师和同学们。祝你们今后的日子里一帆风顺,开心幸福。在这里谨以此文献给他们。

参考文献

[1]《Visual C++面向对象编程教程》 王育坚编著 清华大学出版社
[2]《Visual C++6.0时尚编程百例》 网冠科技编著 机械工业出版社
[3]《Visual C++6.0信息管理系统开发实例导航》求是科技编著 人民邮电出版社
[4]《C++高级程序设计教程》 陈维兴, 林小茶编著 清华大学出版社
[5]《C++程序设计教程》 谭浩强编著 中国科学技术出版社
[6]《面向对象的理论与C++实践》 王燕编著 清华大学出版社
[7]《Visual C++程序设计与应用教程》马石安, 魏文平编著 清华大学出版社
[8]《C++语言程序设计》 郑莉 董渊 张瑞丰 编著 清华大学出版社

点击获取源码资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒月玖.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值