小型自选商场商品管理系统设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一. 读书笔记
当您怀疑计算机硬件是影响SQL Server运行性能的主要原因时,可以通过SQL Server Performance Monitor监视相应硬件的负载,以便证实您的猜测并找出系统瓶颈。下文将介绍一些常用的分析对象及其参数。
Memory: Page Faults / sec如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。
Process: Working Set
SQL Server的该参数应该非常接近分配给SQL Server的内存值。在SQL Server 设定中,如果将"set working set size"置为0, 则Windows NT会决定SQL Server 的工作集的大小。如果将"set working set size"置为1,则强制工作集大小为SQLServer的分配内存大小。一般情况下,最好不要改变"set working set size"的缺省值。
Process:%Processor Time
如果该参数值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
Processor:%Privileged Time
如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy writer IO"等措施都会降低该值。
Processor:%User Time
表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
Physical Disk:Avg.Disk Queue Length
该值应不超过磁盘数的1.5~2倍。要提高性能,可增加磁盘注意:一个Raid Disk 实际有多个磁盘。
SQLServer:Cache Hit Ratio
该值越高越好。如果持续低于80%,应考虑增加内存。注意该参数值是从SQL Server启动后,就一直累加记数,所以运行经过一段时间后,该值将不能反映系统当前值.
二.设计要求
小型自选商场商品管理
要求:能对小型自选商场的商品进货、销售、库存等环节进行管理。主要有:1)能记录每一笔进货,查询商品的进货记录,并能按月进行统计。
2)能记录每一笔售货,查询商品的销售情况,并能进行日盘存、月盘存。
3)在记录进货及售货的同时,必须动态刷新库存。
4)能查询某个厂商或供应商的信息。
5)设计收银台程序,能根据输入的商品编号、数量,显示某顾客所购商品的清单,并显示收付款情况。
三.需求分析
1.信息要求:
四.数据库设计
1.概念结构设计
E-R图
2.逻辑结构设计
库存(商品ID、名称、型号规格、产地、单位、定价、折扣率、库存数量、最低存量、供应商ID)
售货(售货ID、商品ID、售价、数量、金额、存根号、销售日期)
进货(进货ID、商品ID、进价、数量、金额、进货日期)
供应商(供应商ID、供应商名称、邮编、地址、电话、联系人、联系人电话)
日盘存(售货ID、商品ID、售价、数量、金额,销售日期)
月盘存(售货ID、商品ID、售价、数量、金额)
五.开发方案的选择
工具:
MS SQL Server2000, MS Visual Stadio6.0
方案:
前台收银台程序与后台数据管理集成在一个应用程序中,便于管理员管理.
六.前台应用设计
前台应用程序的设计采用VC6.0提供的MFC工具.生成的工作界面如下:
1.软件主界面
2.库存记录查询
4.进货记录查询
5.进货月统计
7.售货记录查询
8.供应商信息查询
收银台有关代码:
//下面是收银台中控件”下一个”的有关代码,其中对数据库中几乎所有的表都进行了操作. void SRecord::OnSsaveButton()
{
// TODO: Add your control notification handler code here
CString
SaleID="",GoodsID="2",Price="2",Count="2",Acount="2",StubNumber="",Date="";
CString sql;
int gcount = 0;
float price = 0,acount = 0;
CDataManage dm;
/***********************************************************/
/*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("select SaleID from Sale");
try
{
Record1->raw_Close();
Record1->Open((_variant_t)sql,DataConn.GetInterfacePtr(),adOpenKeyset,adLockOptimisti c,adCmdText);
}
catch(_com_error &e)
{