超市管理系统数据库课程设计报告.docx
《超市管理系统数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《超市管理系统数据库课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
超市管理系统数据库课程设计报告
超市管理系统——数据库课程设计报告
高中教育
xxxxxxx
2011-12-20
第1节课程设计背景及意义
1.1课程设计背景
随着我国改革开放的不断深入、经济飞速的发展,企业要想生存发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的。
作为现代社会的一部分,超市必须适应社会的发展,因此实现超市的信息化管理是很有必要的。
在传统的手工管理中,往往是用人工清点的方式来掌握超市中现有的商品,使用手工记账的方式来掌握商品的进货和销售情况。
这种方式在商品数量较少、商品库存变换少的情况下,不失为一种较好的方法。
但是,在目前的大中型超市中,往往需要处理的商品种类数以千计,而且每天所发生的进货和销售情况纷繁复杂。
如果要借助人工来实现这一系列数据的记录和管理,工作量将非常巨大,而且容易出现错误,造成管理上的混乱,更何况还需要对商品的数据进行统计和分析。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已被人们所认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对超市信息进行管理有着手工管理所无法比拟的优点,例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高超市管理的效率,也能使超市步入科学化、正规化的管理。
基于这些问题,为了使超市管理工作规范化、系统化、程序化,避免超市管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效地查询和修改商品情况,建立一个超市管理系统是非常必要的。
1.2课程设计意义
超市管理系统用计算机管理超市库存进出管理和销售的一种计算机应用技术的创新,在计算机还未普及之前库存管理和销售都是由工作人员手工书写的方式来操作的。
现在一般的超市都采用计算机智能化管理,采用计算机作为工具的实用的计算机社区超市管理程序来帮助管理员进行更有效的超市管理工作。
社区超市管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
作为国内市场的一些中小型超市,它们在信息化过程中的步伐要落后于大中型超市,而对于这些企业的资源管理,信息的存储和处理也显得迫切需要,要适应市场竞争,就需要有高效的处理方式和管理方法,因此加快超市的信息化进程是必可少的。
超市管理系统依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改善了员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效。
第2节需求分析
2.1业务需求
通过与超市人员的交流,发现超市管理系统需要满足来自多个不同用户的要求。
在超市中,按照超市人员的职能分为六大类,分别是销售员、采购员、经理、系统管理员、仓库管理员、顾客(注册和非注册)。
系统管理员的要求是掌握超市内部的所有业务,包括销售信息、进货信息、商品信息,具有超级用户的所有权限,对超市实行全面管理。
销售员的要求是查看所有销售信息,查看符合条件的销售信息以及增加销售单。
采购员的要求是查看所有采购信息,查看符合条件的采购信息,增加采购订单以及更改进退货状态。
超市经理的要求是能够查看进货信息、销售信息以及库存信息。
而顾客是超市的上帝,超市一切都是为顾客服务。
本系统中顾客要求是可以现场买商品,采购信息有采购编号、采购日期、商品厂商、采购员、商品的价格、商品规格、进货商品的数量等属性。
同时超市还可以进退货并有相应的付款表。
通过与超市管理人员进行反复的讨论,确定系统应该实现以下功能:
(1)对商品信息的变动进行处理在商品的进销过程巾,商品信息总是在不断变化的。
比如商品价格的调整、商品信息的修改、新商品信息的增加以及商品信息的删除,因此设计系统时必须考虑到这些情况。
(2)用户信息的变动进行处理。
需考虑到新会员的注册和已注册,设置会员折扣用户的信息的修改及删除。
(3)对顾客采购信息的变动进行处理。
采购信息的过程中采购信息也在不断发生改变,因此也要充分考虑。
(4)查询及统计功能。
要求可以根据指定的条件对商品信息、用户信息和采购信息、销售信息进行查询和统计。
(5)对库存商品信息的变动进行处理。
要求可以根据库存的状态进行相应的进退货。
2.2功能需求
2.1.1零售前台(POS)管理系统
商品录入:
根据超巿业务特点制定相关功能,可以通过输入唯一编号、扫描条形码、商品名称等来实现精确或模糊的商品扫描录入。
该扫描录入方法可以充分保证各种电脑操作水平层次的人员均能准确快速地进行商品扫描录入。
收银业务:
通过扫描条形码或者直接输入商品名称(对于同类多件商品采用一次录入加数量的方式)自动计算本次交易的总金额。
在顾客付款后,自动计算找零,同时打印交易清单(包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号)。
如果顾客是本店会员并持有本人会员卡,则在交易前先扫描会员卡,并对所购物品全部实行95折优惠,并将所购物品的总金额累计到该会员的总消费金额中。
会员卡的有效期限为一年,满一年未续卡者,该会员卡将被注销。
安全性:
OS登陆、退出、换班与操作锁定等权限验证保护;断电自动保护最大限度防止意外及恶意非法操作。
独立作业:
有的断网收银即在网络服务器断开或网络不通的情况下,收银机仍能正常作业
进货管理:
根据销售情况及库存情况,自动制定进货计划(亦可手工制定修改),可以避免盲目进货造成商品积压。
按计划单有选择性地进行自动入库登记。
综合查询打印计划进货与入库记录及金额。
销售管理:
商品正常销售、促销与限量、限期及禁止销售控制。
综合查询各种销售明细记录、各地收银员收银记录以及交结账情况等。
按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。
库存管理:
综合查询库存明细记录。
库存状态自动告警提示。
如库存过剩、少货、缺货等。
软件为您预警,避免库存商品积压损失和缺货。
库存自动盘点计算。
人员管理:
员工,会员,供应商,厂商等基本信息登记管理。
2.3数据需求
第3节概要设计
3.1概念结构设计
3.1.5出库/入库信息E-R图设计
3.2逻辑结构设计
a)商品信息表(商品编号,商品名称,价格,条形码,数量,厂商编号,供货商编号)
b)员工表(用户编号,用户名称,用户密码,用户类型)
c)商品销售表(销售编号,商品编号,销售数量,销售金额,销售日期)
d)入库/出库表(入库编号,入库商品编号,入库数量,入库日期)
e)供货商表(供货商编号,供货商名称,供货商地址,供货商电话)
f)厂商表(厂商编号,厂商名称,厂商地址,厂商电话)
3.3数据库模式定义
商品信息表(MerchInfo)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
MerchID
int
4
Notnull
商品编号
MerchName
Varchar
50
Notnull
商品名称
MerchPrice
Money
4
Notnull
价格
MerchNum
Int
4
Notnull
库存数量
BarCode
Varchar
50
Notnull
条形码
FactoryID
Varchar
10
Notnull
厂商编号
ProvideID
Varchar
10
Notnull
供货商编号
员工表(Menber)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
UserID
varchar
10
Notnull
员工编号
UserName
Varchar
25
Notnull
员工名称
UserPW
Varchar
50
Notnull
员工薪资
UserStyle
Int
4
Notnull
员工职务
UserSex
Varchar
10
Notnull
员工性别
销售表(Sale)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
SaleID
Varchar
10
Notnull
销售编号
MerChID
Varchar
10
Notnull
商品编号
SaleDate
Datetime
8
Notnull
销售日期
SaleNum
Int
4
Notnull
销售数量
SalePrice
Money
4
Notnull
销售单额
入库/出库纪录表(Stock)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
StockID
Varchar
10
Notnull
入库编号
MerchID
Varchar
10
Notnull
入库商品编号
MerchNum
Int
4
Notnull
入库数量
MerchPrice
Money
4
Notnull
单额
StockDate
Datetime
8
Datetime
入库日期
PlanDate
Datetime
8
Datetime
计划进货日期
供货商表(Provide)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
ProvideID
varchar
10
Notnull
供货商编号
ProvideName
Varchar
50
Notnull
供货商名称
ProvideAddress
Varchar
250
供货商地址
ProvidePhone
Varchar
25
供货商电话
厂商表(Provide)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
FactoryID
varchar
10
Notnull
厂商编号
FactoryName
Varchar
50
Notnull
厂商名称
FactoryAddress
Varchar
250
厂商地址
FactoryPhone
Varchar
25
厂商电话
第4节数据库实施阶段
4.1安全性设计
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。
信息系统尽管功能强大,技术先进,但由于受到自身体系结构,设计思路以及运行机制等限制,也隐含许多不安全因素。
常见因素有:
数据的输入,输出,存取与备份,源程序以及应用软件,数据库,操作系统等漏洞或缺陷,硬件,通信部分的漏洞,企业内部人员的因素,病毒,“黑客”等因素。
因此,为使本系统能够真正安全,可靠,稳定地工作,必须考虑如下问题:
为保证安全,不致使系统遭到意外事故的损害,系统因该能防止火,盗或其他形式的人为破坏。
1)系统要能重建
2)系统应该是可审查的
3)系统应能进行有效控制,抗干扰能力强
4)系统使用者的使用权限是可识别的
SQLServer提供多层安全。
在最外层,SQLServer的登录安全性直接集成到WidowsNT/2000的安全上,它允许WindowsNT服务器验证用户。
使用这种"Windows验证"SQLServer就可以利用WindowsNT/2000的安全特性,例如安全验证和密码加密、审核、密码过期、最短密码长度,以及在多次登录请求无效后锁定帐号。
4.2完整性设计
数据库完整性是指数据库中数据的正确性和相容性。
数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。
数据库完整性约束可以通过DBMS或应用程序来实现,基于DBMS的完整性约束作为模式的一部分存入数据库中。
通过DBMS实现的数据库完整性按照数据库设计步骤进行设计,而由应用软件实现的数据库完整性则纳入应用软件设计
数据库完整性对于数据库应用系统非常关键,其作用主要体现在以下几个方面:
1.数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据。
2.利用基于DBMS的完整性控制机制来实现业务规则,易于定义,容易理解,而且可以降低应用程序的复杂性,提高应用程序的运行效率。
同时,基于DBMS的完整性控制机制是集中管理的,因此比应用程序更容易实现数据库的完整性。
3.合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能。
比如装载大量数据时,只要在装载之前临时使基于DBMS的数据库完整性约束失效,此后再使其生效,就能保证既不影响数据装载的效率又能保证数据库的完整性。
4.在应用软件的功能测试中,完善的数据库完整性有助于尽早发现应用软件的错误。
在实施数据库完整性设计的时候,有一些基本的原则需要把握:
1.根据数据库完整性约束的类型确定其实现的系统层次和方式,并提前考虑对系统性能的影响。
一般情况下,静态约束应尽量包含在数据库模式中,而动态约束由应用程序实现。
2.实体完整性约束、参照完整性约束是关系数据库最重要的完整性约束,在不影响系统关键性能的前提下需尽量应用。
用一定的时间和空间来换取系统的易用性是值得的。
第5节详细设计
5.1模块简述
系统总体结构
5.2模块设计与实现(部分界面)
第6节总结
通过此次的课程设计,我学到了很多知识,跨越了传统方式下的教与学的体制束缚,在设计报告的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和动手能力。
并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。
在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过课程设计,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。
通过这次超市管理系统课程设计,让我充分运用自己所学的知识,让我明白只有单纯的理论知识是远远不够的,只有通过实际的锻炼才能更好的运用所掌握的基础知识,才能在原有的基础上提升自己的能力,提高自己解决问题的能力。
在这短短的几天里,查阅有关的C++学习资料,设计规则,代码的编写及到最后的调试。
在设计过程中,通过对控件事件的处理,界面的布局,代码的调试,充分锻炼了自己的思维,获得了充分的实际经验,提高了处理问题的能力,同时也提高了对问题思考的应急能力和抗压力的能力。
经过几天的努力,虽然设计已经完成,但仍然有很多模块和功能要完善,存在很多美中不足之处。
但是基本上还能满足小型超市的管理。
在设计报告的写作过程中也学到了做任何事情所要有的态度和心态,首先我明白了做学问要一丝不苟,对于出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的,在遇到问题时,有必要向老师和同学请教,合作沟通的意义是巨大的。
[参考文献]
【1】.MicrosoftSQLServer2000联机丛书
【2】.金林樵主编SQLServer2000程序设计实训教程科学出版社2006年
【3】.李言编着VisualC++项目开发全程实录清华出版社2008年
【4】.姚领田编着精通MFC程序设计人民邮电出版社2006年
【5】.苗雪兰编着数据库原理及应用教程(2版)机械工业出版社2005年
附件:
///////////登陆程序////////////////////////////////////////////////////////////////////
voidyuangongdenglu:
:
Ondenglu()
{
UpdateData
(1);
if(m_bianhao=="")
{
MessageBox("请输入账号!
");
return;
}
if(m_mima=="")
{
MessageBox("请输入密码!
");
return;
}
CAdoconadoconn;
adoconn.OnInitAdocon();
_bstr_tsql;
sql="select*from员工信息表where员工编号='"+m_bianhao+"'and员工密码='"+m_mima+"'";
_RecordsetPtrm_precordset;
m_precordset=adoconn.GetRecordSet(sql);
if(m_precordset->adoEOF==0)
{
GetDlgItem(ID_rukuxitong)->EnableWindow(FALSE);
}
UpdateData(0);
}
///////////添加程序//////////////////////////////////////////////////////////////////////
voidCgongyingshanxinxi:
:
OnButadd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData
(1);
CAdoconadoconn;
adoconn.OnInitAdocon();//调试
_bstr_tsqltemp;
sqltemp="insertinto供应商信息表(供应商编号,供应商名称,供应商地址,供应商电话)values('"+m_gysbh+"','"+m_gysmc+"','"+m_gysdz+"','"+m_gysdh+"')";
adoconn.ExecuteSQL(sqltemp);
adoconn.exitcon();
UpdateData(0);
MessageBox("添加成功");
OnOK();
}
////////////////删除程序//////////////////////////////////////////////////////////////////
voidCYuangongxinxi:
:
OnButdel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
CAdoconadoconn;
adoconn.OnInitAdocon();//调试
_bstr_tsqltemp;
sqltemp="deletefrom员工信息表where员工姓名='"+m_XM+"'";
if(m_XM=="")
MessageBox("员工姓名不为空");
if(adoconn.ExecuteSQL(sqltemp)==TRUE)
{
MessageBox("删除成功");
}
elseMessageBox("删除失败");
adoconn.exitcon();
OnOK();
UpdateData(FALSE);
}
///////////////////查询程序///////////////////////////////////////////////////////////////
voidCshangpingxinxi:
:
OnButquery()
{
UpdateData
(1);
//TODO:
Addyourcontrolnotificationhandlercodehere
CAdoconadoconn;
adoconn.OnInitAdocon();
_bstr_tsql;
sql="select*from商品信息表where商品编号='"+m_bianhao+"'";
_RecordsetPtrm_precordset;
m_precordset=adoconn.GetRecordSet(sql);
//GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
if(m_precordset->adoEOF==0)
{
m_mingcheng=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("商品名称");
m_gysbianhao=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("供货商编号");
m_jiage=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("价格");
m_csbianhao=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("厂商编号");
m_tiaoxingma=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("条形码");
UpdateData(0);
adoconn.exitcon();
}
}
///////Adocon.cpp:
implementationoftheCAdoconclass.//////////////////////////////////
voidCAdocon:
:
OnInitAdocon()
{
:
:
CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
m_pConnection->Open(strConnect,"","",adModeUnknown);
//们经常使用的只是前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中的三个,它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。
下面分别对它们的使用方法进行介绍:
//_ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。
对于要返回记录的操作通常用_RecordserPtr来实现。
而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。
//_CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。
如果你只执行一次或几次数据访问操作,后者是比较好的选择。
但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用