1、小型自选商场综合管理系统系统设计之数据库设计1、组织结构(1)组织结构概况该商场的组织结构如图所示。(2)管理职能分析主管一一全面负责本店的行政与业务管理。采购组一一负责每一笔进货,查询商品的进货记录,并能按月进行统计;记录进货场商或供应商的信息。销售组一一负责商品的销售,按月统计某个员工的销售业绩,记录员工的基本信息。库存组一一负责进行日盘存、月盘存能打印库存清单,查询某种商品的库存情况。2、业务流程分析进货管理:商品进货信息包括商品进货数量、单价、供货商等。商品进货管理功能完成进货信息登记、修改和删除等。分类查看:可以根据商品类型来查看某种商品的进货情况。更新库存:进货信息的变动
2、直接关系到库存的变化。进货分析:列出当日进货量最多的前几项商品和进货量最少的前几项商品。库存分析:列出当前库存量最多的前几项商品和库存量最少的前几项商品。销售信息管理:商品销售数量、单价、统计日期等。分类查看后:可以根据商品类型来查看某种商品的销售情况。更新库存:销售信息的变动直接关系到库存的变化。销售分析:列出当前销售数量最多的前几项商品和销售量最少的前几项商品。商品基本信息的维护:商品的查询、添加、删除。查询包括进货查询、销售查询和库存查询。供货商信息管理:包括供货商信息的新建、修改和删除等。业务流程图(1)信息要求库存商品ID名称型号规格产地单位定价折扣率库存数量
4、charFloatIntFloatVarchar月盘存商品ID售价数量金额VarcharFloatIntFloat数据流程图重要数据及其简要描述如下表:数据项名称说明商品编号唯一标识一种商品,形式如:SP00001员工编号唯一标识一名员工,形式如:YG00001客户编号唯一标识一个客户,形式如:KH00001供应商编号唯一标识一个供应商,形式如:GYS00001销售票号以此记录以此销售登记,形式如:2012-5-8XS00001入库票号以此记录以此入库登记,形式如:2012-5-8RK00001毛利销售某种商品获得的利润操作员系统登陆者经手人对某次业务或交易实际上直接操作者仓
5、库名称唯一标识某个仓库警戒上限商品数量的最高限警戒下限商品数量的最低限品种数销售、入库时交易的商品种数结算方式进行交易时所采取的结算方式是否结清记录某笔交易是否结清账款数据存储名称说明冏品信息表记录冏品的基本信息员工表记录员工的基本信息客户表记录客户的基本信息供应商表记录供应商的基本信息仓库表记录仓库的基本信息库存表记录库存信息销售登记表记录销售时的的商品及数量信息销售票号表记录销售时的客户、经手人、操作员、日期等信息入库登记表记录入库时的商品及数量信息入库票号表记录入库时的供应商、经手人、操作员、日期等信息结算方式表用于存储结算方式下面是收银台有关代码:VoidSRec
6、ord:OnSsaveButton()/TODO:AddyourcontrolnotificationhandercodehereCSringSaleID=匕GoodsID=2”,Price=2”,Count=2”,Acount=2”,StubNumber=”,Date=”CStringsql;Intgcount=0;Floatprice=0,account=0;CDataManagedm;/*GoodsID*/m_GoodsID.GetWindowText(GoodsID);if(GoodsID.GetLength()=0)MessageBox(“请输入数据”/提示勺;
7、Return;/*SaleID*/trydm.ConnectDataBase();Recordl-Open(_variant_t(Sale”),_variant_t(IDispatch*)DataConn,true),adOpenKeyset,adLockOptimistic,adCmdTable);catch(_com_error&e)MassageBox(e.ErrorMassage(),提示勺;/*/Sql.Format(“selectSaleIDfromSale”);tryRecord-Open(_variant_t)sql.DataConn.GetInterPtr(
8、),adOpenKeyset,adLockOptimistic,adCmdText);catch(_com_error&e)MassageBox(e.ErrorMassage(),提示”)If(Recordl-RecordCount0)Recordl-MoveLast();SaleID=(TCHAR*)(_bstr_t)Recordl-GetItem(long)0)-Value;Intsaleid=atoi(SaleID);saleid+=1;SaleID.Format(d”,saleid);elseSaleID=2012000T;/*Price*/trydm.ConnectData
9、Base();Recordl-Open(_variant_t(Sale”),_variant_t(IDispatch*)DataConn,true),adOpenKeyset,adLockOptimistic,adCmdTable);Catch(_com_error&e)MassageBox(e.ErrorMassage(),提示勺;/*/Sql.Format(“selectSaleIDfromSale”);tryRecord-Open(_variant_t)sql.DataConn.GetInterPtr(),adOpenKeyset,adLockOptimistic,ad
10、CmdText);catch(_com_error&e)MassageBox(e.ErrorMassage(),提示”)If(Recordl-RecordCount0)Price=(TCHAR*)(_bstr_t)Recordl-GetItem(long)0)-Value;price=(float)atof(Price);elseMassageBox(“库存中没有此种商品”/提示勺;return;/*Count*/m_Count.GetWindowText(Count);gcount=atoi(Count)/*Acount*/account=gcount*price;pay+=acou
11、nt;/*StubNumber=SaleID*/*Date*/intyear,month,day;CStringdate;CTimet=CTime:GetCurrentTime();year=t.GetYear;month=t.GetMonth();day=t.GetDay();Date.Format(d%d%d”,year,month,day);Acount.Format(f”,acount);m_SRList.InsetItem(100,”);m_SRList.InsetItemText(row,0,GoodsID);m_SRList.InsetItemText(row,1,Co
12、unt);m_SRList.InsetItemText(row,2,Acount);row+;/*销售记录插入*/sql.Format(insertintoSalevalues(s%s%f%d%f%s%s”)”,SaleID,GoodsID,price,gcount,account,SturbNumber,Date;)*trydm.ConnectDataBase();Record-Open(_variant_t(Sale”),_variant_t(IDispatch*)DataConn,true),adOpenKeyset,adLockOptimistic,adCmdTable);c
13、atch(_com_error&e)-this-MessageBox(e.ErrorMessage(),”出错提示勺;/*日盘存记录修改*/CStringtemp1=匕temp2=”;Recordl-raw_Close();sql.Format(select*fromDayStoragewhereGoodsID=%s”,GoodsID);Recordl-Open(_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);if(Recordl-RecordCount0)te
14、mpi=(TCHAR*)(_dstr_t)Recordl-GetFields()-GetItem(long)2)-Value;temp2=(TCHAR*)(_dstr_t)Recordl-GetFields()-GetItem(long)2)-Value;intaddcount=atoi(tempi);floataddacount=(float)atof(temp2);addcount+=gcount;addacount+=account;sql.Format(updateDayStoragesetGoodsCount=%d,GoodsAcount=%fwhere
15、GoodsID=%s”,addcount,addacount,GoodsID);trydm.ExecSQL(sql);catch(_com_error&e)this-MessageBox(e.ErrorMessage(),”出错提示”);elsesql.Foemat(insetintoDayStoragevalues(%s,%f,%d,%f,%s)”,GoodsID,price,gcount,acount,Date);trydm.ExecSQL(sql);catch(_com_error&e)this-MessageBox(e.ErrorMessage(),”出错提示”);月盘存记录修
16、改*/Recordl-raw_Close();sql.Format(select*fromMonthStoragewhereGoodsID=%s”,GoodsID);Recordl-Open(_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);if(Recordl-RecordCount0)tempi=(TCHAR*)(_bstr_t)Recordl-GetFields()-GetItem(long)2)-Value;temp2=(TCHAR*)(_bstr_t)R
17、ecordl-GetFields()-GetItem(long)3)-Value;intaddcount=atoi(tempi);floataddacount=(float)atof(temp2);addcount+=gcount;addacount+=account;sql.Format(updateMonthStoragesetGoodsCount=%d,GoodsAcount=%fwhereGoodsID=%s”,addcount,addacount,GoodsID);trydm.ExecSQL(sql);catch(_com_error&e)this-Mess
18、ageBox(e.ErrorMessage(),”出错提示”);elsesql.Foemat(insetintoMonthStoragevalues(%s,%f,%d,%f,%s)”,GoodsID,price,gcount,acount,Date);trydm.ExecSQL(sql);catch(_com_error&e)this-MessageBox(e.ErrorMessage(),”出错提示”);库存修改CStringtemp=”;Recordl-raw_Close();sql.Format(selectCountfromStoragewhereGoodsID=%s”,GoodsID);Recordl-Open(_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);temp=(TCHAR*)(_bstr_t)Recordl-GetFields()-GetItem(long)O)-Valu