整理药品进销存系统.docx
《整理药品进销存系统.docx》由会员分享,可在线阅读,更多相关《整理药品进销存系统.docx(24页珍藏版)》请在冰豆网上搜索。
![整理药品进销存系统.docx](https://file1.bdocx.com/fileroot1/2023-4/16/553d375e-3aa8-4d01-861f-4c3d3391f5e9/553d375e-3aa8-4d01-861f-4c3d3391f5e91.gif)
整理药品进销存系统
药品进销存系统
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(药品进销存系统)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为药品进销存系统的全部内容。
药品进销存系统
需求分析:
设计药品进销存系统并分为六个功能模块.主要用来管理一个小型的药品销售公司。
主要有药品的入库、出库,供货商的管理,,客户管理以及必要的库存检索。
系统用orcal管理数据库,通过MFC实现软件界面可视化,通过函数连接数据库,实现对数据库的基本操作,下面具体分析每个功能模块:
药品清单:
可以建立一张表用于存放药品相关信息。
药品的相关信息包括:
货号、药品名称、类型、进价、售价、生产日期以及有效期至。
可以添加一条记录到药品清单中,也可以删除一条记录,也可以显示药品清单中所有的记录项,实现对这张表的简单管理。
供货商清单:
可以建立一张表存放供货商的相关信息。
供货商清单的相关数据项包括:
供货商号、供货商名称、供货商地点、联系电话。
可以添加一条记录到供货商清单表中,也可以删除掉一条记录,也可以显示供货商清单中的所有记录,实现对供货商信息的简单管理。
客户清单:
可以建立一张表存放客户的相关信息。
客户清单的相关数据项包括:
客户编号、客户名称、地点、电话。
可以添加一条记录到客户清单表中,也可以删除掉一条记录,也可以显示客户清单中的所有记录,实现对客户信息的简单管理.
进货单:
当有药品入库时,进货单中要增加一条相关记录,以记录药品入库信息。
进货单包括的数据项有:
编号、供货商号、货号、仓库、进货数量以及进货日期,进货单中可以增加上一条记录,但是不可以删除一条记录,可以显示进货单中的所有记录,实现对进货单的相关管理.
售货单:
当有药品出库时,售货单中要增加一条相关记录,以记录药品出库信息。
售货单包括的数据项有:
编号、客户编号、货号、仓库、销售数量以及销售日期,售货单中可以增加上一条记录,但是不可以删除一条记录,可以显示售货单中的所有记录,实现对售货单的相关管理.
库存库:
当有药品入库时,库存库要增加相关记录或修改相关记录,当有药品出库时,库存库要修改相关记录或当出库不成功时给出相关警告信息。
库存库包括以下数据项:
货号、仓库、库存数量、库存单价、库存金额。
概念结构设计:
实体间E_R图
关系模型:
(带下划线的表示表的主键)
药品清单(货号,药品名称,类型,进价,售价,生产日期,有效期至)
供货商清单(供货商号,供货商名称,供货商地点,联系电话)
客户清单(客户编码,客户简称,地址,电话)
进货单(编号,供货商号,货号,仓库,进货数量,进货日期)
售货单(编号,客户编号,货号,仓库,销售数量,销售日期)
库存库(货号,仓库,库存数量,库存单价,库存金额)
建表:
增加药品清单表
createtable药品清单
(
货号varchar(15),
药品名称varchar(20),
类型varchar(6),
进价number(3,1),
售价number(3,1),
生产日期date,
有效期至date,
constraintPK_药品清单primarykey(货号)
);
增加供货商清单表
createtable供货商清单
(
供货商号varchar(15),
供货商名称varchar(20),
供货商地点varchar(20),
联系电话varchar(15),
constraintPK_供货商清单primarykey(供货商号)
);
增加客户清单表
createtable客户清单
(
客户编码varchar(15),
客户简称varchar(15),
地址varchar(15),
电话varchar(15),
constraintPK_客户清单PRIMARYKEY(客户编码)
);
增加进货单表
createtable进货单
(
编号varchar(15),
供货商号varchar(20),
货号varchar(20),
仓库varchar(10),
进货数量number(5),check(进货数量〉=0),
进货日期date,
constraintPK_进货单PRIMARYKEY(编号),
constraintFK_进货单_To_药品清单FOREIGNKEY(货号)
REFERENCES药品清单(货号),
constraintFK_进货单_To_供销商清单FOREIGNKEY(供货商号)
REFERENCES供货商清单(供货商号)
);
增加售货单表
createtable售货单
(
编号varchar(15),
客户编号varchar(20),
货号varchar(15),
仓库varchar(10),
销售数量number(5),
销售日期date,
constraintPK_售货单primarykey(编号),
constraintFK_售货单_To_药品清单FOREIGNKEY(货号)
REFERENCES药品清单(货号),
constraintFK_售货单_To_客户清单FOREIGNKEY(客户编号)
REFERENCES客户清单(客户编码)
);
增加库存库
createtable库存库
(
货号varchar(15),
仓库varchar(15),
库存数量number(5),
库存单价number(3,1),
库存金额number(7)
);
数据库实施与维护:
整个系统的操作过程:
首先进入登陆界面,用户名和密码都为空,直接单击确认即进入操作界面,单击六个模块中的任意一个按钮进入与其有关的操作界面,再选择所要进行的操作即可弹出相关的对话框,输入用户名和密码后就可实现一系列功能如增加记录,删除和显示记录。
在操作失误的时候系统会给出相应的提示和警告,以提示用户输入规范的数据和进行当前可以进行的操作。
系统优点就是实现了操作并运行成功了,缺点是没有一个人性化的操作界面,操作也让人感到困倦,总的原因还是道行不深,不愿花费太大的精力,属于注重实现,忽略细节的类型。
MFC的代码实现部分:
登陆界面实现代码
voidCMedicineProjectView:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CZhuyemianzhuyemian;
CADMINSETadminset;
CStringyonghuming;
CStringmima;
UpdateData(TRUE);
//CCzhuyemiandlg;
adminset.Open();
GetDlgItem(IDC_EDIT1)—>GetWindowText(yonghuming);
GetDlgItem(IDC_EDIT2)->GetWindowText(mima);
if(adminset.m_SA_NAME!
=yonghuming||adminset.m_SA_VALUE!
=mima)
MessageBox(”用户名或密码错误!
”);
else
zhuyemian.DoModal();
//zhuyemian。
EndDialog(IDD_MEDICINEPROJECT_FORM);
//EndDialog(GetSafeHwnd(),IDD_MEDICINEPROJECT_FORM);
}
主界面操作代码
voidCZhuyemian:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CClientZhujiemianclientzhujiemian;
clientzhujiemian.DoModal();
}
voidCZhuyemian:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CProviderzhujiemianproviderzhujiemian;
providerzhujiemian。
DoModal();
}
voidCZhuyemian:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMedicinezhujiemianmedicinezhujiemian;
medicinezhujiemian.DoModal();
}
voidCZhuyemian:
:
OnButton5()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CInlistzhujiemianinlistzhujiemian;
inlistzhujiemian。
DoModal();
}
voidCZhuyemian:
:
OnButton4()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
COutlistzhujiemianoutlistzhujiemian;
outlistzhujiemian。
DoModal();
}
voidCZhuyemian:
:
OnButton6()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CKucunkuzhujiemiankucunkuzhujiemian;
kucunkuzhujiemian.DoModal();
}
客户操作的实现代码(药品清单、供货商操作代码类似,在此省略)
//ClientZhujiemian.cpp:
implementationfile
//
#include”stdafx。
h”
#include”MedicineProject.h"
#include"ClientZhujiemian。
h”
#include”Clientitems。
h”
#include"ClientSet.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CClientZhujiemiandialog
CClientZhujiemian:
:
CClientZhujiemian(CWnd*pParent/*=NULL*/)
:
CDialog(CClientZhujiemian:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CClientZhujiemian)
//}}AFX_DATA_INIT
}
voidCClientZhujiemian:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClientZhujiemian)
DDX_Control(pDX,IDC_LIST1,m_Listbox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClientZhujiemian,CDialog)
//{{AFX_MSG_MAP(CClientZhujiemian)
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_BN_CLICKED(IDC_BUTTON3,OnButton3)
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CClientZhujiemianmessagehandlers
voidCClientZhujiemian:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CClientitemsclientitems;
clientitems.DoModal();
}
voidCClientZhujiemian:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_Listbox。
Invalidate(FALSE);
intn=m_Listbox。
GetCount();
while(n>=0){
m_Listbox.DeleteString(n);
n--;
}
UpdateData(FALSE);
CClientSetclientshow;
m_Listbox。
SetHorizontalExtent(100);
clientshow。
Open();
clientshow.MoveFirst();
while(!
clientshow。
IsEOF()){
m_Listbox。
AddString(clientshow.m_column1+”"+clientshow。
m_column2+””+
clientshow。
m_column3+"”+clientshow.m_column4);
clientshow。
MoveNext();
}
clientshow。
MoveFirst();
clientshow。
Close();
UpdateData(TRUE);
m_Listbox.Invalidate(FALSE);
}
voidCClientZhujiemian:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CClientSetclientdelete;
intn;
n=m_Listbox.GetCurSel()+1;
chars[10];
itoa(n,s,10);
MessageBox(s);
clientdelete.Open();
clientdelete。
MoveFirst();
if(n==1)
clientdelete。
Delete();
else{
while(n>1)
{
clientdelete。
MoveNext();
n=n-1;}
clientdelete.Delete();
}
clientdelete.Close();
}
进货单操作界面代码(售货单操作界面代码类似,省略)
voidCInlistzhujiemian:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CInlistitemsinlistitems;
inlistitems。
DoModal();
}
voidCInlistzhujiemian:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_listbox.Invalidate(FALSE);
intn=m_listbox.GetCount();
while(n>=0){
m_listbox。
DeleteString(n);
n--;
}
UpdateData(FALSE);
CInlistSet1inlistshow;
CStringa,b;
inlistshow.Open();
inlistshow.MoveFirst();
m_listbox.SetHorizontalExtent(100);
while(!
inlistshow.IsEOF()){
a=(CString)inlistshow.m_column5;
b=inlistshow。
m_column6。
Format("%A%B%d%Y");
m_listbox。
AddString(inlistshow。
m_column1+""+inlistshow。
m_column2+"”+
inlistshow.m_column3+”"+inlistshow.m_column4+""+a+”"+b);
inlistshow.MoveNext();
}
inlistshow。
MoveFirst();
inlistshow。
Close();
UpdateData(TRUE);
m_listbox。
Invalidate(FALSE);
}
增加进货单相关信息代码
voidCInlistitems:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CInlistSet1addrecordset;//定义进货单和库存库对象
CKucunkuset3addtokucunkuset;
CStringa,b,c,d;
CStringe;
addrecordset.Open();
addtokucunkuset。
Open();
e=(CString)m_inlistshuliang;
if(addrecordset.GetRecordCount())
addrecordset。
MoveLast();
GetDlgItem(IDC_EDIT1)—〉GetWindowText(a);//CString类型的变量a得到IDC_EDIT1控件中的内容
GetDlgItem(IDC_EDIT2)->GetWindowText(b);
GetDlgItem(IDC_EDIT3)-〉GetWindowText(c);
GetDlgItem(IDC_EDIT4)->GetWindowText(d);
GetDlgItem(IDC_EDIT5)->GetWindowText(e);
if(a。
IsEmpty()||b。
IsEmpty()||c。
IsEmpty()||d。
IsEmpty())
{
MessageBox("信息不能为空!
”);
}
else
{
addrecordset.AddNew();//和售货单不同,只要进货就要往库存库中做记录,而且库存库记录依赖于
addrecordset。
m_column1=a;//进货单相应记录的不同变化而出现不同情况,所以先插入进货单,再
addrecordset。
m_column2=b;//插入或变更库存库的记录
addrecordset。
m_column3=c;
addrecordset。
m_column4=d;
addrecordset。
m_column5=e;
addrecordset。
m_column6=m_inlistdate;
intn=0;//(n的值为什么一直是一呢,不,是反复无常啊!
)用n来得到库存库中的记录个数
charnn[2];
if(addtokucunkuset.GetRecordCount()){
addtokucunkuset。
MoveFirst();
while(!
addtokucunkuset.IsEOF()){
addtokucunkuset.MoveNext();
n++;}
n++;
}
itoa(n,nn,10);
MessageBox(nn);//验证n的大小
/*intn;//这种情况下n总是一
charnn[2];
n=addtokucunkuset。
GetRecordCount();
itoa(n,nn,10);
MessageBox(nn);*/
if(n>1)
addtokucunkuset.MoveFirst();
while(n>0){
if(addtokucunkuset。
m_column1==c&&addtokucunkuset.m_column2==d)
break;
else{
if(addtokucunkuset.IsEOF())
{n——;
break;}
else{
addtokucunkuset。
MoveNext();
n-—;}
}
}
if(n)//如果有相应的记录,做更改操作
{
floatprice,sum,sum0;
intnumber,number0;
CStringsumm;
CStringjiage;
CStringnumberr;
CMedicineSetmedicineset;
medicineset.Open();
medicineset.MoveFirst();
while(medicineset。
m_column1!
=c)
medicineset.MoveNext();
price=atof(medicineset。
m_column4);
number=atoi(e);
number0=atoi(addtokucunkuset。
m_column3);
number0=number0+number;
sum=price*number;
sum0=atof(addtokucunkuset.m_column5);
s