资源描述
摘 要
21世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超市业的竞争核心。零售领域目前呈多元发展趋势,多种业态:超市、仓储店、便利店、特许加盟店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、降低经营成本、扩大经营规模,成为超市营业者努力追求的目标。此次我使用Visual FoxPro 6.0编程,实现了一个简易的超市零售管理系统。本系统通过对超市零售管理系统进行需求分析和设计逐步将该系统的实现过程呈现出来。该系统可以对超市商品的入库和出库进行登记,同时还能对商品信息和价格进行查询。
关键词:数据库;Visual FoxPro 6.0;零售;查询
目 录
1 前言 1
1.1 作业背景 1
1.2 选题说明 1
1.2.1 基本思路 1
1.2.2 作业目标 1
1.3 工作业绩 2
1.3.1主要收获 2
1.3.2 自我评定 2
2 系统总体设计 3
2.1 系统结构图 3
2.2 数据库总体设计 3
2.3 需求分析 3
2.4 所需的数据表 4
2.4.1 所需的数据表结构 4
2.5 建立项目 5
3 建立数据库和数据库表 7
3.1 建立数据库 7
3.2 建立数据表 7
4 表单的设计 8
4.1 登录表单设计 8
4.2 商品入库出库输入表单设计 8
4.2.1商品入库表单设计 8
4.2.2商品出库输入表单设计 10
4.3 商品价格查询表单设计 12
4.3.1查询表单设计 12
4.3.2信息修改表单 19
4.4 销售表单设计 25
4.4.1销售价格信息表单设计 25
4.4.2表单销售汇总表设计 27
5 主程序和系统连编 30
5.1 主程序设计 30
5.2 系统连编 31
结束语 32
参考文献 33
1 前言
1.1 作业背景
本文根据《数据库应用与开发》课程要求而做。
课程作业要求如下:
用数据库管理系统开发工具(Visual FoxPro)开发一个实用的小型管理信息系统。根据课程设计时间选择适当规模大小的设计题目,按照系统开发的流程及方法,踏实地开展课程设计活动。课程设计活动中,撰写相关技术文档。最后提交详细的课程设计报告。开发出可上机运行的管理信息系统,通过上机检查。
1.2 选题说明
要在有限的两周时间设计出一个小型的超市零售管理系统,考虑到我们知识面和视野以及信息系统的价值性,我决定设计一个日常生活中比较常见的超市零售管理系统。这个系统能够对大学生成绩进行查询和管理,比较贴近我们大学生的实际,具有较强的可行性、实践性和价值性。
1.2.1 基本思路
设计该系统时,采用自底向上的设计方法。首先设计数据结构,然后设计表单、菜单、报表,最后设计主程序。
1.2.2 作业目标
要实现对超市商品信息和销售价格的管理,应该有库存管理和价格查询功能。要退出系统,需要有退出功能。如果想打印价格表,应该提供打印功能。所以超市使用本系统,可以迅速提升超市的管理水平,降低经营成本,提高效益,增强超市扩张力,提供有效的技术保障。
1.3 工作业绩
1.3.1主要收获
通过这学期对数据库这门课的学习,我对数据库有了基本的了解。学会了怎样制作表单,菜单等内容,这对以后的学习工作有了很重大的帮助。
我通过这两周的课程设计:课程设计的选题,构思,讨论,分配任务,设计程序等工作,其中遇到了很多的困难,但是没有放弃,解决问题,排除困难,这才一步步完成每个任务,还使我掌握了使用各种关系数据库为后台数据库设计一个信息管理系统。
总之,这次课程设计受益匪浅,不仅锻炼了我做事坚持不懈的心态,也慢慢地培养了我不懂就查书的好习惯,我的自学能力也有了一定的提高,我更明白了搞计算机程序设计,要学到真正的技术完全要靠自己,在课堂上只能学到最基本的东西,但这最基本的东西也一定要学好。
1.3.2 自我评定
□优 □良 □中 □及格 □不及格
2 系统总体设计
2.1 系统结构图
开发该系统前,先要有一个清晰的系统总体功能图。在超市零售管理系统中,由项目管理器统一管理系统中的表单、数据表、程序、报表以及主菜单。系统的整体结构是先运行主程序。表单和报表中的数据来自数据表中的数据。如图2.1
图2.1
该系统应包括如下几个功能模块,功能模块结构如下图所示
(1)输入单据:出库、入库、产成品清单
(2)查询:出库查询、入库查询、产成品查询
(3)销售:销售费用、销售退款、进/退货
(4)打印报表:入库报表、出库报表。
2.2 数据库总体设计
进行数据库总体设计首先要进行需求分析,由需求确定系统所需要的数据表,然后确定表所需的字段,最后确定各个表之间的关联。
2.3 需求分析
超市销售管理系统主要包括商品入库出库情况登记、商品信息及价格查询和销售业绩汇总等功能。每个功能都要通过表单和报表来操作数据表中的数据,每个数据表存储了本系统所需要的数据信息。所以在进行数据库设计之前,要分析出系统所需要的数据表。
2.4 所需的数据表
分析超市零售管理系统的情况,首先需要了解商品的基本信息,即需要基本状况表。用户需要查询商品的生产厂商和价格等信息,所以需要的数据表有商品入库表、商品厂商信息表和销售表等。
2.4.1 所需的数据表结构
表1:入库单
字段名 数据类型 长度(字节) 备注
入库编号 文本 20 主键
商品型号 文本 20
计量单位 文本 8
单价 货币 16
数量 数字 16
金额 货币 16
生产厂商 文本 50 外键
出厂日期 日期 16
仓管员 文本 20 外键
表2:厂商信息表
字段名 数据类型 长度(字节) 备注
厂商编号 文本 20 主键
厂商名称 文本 50
厂商地址 文本 50
联系电话 数字 20
法人地表 文本 20
表3:销售单
字段名 数据类型 长度(字节) 备注
单据编号 文本 20 主键
商品型号 文本 20
计量单位 文本 8
单价 货币 16
数量 数字 16
金额 货币 16
生产厂商 文本 50 外键
销售日期 日期 16
营业员 文本 20 外键
表4:进货单
字段名 数据类型 长度(字节) 备注
单据编号 文本 20 主键
厂商编号 文本 20 外键
进货厂商 文本 50
商品型号 文本 20
计量单位 文本 8
单价 货币 16
数量 数字 16
金额 货币 16
进货日期 日期 16
采购员 文本 20 外键
备注 备注 20
2.5 建立项目
项目管理器是visual foxpro 提供的强大的管理工具,它负责管理和组织本系统所需要的数据库、菜单、报表、表单、程序以及一些其他的文件,它是系统中文件、数据、文档和对象的集合。项目管理器共有6个选项卡,分别是【全部】选项卡、【数据】选项卡、【文档】选项卡、【类】选项卡、【代码】选项卡和【其他】选项卡。每个选项卡按一定的顺序和逻辑关系管理着项目中的文件。项目文件以扩展名.pjx和.pjt进行保存。
通过项目管理器,用户可以快速、方便地存取存放在项目文件中的任何对象。建立项目管理器的步骤如下所示。
(1)启动visual foxpro ,进入程序主界面。单击菜单栏的【文件】 【新建】命令,在弹出的【新建】对话框中选择【项目】单选按钮,如图2.2。
图2.2
(2) 单击【新建文件】按钮。在弹出的【创建】对话框中设置一个文件名,文件名设为大学生成绩查询系统,单击【保存】按钮后即可弹出【项目管理器】对话框,这个新项目就在项目管理器中建立起来了,如图2.3。
图2.3
3 建立数据库和数据库表
3.1 建立数据库
首先创建数据库,在项目管理器中创建数据库,保存数据库名为【销售管理.dbc】。
3.2 建立数据表
我们要在数据库中建立表。在数据库设计器中建立商品入库出库输入表、商品信息表、商品价格表为了保持表中数据的一致性,需要在各数据表之间建立参照完整性。当插入、删除或者修改表中记录时,就会参照引用相关联的另外一个表中的数据。关系数据库管理系统一个重要的功能就是参照完整性。必须先建立表之间的关系的,才能使用参照完整性。
4 表单的设计
4.1 登录表单设计
图4.1
登录表单提供销售者登录接口。销售者只有输入了正确的用户编号和密码,才能登录进入系统。该表单使用基本情况表,其界面如图4.1所示。
4.2 商品入库出库输入表单设计
4.2.1商品入库表单设计
1、表单(输入入库单据)
实现功能:可通过这个表单将商品的相关信息输入,例如编号、单价、数量等, 起到一个存储信息的作用,方便以后查询、总结等工作需要。
实现过程:实现过程:
① 单击“文件”下拉菜单,再点击“新建”,选择“表单”,再单击“新建文件”后开始表单输入入库单据的设计。如图4.2
图4.2
设计界面如下:
② 入入库单据的设计的基本结构如图4.3:
图4.3
“输入”按钮代码
e=ntom(val(alltrim(thisform.text5.value)))
f=alltrim(thisform.Text6.value)
g=alltrim(thisform.text7.value)
h=val(alltrim(thisform.text8.value))
i=ctod(alltrim(thisform.Text9.value))
if empty(a).or.empty(b).or.empty(c).or.empty(d).or.empty(e).or.empty(f).or.empty(g).or.empty(h).or.empty(i)
messagebox("请输入完整信息")
return
endif
insert into 表\入库单;
(入库编号,商品型号,计量单位,单价,金额,生产厂商,仓管员,数量,出厂日期) value(a,b,c,d,e,f,g,h,i)
z=0
scan for 商品库存表.商品型号=b
z=1
endscan
use
if z=1
update 商品库存表 set 数量=数量+h where 商品型号=b
messagebox("输入入库单据成功!",64,"系统提示")
return
else
insert into 表\商品库存表;
(商品型号,数量) value (b,h)
insert into 表\商品资料单;
(商品型号) value (b)
messagebox("你所输入的是新商品,请输入商品名称")
use
do form 表单\输入新商品名
return
endif
“取消”按钮代码
Thisform.release
4.2.2商品出库输入表单设计
实现功能:可通过这个表单将出库的商品相关信息输入,例如编号、单价、数量等, 起到一个存储信息的作用,方便以后查询,总结等工作需要。
实现过程:
① 单击“文件”下拉菜单,再点击“新建”,选择“表单”,再单击“新建文件”后开始表单输入入库单据的设计。
设计界面如下:
输入入库单据的设计表单如图4.4
图4.4
“输入”按钮代码
a=alltrim(thisform.text1.value)
b=alltrim(thisform.Text2.value)
c=alltrim(thisform.text3.value)
d=ntom(val(alltrim(thisform.Text4.value)))
e=ntom(val(alltrim(thisform.text5.value)))
f=alltrim(thisform.Text6.value)
g=alltrim(thisform.text7.value)
h=val(alltrim(thisform.text8.value))
i=ctod(alltrim(thisform.Text9.value))
if empty(a).or.empty(b).or.empty(c).or.empty(d).or.empty(e).or.empty(f).or.empty(g).or.empty(h).or.empty(i)
messagebox("请输入完整信息")
return
endif
z=0
x=0
use 表\商品库存表
scan for 商品库存表.商品型号=b
z=1
x=数量-h
endscan
if z=0
messagebox("库存不足,无法出库!")
else
if x<0
messagebox("库存不足,无法出库!")
else
update 表\商品库存表 set 数量=数量-h where 商品型号=b
insert into 出库单;
(出库编号,商品型号,计量单位,单价,金额,生产厂商,仓管员,数量,出库日期) value(a,b,c,d,e,f,g,h,i)
messagebox("输入出库单据成功!",64,"系统提示")
endif
endif
取消按钮代码
Thisform.release
4.3 商品价格查询表单设计
4.3.1查询表单设计
1、项目详细设计
查询模块:出库查询、入库查询、库存查询、商品资料查询
例:入库查询表单
如图4.5
图4.5
2、界面操作说明:
按钮控制策略:组合框内有9个选项,编辑框为空,查询按钮及取消按钮一直为亮。
查询处理过程:此查询为模糊查询,按下组合框内的选项,在编辑框内输入内容,点击查询,屏幕上将显示一系列与输入内容相关的记录。取消后将返回原界面。注意:出厂时间的输入需要符合格式才能正确查询,否则将出现运行错误的提醒。3、项目具体实现
例:入库查询表单
本表单用于查询入库商品情况。在组合框中选择要查询的条件,如入库编号、商品型号等,在文本框中输入信息,按查询按钮,即可显示出相关信息。如若输入信息有误则会有信息“数据库中不存在您所要查询的记录”提示。而按取消键则返回到主菜单。
在表单上设计如下事件过程:
1、新建表单form1,并将其caption属性值设为“入库查询”,width属性值设置为290,height属性值设置为175,AutoCenter属性值设置为.t.,并将其保存为“入库查询.scx”。
2、向表单添加一个grid控件,并将其width属性值设置为290,height属性值设置为100。
3、在grid控件的下方添加一个组合框控件Combo1和一个文本框控件, 并将组合框控件的RowSourceType属性值设置为“8-结构”,RowSource属性值设置为“入库单”。
4、在文本框的右侧再添加两个命令按钮command1和command2,并将command1和command2的caption属性值分别设置为“查找”和“取消”。
5、对表单上各控件的位置进行适当的调整,调整后的表单设计器如图4.6
图4.6
重点:(1)“查找”按钮(command1)
的click事件如下 :
if empty(thisform.Text1.value)=.f.
go top
a=thisform.Combo1.value
b=alltrim(thisform.Text1.value)
local c as integer
if a="入库编号"
Select * from 入库单 where 入库
编号 like b +"%" into cursor bas
sele bas
c=reccount()
if c<1 (图①“查询”按钮(command2)的click事件如下:
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="商品型号"
Select * from 入库单 where 商品型号 like b +"%" into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="计量单位"
Select * from 入库单 where 计量单位 like b +"%" into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="生产厂商"
Select * from 入库单 where 生产厂商 like b +"%" into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="仓管员"
Select * from 入库单 where 仓管员 like b +"%" into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="单价"
b=ntom(val(alltrim(thisform.text1.value)))
Select * from 入库单 where 单价 =b into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="金额"
b=ntom(val(alltrim(thisform.text1.value)))
Select * from 入库单 where 金额 =b into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="数量"
b=val(alltrim(thisform.text1.value))
Select * from 入库单 where 数量 =b into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
if a="出厂日期"
b=ctod(alltrim(thisform.text1.value))
Select * from 入库单 where 出厂日期 =b into cursor bas
sele bas
c=reccount()
if c<1
use
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
mand2.click()
return
endif
endif
with thisform.grd入库单
.width=588
.height=200
.left=10
.recordsource="bas"
.deletemark=.f.
.visible=.t.
.readonly=.t.
.ColumnCount=9
.Column1.Header1.Caption="入库编号"
.Column1.Header1.BackColor=RGB(255,255,190)
.Column2.Header1.BackColor=RGB(255,255,190)
.Column2.Header1.Caption="商品型号"
.Column3.Header1.BackColor=RGB(255,255,190)
.Column3.Header1.Caption="计量单位"
.Column4.Header1.BackColor=RGB(255,255,190)
.Column4.Header1.Caption="单价"
.Column5.Header1.BackColor=RGB(255,255,190)
.Column5.Header1.Caption="数量"
.Column6.Header1.BackColor=RGB(255,255,190)
.Column6.Header1.Caption="金额"
.Column7.Header1.BackColor=RGB(255,255,190)
.Column7.Header1.Caption="生产厂商"
.Column8.Header1.BackColor=RGB(255,255,190)
.Column8.Header1.Caption="出厂日期"
.Column9.Header1.BackColor=RGB(255,255,190)
.Column9.Header1.Caption="仓管员"
.Column1.width=80
.Column2.width=80
.Column3.width=80
.Column4.width=80
.Column5.width=80
.Column6.width=80
.Column7.width=80
.Column8.width=80
.Column9.width=80
endwith
thisform.grd入库单.Setall("DynamicBackColor","RGB(224,225,255)","Column")
thisform.grd入库单.setfocus
else
messagebox("请输入要查找的内容!",16,"系统提示")
thisform.Text1.value=""
thisform.Text1.Setfocus
endif
① 取消”按钮(command2)的click事件如下:
Thisform.release
下图为查询模块其余的出库查询、库存查询和商品资料查询的界面设计,其制
作过程与入库查询相似。如图4.7和4.8
图4.7
图4.8
4.3.2信息修改表单
1、项目详细设计
修改模块:出库修改、入库修改、商品资料修改
例:入库修改 如图4.9
图4.9
2、界面操作说明:
按钮控制策略:查找方式组合框共有9个选项,查找内容为空,查找、修改、取消按钮一直为亮。
修改处理过程:需要修改时,在组合框中选择要查找的条件,在文本框中输入相应信息(输入信息要正确,否则系统会出现错误提示),按按钮查找,即下面的文本框中会出现所要查找的记录的详细信息(其中入库编号是固定的)。对相应信息进行修改后,按按钮修改,即可保存修改好的信息。
3、项目具体实现
例:入库修改
本表单用于对入库商品的相关信息进行修改。在组合框中选择要查找的条件,在文本框中输入相应信息(输入信息要正确,否则系统会出现错误提示),按按钮查找,即下面的文本框中会出现所要查找的记录的详细信息(其中入库编号是固定的)。对相应信息进行修改后,按按钮修改,即可保存修改好的信息。按取消按钮则返回主菜单。
本表单使用的数据环境为入库单和厂商信息表。
在表单上设计如下事件过程:
1、新建表单form1,并将其caption属性设置为“入库修改”,width属性值设为290,height属性值设为226,AutoCenter属性值设为.t.,并将其保存为“入库修改.scx”。
2、向表单添加一个grid控件,将其readonly属性设置为.t.,其RecordSourceType值采用默认的“1-别名”,在表单设计器中将其宽和高粗略调小一些即可,具体属性值我们将在表单的init事件代码中对其进行设置。
3、在grid控件下方添加两个Label控件,使其排成一行,并将其caption属性依次设为“请选择查找方式”和“请输入要查找的内容”。
4、在label控件下方添加一个组合框控件Combo1及一个文本框控件Text1,文本框控件的属性值采用默认即可,组合框控件Combo1的RowSourceType属性值设置为“1-值”,RowSource属性值设置为“入库编号、商品型号、计量单位、单价、数量、金额、生产厂商、生产日期和仓管员”,这样在运行时我们可以在该组合框中选择要查询的字段。
5、在表单上添加3个命令按钮command1 command2和command3,将其caption属性依次设为“查找”、“修改”和“取消“。
6、在命令按钮下方添加9个label控件,将这9个label控件排成两行,并将其caption属性依次设置为“入库编号”、“商品型号”和“计量单位”等等。
7、在这两行label控件下方添加9个文本框控件,属性值采用默认,并把这9个文本框排成两行。
8、调整表单上各个控件的位置,调整后的表单设计器如图4.10
重点:
图4.10
① “查找”按钮(command1)的click事件如下:
if
empty(thisform.Text1.value)=.f.
go top
a=thisform.Combo1.value
b=alltrim(thisform.Text1.value)
c=.f.
if a="入库编号"
locate for 入库编号=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else (图)
c=.t.
endif
endif
if a="商品型号"
locate for 商品型号=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="计量单位"
locate for 计量单位=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="单价"
b=ntom(val(alltrim(thisform.text1.value)))
locate for 单价=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="数量"
b=val(alltrim(thisform.text1.value))
locate for 数量=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="金额"
b=ntom(val(alltrim(thisform.text1.value)))
locate for 金额=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="生产厂商"
locate for 生产厂商=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="出厂日期"
b=ctod(val(alltrim(thisform.text1.value)))
locate for 出厂日期=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if a="仓管员"
locate for 仓管员=b
if eof()
messagebox("数据库中不存在您所要查询的记录",16,"系统提示")
go top
return
else
c=.t.
endif
endif
if c
thisform.Text1.enabled=.f.
go recno()
thisform.Text2.visible=.t.
thisform.Text2.enabled=.f.
thisform.Text3.visible=.t.
thisform.Text4.visible=.t.
thisform.Text5.visible=.t.
thisform.Text6.visible=.t.
thisform.Text7.visible=.t.
thisform.Text8.visible=.t.
thisform.Text9.visible=.t.
thisform.Text10.visible=.t.
thisform.Label3.visible=.t.
thisform
展开阅读全文