1、生产物料需求决策支持系统智能决策技术报告智能决策技术期末考核设计题目: 生产物料需求决策支持系统一规划与分析阶段1.问题描述1.1现状 选定决策支持主题是生产物料需求计划。在现代企业的生产经营活动中物料是企业价值链中极其重要的一环,物料采购决策占有十分重要的地位。在成熟、稳定的市场条件下,理性的企业决策者总是力争在“正确时间”采购“正确数量”的物料,供企业生产使用。物料需求计算的基本任务是:一是从最终产品的生产计划导出相关物料(原材料、零部件)的需求量和需求时间(相关需求);二是根据物料的需求时间和订货周期来确定其开始订货的时间。物料需求计算的基本容是编制物料(包括零部件和原材料)的采购计划(
2、这里不考虑生产的自制,假定所有的物料都进行采购)。要正确编制物料采购计划,首先必须落实最终产品的产出进度计划,即主生产计划,这是物料需求计算展开的依据。还要需要知道产品的零部件和原材料结构,即无聊清单,才能把主生产计划展开成物料需求计划;同时,必须知道库存数量才能准确地计算出各种零部件和原材料的采购数量。因此,以主生产计划,物料清单为依据计算物料需求。物料需求计划原理框架如下图1.1:1.2解决手段 建立物料需求分析的决策支持系统,完成复杂的分析过程,并自动生成物料需求订单,以供生产使用。 1.3意义应用该系统,可为企业生产过程中物料需求和选择供应商提供依据。2.数据处理分析2.1数据流程图图
3、2 .12.2物料需求分析的核心流程:物料需求计划主要按照反工艺路线(成品组装件零部件)的原理,按照产品产出计划规定的产品的生产数量和期限要求,利用产品结构文件、库存信息文件等数据资料,反工艺顺序计算出各种物料的需求数量与需求期限,进而,根据企业实际确定自制和采购的数量和期限。物料需求计算时主要用到五种库存状态数据:毛需求G(t)、计划到货量S(t)、现有量H(t)、净需求量N(t)和计划发出订货量R(t-L),这里t是表示周期的变量,L是提前期。计算在第t周期第i层所有物料需求量和需求时间的步骤为:第一步:确定第i层第t周期所有毛需求量。毛需求量是指生产中实际需要的量,0层的毛需求由主生产计
4、划确定,其余各层的毛需求量是由其上层的计划订单下达。第二步:确定物料第i层第t周期的净需求量,净需求量是指实际需要的增加量。第三步:根据净需求量确定第t周期计划下达数量第四步:第i层第t周期的计划订单下达数量,即为第i层物料的毛需求量,由毛需求量开始重复上述14步,直至最低层物料。其分析流程图如下图:2.3建立数据字典:总编号编号名称来源去向包含数据结构1-01F1客户订单客户分析处理订单号、产品编号、订购数量、交货日期1-02F2产品结构设计分析处理产品编号、层次、上层编号、上层需求1-03F3库存状态库存分析处理产品编号、产品名称、库存总量、可用量、将要入库量、安全库存1-04F4物料订单
5、分析处理订单下达订单号、物料编号、订购数量、订购日期、有效期至1-05F5用户信息用户登录判断用户名、密码、权限、备注表2.33.抽象模型建立3.1系统功能结构图图3.13.2系统业务流程图图3.2二设计阶段1.系统平台设计1.1开发平台设计前台设计工具:Borland Delphi 6后台数据库: SQL Server 2008开发环境:硬件环境:PC电脑软件环境:(见下图)服务器操作系统WINDOWS 2007应用程序SQL Server 2008客户端操作系统WINDOWS 2007应用程序Borland Delphi 61.2网络运行模式设计本系统采用C/S模式,即客户端/服务器模式网
6、络拓扑结构为星型结构2.主要功能模块设计2.1登录模块界面截图如下图4.2 1:图4.2 1 功能是验证用户是否合法,是否允许登入系统,如果合法则还要判断其权限,以限定用户的操作权限。2.2主界面模块界面如图4.2 2登录之前及4.2 3登录之后,其功能是实现在各个功能模块的界面之间的进行跳转: 图4.2 2 图4.2 32.3主生产计划模块界面如下图4.2 4,主要是实现客户订单管理:图4.2 4 图4.2 5为产品结构管理:图4.2 5 图4.2 6为物料库存管理:图4.2 6 图4.2 7为物料需求分析界面:图4.2 72.4订单管理模块 图4.2 8为订单管理界面:图4.2 82.5用
7、户管理模块 图4.2 9为用户管理界面,包括注册、修改密码、权限设置等:图4.2 93.数据库设计数据库设计如下:客户订单文件表oderform字段名称字段描述数据类型字段长度是否主键允许为空否Oderno订单号Char10YNPno产品编号Char10NNPnum订单总量Int4NNPselfnum自产量Int4NNPbuynum外购量Int4NNOdert下单日期Datetime8NYDelit交货日期Datetime8NYState当前状态Datetime10NY物料需求订单文件表matelist字段名称字段描述数据类型字段长度是否主键允许为空否Mlno订单编号Char10YNMno物料
8、编号Char10NYMlnum订购数量Int4NYMltime订购日期Datetime8NYMlvivtime有效期至Datetime8NYRemark备注Char30NY物料库存文件表matestor字段名称字段描述数据类型字段长度是否主键允许为空否Mno物料编号Char8YNMname物料名称Char10NYMlayer所属层次Int4NYMpreno上层编号Char8NYMprenum上层需求Int4NYMtnum库存总量Int4NYMvnum可用数量Int4NYMwnum将要入库量Int4NYSecnum安全库存Int4NYMut计量单位Char4NYMfinish成品率Float8N
9、YMadvant提前期Int4NYAvat生效日期Datetime8NYInvat失效日期Datetime8NYRemark备注Char30NY物料分析临时表tempinfo字段名称字段描述数据类型字段长度是否主键允许为空否Dtime需求日期Datetime8NNDmno物料编号Char8NNDmname物料名称Char10NNDmlayer所属层次Int4NNDmadvantt提前期Int4NNDpreno上层编号Char8NNDprenum上层需求Int4NNDmfinish成品率Float8NNDvnum可用数量Int4NNDwnum将要入库量Int4NNDsnum安全库存Int4NND
10、dtnum毛需求量Int4NNDdnetnum净需求量Int4NNdselfn自产量Int4NYdbuyn外购量Int4NY用户信息表userinfo字段名称字段描述数据类型字段长度是否主键允许为空否Username用户名Char10YNPassswd用密码Char10NNUright用户权限Char10NYLastit最近登录时间Datetime8NYLastot最近登出时间Datetime8NYRemark备注Char30NY三实施阶段1.实现方案以一个简化了的自行车产品来说明,其库存状态书记库如上图所示。其结构示意图为:基本的物料计划步骤为:(1)确定自行车的总需求、净需求和计划定单下达
11、的时间;(2)根据上层的结果,确定第1层上所有物料的净需求和计划定单下达的时间;(3)根据上层车轮的结果,确定第2层上所有物料的净需求和计划定单下达的时间。其中用到的公式有:第t周期的净需求量=第t周期的毛需求现有量第t周期计划入库量+安全库存不考虑批量问题,则t-L周期计算计划订单下达数量等于t周期净需求量,即: R(t-L)=N(t)2.系统开发、调试与运行2.1登录模块设计 界面如图图5.4 1 主要程序代码为:unit Login;var fmLogin: TfmLogin;implementationuses datamd, Main;$R *.dfm/自定义过程,验证用户/proc
12、edure Tfmlogin.userjug(u,p,r:string);var upsql,upsql2:string;begin if u= then begin showmessage(用户名不能为空,请输入用户名!); edtun.setfocus; end else if p= then begin showmessage(密码不能为空,请输入密码!); edtpw.setfocus; end else begin upsql:=select usernm,passwd,uright from userinfo where usernm=+u+ and passwd =+p+ and
13、 uright=+r+; upsql2:=update userinfo set lastit=+datetostr(Now)+ where usernm=+u+; try dtmd.qryup.Close; dtmd.qryup.SQL.Clear; dtmd.qryup.SQL.Add(upsql); dtmd.qryup.Open; if not dtmd.qryup.Eof then /用户合法,则进入系统 begin dtmd.qryup.Close; /更新用户的最近登录时间 dtmd.qryup.SQL.Clear; dtmd.qryup.SQL.Add(upsql2); dtm
14、d.qryup.ExecSQL; fmMain.RzGroup1.Visible:=false; fmMain.RzGroup2.Visible:=true; fmMain.RzGroup2.Opened:=true; fmMain.RzGroup3.Visible:=true; fmMain.RzGroup4.Visible:=true; fmMain.RzGroup5.Visible:=true; fmMain.RzGroup5.Visible:=true; fmMain.pu:=u; fmMain.pp:=p; fmMain.pr:=r; fmMain.sttb.Panels0.Text
15、:=fmMain.pu; fmLogin.Close; end else begin showmessage(用户名或密码错误!); edtun.SetFocus; end except showmessage(连接数据库失败,请检查数据库服务是否正常!); end; end;end;/退出登录/procedure TfmLogin.btnextClick(Sender: TObject);begin self.Close;end;/登录按钮/procedure TfmLogin.btnlgClick(Sender: TObject);var ri:string;begin if self.r
16、bu.Checked then ri:=user else if self.rba.Checked then ri:=admini; userjug(trim(edtun.Text),trim(edtpw.Text),ri);end;/用户名和密码文本框里回车/procedure TfmLogin.edtunKeyPress(Sender: TObject; var Key: Char);var ri:string;begin if key=#13 then begin if self.rbu.Checked then ri:=user else if self.rba.Checked the
17、n ri:=admini; userjug(trim(edtun.Text),trim(edtpw.Text),ri); end;end;end.2.2订单管理界面如图5.4 2图5.4 2主要代码:unit Oderform;var fmOderform: TfmOderform;implementationuses datamd, Main;$R *.dfm/各个下拉框赋值共用过程/procedure TfmOderform.cbpbdpd(tet:string);var i,j:integer; osql:string;begin with dtmd.qryofm do begin os
18、ql:=select distinct +tet+ from oderform; /查询唯一值 try Close; SQL.clear; SQL.Add(osql); Open; fmOderform.dbno.DataSource:=nil; fmOderform.dbgo.DataSource:=nil; First; i:=RecordCount; for j:=0 to i-1 do /循环赋值 begin if m=1 then cbno1.Items.Add(FieldByName(oderno).AsString) else if m=2 then cbno2.Items.Ad
19、d(FieldByName(oderno).AsString); Next; end; except showmessage(数据库连接失败!请检查数据库服务是否正常!); end; end;end;procedure TfmOderform.btnexitClick(Sender: TObject);begin self.Close;end;procedure TfmOderform.cbno1DropDown(Sender: TObject);begin m:=1; self.cbno1.Items.Clear; self.cbpbdpd(oderno);end;procedure Tfm
20、Oderform.cbno2DropDown(Sender: TObject);begin m:=2; self.cbno2.Items.Clear; self.cbpbdpd(oderno);end;/=/procedure TfmOderform.btnsearClick(Sender: TObject);var ssql,cdt:string;begin ssql:=select oderno as 订单号,pno as 产品编号,mname as 产品名称,pnum as 订购量,odert as 订购日期,delit as 交货日期,state as 当前状态 from oderfo
21、rm,matestor where mno=pno and pno+; if cbno1.Text then cdt:= and oderno=+trim(cbno1.Text)+; if cbno2.Text then cdt:=cdt+ and oderno=+trim(cbno2.Text)+; if datetostr(dtp1.Date) then cdt:=cdt+ and delit=+datetostr(dtp1.DateTime)+; if datetostr(dtp2.Date) then cdt:=cdt+ and delit=+datetostr(dtp2.DateTi
22、me)+; if cbnm.Text then cdt:=cdt+ and pno=+trim(cbnm.Text)+; if cbst.Text then cdt:=cdt+ and state=+trim(cbst.Text)+; ssql:=ssql+cdt; with dtmd.qryofm do begin try Close; SQL.clear; SQL.Add(ssql); Open; fmOderform.dbno.DataSource:=dtmd.dsofm; /动态指定数据感知组件的数据源 fmOderform.dbgo.DataSource:=dtmd.dsofm; e
23、xcept showmessage(数据库连接失败!请检查数据库服务是否正常!); end; end;end;/*是否允许编辑*procedure TfmOderform.edorClick(Sender: TObject);begin if fmOderform.edor.Checked then /允许编辑 begin fmOderform.dbgo.Options:=fmOderform.dbgo.Options-dgRowSelect+dgediting; fmOderform.dbno.VisibleButtons:=nbinsert,nbdelete,nbedit,nbpost,n
24、bcancel,nbrefresh; end else /不允许编辑 begin fmOderform.dbgo.Options:=fmOderform.dbgo.Options+dgRowSelect-dgediting; fmOderform.dbno.VisibleButtons:=nbfirst,nbprior,nbnext,nblast; endend;procedure TfmOderform.FormCreate(Sender: TObject);begin fmOderform.dbno.VisibleButtons:=nbfirst,nbprior,nbnext,nblast
25、; fmOderform.dbgo.Options:=fmOderform.dbgo.Options+dgRowSelect-dgediting;end;procedure TfmOderform.FormShow(Sender: TObject);begin if fmMain.sttb.Panels0.Text= then begin /游客不能操作数据库 self.GroupBox1.Enabled:=false; self.GroupBox2.Enabled:=false; end else begin /游客不能操作数据库 self.GroupBox1.Enabled:=true;
26、self.GroupBox2.Enabled:=true; end; / self.dtp1.DateTime:=now; self.dtp2.DateTime:=now;end;/单击DBGrid标题时排序/procedure TfmOderform.dbgoTitleClick(Column: TColumn);var i:integer;begin if dtmd.qryofm.Active then begin for i:=1 to dbgo.Columns.Count do begin dbgo.Columnsi-1.Title.Font.Color:=clWindowText;/恢复所有标题
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1