[软件工程导论]课程设计说明书
《软件工程.课程设计》
医药公司进销存 管理信息系统
专 业 : 计算机科学与技术
指导教师 : 欧 阳 浩 班 级 : 计071 班 学 号 : [1**********]6 姓 名 : 苏 建 完成时间 : 2010年7月7日
广西工学院计算机工程系
1. 需求收集、描述……………………………………………………………………..
1.1 发掘业务过程(活动图)……………………………………………..…….3 1.2 领域分析(确定候选类)…………………………………………………...4 1.3 确定系统完全需求(生成包图和高层用例图)…………………………...5 2. 系统USE CASE模型……………………………………………………………,,,..6
2.1 分析(按照需求设计用例)………………………………………………...6 2.2 角色定义…………………………………………………………………… ..6 2.3 USE CASE工作描述…………………………………………………………7 2.4 USE CASE视图 3. 系统逻辑结构设计
……………………………………………………..……7 ………………………………………………………….……8
3.1进货系统(描述涉及概念、映射对象、涉及角色)…………………….…….8
3.1.1事件流过程(操作描述映射成为方法的表示格式为类和方法…..…..8 3.1.2 Sequence Diagram(顺序图).........................................………..…………8 3.1.3 Collaboration Diagram(协作图或通信图) ..………………………….…9 3.2销售系统(SaleSystem) ……...………………………………………………9
3.2.1事件流过程
…………………………………………..………………9
3.2.2 Sequence Diagram ……………………………………………………..10 3.2.3 Collaboration Diagram ………………………………………………...10 3.3库存系统(ValueManager)……………………………………………………..10
3.3.1事件流过程
…………………………………………………….……11
3.3.2 Sequence Diagram …………………………………………………..…11 3.3.3 Collaboration Diagram ………………………………………………...12 3.4系统整体类的组织结构 ……………………………………………………..12 4.程序框架…………………………………………………………………………..….13 4.1详细类图(系统静态结构,应该包含类的详细关系)………………………….13 4.2生成程序框架(参照自己设计的4.1)………………………………….…..……14
4.2.1 类1………………………………………………...................................14 4.2.2 类2…………………………………………………………….………..14 4.2.3 类3…………………………………………………….………………..15 4.2.4 类4…………………………………………….………………………..15 4.2.4 类5…………………………………….………………………………..16
5.个人总结(自己在使用软件工程建模工具进行系统分析、设计的心得体会)….....16 6.参考文献………………………………………………………………………………………………………….……….18
一、需求收集、描述
1发掘业务过程(可用活动图描述)
1.1进货系统活动图
1.2库存系统活动图
2领域分析(确定候选类) 2.1找到被选类
根据题意得,将其中的所有名词及名词短语列出来可以得到如下的被选类列表:
2.2 决定候选类
并不是每个被选类都是合适的候选类,对其进行一番筛选后,将不合适的排除掉。 (1)“进货传票”是个重要的类。进货传票编码 商品编码 品名 规格 厂商 有效期 进价 进货数量都是用来描述进货传票的,因此应该作为“进货传票”类的属性处理。 (2)“供货商”也是该进销存系统的一个重要的类,应该对其进行建模。
(3)“药品”、“库存帐”和“商品目录”都是一个类。其描述的性质是类似的,但是出库量、销售价、库存数量、库存上(下)量都是库存帐的属性,不需对其进行建模。 (4)“商品价格表”也是一个类,建议价、销售价、批准责任人等都是它的属性。
(5)“销售传票”是一个类。
(6)“销售管理员和售货员”也都是类。事实上都是医药公司的下属员工,可以归纳为一个“员工”类,而且他们都有性别、年龄、薪资、招聘日期等等的一些基本属性信息。 通过以上分析,可以得到一个候选列表:
3 确定系统完全需求(生成包图和高层用例图) 3.1(包图)
3.2 (高层用例图)
二、系统USE CASE模型 1. 分析(按照需求设计用例)
用例实例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果,一个用例定义一组用例实例。 1.1 用例1:“进货”业务
场景:某医药公司呼入,当库存药品的数量小于库存下限量时,系统发出警告信息,以示需
要进货;或者为适应市场顾客需求,需要引进新药品。在这两种情况下,医药公司需要正确判断出要进货哪些药品及其数量等,当需求提出后,系统马上执行。 1.2 用例2:“库存”业务
场景:当进货入库时,系统根据进货传票产生的新纪录,库存数量需要加上进货量;当销售
出库时,系统根据销售传票产生的新纪录,库存数量需要减去销售量。此时,系统要在维护其他库存帐的同时,更新库存数量值。当需求提出后,系统马上执行。 1.3 用例3:“销售”业务
场景:医药公司有顾客呼入。顾客提出购货需求,医药公司在有货的情况下,售货员成功的
把药品销售给客户。售货员将要给客户提货凭证,输入销售药品的相关信息,然后启动销售业务-----“打印销售传票”任务。 1.4 用例4:“定价”业务
场景:某医药公司销售管理员呼入。销售管理员拟定销售建议价格,在正式销售之前,向经
理提交议价审批,确定最后销售价格。在这种情况下,系统将要自动更新药品目录的销售价业务。当需求提出之后,系统必须马上执行。
1.5 用例5:“退货”业务(以退货给供货商,供货商现金退给公司为例)
场景:现金管理员检查供应商提交的退货单、还款或者应付票据,然后进行电子签名,系统自动生成红字分录。如果供应商没有付款,生成的红字分录是对冲应付账款;如果供应商已经付款,生成的红字分录是对冲现金。现金管理员打印签名后的退货单给供应商。验收员检查退货单,确认现金管理员已签名,退货单流程已完成,然后将货物退还给供应商,并且进行电子签名。 2. 角色定义
3.
USE CASE工作描述
以下是对各用例的工作进行简单的描述:
“进货”业务用例:医药公司进货经理向供货商家购买药品,录入新药品的信息并自动存档。 “库存”业务用例:系统根据进货传票或者销售传票信息记录自动更新库存信息,确保正确的
库存数量。
“销售”业务用例:售货员向客户销售药品,满足客户的需求。
“定价”业务用例:制定出合理的药品销售价格,并自动更新价格表、存档。 “退货”业务用例: 4. USE CASE视图
三、系统逻辑结构设计
本“医药公司进村小信息管理系统”的Use Case视图的模型如下图所示:
1进货系统(描述涉及概念、映射对象、涉及角色)
1.1事件流过程(操作描述映射成为方法的表示格式为类和方法) 前置条件:进货经理登录进入进货子系统 后置条件:完成进货业务 事件流
1.1.1基本事件流
①进货经理向系统发出“进货药品处理”请求。
②系统响应请求后,显示相应的界面,让进货经理输入进货药品的信息,并根据进货传票规则自动生成进货传票编码。
③进货经理输入进货药品的相关信息,包括:商品编码、品名、规格、厂商、有效期、进价、进货数量。
④系统确认算法已经按要求输入完全相关的药品信息。 ⑤系统确认输入的药品信息中是否有新药品。 ⑥系统将所信息存储建档,并产生进货传票。 1.1.2扩展事件流
④a)如果药品输入中有相关的信息未输入,则弹出警告提示对话框,要求进货经理选择继续补充输入或取消输入。
④a1)进货经理选取取消输入,则用例结束,不产生进货传票。 ④a1)选择继续补充输入,则转到④。
⑤b)如果药品中有新药品,则自动把新药品写入商品目录。 1.2 Sequence Diagram (顺序图)
请求request() 验证数据:’confirm() 验证成功success() 验证失败 fail() 保存处理save() 更新窗体Update()
Submit是提交按钮,SystemContol是系统控制中心,IncomingTicket是进货传票,UpdateInfo是数据更新指令,Supplier是供货商,Dispatch是送货指令
2销售系统(SaleSystem) 2.1事件流过程
2.1.1(销售系统模块---定价处理)基本事件流 ①销售管理员向系统发出“定价处理”请求。
②系统响应请求后,显示对应的界面,让销售管理员输入其议定的销售建议价格。 ③销售管理员点提交,上交给经理审批。
④经理审批完毕,确定最后的药品销售价格。确定提交给系统。 ⑤系统自动更新商品目录的销售价。 扩展事件流:无
2.1.2(销售系统模块---销售处理)基本事件流 ①顾客呼入买药。
②售货员根据顾客要求查找商品目录和库存帐。 ③销售成功,系统产生销售传票。 ④打印销售传票。
⑤顾客领取销售才传票,取商品。 扩展事件流:
②a)如果有货,库存数量符合顾客要求,则转下③。
②b)如果无货,库存数量不符合顾客要求,则用例结束,不产生销售传票。
2.2 Sequence Diagram(顺序图)
销售价格price() 客户要求: request() 库存判断total() 销售成功 sale()
2.3 Collaboration Diagram
Manager是经理,SaleManager是销售管理员,SaleTicket是销售传票,System是库存维护帐中心系统,Customer是顾客,Sale是售货员
3库存系统(ValueManager) 3.1事件流过程
3.1.1(进货入库模块)基本事件流
①进货经理向系统发出“进货入库”请求。
②系统响应请求后,显示相应的界面,让进货经理导入入进货传票的信息。 ③系统接收到进货传票的信息。
④系统启动程序自动将原库存数加上进货量,更新库存数。 ⑤系统自动判断库存数是否大于库存上限量。 ⑥系统将所信息存储建档。
扩展事件流
⑤a)系统如果判断出库存数已经大于库存上限量,则发出警告信息。 3.1.2(销售出库模块)基本事件流
①进货经理向系统发出“销售出库”请求。
②系统响应请求后,显示相应的界面,让进货经理输入销售药品的信息。 ③系统自动产生销售传票。
④系统接收到销售传票的信息。
⑤系统启动程序自动将原库存数减去销售量,更新库存数。 ⑥系统自动判断库存数是否小于库存下限量。 ⑦系统将所信息存储建档。
扩展事件流
⑤a)系统如果判断出库存数已经小于库存下限量,则发出警告信息。 3.2 Sequence Diagram(顺序图)
请求request() 入库窗体FormIn() 销售出库FormOut() 库存量判断Total() 警告Waring()
3.3 Collaboration Diagram (协作图)
sale是销售出库,Store是销售出库,CenterProtect是库存维护帐,IncresingOrder是增加库才量指令,DesOrder是减少库存量猴子了,Waring是警告。
3.4系统整体类的组织结构
1详细类图 详细类图如下图:
①公司员工(Employees):姓名(name)、性别(sex)、编号(no.)、工资(wage)、聘用日期
(hiredate)。
②顾客(Customer):客户编号(cno.)、名字(name)、地址(address)、联系方式(telephone)。 ③销售(Sales):销售编号(sno.)、销售价(price)、销售时间(saledate)、销售数量(quantity)、
销售方式(saleway)。
方法有:生成销售传票create()、完成销售close()
④药品(Drug):商品编码(number)、品名(name)、规格(specifications)、厂商(factory)、
有效期(valid)、建议价格(p-price)、销售价格(s-price)、批准责任人(ower)。
⑤管理(Manager):定价(pricing)、编码商品(coding)。
⑥供货商(Suplier):编号(no.)、单位名称(company)、地址(address)、银行账号(account)、
联系电话(phone)。
方法有:送货完成close()
⑦进货(Incoming):进货传票编码(no.)、商品编码(dno.)、品名(name)、规格(specifications)、
厂商(factory)、有效期(valid)、进价(pricie)、进货数量(i-quantity)。
方法有:生成进货传票dispach( )、完成进货close()
⑧供应(Supply):商品编码(no.)、品名(name)、规格(specifications)、厂商(factory)、有效期
(valid)、销售价格(s-price)。
2生成程序框架(参照自己设计的4.1) 2.1 类1 ----数据库连接池 public class DBConnection {
Connection con=null; Statement stmt=null; ………
public DBConnection() { }
//使用jdbc连接数据库 public void getConnection(){ }
//查询数据1
public ResultSet selectRecord(String sql){ }
//修改数据
public int updateRecord(String sql){ }
。。。。。。。。 try {
……….} try{ }
Class.forName("com.mysql.jdbc.Driver");//装载驱动程序 ………..
2.2 类2--------公司员工 public class Employees {
private String username;//用户名 private String sex; //性别
。。。。。。。。。。。 public User(){ 。。。。。。。。。 }
public String getUsername(){ return username ;
}
。。。。。。。。。。。。。。。。。 2.3 类3----------顾客 public class Customer {
private String username;//用户名 private String telephone; //电话
。。。。。。。。。。。 public User(){ 。。。。。。。。。 }
public String getUsername(){ return username ;
}
。。。。。。。。。。。。。。。。。 2.4 类4--------供货商 public class Supplier { private String name;//姓名 private String phone; //联系方式。。。。。。。。。。。 public User(){ 。。。。。。。。。 }
public String getUsername(){ return username ;
}
。。。。。。。。。。。。。。。。。 2.4 类5------药品 public class Drug{
private String name;//品名
private String number,specification,factory,valid,p-price,ower;//定义变量 public Drug(){
name=""; number="";
。。。。。。。。。。。。。。。。。。。。 }
public String getName(){ }
public void setName(String name){
this.name=name; return name ;
。。。。。。。。。。。。。。。。。。。。。。
五、个人总结
首先说一下对本系统从开始设计到完成过程中感觉比较深的三点:
首先学了《软件工程导论》该课程后感觉几乎没有什么比较大的收获,这也是跟自己不认真上课有直接的关系的,所以一开始感觉还是很难的样子,幸亏在此的同时学习了《UML面向对象建模基础》虽然是基础,实际上帮了我好大的忙,几乎是通过学习此《UML》课程完成了任务---软件工程的课程设计。
第二,因为本人是从易到难做起的,做到最后的时候,感觉“某医药公司进销存信息管理系统”最难建模的就是确定系统需求画包图,系统逻辑结构设计中各个子系统的顺序图和协作图(通信图),对这些设计的逻辑很不理解,很难下手,卡住了很久,也觉得浪费了不少的时间。
第三,可以说是对该课程设计学习的一点收获。越往后面做任务的时候就感觉越对系统越了解,有时感觉自己似乎已经置身于此系统的设计与管理之中,好像自己也成了其中的一个参与者。所以总的来说不管是书本或者是现实管理中都已经增长知识不少,open我的眼界了些许。
对于自己在使用软件工程建模工具进行系统分析、设计的体会。一看到这个就立马感觉到一
个做的不好的地方,就是在安装微软的Rational Rose建模软件系统的时候,自己不会安装,已经下载好了软件和相关配置文件,操作了一个上午还是失败了,那时候想和同学们交流,无
奈我想合作的同学都没有一起装好,或许会装的还没开始做,所以最后自己搜索了一个StarUML建模软件,该软件后面还介绍了几个同学用,因为他们也不会安装Rational Rose建模软件(有的是嫌弃安装麻烦吧)。但是个人在使用StarUML后感觉,虽然这款软件没有Rose的功能强大,但是可绘制9款UML图:用例图、类图、序列图、状态图、活动图、通信图、模块图、部署图以及复合结构图等,这已经足矣。在使用StarUML设计系统过程中主要发现以下几点:
第一,设计各种用例图、系统活动状态图很方便,也很快捷。因为建模软件中都有完整的模块控件,只需用鼠标拉动就可以了,而且文本的编辑性和可调性也很好,需要在什么位置添加注释,想怎么调整位置都很容易实现。这也是软件的功能好吧。
第二,感觉比较有系统性。这个好处的前提是在开始操作UML建模软件之前首先在纸上要有一个总体的大概的构想或者是设计,比如说需要建多少个类,有多少、哪些属性,它们之间的联系关系,在建模哪个系统之后最后接着建模哪个,我觉得都很重要,这样在使用UML建模的时候就很顺手了,设计出来的系统模型很具有客观性,当然要达到这个要求得先了解建模工具的操作基础,熟悉建模工具的界面操作功能。
第三,需要学习的还有很多。用时下的一句话来说就是:革命尚未成功,还需继续努力。做完这个系统设计之后,也最后发现建模工具中的有很多功能还是没有怎么使用到的,比如接口类之类的啊等等一些连自己都不是很清楚的工具,这点说来惭愧了,所以说还需要学习建模的很多知识。因为在我们以后的毕业设计中或者是下学期的课程设计上,都有可能会继续用到这个建模工具来完成我们的文档上的相关设计的,或者在其它课程的设计应用中也都会有可能使用到。
第四,建议。一是“进货自系统”中的设计有“药品验收处理”模块,这点可以和“库存子系统”中的“入库处理”合并为一个子系统中去(个人觉得这两个不同系统中的模块放在一个系统比较更合理)。“进货系统”中就可以更改为“下进货单”。二是题意信息还不够明了,可以修改更明确些。比如:“进销存”各个子系统中是否都安排有一个部门经理,还是只要是公司的普通员工就可以都操作,用该系统的功能。这些没有说明参与者的明确角色,这样真的设计起来就很麻烦了,在没有充分了解全部需求的情况下设计出来的作品都不会是最好的。
最后总结一下,本系统出于对个人方便以及学习的需要,在设计活动图中也使用了Word的画图软件工具,Word中的画图也是别有一番滋味。能用不用的方法实现一样的功能也一样可圈可点。但是对于系统设计的需要建议还是用专业的建模工具好。
参考文献
1.《软件工程导论》 张海藩 编著---------清华大学出版社
2.《UML面向对象建模基础》 徐峰 陈瑄 等编著 -------中国水利水电出版社 3.《UML设计实作宝典》 孙惠民 编著 ---------中国铁道出版社