智能决策技术报告.docx
《智能决策技术报告.docx》由会员分享,可在线阅读,更多相关《智能决策技术报告.docx(58页珍藏版)》请在冰豆网上搜索。
智能决策技术报告
智能决策技术
期末考核
设计题目:
生产物料需求决策支持系统
一.规划与分析阶段
1.问题描述
1.1现状
选定决策支持主题是生产物料需求计划。
在现代企业的生产经营活动中物料是企业价值链中极其重要的一环,物料采购决策占有十分重要的地位。
在成熟、稳定的市场条件下,理性的企业决策者总是力争在“正确时间”采购“正确数量”的物料,供企业生产使用。
物料需求计算的基本任务是:
一是从最终产品的生产计划导出相关物料(原材料、零部件)的需求量和需求时间(相关需求);二是根据物料的需求时间和订货周期来确定其开始订货的时间。
物料需求计算的基本内容是编制物料(包括零部件和原材料)的采购计划(这里不考虑生产的自制,假定所有的物料都进行采购)。
要正确编制物料采购计划,首先必须落实最终产品的产出进度计划,即主生产计划,这是物料需求计算展开的依据。
还要需要知道产品的零部件和原材料结构,即无聊清单,才能把主生产计划展开成物料需求计划;同时,必须知道库存数量才能准确地计算出各种零部件和原材料的采购数量。
因此,以主生产计划,物料清单为依据计算物料需求。
物料需求计划原理框架如下图1.1:
产品产出计划
物料需求计划
报告
物料需求计划
(数量、时间)
产品结构文件
库存状态文件
图1.1
1.2解决手段
建立物料需求分析的决策支持系统,完成复杂的分析过程,并自动生成物料需求订单,以供生产使用。
1.3意义
应用该系统,可为企业生产过程中物料需求和选择供应商提供依据。
2.数据处理分析
2.1数据流程图
图2.1
2.2物料需求分析的核心流程:
物料需求计划主要按照反工艺路线(成品——组装件——零部件)的原理,按照产品产出计划规定的产品的生产数量和期限要求,利用产品结构文件、库存信息文件等数据资料,反工艺顺序计算出各种物料的需求数量与需求期限,进而,根据企业实际确定自制和采购的数量和期限。
物料需求计算时主要用到五种库存状态数据:
毛需求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步,直至最低层物料。
其分析流程图如下图:
i=0,t=1
按照时间周期计算第n层所有物料的毛需求量
第0层根据产品计划得出,其他层由其父项计划下达取得
确定第n层第t周期净需求量N(t)
由净需求N(t)确定计划定单入库R(t-L)
所有周期算完否
确定计划定单下达
所有产品结构层次已分解
向下一层分解
i=i+1
结束
t=t+1
否
是
是
否
2.3建立数据字典:
总编号
编号
名称
来源
去向
包含数据结构
1-01
F1
客户订单
客户
分析处理
订单号、产品编号、订购数量、交货日期
1-02
F2
产品结构
设计
分析处理
产品编号、层次、上层编号、上层需求
1-03
F3
库存状态
库存
分析处理
产品编号、产品名称、库存总量、可用量、将要入库量、安全库存
1-04
F4
物料订单
分析处理
订单下达
订单号、物料编号、订购数量、订购日期、有效期至
1-05
F5
用户信息
用户
登录判断
用户名、密码、权限、备注
表2.3
3.抽象模型建立
3.1系统功能结构图
图3.1
3.2系统业务流程图
图3.2
二.设计阶段
1.系统平台设计
1.1开发平台设计
前台设计工具:
BorlandDelphi6
后台数据库:
SQLServer2008
开发环境:
硬件环境:
PC电脑
软件环境:
(见下图)
服务器
操作系统
WINDOWS2007
应用程序
SQLServer2008
客户端
操作系统
WINDOWS2007
应用程序
BorlandDelphi6
1.2网络运行模式设计
本系统采用C/S模式,即客户端/服务器模式
网络拓扑结构为星型结构
2.主要功能模块设计
2.1登录模块
界面截图如下图4.21:
图4.21
功能是验证用户是否合法,是否允许登入系统,如果合法则还要判断其权限,以限定用户的操作权限。
2.2主界面模块
界面如图4.22登录之前及4.23登录之后,其功能是实现在各个功能模块的界面之间的进行跳转:
图4.22图4.23
2.3主生产计划模块
界面如下图4.24,主要是实现客户订单管理:
图4.24
图4.25为产品结构管理:
图4.25
图4.26为物料库存管理:
图4.26
图4.27为物料需求分析界面:
图4.27
2.4订单管理模块
图4.28为订单管理界面:
图4.28
2.5用户管理模块
图4.29为用户管理界面,包括注册、修改密码、权限设置等:
图4.29
3.数据库设计
数据库设计如下:
客户订单文件表oderform
字段名称
字段描述
数据类型
字段长度
是否主键
允许为空否
Oderno
订单号
Char
10
Y
N
Pno
产品编号
Char
10
N
N
Pnum
订单总量
Int
4
N
N
Pselfnum
自产量
Int
4
N
N
Pbuynum
外购量
Int
4
N
N
Odert
下单日期
Datetime
8
N
Y
Delit
交货日期
Datetime
8
N
Y
State
当前状态
Datetime
10
N
Y
物料需求订单文件表matelist
字段名称
字段描述
数据类型
字段长度
是否主键
允许为空否
Mlno
订单编号
Char
10
Y
N
Mno
物料编号
Char
10
N
Y
Mlnum
订购数量
Int
4
N
Y
Mltime
订购日期
Datetime
8
N
Y
Mlvivtime
有效期至
Datetime
8
N
Y
Remark
备注
Char
30
N
Y
物料库存文件表matestor
字段名称
字段描述
数据类型
字段长度
是否主键
允许为空否
Mno
物料编号
Char
8
Y
N
Mname
物料名称
Char
10
N
Y
Mlayer
所属层次
Int
4
N
Y
Mpreno
上层编号
Char
8
N
Y
Mprenum
上层需求
Int
4
N
Y
Mtnum
库存总量
Int
4
N
Y
Mvnum
可用数量
Int
4
N
Y
Mwnum
将要入库量
Int
4
N
Y
Secnum
安全库存
Int
4
N
Y
Mut
计量单位
Char
4
N
Y
Mfinish
成品率
Float
8
N
Y
Madvant
提前期
Int
4
N
Y
Avat
生效日期
Datetime
8
N
Y
Invat
失效日期
Datetime
8
N
Y
Remark
备注
Char
30
N
Y
物料分析临时表tempinfo
字段名称
字段描述
数据类型
字段长度
是否主键
允许为空否
Dtime
需求日期
Datetime
8
N
N
Dmno
物料编号
Char
8
N
N
Dmname
物料名称
Char
10
N
N
Dmlayer
所属层次
Int
4
N
N
Dmadvantt
提前期
Int
4
N
N
Dpreno
上层编号
Char
8
N
N
Dprenum
上层需求
Int
4
N
N
Dmfinish
成品率
Float
8
N
N
Dvnum
可用数量
Int
4
N
N
Dwnum
将要入库量
Int
4
N
N
Dsnum
安全库存
Int
4
N
N
Ddtnum
毛需求量
Int
4
N
N
Ddnetnum
净需求量
Int
4
N
N
dselfn
自产量
Int
4
N
Y
dbuyn
外购量
Int
4
N
Y
用户信息表userinfo
字段名称
字段描述
数据类型
字段长度
是否主键
允许为空否
Username
用户名
Char
10
Y
N
Passswd
用密码
Char
10
N
N
Uright
用户权限
Char
10
N
Y
Lastit
最近登录时间
Datetime
8
N
Y
Lastot
最近登出时间
Datetime
8
N
Y
Remark
备注
Char
30
N
Y
三.实施阶段
1.实现方案
以一个简化了的自行车产品来说明,其库存状态书记库如上图所示。
其结构示意图为:
自行车
车架
(1)
车轮
(2)
车把
(1)
轮圈
(1)
轮胎
(2)
辐条(42)
0层
1层
2层
基本的物料计划步骤为:
(1)确定自行车的总需求、净需求和计划定单下达的时间;
(2)根据上层的结果,确定第1层上所有物料的净需求和计划定单下达的时间;
(3)根据上层车轮的结果,确定第2层上所有物料的净需求和计划定单下达的时间。
其中用到的公式有:
第t周期的净需求量=第t周期的毛需求—现有量—第t周期计划入库量+安全库存
不考虑批量问题,则t-L周期计算计划订单下达数量等于t周期净需求量,即:
R(t-L)=N(t)
2.系统开发、调试与运行
2.1登录模块设计
界面如图
图5.41
主要程序代码为:
unitLogin;
var
fmLogin:
TfmLogin;
implementation
usesdatamd,Main;
{$R*.dfm}
//////////////////////自定义过程,验证用户///////////////////////////////
procedureTfmlogin.userjug(u,p,r:
string);
varupsql,upsql2:
string;
begin
ifu=''then
begin
showmessage('用户名不能为空,请输入用户名!
');
edtun.setfocus;
end
elseifp=''then
begin
showmessage('密码不能为空,请输入密码!
');
edtpw.setfocus;
end
else
begin
upsql:
='selectusernm,passwd,urightfromuserinfowhereusernm='+''''+u+''''+'andpasswd='+''''+p+''''+'anduright='+''''+r+'''';
upsql2:
='updateuserinfosetlastit='+''''+datetostr(Now)+''''+'whereusernm='+''''+u+'''';
try
dtmd.qryup.Close;
dtmd.qryup.SQL.Clear;
dtmd.qryup.SQL.Add(upsql);
dtmd.qryup.Open;
ifnotdtmd.qryup.Eofthen//用户合法,则进入系统
begin
dtmd.qryup.Close;//更新用户的最近登录时间
dtmd.qryup.SQL.Clear;
dtmd.qryup.SQL.Add(upsql2);
dtmd.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.Panels[0].Text:
=fmMain.pu;
fmLogin.Close;
end
else
begin
showmessage('用户名或密码错误!
');
edtun.SetFocus;
end
except
showmessage('连接数据库失败,请检查数据库服务是否正常!
');
end;
end;
end;
//////////////////////////////退出登录/////////////////////////////////
procedureTfmLogin.btnextClick(Sender:
TObject);
begin
self.Close;
end;
//////////////////////////////登录按钮////////////////////////////////
procedureTfmLogin.btnlgClick(Sender:
TObject);
varri:
string;
begin
ifself.rbu.Checkedthen
ri:
='user'
elseifself.rba.Checkedthen
ri:
='admini';
userjug(trim(edtun.Text),trim(edtpw.Text),ri);
end;
////////////////////用户名和密码文本框里回车/////////////////////////
procedureTfmLogin.edtunKeyPress(Sender:
TObject;varKey:
Char);
varri:
string;
begin
ifkey=#13then
begin
ifself.rbu.Checkedthen
ri:
='user'
elseifself.rba.Checkedthen
ri:
='admini';
userjug(trim(edtun.Text),trim(edtpw.Text),ri);
end;
end;
end.
2.2订单管理
界面如图5.42
图5.42
主要代码:
unitOderform;
var
fmOderform:
TfmOderform;
implementation
usesdatamd,Main;
{$R*.dfm}
///////////////////////////各个下拉框赋值共用过程///////////////////////
procedureTfmOderform.cbpbdpd(tet:
string);
var
i,j:
integer;
osql:
string;
begin
withdtmd.qryofmdo
begin
osql:
='selectdistinct'+tet+'fromoderform';//查询唯一值
try
Close;
SQL.clear;
SQL.Add(osql);
Open;
fmOderform.dbno.DataSource:
=nil;
fmOderform.dbgo.DataSource:
=nil;
First;
i:
=RecordCount;
forj:
=0toi-1do//循环赋值
begin
ifm=1then
cbno1.Items.Add(FieldByName('oderno').AsString)
elseifm=2then
cbno2.Items.Add(FieldByName('oderno').AsString);
Next;
end;
except
showmessage('数据库连接失败!
请检查数据库服务是否正常!
');
end;
end;
end;
procedureTfmOderform.btnexitClick(Sender:
TObject);
begin
self.Close;
end;
procedureTfmOderform.cbno1DropDown(Sender:
TObject);
begin
m:
=1;
self.cbno1.Items.Clear;
self.cbpbdpd('oderno');
end;
procedureTfmOderform.cbno2DropDown(Sender:
TObject);
begin
m:
=2;
self.cbno2.Items.Clear;
self.cbpbdpd('oderno');
end;
///=================================================================///
procedureTfmOderform.btnsearClick(Sender:
TObject);
var
ssql,cdt:
string;
begin
ssql:
='selectodernoas订单号,pnoas产品编号,mnameas产品名称,pnumas订购量,odertas订购日期,delitas交货日期,stateas当前状态fromoderform,matestorwheremno=pnoandpno<>'+''''+'''';
ifcbno1.Text<>''thencdt:
='andoderno>='+''''+trim(cbno1.Text)+'''';
ifcbno2.Text<>''thencdt:
=cdt+'andoderno<='+''''+trim(cbno2.Text)+'''';
ifdatetostr(dtp1.Date)<>''thencdt:
=cdt+'anddelit>='+''''+datetostr(dtp1.DateTime)+'''';
ifdatetostr(dtp2.Date)<>''thencdt:
=cdt+'anddelit<='+''''+datetostr(dtp2.DateTime)+'''';
ifcbnm.Text<>''thencdt:
=cdt+'andpno='+''''+trim(cbnm.Text)+'''';
ifcbst.Text<>''thencdt:
=cdt+'andstate='+''''+trim(cbst.Text)+'''';
ssql:
=ssql+cdt;
withdtmd.qryofmdo
begin
try
Close;
SQL.clear;
SQL.Add(ssql);
Open;
fmOderform.dbno.DataSource:
=dtmd.dsofm;//动态指定数据感知组件的数据源
fmOderform.dbgo.DataSource:
=dtmd.dsofm;
except
showmessage('数据库连接失败!
请检查数据库服务是否正常!
');
end;
end;
end;
//****************************是否允许编辑********************************
procedureTfmOderform.edorClick(Sender:
TObject);
begin
iffmOderform.edor.Checkedthen//允许编辑
begin
fmOderform.dbgo.Options:
=fmOderform.dbgo.Options-[dgRowSelect]+[dgediting];fmOderform.dbno.VisibleButtons:
=[nbinsert,nbdelete,nbedit,nbpost,nbcancel,nbrefresh];
end
else//不允许编辑
begin
fmOderform.dbgo.Options:
=fmOderform.dbgo.Options+[dgRowSelect]-[dgediting];
fmOderform.dbno.VisibleButtons:
=[nbfirst,nbprior,nbnext,nblast];
end
end;
procedureTfmOderform.FormCreate(Sender:
TObject);
begin
fmOderform.dbno.VisibleButtons:
=[nbfirst,nbprior,nbnext,nblast];
fmOderform.dbgo.Options:
=fmOderform.dbgo.Options+[dgRowSelect]-[dgediting];
end;
procedureTfmOderform.FormShow(Sender:
TObject);
begin
iffmMain.sttb.Panels[0].Text=''then
begin//游客不能操作数据库
self.GroupBox1.Enabled:
=false;
self.GroupBox2.Enabled:
=false;
end
else
begin//游客不能操作数据库
self.GroupBox1.Enabled:
=true;
self.GroupBox2.Enabled:
=true;
end;
//self.dtp1.DateTime:
=now;
self.dtp2.DateTime:
=now;
end;
///////////////////////////单击D