数据库课程设计商品进销存管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
设计题目:超市销售管理系统
学生姓名:潘小涛
学号: 20052408 专业班级:计算机科学与技术05-2班
2008年9月23日
一.设计要求
1.信息要求
本系统至少应该包含超市所有货物管理相关的基本信息,包括进货信息和销售信息等。
它们都应该包括商品货物的基本信息(如员商品编号、商品名称、规格、产地、单位、进价、批发价、零售价等)和客户的基本信息(如客户编号、客户名称、联系人、联系电话、地址、客户信箱、银行帐号等)。
2.功能要求
本系统的基本功能要求如下:
进货商品的信息维护(包括简单查询、修改、删除和添加等功能);
销售商品的信息维护(包括简单查询、修改、删除和添加等功能);
客户的信息维护(包括简单查询、修改、删除和添加等功能);
系统用户的信息维护(包括简单查询、修改、删除、添加和权限分配等功能);
系统信息备份、还原;
二.软件环境及开发工具
1.个人电脑及Win XP Pro
2.Delphi 7.0
3.SQL Server 2000
三.需求分析
对该超市销售管理系统进行深入的业务流程分析后画出数据流图。
由数据流图图可以看出来,每个操作员查看信息前必须先登录这个管理系统,每个操作员的信息保存在操作员信息表中。
用户登录系统后可以查看商品进销管理信息和客户信息,也可以通过查询选择自己希望得到的信息。
四.数据库设计
1.概念设计
根据需求分析的结果,得到的用ER图表示的概念设计结果如下图所示
2.逻辑设计
根据分析,整个销售系统系统需要的数据表如下:
商品信息:商品编号、商品名称、规格、产地、单位、进价、批发价、零售价等;
客户信息:客户编号、客户名称、联系人、联系电话、地址、客户信箱、银行帐号等;
操作员信息:操作员编号、操作员姓名、操作员密码、操作员级别等;
销售信息:销售号、客户编号、客户名、商品编号、商品名称、单价、数量、金额、销售时间等。
五.系统设计
由于这个超市销售信息管理系统是一个比较小型的数据库系统,只需要储存
文本信息,都是小字段的问题,作为一个小型的数据库系统,数据量最多在百至千条左右,故采用微软的SQL Server作为后台数据库,使用SQL语言进行操作。
操作员信息表,包括了操作员编号、操作员姓名、操作员密码和操作员级别,其中操作员编号是主码:
商品信息表,商品编号、商品名称、规格、产地、单位、进价、批发价、零售价等,其中商品编号是主码:
客户信息表,包括客户编号、客户名称、联系人、联系电话、地址、客户信箱、银行帐号等。
其中客户编号是主码:
销售信息表,包括销售号、客户编号、客户名、商品编号、商品名称、单价、数量、金额、销售时间等,其中销售号是主码:
库存信息表,包括商品编号、商品名称、库存数量、库存金额等,其中商品编号是主码:
六.系统操作说明和运行结果
打开Project.exe,出现登陆界面:
输入正确用户名和密码后进入系统,否则出现错误提示:
系统主界面:
商品信息管理界面:
客户信息管理界面:
操作员信息管理界面:
销售查询界面:
销售管理界面:
库存量调整界面:
七.程序清单
由于系统是图形化的信息管理系统,故使用Delphi实现。
程序清单过于冗长,在此仅列出其中关键部分。
1. 用户登录部分:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
username,userpass,sqlstr:string;
begin
username:=trim(edit1.Text);
userpass:=trim(edit2.Text);
sqlstr:='select *from 操作员信息表 where (操作员姓名='''+username+''')and(操作员密码='''+userpass+''')' ;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqlstr);
adoquery1.Open;
if adoquery1.RecordCount>0 then
begin
self.Visible:=false;
b:=true;
application.CreateForm(Tmainn,mainn);
mainn.ShowModal;
mainn.Free;
close;
end
else
begin
if i <3 then
begin
Application.MessageBox('用户名称或密码不正确,请重新输入。
','提示',0+64); Edit1.Clear;
Edit2.Clear;
Edit1.SetFocus;
Inc(i);
end
else
begin
Application.MessageBox('对不起,您无权使用本系统。
','提示',0+64);
Application.Terminate ;
end;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormClose(Sender: TObject);
begin
if b=false then
application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.
2. 商品信息管理代码:
var
spinfor: Tspinfor;
implementation
{$R *.dfm}
procedure tspinfor.editvalue;
begin
edit1.Text:=inttostr(adoquery1.fieldbyname('商品编号').Value);
edit2.Text:=adoquery1.fieldbyname('商品名称').Value;
edit3.Text:=adoquery1.fieldbyname('规格').Value;
edit4.Text:=adoquery1.fieldbyname('产地').Value;
edit5.Text:=adoquery1.fieldbyname('单位').Value;
edit6.Text:=floattostr(adoquery1.fieldbyname('进价').Value);
edit7.Text:=floattostr(adoquery1.fieldbyname('批发价').Value);
edit8.Text:=floattostr(adoquery1.fieldbyname('零售价').Value);
end;
procedure Tspinfor.formshow(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select *from 商品基础信息表');
adoquery1.Open;
adoquery1.First;
editvalue;
bitbtn4.Enabled:=false;
end;
procedure tspinfor.clearedit;
begin
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
edit6.Clear;
edit7.Clear;
edit8.Clear;
end ;
procedure Tspinfor.BitBtn1Click(Sender: TObject);
begin
if not adoquery1.bof then
begin
adoquery1.Prior;
self.editvalue;
end
else
bitbtn1.Enabled:=false;
bitbtn2.Enabled:=true;
end;
procedure Tspinfor.BitBtn2Click(Sender: TObject);
begin
if not adoquery1.Eof then
begin
adoquery1.Next;
editvalue;
end
else
bitbtn2.Enabled:=false;
bitbtn1.Enabled:=true;
end;
procedure Tspinfor.BitBtn3Click(Sender: TObject);
var i:integer;
begin
clearedit;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select max(商品编号) as ss from 商品基础信息表') ;
adoquery1.Open;
i:=adoquery1.FieldByName('ss').Value+1;
edit1.Text:=inttostr(i);
edit2.SetFocus;
bitbtn4.Enabled:=true;
end;
procedure Tspinfor.BitBtn4Click(Sender: TObject);
begin
if (edit1.Text<>'')and (edit2.Text<>'')and (edit3.Text<>'')and (edit4.Text<>'')and
(edit5.Text<>'')and (edit6.Text<>'')and (edit7.Text<>'')and (edit8.Text<>'') then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert 商品基础信息表values(:a,:b,:c,:d,:e,:f,:g,:h) ');
adoquery1.Parameters.ParamByName('a').Value:=strtoint(edit1.Text);
adoquery1.Parameters.ParamByName('b').Value:=edit2.Text;
adoquery1.Parameters.ParamByName('c').Value:=edit3.Text;
adoquery1.Parameters.ParamByName('d').Value:=edit4.Text;
adoquery1.Parameters.ParamByName('e').Value:=edit5.Text; adoquery1.Parameters.ParamByName('f').Value:=strtofloat(edit6.Text);
adoquery1.Parameters.ParamByName('g').Value:=strtofloat(edit7.Text);
adoquery1.Parameters.ParamByName('h').Value:=strtofloat(edit8.Text);
adoquery1.ExecSQL;
showmessage('the save operation is succeed!!!');
self.formshow(sender);
end
else
showmessage('please fill in the blank completely!!!');
end;
procedure Tspinfor.BitBtn5Click(Sender: TObject);
begin
if (edit1.Text<>'')and (edit2.Text<>'')and (edit3.Text<>'')and (edit4.Text<>'')and
(edit5.Text<>'')and (edit6.Text<>'')and (edit7.Text<>'')and (edit8.Text<>'') then
begin
adoquery1.Edit;
adoquery1.fieldbyname('商品编号').Value:=strtoint(edit1.Text);
adoquery1.fieldbyname('商品名称').Value:=edit2.Text;
adoquery1.fieldbyname('规格').Value:=edit3.Text;
adoquery1.fieldbyname('产地').Value:=edit4.Text;
adoquery1.fieldbyname('单位').Value:=edit5.Text;
adoquery1.fieldbyname('进价').Value:=strtofloat(edit6.Text);
adoquery1.fieldbyname('批发价').Value:=strtofloat(edit7.Text);
adoquery1.fieldbyname('零售价').Value:=strtofloat(edit8.Text);
adoquery1.Post;
showmessage('the amend operation is succeed!!!') ;
end
else
showmessage('please fill in the blank completely!!!');
end;
procedure Tspinfor.BitBtn6Click(Sender: TObject);
begin
if edit1.Text<>'' then
begin
if application.MessageBox('do you really want to delete the item ??','hint',mb_yesno)=id_yes then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('delete from 商品基础信息表 where 商品编号=:a') ;
adoquery1.Parameters.ParamByName('a').Value:=strtoint(edit1.Text);
adoquery1.ExecSQL;
showmessage('the delete operation is succeed!!!');
self.formshow(sender);
end
end
else
showmessage('please fill in the commodity number blank!!!');
end;
procedure Tspinfor.BitBtn7Click(Sender: TObject);
begin
self.formshow(sender);
end;
procedure Tspinfor.Panel3Click(Sender: TObject);
begin
end;
end.
3. 销售管理代码:
procedure TForm6.FormShow(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 销售表');
adoquery1.Open;
bitbtn2.Enabled:=false;
end;
procedure TForm6.BitBtn1Click(Sender: TObject);
var i:integer;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select max(销售号) as ss from 销售表');
adoquery1.Open;
i:=adoquery1.FieldByName('ss').Value+1;
edit1.Text:=inttostr(i);
edit2.SetFocus;
self.FormShow(sender);
bitbtn2.Enabled:=true;
end;
procedure TForm6.BitBtn2Click(Sender: TObject);
begin
if (edit1.Text<>'')and (edit2.Text<>'')and (edit3.Text<>'')and
(edit4.Text<>'')and
(edit5.Text<>'')and (edit6.Text<>'')and (edit7.Text<>'')and
(edit8.Text<>'')
then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert 销售表 values(:a,:b,:c,:d,:e,:f,:g,:h,:i)'); adoquery1.Parameters.ParamByName('a').Value:=strtoint(edit1.Text);
adoquery1.Parameters.ParamByName('b').Value:=strtoint(edit2.Text);
adoquery1.Parameters.ParamByName('c').Value:=edit3.Text;
adoquery1.Parameters.ParamByName('d').Value:=strtoint(edit4.Text);
adoquery1.Parameters.ParamByName('e').Value:=edit5.Text;
adoquery1.Parameters.ParamByName('f').Value:=strtofloat(edit6.Text);
adoquery1.Parameters.ParamByName('g').Value:=strtofloat(edit7.Text);
adoquery1.Parameters.ParamByName('h').Value:=strtofloat(edit8.Text);
adoquery1.Parameters.ParamByName('i').Value:=datetimepicker1.Date;
adoquery1.ExecSQL;
showmessage('the save operation is succeed!!!');
self.formshow(sender);
end
else
showmessage('please fill in the blank completely!!!');
end;
procedure TForm6.BitBtn3Click(Sender: TObject);
begin
if (edit1.Text<>'')and (edit2.Text<>'')and (edit3.Text<>'')and
(edit4.Text<>'')and
(edit5.Text<>'')and (edit6.Text<>'')and (edit7.Text<>'')and
(edit8.Text<>'')
then
begin
if application.MessageBox('do you really want to amend the item
','hint',mb_yesno)=id_yes then
begin
adoquery1.Edit;
adoquery1.fieldbyname('销售号').Value:=strtoint(edit1.Text);
adoquery1.fieldbyname('客户编号').Value:=strtoint(edit2.Text);
adoquery1.fieldbyname('客户名').Value:=edit3.Text;
adoquery1.fieldbyname('商品编号').Value:=strtoint(edit4.Text);
adoquery1.fieldbyname('商品名称').Value:=edit5.Text;
adoquery1.fieldbyname('单价').Value:=strtofloat(edit6.Text);
adoquery1.fieldbyname('数量').Value:=strtofloat(edit7.Text);
adoquery1.fieldbyname('金额').Value:=strtofloat(edit8.Text);
adoquery1.fieldbyname('销售时间').Value:=datetimepicker1.Date;
adoquery1.Post;
self.formshow(sender);
showmessage('the amend operation is succeed!!!') ;
end
end
else
showmessage('please fill in the blank completely!!!');
end;
procedure TForm6.BitBtn4Click(Sender: TObject);
begin
if edit1.Text<>'' then
begin
if application.MessageBox('do you really want to delete the item ','hint',mb_yesno)=id_yes then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('delete from 销售表 where 销售号=:a') ;
adoquery1.Parameters.ParamByName('a').Value:=strtoint(edit1.Text); adoquery1.ExecSQL;
self.formshow(sender);
end
end
else
showmessage('please fill in the sell number blank!!!');
end;
procedure TForm6.BitBtn5Click(Sender: TObject);
begin
self.FormShow(sender);
end;
procedure TForm6.Panel1Click(Sender: TObject);
begin
end;
end.
4. 销售查询代码:
procedure bobox1change(Sender: TObject);
begin
if Trim(ComboBox1.Text)<>''then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select distinct');
ADOQuery1.SQL.Add(Trim(ComboBox1.Text));
ADOQuery1.SQL.Add('from 销售表 ');
ADOQuery1.Open;
ComboBox2.Clear;
while Not ADOQuery1.Eof do
begin
ComboBox2.Items.Add(ADOQuery1.Fields[0].value);
ADOQuery1.Next;
end;
end;
end;
procedure TForm5.SpeedButton1Click(Sender: TObject);
begin
if (Trim(ComboBox2.Text)<>'')and(Trim(ComboBox1.Text)<>'') then
begin
CheckBox1.Checked := False;
adoquery1.close;
adoquery1.SQL.Clear;
if CheckBox2.Checked = False then
begin
adoquery1.SQL.Add('select * from 销售表 where ');
adoquery1.SQL.Add(Trim(ComboBox1.Text));
adoquery1.SQL.Add('=');
adoquery1.SQL.Add(':a');
end
else
begin
adoquery1.SQL.Add('Select * from 销售表 where');
adoquery1.SQL.Add(Trim(ComboBox1.Text));
adoquery1.SQL.Add('=');
adoquery1.SQL.Add(':a');
adoquery1.SQL.Add('and 销售时间>=:b and 销售时间<= :c');
adoquery1.Parameters.ParamByName('b').Value :=
Int(DateTimePicker1.Date) ;
adoquery1.Parameters.ParamByName('c').Value :=
Int(DateTimePicker2.Date);
end;
adoquery1.Parameters.ParamByName('a').value := Trim(ComboBox2.Text); adoquery1.Open;
end;
end;
procedure TForm5.CheckBox1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('Select * from 销售表 ');
adoquery1.Open;
end;
procedure TForm5.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure TForm5.Panel2Click(Sender: TObject);
begin
end;
end.
5. 库存量管理代码:
procedure TForm4.formshow(Sender: TObject);
begin
radiobutton1.Checked:=true;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select Distinct 商品名称 from 商品基础信息表 ');
adoquery1.Open;
while not adoquery1.Eof do
begin
combobox1.Items.Add(adoquery1.fieldbyname('商品名称').AsString);
adoquery1.Next;
end ;
combobox1.ItemIndex:=0;
end;
procedure TForm4.BitBtn1Click(Sender: TObject);
begin
if (Trim(ComboBox1.Text)<>'')and(Trim(ComboBox2.Text)<>'')and
(Trim(Edit1.Text)<>'')and(Trim(Edit2.Text)<>'')then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from 库存表 where 商品编号 = :a');
ADOQuery1.Parameters.ParamByName('a').Value := Trim(ComboBox2.Text);
ADOQuery1.Open;
if ADOQuery1.RecordCount>0 then
begin
if radiobutton1.Checked=true then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update 库存表 set 库存数量 = 库存数量 + :a ,库存金额= 库存金额 + :b where 商品编号 = :c');
ADOQuery1.Parameters.ParamByName('a').Value := StrToInt(Edit1.Text);
ADOQuery1.Parameters.ParamByName('b').Value := StrToFloat(Edit2.Text); ADOQuery1.Parameters.ParamByName('c').Value := Trim(ComboBox2.Text);
ADOQuery1.ExecSQL;
end
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update 库存表 set 库存数量 = 库存数量 - :a ,库存金额 = 库存金额 - :b where 商品编号 = :c');
ADOQuery1.Parameters.ParamByName('a').Value := StrToInt(Edit1.Text); ADOQuery1.Parameters.ParamByName('b').Value :=
StrToFloat(Edit2.Text);
ADOQuery1.Parameters.ParamByName('c').Value := Trim(ComboBox2.Text); ADOQuery1.ExecSQL;
end;
end
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Insert 库存表 values (:a,:b,:c,:d,Default)');
ADOQuery1.Parameters.ParamByName('a').Value := Trim(ComboBox2.Text); ADOQuery1.Parameters.ParamByName('b').Value := Trim(ComboBox1.Text); ADOQuery1.Parameters.ParamByName('c').Value := StrToInt(Edit1.Text); ADOQuery1.Parameters.ParamByName('d').Value := StrToFloat(Edit2.Text); ADOQuery1.ExecSQL;
end;
showmessage('the save operation is succeed!!!');
self.BitBtn3Click(sender);
end;
end;
procedure TForm4.BitBtn3Click(Sender: TObject);
begin
combobox1.Clear;
combobox2.Clear;
edit1.Clear;
edit2.Clear;
end;
procedure TForm4.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm4.GroupBox1Click(Sender: TObject);
begin
end;
end.
八.总结
设计题目要求设计一个超市销售信息管理系统,该系统就是一个面向目前普遍存在的大型商场或超市的管理系统。
针对不同的身份提供了不同的功能。
由于时间有限,仅实现了系统的员工和部门信息的增删查改,以及备份还原和用户修改,只能应对要求程度很低的人事管理,以后将逐渐加以完善。
Delphi作为目前流行的一种图形化程序开发工具,其操作便捷,代码实现简单,便于学习和使用,在本次课程设计中,充分感受到了它的优点和功能。