小型自选商场商品管理系统设计报告.docx
- 文档编号:9701334
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:18
- 大小:524.10KB
小型自选商场商品管理系统设计报告.docx
《小型自选商场商品管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《小型自选商场商品管理系统设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
小型自选商场商品管理系统设计报告
一.读书笔记
当您怀疑计算机硬件是影响SQLServer运行性能的主要原因时,可以通过SQLServerPerformanceMonitor监视相应硬件的负载,以便证实您的猜测并找出系统瓶颈。
下文将介绍一些常用的分析对象及其参数。
Memory:
PageFaults/sec如果该值偶尔走高,表明当时有线程竞争内存。
如果持续很高,则内存可能是瓶颈。
Process:
WorkingSet
SQLServer的该参数应该非常接近分配给SQLServer的内存值。
在SQLServer设定中,如果将"setworkingsetsize"置为0,则WindowsNT会决定SQLServer的工作集的大小。
如果将"setworkingsetsize"置为1,则强制工作集大小为SQLServer的分配内存大小。
一般情况下,最好不要改变"setworkingsetsize"的缺省值。
Process:
%ProcessorTime
如果该参数值持续超过95%,表明瓶颈是CPU。
可以考虑增加一个处理器或换一个更快的处理器。
Processor:
%PrivilegedTime
如果该参数值和"PhysicalDisk"参数值一直很高,表明I/O有问题。
可考虑更换更快的硬盘系统。
另外设置TempdbinRAM,减低"maxasyncIO","maxlazywriterIO"等措施都会降低该值。
Processor:
%UserTime
表示耗费CPU的数据库操作,如排序,执行aggregatefunctions等。
如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
PhysicalDisk:
Avg.DiskQueueLength
该值应不超过磁盘数的1.5~2倍。
要提高性能,可增加磁盘注意:
一个RaidDisk实际有多个磁盘。
SQLServer:
CacheHitRatio
该值越高越好。
如果持续低于80%,应考虑增加内存。
注意该参数值是从SQLServer启动后,就一直累加记数,所以运行经过一段时间后,该值将不能反映系统当前值.
二.设计要求
小型自选商场商品管理
要求:
能对小型自选商场的商品进货、销售、库存等环节进行管理。
主要有:
1)能记录每一笔进货,查询商品的进货记录,并能按月进行统计。
2)能记录每一笔售货,查询商品的销售情况,并能进行日盘存、月盘存。
3)在记录进货及售货的同时,必须动态刷新库存。
4)能查询某个厂商或供应商的信息。
5)设计收银台程序,能根据输入的商品编号、数量,显示某顾客所购商品的清单,并显示收付款情况。
三.需求分析
1.信息要求:
库存
商品
ID
名称
型号
规格
产地
单位
定价
折扣
率
库存
数量
最低
存量
供应
商ID
Var
char
Var
char
Var
char
Var
char
Var
char
Float
Float
Int
Int
Var
char
售货
售货ID
商品ID
售价
数量
金额
存根号
销售日期
Varchar
Varchar
Float
Int
Float
Varchar
Varchar
进货
进货ID
商品ID
进价
数量
金额
进货日期
Varchar
Varchar
Float
Int
Float
Varchar
供应商
供应商ID
供应商名称
邮编
地址
电话
联系人
联系人电话
Varchar
Varchar
Var
char
Var
char
Varchar
Varchar
Varchar
日盘存
商品ID
售价
数量
金额
销售日期
Varchar
Float
Int
Float
Varchar
月盘存
商品ID
售价
数量
金额
Varchar
Float
Int
Float
四.数据库设计
1.概念结构设计E-R图
2.逻辑结构设计
库存(商品ID、名称、型号规格、产地、单位、定价、折扣率、库存数量、最低存量、供应商ID)
售货(售货ID、商品ID、售价、数量、金额、存根号、销售日期)
进货(进货ID、商品ID、进价、数量、金额、进货日期)
供应商(供应商ID、供应商名称、邮编、地址、电话、联系人、联系人电话)
日盘存(售货ID、商品ID、售价、数量、金额,销售日期)
月盘存(售货ID、商品ID、售价、数量、金额)
五.开发方案的选择
工具:
MSSQLServer2000,MSVisualStadio6.0
方案:
前台收银台程序与后台数据管理集成在一个应用程序中,便于管理员管理.
六.前台应用设计
前台应用程序的设计采用VC6.0提供的MFC工具.生成的工作界面如下:
1.软件主界面
2.库存记录查询
3.日盘存
4.进货记录查询
5.进货月统计
6.收银台
7.售货记录查询
8.供应商信息查询
收银台有关代码:
//下面是收银台中控件”下一个”的有关代码,其中对数据库中几乎所有的表都进行了操作.voidSRecord:
:
OnSsaveButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringSaleID="",GoodsID="2",Price="2",Count="2",Acount="2",StubNumber="",Date="";
CStringsql;
intgcount=0;
floatprice=0,acount=0;
CDataManagedm;
/***********************************************************/
/*GoodsID*/
m_GoodsID.GetWindowText(GoodsID);
if(GoodsID.GetLength()==0)
{
MessageBox("请输入数据","提示");
return;
}
/*SaleID*/
/**************************************************/
try
{
dm.ConnectDataBase();
Record1->Open(_variant_t("Sale"),
_variant_t((IDispatch*)DataConn,true),adOpenKeyset,
adLockOptimistic,adCmdTable);
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage(),"提示");
}
/*****************************************/
sql.Format("selectSaleIDfromSale");
try
{
Record1->raw_Close();
Record1-
>Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage(),"提示");
}
if(Record1->RecordCount>0)
{
Record1->MoveLast();
SaleID=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)0)->Value;
intsaleid=atoi(SaleID);
saleid+=1;
SaleID.Format("%d",saleid);
}
else
{
SaleID="20060001";
}
/*Price*/
/**************************************************/
try
{
dm.ConnectDataBase();
Record1->Open(_variant_t("Storage"),
_variant_t((IDispatch*)DataConn,true),adOpenKeyset,
adLockOptimistic,adCmdTable);
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage(),"提示");
}
/*****************************************/
sql.Format("selectGoodsPricefromStoragewhereGoodsID=%s",GoodsID);
try
{
Record1->raw_Close();
Record1-
>Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage(),"提示");
}
if(Record1->RecordCount>0)
{
Price=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)0)->Value;
price=(float)atof(Price);
}
else
{
MessageBox("库存中没有此种商品","提示");
return;
}
/*Count*/
m_Count.GetWindowText(Count);
gcount=atoi(Count);
/*Acount*/
acount=gcount*price;
pay+=acount;
/*StubNumber*/
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);
/*********插入到ListControl中*****************************************/Acount.Format("%f",acount);
m_SRList.InsertItem(100,"");
m_SRList.SetItemText(row,0,GoodsID);
m_SRList.SetItemText(row,1,Count);
m_SRList.SetItemText(row,2,Acount);
row++;
/****************售货记录插入*******************************/sql.Format("insertintoSale
values('%s','%s','%f','%d','%f','%s','%s')",SaleID,GoodsID,price,gcount,acount,StubNumber,Date);
/**************************************************/
try
{
dm.ConnectDataBase();
Record1->Open(_variant_t("Sale"),
_variant_t((IDispatch*)DataConn,true),adOpenKeyset,
adLockOptimistic,adCmdTable);
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage(),"提示");
}
/*****************************************/
try
{
dm.ExecSQL(sql);
//this->MessageBox("操作成功","提示");
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
/****************日盘存记录修改********************/
CStringtemp1="",temp2="";
Record1->raw_Close();
sql.Format("select*fromDayStoragewhereGoodsID=%s",GoodsID);
Record1-
>Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
if(Record1->RecordCount>0)
{
temp1=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)2)->Value;
temp2=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)3)->Value;
intaddcount=atoi(temp1);
floataddacount=(float)atof(temp2);
addcount+=gcount;
addacount+=acount;
sql.Format("updateDayStoragesetGoodsCount=%d,GoodsAcount=%fwhere
GoodsID=%s",addcount,addacount,GoodsID);
try
{
dm.ExecSQL(sql);
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
}
else
{
sql.Format("insertintoDayStorage
values('%s','%f','%d','%f','%s')",GoodsID,price,gcount,acount,Date);
try
{
dm.ExecSQL(sql);
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
}
/*****************月盘存记录修改***********************/Record1->raw_Close();
sql.Format("select*fromMonthStoragewhereGoodsID=%s",GoodsID);
Record1-
>Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
if(Record1->RecordCount>0)
{
temp1=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)2)->Value;
temp2=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)3)->Value;
intaddcount=atoi(temp1);
floataddacount=(float)atof(temp2);
addcount+=gcount;
addacount+=acount;
sql.Format("updateMonthStoragesetGoodsCount=%d,GoodsAcount=%fwhere
GoodsID=%s",addcount,addacount,GoodsID);
try
{
dm.ExecSQL(sql);
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
}
else
{
sql.Format("insertintoMonthStorage
values('%s','%f','%d','%f')",GoodsID,price,gcount,acount);
try
{
dm.ExecSQL(sql);
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
}
/*****************库存修改*****************************/
CStringtemp="";
Record1->raw_Close();
sql.Format("selectStorageCountfromStoragewhereGoodsID=%s",GoodsID);
Record1-
>Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
temp=(TCHAR*)(_bstr_t)Record1->GetFields()->GetItem((long)0)->Value;
if(temp.GetLength()>0)
{
Record1->raw_Close();
inttCount=atoi(temp);
tCount-=gcount;
sql.Format("updateStoragesetStorageCount=%dwhere
GoodsID=%s",tCount,GoodsID);
try
{
dm.ExecSQL(sql);
}
catch(_com_error&e)
{
this->MessageBox(e.ErrorMessage(),"出错提示");
}
}
/**************************************************/
m_GoodsID.SetWindowText("");
m_Count.SetWindowText("");
}
七.参考资料
1.数据库系统概论萨师煊王珊高等教育出版社
2.VisualC++实用教程郑阿奇电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小型 自选商场 商品 管理 系统 设计 报告