智能决策技术期末考核设计题目:生产物料需求决策支持系统目录智能决策技术 (1)期末考核 (1)一.规划与分析阶段 (3)1.问题描述 (3)现状 (3)解决手段 (4)意义 (4)2.数据处理分析 (4)数据流程图 (4)物料需求分析的核心流程: (5)建立数据字典: (6)3.抽象模型建立 (6)系统功能结构图 (6)系统业务流程图 (7)二.设计阶段 (8)1.系统平台设计 (8)开发平台设计 (8)2.主要功能模块设计 (8)登录模块 (8)主界面模块 (9)主生产计划模块 (10)订单管理模块 (12)用户管理模块 (13)3.数据库设计 (13)三.实施阶段 (16)1.实现方案 (16)2.系统开发、调试与运行 (17)登录模块设计 (17)订单管理 (20)库存管理 (24)物料需求分析 (27)四.总结 (43)一.规划与分析阶段1.问题描述现状选定决策支持主题是生产物料需求计划。
在现代企业的生产经营活动中物料是企业价值链中极其重要的一环,物料采购决策占有十分重要的地位。
在成熟、稳定的市场条件下,理性的企业决策者总是力争在“正确时间”采购“正确数量”的物料,供企业生产使用。
物料需求计算的基本任务是:一是从最终产品的生产计划导出相关物料(原材料、零部件)的需求量和需求时间(相关需求);二是根据物料的需求时间和订货周期来确定其开始订货的时间。
物料需求计算的基本内容是编制物料(包括零部件和原材料)的采购计划(这里不考虑生产的自制,假定所有的物料都进行采购)。
要正确编制物料采购计划,首先必须落实最终产品的产出进度计划,即主生产计划,这是物料需求计算展开的依据。
还要需要知道产品的零部件和原材料结构,即无聊清单,才能把主生产计划展开成物料需求计划;同时,必须知道库存数量才能准确地计算出各种零部件和原材料的采购数量。
因此,以主生产计划,物料清单为依据计算物料需求。
物料需求计划原理框架如下图:图解决手段建立物料需求分析的决策支持系统,完成复杂的分析过程,并自动生成物料需求订单,以供生产使用。
意义应用该系统,可为企业生产过程中物料需求和选择供应商提供依据。
2.数据处理分析数据流程图图2 .1物料需求分析的核心流程:物料需求计划主要按照反工艺路线(成品——组装件——零部件)的原理,按照产品产出计划规定的产品的生产数量和期限要求,利用产品结构文件、库存信息文件等数据资料,反工艺顺序计算出各种物料的需求数量与需求期限,进而,根据企业实际确定自制和采购的数量和期限。
物料需求计算时主要用到五种库存状态数据:毛需求G(t)、计划到货量S(t)、现有量H(t)、净需求量N(t)和计划发出订货量R(t-L),这里t是表示周期的变量,L是提前期。
计算在第t周期第i层所有物料需求量和需求时间的步骤为:第一步:确定第i层第t周期所有毛需求量。
毛需求量是指生产中实际需要的量,0层的毛需求由主生产计划确定,其余各层的毛需求量是由其上层的计划订单下达。
第二步:确定物料第i层第t周期的净需求量,净需求量是指实际需要的增加量。
第三步:根据净需求量确定第t周期计划下达数量第四步:第i层第t周期的计划订单下达数量,即为第i层物料的毛需求量,由毛需求量开始重复上述1—4步,直至最低层物料。
其分析流程图如下图:建立数据字典:3.抽象模型建立系统功能结构图图3.1系统业务流程图图3.2二.设计阶段1.系统平台设计开发平台设计前台设计工具:Borland Delphi 6后台数据库: SQL Server 2008开发环境:硬件环境:PC电脑软件环境:(见下图)服务器操作系统WINDOWS 2007应用程序SQL Server 2008客户端操作系统WINDOWS 2007应用程序Borland Delphi 6网络运行模式设计本系统采用C/S模式,即客户端/服务器模式网络拓扑结构为星型结构2.主要功能模块设计登录模块界面截图如下图 1:图 1功能是验证用户是否合法,是否允许登入系统,如果合法则还要判断其权限,以限定用户的操作权限。
主界面模块界面如图 2登录之前及 3登录之后,其功能是实现在各个功能模块的界面之间的进行跳转:图 2 图 3主生产计划模块界面如下图 4,主要是实现客户订单管理:图 4图 5为产品结构管理:图 5图 6为物料库存管理:图 6图 7为物料需求分析界面:图 7订单管理模块图 8为订单管理界面:图 8用户管理模块图 9为用户管理界面,包括注册、修改密码、权限设置等:图 93.数据库设计数据库设计如下:客户订单文件表oderform物料需求订单文件表matelist物料库存文件表matestor物料分析临时表tempinfo用户信息表userinfo三.实施阶段1.实现方案以一个简化了的自行车产品来说明,其库存状态书记库如上图所示。
其结构示意图为:基本的物料计划步骤为:(1)确定自行车的总需求、净需求和计划定单下达的时间;(2)根据上层的结果,确定第1层上所有物料的净需求和计划定单下达的时间;(3)根据上层车轮的结果,确定第2层上所有物料的净需求和计划定单下达的时间。
其中用到的公式有:第t周期的净需求量=第t周期的毛需求—现有量—第t周期计划入库量+安全库存不考虑批量问题,则t-L周期计算计划订单下达数量等于t周期净需求量,即:R(t-L)=N(t)2.系统开发、调试与运行登录模块设计界面如图图 1主要程序代码为:unit Login;varfmLogin: TfmLogin;implementationuses datamd, Main;{$R *.dfm}订单管理界面如图 2图 2主要代码:unit Oderform;varfmOderform: TfmOderform;implementationuses datamd, Main;{$R *.dfm}sString)else if m=2 then'oderno').AsString);Next;end;exceptshowmessage('数据库连接失败!请检查数据库服务是否正常!');end;end;end;procedure (Sender: TObject);begin;end;procedure (Sender: TObject);beginm:=1;('oderno');end;procedure (Sender: TObject);beginm:=2;('oderno');end;复所有标题字体为默认[i-1]. end;if ' ASC') thenbegin' ASC';clRed; 库存管理界面如图 3:图 3主要代码:procedure (tet:string);vari,j:integer;lsql:string;beginwith dobeginlsql:='select distinct '+tet+' from matestor'; sString)else if m=2 then'mno').AsString)else if m=3 then'mname').AsString)else if m=4 then'mlayer').AsString);Next;end;exceptshowmessage('数据库连接失败!请检查数据库服务是否正常!'); end;end;end;procedure (Sender: TObject);beginm:=1;('mno');end;procedure (Sender: TObject);beginm:=2;('mno');end;procedure (Sender: TObject);beginm:=3;('mname');end;procedure (Sender: TObject);beginm:=4;('mlayer');end;物料需求分析界面如下图 4:图 4主要代码:procedure (Sender: TObject);begin显示窗体====================================== procedure (Sender: TObject);beginif '' thenbegin sString;dmno:='产品编号').AsString;dmname:='产品名称').AsString; dmlayer:='层次').AsString;dmadvant:='提前期').AsString; dpreno:='上层编号').AsString; dprenum:='上层需求').AsString; dmfinish:='成品率').AsString;dvnum:='可用库存').AsString;dwnum:='将要入库量').AsString;dsnum:='安全库存量').AsString;ddtnum:='毛需求量').AsString;ddnetnum:='净需求量').AsString;dselfn:='自产量').AsString;dbuyn:='外购量').AsString;close;; sInteger;end;showmessage('准备完成,现在可以开始分解了!呵呵!');end;end;exceptshowmessage('数据库失败!请检查数据库服务是否正常!');end;end;sString;dmno:='产品编号').AsString;dmname:='产品名称').AsString;dmlayer:='层次').AsString;dmadvant:='提前期').AsString;dpreno:='上层编号').AsString;dprenum:='上层需求').AsString;dmfinish:='成品率').AsString;dvnum:='可用库存').AsString;dwnum:='将要入库量').AsString;dsnum:='安全库存量').AsString;ddtnum:='毛需求量').AsString;ddnetnum:='净需求').AsString;dselfn:='自产').AsString;dbuyn:='外购').AsString;close;;('insert into tempinfo values('+''''+dtime+''''+','+''''+dmno+''''+','+''''+dmname+''''+','+''''+dmlayer+''''+','+''''+dmadvant+''''+','+''''+dpreno+''''+ ','+''''+dprenum+''''+','+''''+dmfinish+''''+','+''''+dvnum+''''+','+''''+dwnum+''''+','+''''+dsnum+''''+','+' '''+ddtnum+''''+','+''''+ddnetnum+''''+','+''''+dselfn+''''+','+''''+dbuyn+''''+')');ExecSQL;endend;end;exceptend;sString;lnum:='dbuyn').AsString;lmt:=datetostr(now);lvt:='dtime').AsString;lrk:='待提交';close;;('insert into matelist values('+''''+inttostr(lno)+''''+','+''''+lmno+''''+','+''''+lnum+''''+','+'''' +lmt+''''+','+''''+lvt+''''+','+''''+lrk+''''+')');ExecSQL;end;end;end;sString;lbuyn:='dbuyn').AsInteger;sqll:='update matestor set mvnum=mvnum-'+inttostr(lbuyn)+' where mno='+''''+lmno+'''';close;;(sqll);ExecSQL;end;end;end;sString;sqll:='update oderform set state='+''''+'已订物料'+''''+' where state='+''''+'未订物料'+'''';close;;(sqll);ExecSQL;end;end;end;用户管理界面如图图 5,包括注册、修改密码、权限设置等:图 5关键代码:(1)注册////////////////////////////注册验证过程///////////////////////////////// procedure (u,p,k:string);var rgssql,rgisql:string;beginif u='' thenbeginshowmessage('用户名不能为空!请输入注册用户名!');endelse if length(u)<4 thenbeginshowmessage('用户名不能少于两个字符!请重新输入!');endelse if p='' thenbeginshowmessage('密码不能为空!请输入注册密码!');endelse if length(p)<3 thenshowmessage('密码不能少于3个字符');endelse if k='' thenbeginshowmessage('用户类型不能为空,必须设置!');endelsebeginrgssql:='select usernm from userinfo where usernm='+''''+u+'''';rgisql:='insert into userinfo (usernm,passwd,uright) values('+''''+u+''''+','+''''+p+''''+','+''''+k+''''+')';tryif not then //验证用户名是否已被使用beginshowmessage('你的用户名已经存在,请重新输入!');endelse //新用户名还没有被使用则插入,注册成功beginendexceptend end end;(2)修改密码procedure (Sender: TObject);varuse,opa,npa,surnpa,altsql:string;beginif ='' then showmessage('你是游客,没有权力修改密码!')elsebeginuse:=trim;opa:=trim;npa:=trim;surnpa:=trim;if use='' thenbeginshowmessage('用户账号不能为空,请输入你的账号!');;endelse if opa='' thenbeginshowmessage('旧密码不能为空,请输入你的旧密码!');endelse if npa='' thenbeginshowmessage('新密码不能为空,请输入你的新密码!');;endelse if surnpa<>npa thenbeginshowmessage('新密码与确认密码不一致,请重新输入你的确认密码!');;endelsetry //验证用户是否合法,即用户名和密码是否正确altsql:='select * from userinfo where usernm='+''''+use+''''+' and passwd='+''''+opa+'''';if not thenbegin //用户合法,则进行修改altsql:='update userinfo set passwd='+''''+npa+''''+'where usernm='+''''+use+'''';showmessage('恭喜你!修改密码成功!呵呵!');;endelsebeginshowmessage('修改密码失败,请检查你的旧密码是否正确!');;endexceptshowmessage('连接数据库失败!请检查数据库服务是否正常!');endendend;四.总结经过两个星期的学习和努力,我和我的队友完成了一个比较完善的生产物料需求决策支持系统。