昆明理工大学
实习报告
系统分析与设计实习
学 号: 200710901109
姓 名: 钱 增 兴
年 级: 0 7
学 院: 管理与经济学院
系 别: 信息管理系
专 业: 信息管理与信息系统
实验日期:2010年6月28日至 20##年9月13日
报告日期: 20##年 9月12日
一、前言
系统分析与设计实习,旨在综合应用已学专业知识和技能,解决与本专业相关的典型问题,学习和掌握一种面向对象的CASE工具,并应用于本实习的分析设计之中。另外,还要求掌握信息系统分析、设计的基本方法和过程,同时学习和掌握系统开发相关的技术文档的写作。
本次实习模拟的企业主要有营销部门、运营部门、物流部门和财务部门的制造业企业,该企业目前业务处理模式为全手工处理,信息收集、加工等处理得都比较缓慢,不利于企业的市场竞争,而且手工式的处理使得从编制原始凭证、记帐凭证到登帐、结帐、编制会计报表,要经过很多人的手工才能完成,增加了数据处理差错的可能性。一切信息都记录在会计凭证、帐簿、报表等媒介上,数据的保存缺乏安全性。除此之外,要查询一个数据,特别是收集某一汇总或加总数据时速度很慢。本次实习每个组员分别担任企业的不同部门,并完成不同部门的系统分析与设计工作。本实习采用企业沙盘模拟的方式,了解企业业务需求,从而得出系统需求,采用面向对象方法进行系统分析与设计,并给出系统实现。
通过本次实习,复习、领会、巩固和应用课堂上所学到的软件开发方法和知识,初步掌握系统分析、系统设计、系统实现的方法,特别是结构化分析、结构化设计、面向对象分析和面向对象设计。通过参与小组团队的开发实践,为毕业后适应团队合作开发模式打下基础,了解项目管理、团队合作、文档编写、口头与书面表达能力,创造能力和与其他组员交往与协作开发软件的能力,提高今后开发稍大规模实际软件项目和探索未知领域的能力和信心。
二、采购部门需求分析
(一)、采购部门工作职责
1、采购计划的编制
负责根据生产、总务、设备及检验等各部门物品需求计划,编制与之相配套的采购计划,并组织具体的实施,保证经营过程中的物资供应。
2、供应商谈判
3、签订采购合同
4、监控采购过程
5、到货验收
6、仓储管理
7、采购支付抉择
8、与财务部协调
9、与生产部协调
(二)、采购部工作流程
通过沙盘模拟实习,我了解到了采购部门工作流程的概况,采购部主要负责生产性物料的采购工作。依据运营部门下达的生产计划编制物料采购计划及库存报表,然后根据采购计划下采购订单,同时将订单转发到财务部。采购人员根据订单到供应商采购物资,在收到供应商的发货订单之后,将物资验收入库,更新原料库存量,并将验收单发到财务部,财务部根据单据付款给供应商。
(三)、业务数据
采购部门主要使用到的数据有生产计划量、实际采购量、原材料种类和库存量等。
(四)、数据处理逻辑
1、采购部向生产部门获取生产计划,根据生产计划量和各种产品的原料组成计算需要采购的原材料数量。
2、制定采购订单,并登记订单上的原料种类和数量。
3、在收到供应商的发货清单之后,将采购清单与发货清单进行核对,如果无误,则更新库存量,然后将应付账款数额发给财务部。
(五)、使用Visio制作数据流程图
(六)、采购子系统数据流图设计
数据字典:
加工条目:
加工名:编制采购计划
编号:4.1
输入信息:生产信息、财务信息
输出信息:原料信息
加工逻辑:根据相应的订单信息和原料供应谈判并将原料采购入库
加工名:仓储控制
编号4.2
输入信息:生产信息、财务信息、原料信息
输出信息:原料库存信息、产品库存信息
加工逻辑:根据生产信息输入和原料的入库,提供相应的库存信息
三、系统设计
(一)、目标
实现仓库物资管理的基本功能,实现仓库物资管理所有流程的系统化,并且实现仓库数据的集中管理和维护,部分数据的统计和计算实现自动化,以节省大量的人力以及避免了由于人的失误而产生的错误。
可以对仓库大部分相关数据进行处理,并对仓库管理需要实现的所有基本功能进行实现。实现快捷,方便,安全的管理仓库,并节省大量的枯燥反复的人工记录和统计数据的工作。
(二)、需求概述
主要实现的基本功能如下:
1. 订单信息的输入 2. 财务信息的输入
3. 有关物资基本信息的输入。 4. 物资基本信息的查询与修改。
5. 入库物资信息的输入。 6. 入库物资信息的查询与修改。
7. 出库物资信息的输入。 8. 出库物资信息的查询与修改。
9. 物资余额信息的查询。 10. 物资余额信息的浏览。
11.各种物资的按总余额的统计
(三)、处理流程
总体流程图如下:
(四)、总体结构和模块外部设计
为了实现安全管理,针对不同的权限的管理员有不同的视图,实现不同的功能。
下面不同角色的视图对系统要实现的功能进行说明。
角色一:系统管理员用例图
注:用例人员信息维护是指对系统的各种管理员基本信息(包括权限)的管理。
其中仓库信息维护的用例要实现的功能也包括此种信息的添加,删除,修改。和人员信息维护相似,则不再画这几个用例的子用例图了。
角色二:仓库管理员用例图
角色三:仓库采购员用例图
根据各个角色的用例图可以看出,针对不同的角色,具有不同的权限,所以可以执行的功能也不同。
(五)、外部接口
用户界面:
(六)、运行模块的组合
对不同的用户有不同的视图,而且不同的用户可以选择的功能也很多,则对不同的用户只选取代表性的模块组合作为讲解。
登陆信息错误时,只运行了登陆模块。
系统管理员:
登陆成功不进行其他操作时,只运行登陆和物资信息维护模块;
登陆成功,并选择了除物资信息维护模块外的其他操作,如选择人员信息维护模块, 则运行了登陆模块,物资信息维护模块,人员信息维护模块;
登陆成功不进行其他操作时,只运行登陆和物资入库模块;
登陆成功,选择了除物资出库模块,则运行了登陆和物资入库模块,物资出库模块;
登陆成功后,选择了除物资出库模块和个人密码修改,则运行了登陆和物资入库模 块,物资出库模块,个人密码修改模块。
仓库管理员:
登陆成功不进行其他操作时,只运行登陆和查看采购清单模块;
登陆成功后,选择了除查看采购清单外的个人密码修改模块,则运行了登陆和查看采购清单,个人密码修改模块。
(七)、类图
采购子系统的类图如下:
类图说明:
界面类:
SupplyGUI,是采购子系统界面类,下面有3个实体类构成:
1.、PurchasePlan 采购计划类
RawID 原料编号
Quantity 原料数量
PerCost 原料单价
Finished 是否完成
函数:
add() edit() del()query()分别为增、改、删、查找
2.、RawStock类
RawID 原料编号
Quantity 原料数量
Cost 成本
函数:
query() add() edit() 分别为查找、增加、改
getQuantity() 为得到指定原料的数量
pickRaw() 为取出原料
getCost() 为得到成本
3.、ProductStock类
ProductID 产成品编号
Quantity 产成品数量
函数:
query() add() sub() 为查找、增加、减少
getQuantity() getCost() 为得到数量和成本
四、详细设计
(一)、数据库设计
通过对前面的数据流图等分析,我们可以得到数据库的初步结构,使用PowerDesigner设计数据库,并和其他部门建立表与表之间的数据关系。
生成数据库代码(部门表):
/*==============================================================*/
/* Table: Raw */
/*==============================================================*/
create table Raw (
RawID tinyint not null,
Quantity smallint not null,
Cost float not null,
constraint PK_RAW primary key (RawID)
)
Go
/*==============================================================*/
/* Table: PurchasePlan */
/*==============================================================*/
create table PurchasePlan (
RawID tinyint not null,
Quantity smallint not null,
Date tinyint not null,
PerCost float null,
Finished tinyint not null
constraint CKC_FINISHED_PURCHASE check (Finished in (0,1)),
constraint PK_PURCHASEPLAN primary key (RawID)
)
Go
/*==============================================================*/
/* Table: ProducePlan */
/*==============================================================*/
create table ProducePlan (
ProductID tinyint not null,
Quantity smallint not null,
Finished tinyint not null
constraint CKC_FINISHED_PRODUCEP check (Finished in (0,1)),
constraint PK_PRODUCEPLAN primary key (ProductID)
)
go
/*==============================================================*/
/* Table: Product */
/*==============================================================*/
create table Product (
ProductID tinyint not null,
Cost float not null,
Quantity smallint not null,
RDfund float not null,
Owned tinyint not null
constraint CKC_OWNED_PRODUCT check (Owned in (1,0)),
RawCompose varchar(4) null,
constraint PK_PRODUCT primary key (ProductID)
)
go
采购部门的存储过程:产品更新
create procedure Qupdate3 as
declare @id tinyint,@dtype tinyint,@isused tinyint ,@procycle tinyint,@owned tinyint
declare cur cursor for select ID,[Type],IsUsed,Procycle,Owned from ProLine
begin
open cur
fetch next from cur into @id,@dtype,@isused,@procycle,@owned
while(@@fetch_status=0)
begin
if @owned=1
begin
if @isused=1
begin
update ProLine set ProNow=ProNow+1 where ID=@id
if (select ProNow from ProLine where ID=@id)=@procycle
begin
update Product set Quantity=Quantity+1 where ProductID= (select ProductID from ProLine where ID=@id)
update ProLine set IsUsed=0 where ID=@id
update ProLine set ProNow=0 where ID=@id
end
end
end
else
begin
if @dtype=1 and (select [Value] from ProLine where ID=@id)>=5
update ProLine set Owned=1,[Value]=10000+[Value] where ID=@id
else if @dtype=2 and (select [Value] from ProLine where ID=@id)>=8
update ProLine set Owned=1,[Value]=10000+[Value] where ID=@id
else if @dtype=3 and (select [Value] from ProLine where ID=@id)>=16
update ProLine set Owned=1,[Value]=10000+[Value] where ID=@id
else if @dtype=4 and (select [Value] from ProLine where ID=@id)>=24
update ProLine set Owned=1,[Value]=10000+[Value] where ID=@id
end
fetch next from cur into @id,@dtype,@isused,@procycle,@owned
end
close cur
deallocate cur
end
go
(二)、窗体实现
1、采用C++Builder实现主要功能,界面结构如下图:
2、采购管理界面的主要功能实现代码:
void __fastcall TFormApply::Button2Click(TObject *Sender)
{
Table1->Edit(); //按钮修改实现编辑状态
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::Button3Click(TObject *Sender)
{
if(Table1->FieldByName("Finished")->AsInteger==1) //如果未完成采购,不能删除
{
ShowMessage("已到货,不能删除");
}else //如果已完成,则提示是否确认删除
{
int button;
button=Application->MessageBox("你确定要删除吗?","删除数据",MB_OKCANCEL);
if(button==IDOK)
Table1->Delete();
}
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::FormCreate(TObject *Sender)
{
TQuery* pQuery3 = new TQuery(NULL); //在窗口创建时显示剩余先尽量
pQuery3->DatabaseName = "dBase1";
pQuery3->SQL->Add("select cash from Assets");
pQuery3->Open();
pQuery3->Last();
float cash;
cash = StrToInt(pQuery3->FieldByName("cash")->AsString);
pQuery3->Close();
Label4->Caption = cash;
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::Button6Click(TObject *Sender)
{
if(Table1->FieldByName("Finished")->AsInteger==1)
{
}else//如果采购已经完成,则更新采购状态
{
if (Table1->State==dsEdit||Table1->State==dsInsert)
Table1->Edit();
Table1->FieldByName("Finished")->AsInteger = 1;
if(Table1->FieldByName("Finished")->AsInteger==1)
{
TADOQuery* pQuery = new TADOQuery(NULL);
pQuery->Connection=DataModule1->ADOConnection1;
pQuery->SQL->Add("update PurchasePlan set Finished = 1");
pQuery->ExecSQL();
delete pQuery;
}
}
if (Table1->State==dsEdit||Table1->State==dsInsert) //更新剩余可用现金量
Table1->Post();
TQuery* pQuery3 = new TQuery(NULL);
pQuery3->DatabaseName = "dBase1";
pQuery3->SQL->Add("select cash from Assets");
pQuery3->Open();
pQuery3->Last();
float cash;
cash = StrToInt(pQuery3->FieldByName("cash")->AsString);
pQuery3->Close();
Label4->Caption = cash;
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::Table1BeforePost(TDataSet *DataSet)
{
//BDGrid中不允许空值
if(Table1->FieldByName("Quantity")->IsNull || Table1->FieldByName("Quantity")->AsFloat <= 0)
{
ShowMessage("数量不能为空,且不能小于零");
Abort();
}
if(Table1->FieldByName("RawID")->IsNull)
{
ShowMessage("原料ID不能为空");
Abort();
}
//判断原料编号是否正确,并将相应的单价显示在单价行
TADOQuery * pQuery2= new TADOQuery(NULL);
pQuery2->Connection=DataModule1->ADOConnection1;
pQuery2->SQL->Clear();
String data2=Table1->FieldByName("RawID")->AsString;
pQuery2->SQL->Add("select RawID from Raw where RawID="+data2);
pQuery2->Open();
if(pQuery2->IsEmpty())//如果该原料ID不存在,则提示
{
ShowMessage("没有这种原料");
delete pQuery2;
//Table1->Edit();
//Table1->FieldByName("ProductID")->AsString="";
Abort();
}
else
{
TADOQuery * pQuery= new TADOQuery(NULL);
pQuery->Connection=DataModule1->ADOConnection1;
pQuery->SQL->Clear();
pQuery->SQL->Add("select Cost from Raw where RawID ="+data2);
pQuery->Open();
String price = pQuery->FieldByName("Cost")->AsString;
Table1->FieldByName("PerCost")->AsString = price;
delete pQuery;
}
//更新数量
TADOQuery * pQuery3= new TADOQuery(NULL);
pQuery3->Connection=DataModule1->ADOConnection1;
pQuery3->SQL->Clear();
float q1 = Table1->FieldByName("Quantity")->AsFloat;
pQuery3->SQL->Add("select Quantity from Raw where RawID="+data2);
pQuery3->Open();
float q2 = pQuery3->FieldByName("Quantity")->AsFloat;
String quantity = FloatToStr(q1 + q2);
delete pQuery3;
TADOQuery * pQuery4= new TADOQuery(NULL);
pQuery4->Connection=DataModule1->ADOConnection1;
pQuery4->SQL->Clear();
pQuery4->SQL->Add("update Raw set Quantity =" + quantity + "where RawID =" + data2);
pQuery4->ExecSQL();
delete pQuery4;
//更新可用现金
TADOQuery * pQuery5= new TADOQuery(NULL);
pQuery5->Connection=DataModule1->ADOConnection1;
pQuery5->SQL->Clear();
float cash = Table1->FieldByName("Quantity")->AsFloat * Table1->FieldByName("PerCost")->AsFloat;
pQuery5->SQL->Add("select cash from Assets");
pQuery5->Open();
pQuery5->Last();
TADOQuery * pQuery6= new TADOQuery(NULL);
pQuery6->Connection=DataModule1->ADOConnection1;
pQuery6->SQL->Clear();
pQuery6->SQL->Add("select fee from Assets");
pQuery6->Open();
pQuery6->Last();
float fee = pQuery6->FieldByName("fee")->AsFloat + cash;
cash = pQuery5->FieldByName("cash")->AsFloat - cash;
TADOQuery* pQuery7 = new TADOQuery(NULL);
pQuery7->Connection=DataModule1->ADOConnection1;
String c = FloatToStr(cash);
pQuery7->SQL->Add("update Assets set cash = " + c);
pQuery7->ExecSQL();
//更新费用
TADOQuery* pQuery8 = new TADOQuery(NULL);
pQuery8->Connection=DataModule1->ADOConnection1;
String f = FloatToStr(fee);
pQuery8->SQL->Add("update Assets set fee = " + f);
//pQuery4->Open();
pQuery8->ExecSQL();
delete pQuery5;
delete pQuery6;
delete pQuery7;
delete pQuery8;
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::FormClose(TObject *Sender,
TCloseAction &Action)
{
Action = caFree; //窗口关闭时释放内存
}
//---------------------------------------------------------------------------
void __fastcall TFormApply::Button1Click(TObject *Sender)
{
Table1->Append(); //增加一条记录
}
//---------------------------------------------------------------------------
五、结论
通过对该制造业企业的需求分析,可用发现该企业的手工式处理存在着很多的弊端,通过系统性的优化,各部门的业务流程变得很清晰,将信息化管理引入该企业,可以使可用信息的收集、加工等处理得都比较快速、高效,利于企业的市场竞争,减少了数据处理差错的可能性。除原始凭证,其他所有信息都能存放在计算机的磁性介质(硬盘、软盘)中,同时,随时可以根据需要,将信息打印到纸介质上。磁盘可以进行拷贝,使会计数据的保存更加安全。除此之外,可以设定查询的条件,很快地查到所需要的数据;另外,在查阅时,还可以归类,打印查询结果。系统的设计过程采用了由底层数据库到可视化界面的顺序,能够了解到软件设计的整个过程,设计的数据库为典型的关系数据库,采用了图形化的数据库模型设计,使得数据库各个表之间的关系一目了然。最后实现的界面只有几个主要的部门功能,由于本次实习的时间有限,所以还有很多问题没有解决,希望在今后的学习中找到答案。
【参考文献】:
[1] 管理信息系统(第二版) 作者:张月玲,范丽亚;出版社:清华大学出版社;出版时间:20##-5-1
[2] 系统分析与设计(第3版) 作者:(美)丹尼斯,(美)威克瑟姆,(美)罗思 著;出版社:人民邮电出版社;出版时间:20##-1-1
[3] UML面向对象建模与设计(第2版) 作者:(美)巴拉赫,(美)兰宝 著,车皓阳;出版社:人民邮电出版社;出版时间:20##-1-1
[4] 面向对象分析与设计 作者:(美)布奇 等著;出版社:人民邮电出版社;出版时间:20##-8-1
采购实习总结在采购部实习的每一天都很充实,熟悉采购流程,了解采购环节,参与到具体的采购工作中去,采购部的工作流程不外乎围绕着接收采…
在采购部实习的这一周里,感触最深莫过于“忙碌感”,每个人每天的工作,大部分时间都是在与各部门的协调与沟通,由此可见采购部的在整个环…
采购员实习报告一、实习目的和实习要求实习目的:毕业实习是每个大学生必须拥有的一段经历,我们可以在实践中了解社会,去学习很多在课堂上…
附件1实习日记1实习日记2实习日记3实习日记4实习日记5实习日记6实习日记7实习日记8实习日记9实习日记10附件2经济管理学院专业…
XXXXXX学校学生实习报告20xx学年暑期系别XX系实习单位XXXXXXX专业XXXXX班级XXXX09学号XXXXXXXXX姓…
“纸上得来终觉浅,要知此事必躬行”.这是一次理论与实践相结合的实习,把理论应用到实践当中并在实践中积累更加丰富的理论知识.在公司领…
时光如白驹过隙一样转瞬即逝,回首过去在四川东材科技的半年,我内心不禁感慨万千,虽然工作忙忙碌碌,但忙碌的很有意义,我无论在思想上还…
系部名称:学生姓名:指导教师:《ERP沙盘模拟实训》实习报告商学系专业班级:工商114李晓宗学号:20xx04014431曲亚琳李…
试用期工作总结公司领导:您好,来公司工作已一个多月,现将这一段时间的工作汇报如下:一、工作情况1、认识公司产品及配件,虚心和原来的…
专业实习报告一、总结个人对专业实习工作的认识本人的主要课程是工商管理,所以在工作方面都会选择有关于管理知识方面,这可以学而致用。我…
对于采购部,一开始并不是很了解,甚至仅仅肤浅的认为只是对于公司所需物品的购买和置办。后来,慢慢接触了解下来,才发现原来采购部拥有一…