《DELPHI课程设计贸易管理系统.doc》由会员分享,可在线阅读,更多相关《DELPHI课程设计贸易管理系统.doc(26页珍藏版)》请在三一办公上搜索。
1、1系统需求分析(宋体 四号 粗体)本贸易公司系统的业务主要用于基本信息的管理,包括供货商信息、顾客信息、商品信息和仓库信息的维护以及所经营商品的进、销、存管理,完成的主要功能包括:(1)客户管理包括供货商和顾客信息的管理。管理和维护供货商或顾客的公司名称、地址、联系人姓名、联系电话、邮政编码和公司主页等信息。(2)商品管理包括随所有营销商品信息的管理。管理和维护商品的名称、规格型号、计量单位、底线库存和高线库存等信息。(3)仓库管理包括对仓库信息的管理,管理和维护仓库的名称、地址和负责人等信息。(4)进销存管理包括进货管理和销售管理两大部分,记录进货的信息,包括供应商信息、商品信息和存货仓库的
2、悉尼西,同时同步更新库存信息;记录销售信息,包括顾客信息、商品信息和存款仓库的信息,同时同步更新库存信息。(5)查询统计包括商品库存信息的查询、进货信息和销售信息的查询。同时及时了解短线商品,即库存量低于库存的商品和超储商品,以及库存量高于高线库存的商品的信息,从而及时的出货和补货。(正文:宋体 小四号 行间距:固定值 18磅 段前 段后间距 0)2基本功能概述(1)系统为公司的客户信息建立档案,包括供货商和顾客的公司名称、地址、联系人、联系电话、传真、邮编和公司主页等信息,并能对这些信息进行增加、修改、删除和查询等操作。(2)系统为公司所营销的商品信息建立档案,包括商品名称、规格、记录单位、
3、底线库存和高线库存等信息,并能对这些信息进行增加、修改、删除和查询等操作。(3)系统为公司所储库仓库建立档案,包括仓库的名称、地址和负责人等信息,并能对这些信息进行增加、修改、删除和查询等操作。(4)当公司进货时能对进货的信息进行入库管理,记录供货商信息、所存储仓库信息、进货商品的名称、规格、数量和进货时间等进货信息,并能对这些信息进行增加、修改、删除和查询等操作。同时需要同步更新相应商品的库存信息。(5)当公司销售时能对销售的信息进行入库管理,记录顾客信息、出货仓库信息、销售商品的名称、规格、数量和出货时间等销售信息,并能对这些信息进行增加、修改、删除和查询等操作。同时系统要能自动列出仓库中
4、可供销售商品的信息,同时对超过库存的销售能制止和提示,销售后要能同步更新商品的库存信息。(6)当出现了底线货品和超储货品时,系统要能查出这些商品并显示给系统操作员。(7)系统应该具有查询所有信息的功能。(8)系统应该可以管理用户并设置相应的权限。(9)系统应该可以对基础数据进行维护。(10)系统应该有很好的可扩展性。3系统模块设计贸易管理系统系统管理基本信息管理营销管理查询统计图1 贸易管理系统基本功能模块一个通用的贸易管理系统可以分为以下几个功能模块,如图1所示。(1)系统管理系统管理模块包括的主要功能是对于用户信息的管理及密码的修改。这些设置一般不轻易改动,其包含的功能模块如图2所示。其中
5、系统用户管理用于设置使用系统的用户,包括设置权限、添加、删除和修改用户信息等。用户密码修改功能提供当前用户修改本人密码的权限。系统管理系统用户管理用户密码修改图2 “系统管理”功能模块(2)基本信息管理基本信息管理用于设置和维护公司的基本信息,包括供货商和顾客的基本信息管理、仓库信息管理和所营销的商品信息的管理,其包含的功能模块如图2所示。其中,客户管理包括了供货商信息和顾客信息的管理和维护两个模块。包括公司名称、地址、联系人、联系电话、传真号码和公司主页等信息。仓库信息管理用于添加、编辑和删除公司存储货物的库房的具体信息,包括仓库的编号、名称、地址和负责人的信息。基本信息管理客户管理商品管理
6、图3 “基本信息管理”功能模块仓库管理供货商管理顾客管理商品管理用于添加、编辑和删除公司所经营商品的具体信息。(3)营销管理营销管理模块是系统的核心功能模块,主要实现了公司的进、销、存管理、其包含的功能模块如图4所示。其中,进货管理用于添加、设置和修改公司的进货信息,包括供货商的编号和名称、存储仓库的编号和名称、所进商品的编号、名称、规格、计量单位、进货数量、单价和入库时间的信息。销售管理用于添加、设置和修改公司的进货信息,包括顾客的编号和名称、出库商品的编号和名称、所售商品的编号、名称、规格、计量单位、出货数量、单价和出库时间的信息。库存管理用于管理商品的存储信息,当进货和出货时需要更新商品
7、的库存量。营销管理进货管理库存管理图4 “营销管理”功能模块销售管理(4)查询统计查询统计进货信息查询短线商品统计图5 “查询统计”功能模块销售信息查询库存信息查询超储商品统计查询统计模块实现了库存信息、进货信息、销售信息的查询,以及短线商品和超储商品的统计显示,包含的功能模块如图5所示。其中,库存信息查询模块主要提供库存信息的查询和显示,提供商品的库存商品名称、商品规格、商品计量单位和商品的库存数量的信息。可以通过仓库名称和商品名称进行数据的过滤。进货信息查询主要提供进货的时间、进货商品数量、名称、规格、型号、供货商名称和存储仓库名称等信息的显示,可以通过供货商名称、商品名称或仓库名称进行数
8、据过滤。销售信息查询主要提供销售商品的时间、商品数量、名称、规格、型号、顾客名称和出货仓库等信息的显示,可以通过顾客名称、商品名称或仓库名称进行数据过滤。短线商品统计提供了自动显示当前库存中的库存数量低于其底线库存的商品信息,便于提醒公司及时补货。超储商品统计提供了自动显示当前库存中的库存数量高于其底线库存的商品信息,便于提醒公司及时出货。功能结构如图11所示:。4数据库的设计根据上面的需求分析和功能模块设计,贸易管理系统共需8张表: 表1 系统数据表及用途(所有表格为5号字,代码为5号字):表名用途Cuser保存系统用户的信息Customer保存公司顾客的信息Depot保存公司仓库的信息Pr
9、oduct保存公司所营销商品的信息Sell保存商品销售的信息Stock保存商品进货的信息Storage保存商品库存的信息图6 数据库图示( 可以截图,也可以用表格)5各个功能模块窗体创建(这个部分写的是系统各个功能模块窗体的设计和程序代码,窗体要截图,代码要有注释,代码只列出主要功能按钮的程序,相似按钮的代码可以省略)(1)创建登录窗体和主窗体 图7 系统数据模块(截图,注意图编号要按顺序排列)各个组件的主要属性设置入下表2:表2 数据模块组件属性设置组件名称属性属性值ADOConnection1ConnectionStringProvider=SQLOLEDB.1;Persist Secur
10、ity Info=False;User ID=sa;Initial Catalog=sale_manage;Data Source=BBBLoginPromptFalseConnectedTrueADO_providerConnectionTableNameADOConnection1ProviderADO_customerConnectionTableNameADOConnection1CustomerADO_userConnectionTableNameADOConnection1CuserADO_productConnectionTableNameADOConnection1Produc
11、tADO_depotConnectionTableNameADOConnection1DepotADO_stockConnectionTableNameADOConnection1StockADO_sellConnectionTableNameADOConnection1SellADO_storageConnectionTableNameADOConnection1StorageADOQ_cxConnectionADOConnection1用于登录的窗体时在整个程序运行之前首先呈现给用户的界面,通过它来进行用户的合法性验证,创建的窗体如图8:图8 登录窗体下列代码实现的功能时在窗体创建时从系统
12、用户表中读出所有的用户名,并将它们添加到“用户名”的下拉列表中,在用户单击了“登录”按钮后验证用户输入的用户名和密码是否正确,如验证合法则登陆到主窗体。procedure Tcfrm_login.FormCreate(Sender: TObject);begin dm.ADO_user.open; dm.ADO_user.Sort:=userID; while not dm.ado_user.Eof do begin Combobox1.items.add(dm.ADO_user.fieldbyname(username).AsString); dm.ADO_user.Next; end; C
13、ombobox1.ItemIndex:=0end;procedure Tcfrm_login.ComboBox1Change(Sender: TObject);begin edit1.Text:=; edit1.SetFocus;end;procedure Tcfrm_login.BitBtn2Click(Sender: TObject);begin dm.ado_user.Close; Application.Terminate;end;procedure Tcfrm_login.BitBtn1Click(Sender: TObject);var kl:variant; pass:strin
14、g;begin username:=Combobox1.text; kl:=dm.ado_user.lookup(username,username,pass);/从数据库表中查询出选中用户所对应的密码 if varisnull(kl) then pass:= else pass:=kl; if edit1.textpass then/验证密码,如果连续三次密码错误则关闭应用程序 begin i:=i+1; if i=3 then begin Application.MessageBox(PChar(密码验证错误,拒绝访问!), PChar(提示), MB_ICONEXCLAMATION);
15、Application.Terminate; close; end; application.messagebox(pchar(密码验证错误,重新录入!),pchar(提示), MB_ICONQUESTION); edit1.text:=; edit1.SetFocus(); exit; end; dm.ADO_user.Close; cfrm_login.hide; cfrm_mainform:=tcfrm_mainform.create(application);/创建主窗体 cfrm_mainform.showmodal;/显示主窗体end;procedure Tcfrm_login.F
16、ormActivate(Sender: TObject);beginedit1.SetFocus;end;procedure Tcfrm_login.FormClose(Sender: TObject; var Action: TCloseAction);begin dm.ado_user.Close; Application.Terminate;end;(3)主窗体设计 图9 系统主界面设计(4)用户管理窗体设计 图10 用户管理窗体代码如下:procedure Tcfrm_czy.DataSource1DataChange(Sender: TObject; Field: TField);b
17、egin e_id.Text:=dm.ADO_user.fieldbyname(userID).asstring; e_name.text:=dm.ADO_user.fieldbyname(username).asstring; if dm.ADO_user.fieldbyname(manager).AsBoolean=true then image1.Visible:=true else image1.Visible:=false;end;procedure Tcfrm_czy.BitBtn4Click(Sender: TObject);/删除用户记录beginif dm.ADO_user.
18、FieldByName(manager).AsBoolean=true then begin application.MessageBox(pchar(系统管理员,不可删除!) ,pchar(提示),MB_ICONEXCLAMATION+mb_ok); exit; end; mes:=是否要删除操作员; if application.MessageBox(pchar(mes),pchar(等待确认) ,+MB_ICONQUESTION+mb_okcancel)=idok then dm.ADO_user.Delete;end;procedure Tcfrm_czy.BitBtn1Click(S
19、ender: TObject);begin BitBtn3.Tag:=1;/设置“保存”按钮(button3)的标记,以区别是新建还是编辑 e_id.Enabled:=true; e_name.Enabled:=true; e_id.Text:=; e_name.text:=; Bitbtn1.enabled:=false; Bitbtn2.Enabled:=false; Bitbtn3.Enabled:=true; Bitbtn4.Enabled:=false; e_id.SetFocus();end;procedure Tcfrm_czy.BitBtn3Click(Sender: TObj
20、ect);var bh,xm:string;begin bh:=e_id.Text; xm:=e_name.text; if Bitbtn3.Tag=1 then/标记为1则进行新建操作 begin try dm.ADO_user.AppendRecord(bh,xm); except e_id.SetFocus; e_id.text:=; e_name.Text:=; mes:=录入错误!+#13+#13+注意:、均不能为空 +#13+ 且不可重复,请重新录入!; application.messagebox(pchar(mes),pchar(提示),MB_ICONEXCLAMATION);
21、 exit; end; dm.ADO_user.Sort:=userID; e_id.text:=; e_name.Text:=; e_id.SetFocus(); end else/标记为2则进行编辑操作 begin dm.ADO_user.Edit; dm.ADO_user.fieldbyname(userID).AsString:=bh; dm.ADO_user.fieldbyname(username).AsString:=xm; try dm.ADO_user.Post; except mes:=录入错误!+#13+#13+注意:、均不能为空 +#13+ 且不可重复,请重新录入!;
22、application.messagebox(pchar(mes),pchar(提示),MB_ICONEXCLAMATION); dm.ADO_user.Cancel; exit; end; dm.ADO_user.Sort:=userID; end; Bitbtn3.Enabled:=false; Bitbtn1.Enabled:=true; Bitbtn2.Enabled:=true; Bitbtn4.Enabled:=true;end;(5)供货商信息管理窗体供货商信息窗体与顾客信息管理窗体、仓库信息管理窗体和商品信息管理类似窗体,所以其他三个窗体代码略去不写。 图11 供货商信息管理窗
23、体代码如下:procedure Tcfrm_provider.ghssl;/统计供货商总数并显示的函数begin providercount:=dm.ADO_provider.RecordCount; StatusBar1.Panels0.text:=当前的供货商总数为:+inttostr(providercount);end;procedure Tcfrm_provider.TButton1Click(Sender: TObject);begin dm.ADO_provider.Append; TButton5.Tag:=0; TButton1.Enabled:=false; TButton
24、2.Enabled:=false; TButton3.Enabled:=false; TButton5.Enabled:=true; TButton6.Enabled:=true; DBEdit1.Enabled:=true; DBEdit2.Enabled:=true; DBEdit3.Enabled:=true; DBEdit4.Enabled:=true; DBEdit5.Enabled:=true; DBEdit6.Enabled:=true; DBEdit7.Enabled:=true; DBEdit8.Enabled:=true; DBEdit9.Enabled:=true;end
25、;procedure Tcfrm_provider.TButton2Click(Sender: TObject);beginTButton5.Tag:=1; TButton1.Enabled:=false; TButton2.Enabled:=false; TButton3.Enabled:=false; TButton5.Enabled:=true; TButton6.Enabled:=true; DBEdit1.Enabled:=true; DBEdit2.Enabled:=true; DBEdit3.Enabled:=true; DBEdit4.Enabled:=true; DBEdit
26、5.Enabled:=true; DBEdit6.Enabled:=true; DBEdit7.Enabled:=true; DBEdit8.Enabled:=true; DBEdit9.Enabled:=true;end;procedure Tcfrm_provider.TButton6Click(Sender: TObject);begindm.ADO_provider.Cancel; TButton1.Enabled:=true; TButton2.Enabled:=true; TButton3.Enabled:=true; TButton5.Enabled:=false; TButto
27、n6.Enabled:=false; DBEdit1.Enabled:=false; DBEdit2.Enabled:=false; DBEdit3.Enabled:=false; DBEdit4.Enabled:=false; DBEdit5.Enabled:=false; DBEdit6.Enabled:=false; DBEdit7.Enabled:=false; DBEdit8.Enabled:=false; DBEdit9.Enabled:=false;end;procedure Tcfrm_provider.TButton3Click(Sender: TObject);var me
28、s:string;beginmes:=是否要删除供货商; if application.MessageBox(pchar(mes),pchar(等待确认) ,+MB_ICONQUESTION+mb_okcancel+MB_DEFBUTTON2)=idok then begin dm.ADO_provider.Delete;/删除顾客记录 end; ghssl;end;procedure Tcfrm_provider.TButton5Click(Sender: TObject);begin if DBEdit1.Text= then /判断是否输入了供货商名称 begin Application
29、.MessageBox(PChar(供货商名称不能为空,请重新录入!) , PChar(提示),MB_ICONEXCLAMATION); DBEdit1.SetFocus(); exit; end; if TButton5.Tag=1 then dm.ADO_provider.Edit; try dm.ADO_provider.Post; except Application.MessageBox(PChar(输入信息有错误!), PChar(提示), MB_ICONEXCLAMATION); DBEdit1.SetFocus(); exit; end; TButton1.Enabled:=t
30、rue; TButton2.Enabled:=true; TButton3.Enabled:=true; TButton5.Enabled:=false; TButton6.Enabled:=false; DBEdit1.Enabled:=false; DBEdit2.Enabled:=false; DBEdit3.Enabled:=false; DBEdit4.Enabled:=false; DBEdit5.Enabled:=false; DBEdit6.Enabled:=false; DBEdit7.Enabled:=false; DBEdit8.Enabled:=false; DBEdi
31、t9.Enabled:=false; ghssl; end;procedure Tcfrm_provider.FormCreate(Sender: TObject);begin dm.ADO_provider.Open; dm.ADO_provider.First; Statusbar1.Panels1.Text:=当前用户:+username; ghssl;end;procedure Tcfrm_provider.FormClose(Sender: TObject; var Action: TCloseAction);begin dm.ADO_provider.Close; release;
32、end;图12 商品信息管理窗体 图13 仓库信息管理窗体(6)进货管理窗体设计在进货管理窗体中单击“新入库”或“编辑入库信息”按钮,可以打开入库信息编辑窗体,其窗体设计如图15所示,在该窗体中可以输入或修改商品进货的信息。销售管理窗体和销售编辑窗体与进货类似,代码省略不写。图14 进货管理窗体 代码如下procedure Tcfrm_stock.TButton3Click(Sender: TObject);var mes:string;beginmes:=是否要删除入库信息; if application.MessageBox(pchar(mes),pchar(等待确认) ,+MB_ICON
33、QUESTION+mb_okcancel+MB_DEFBUTTON2)=idok then begin dm.ADO_stock.Delete;/删除入库信息 dm.ADO_storage.Open; if dm.ADO_storage.Locate(ProductID;DepotID,VarArrayOf(dm.ADO_stock.FieldByName(ProductID).AsString,dm.ADO_stock.FieldByName(DepotID).AsString),) then begin dm.ADO_storage.Edit; dm.ADO_storage.FieldBy
34、Name(Quantity).AsFloat:= dm.ADO_storage.FieldByName(Quantity).AsFloat-dm.ADO_stock.fieldbyname(Quantity).AsFloat; dm.ADO_storage.Post; end; end;图15 编辑入库信息窗体代码如下:procedure Tcfrm_stockedit.FormCreate(Sender: TObject);/在窗体创建时添加信息begin/添加供货商编号到DBCombobox1中 dm.ADO_provider.Open; dm.ADO_provider.First; wh
35、ile not dm.ADO_provider.Eof do/遍历供货商信息表 begin DBCombobox1.Items.Add(dm.ADO_provider.fieldbyname(ProviderID).AsString); dm.ADO_provider.Next; end;/添加仓库编号到DBCombobox2中 dm.ADO_depot.Open; dm.ADO_depot.First; while not dm.ADO_depot.Eof do/遍历仓库信息表 begin DBCombobox2.Items.Add(dm.ADO_depot.fieldbyname(Depo
36、tID).AsString); dm.ADO_depot.Next; end;/添加商品编号到DBCombobox3中 dm.ADO_product.Close; dm.ADO_product.Open; dm.ADO_product.First; while not dm.ADO_product.Eof do/遍历商品信息表 begin DBCombobox3.Items.Add(dm.ADO_product.fieldbyname(ProductID).AsString); dm.ADO_product.Next; end; DateTimePicker1.Date:=date();end
37、;procedure Tcfrm_stockedit.DBComboBox1Change(Sender: TObject);begindm.ADO_provider.First;if dm.ADO_provider.Locate(ProviderID,DBCombobox1.Text,) then dbedit1.Text:=dm.ADO_provider.fieldbyname(CompanyName).AsString;/在用户在下拉列表中选择了编号后查询出该编号所对应的供应商公司名称并显示end;procedure Tcfrm_stockedit.DBComboBox2Change(Se
38、nder: TObject);begin dm.ADO_depot.First; if dm.ADO_depot.Locate(DepotID,DBCombobox2.Text,) then dbedit2.Text:=dm.ADO_depot.fieldbyname(DepotName).AsString;end;procedure Tcfrm_stockedit.DBComboBox3Change(Sender: TObject);begin dm.ADO_product.First; if dm.ADO_product.Locate(ProductID,DBCombobox3.Text,
39、) then begin dbedit3.Text:=dm.ADO_product.fieldbyname(ProductName).AsString; dbedit4.Text:=dm.ADO_product.fieldbyname(Spec).AsString; dbedit5.Text:=dm.ADO_product.fieldbyname(Unit).AsString; end;/在用户在下拉列表中选择了编号后查询出该编号所对应的商品名称、商品规格和计量单位并显示end;procedure Tcfrm_stockedit.FormClose(Sender: TObject; var A
40、ction: TCloseAction);begindm.ADO_provider.Close;dm.ADO_customer.Close;dm.ADO_depot.Close;dm.ADO_storage.Close;release;end;procedure Tcfrm_stockedit.BitBtn2Click(Sender: TObject);begindm.ADO_stock.Cancel; dm.ADO_provider.Close;dm.ADO_customer.Close;dm.ADO_depot.Close;dm.ADO_storage.close; close;end;p
41、rocedure Tcfrm_stockedit.BitBtn1Click(Sender: TObject);varpaymoney:Double;beginif Length(dbedit6.Text)=0 then/检查是否输入了商品数量 begin Application.MessageBox(PChar(商品数量不能为空,请重新录入!) , PChar(提示),MB_ICONEXCLAMATION); dbedit6.SetFocus(); exit; end; if dbedit7.Text= then begin Application.MessageBox(PChar(商品单价不
42、能为空,请重新录入!) , PChar(提示),MB_ICONEXCLAMATION); dbedit7.SetFocus(); exit; end; if dbcombobox1.Text= then begin Application.MessageBox(PChar(供货商编号不能为空,请重新录入!) , PChar(提示),MB_ICONEXCLAMATION); dbcombobox1.SetFocus(); exit; end; if dbcombobox2.Text= then begin Application.MessageBox(PChar(仓库编号不能为空,请重新录入!) , PChar(提示),MB_ICONEXCLAMATION); dbcombobox2.SetFocus(); exit; end;