手机版

小型自选商场商品管理系统设计报告

发布时间:2024-11-02   来源:未知    
字号:

数据库实验报告

一. 读书笔记

<sql性能指数分析>

当您怀疑计算机硬件是影响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,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; int saleid = 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("select GoodsPrice from Storage where GoodsID=%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);

}

数据库实验报告

{

MessageBox("库存中没有此种商品","提示");

return;

}

/*Count*/

m_Count.GetWindowText(Count);

gcount = atoi(Count);

/*Acount*/

acount = gcount*price;

pay+=acount;

/*StubNumber*/

StubNumber = SaleID;

/*Date*/

int year,month,day;

CString date;

CTime t= 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("insert into Sale 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(),"提示");

}

/*****************************************/

数据库实验报告

{

dm.ExecSQL(sql);

//this->MessageBox("操作成功","提示");

}

catch(_com_error &e)

{

this->MessageBox(e.ErrorMessage(),"出错提示");

}

/****************日盘存记录修改********************/

CString temp1 = "",temp2 = "";

Record1->raw_Close();

sql.Format("select * from DayStorage where GoodsID=%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; int addcount = atoi(temp1);

float addacount = (float)atof(temp2);

addcount+=gcount;

addacount+=acount;

sql.Format("update DayStorage set GoodsCount=%d,GoodsAcount=%f where GoodsID=%s",addcount,addacount,GoodsID);

try

{

dm.ExecSQL(sql);

}

catch(_com_error &e)

{

this->MessageBox(e.ErrorMessage(),"出错提示");

}

}

else

{

sql.Format("insert into DayStorage 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 * from MonthStorage where GoodsID=%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; int addcount = atoi(temp1);

float addacount = (float)atof(temp2);

addcount+=gcount;

addacount+=acount;

sql.Format("update MonthStorage set GoodsCount=%d,GoodsAcount=%f where GoodsID=%s",addcount,addacount,GoodsID);

try

{

dm.ExecSQL(sql);

}

catch(_com_error &e)

{

this->MessageBox(e.ErrorMessage(),"出错提示");

}

}

else

{

sql.Format("insert into MonthStorage values('%s','%f','%d','%f')",GoodsID,price,gcount,acount);

try

{

dm.ExecSQL(sql);

}

catch(_com_error &e)

{

this->MessageBox(e.ErrorMessage(),"出错提示");

}

}

/*****************库存修改*****************************/

CString temp = "";

数据库实验报告

Record1->raw_Close();

sql.Format("select StorageCount from Storage where GoodsID=%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();

int tCount=atoi(temp);

tCount-=gcount;

sql.Format("update Storage set StorageCount=%d

GoodsID=%s",tCount,GoodsID);

try

{

dm.ExecSQL(sql);

}

catch(_com_error &e)

{

this->MessageBox(e.ErrorMessage(),"出错提示");

}

}

/**************************************************/

m_GoodsID.SetWindowText("");

m_Count.SetWindowText("");

}

七.参考资料

1.数据库系统概论 萨师煊 王珊 高等教育出版社

2.Visual C++ 实用教程 郑阿奇 电子工业出版社 where

小型自选商场商品管理系统设计报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)