UML活动图

UML的活动图(activity diagram)是用于表示系统控制流的,是状态图的特殊形式。活动图与流程图比较类似,具有如下与流程图不同的特征。

1)不像系统流程图那样仅用于程序设计级,能用于描述概念级的模型。

2)能描述并行动作。

构成活动图的主要元素如图5-36如示:

 
图5-36活动图的构成元素

活动图与流程图一样可以表示活动的顺序,活动图的控制流像流程图一样由相当于goto语句的控制进行移动,但没有循环结构和多层分支结构。图5-37表示自动贩卖机的活动图。
 

 
图5-37 自动贩卖机的活动图

这个活动图与前面介绍的场景描述相比,能用于描述一般的情况,包括利用者中途停止、继续投入钱币、取出商品后继续利用等一些异常情况。当然,当控制流变得复杂时,可能会使活动图难于理解。

在流程图中,动作的主体通常是由计算机(或相当于计算机的实体)所决定的。在面向对象的框架中使用活动图就使得各种各样的对象成为活动的主体。为了明确地表示出活动的主体,也可使用标识主体的描述方法(如图5-38所示)。

 
图5-38 标识主体的活动图

当把活动图视为图形时,其路径可解释为执行路径。根据不同的图示,分支可解释为“or”关系(选择分支),即可选择任一路径执行;也可解释为 “and”关系(并行分支),即所有的路径同时执行。此外,活动图还可表示为层次结构,使得活动图可像数据流图一样进行分解。

活动图主要是描述系统的全部活动,在模型化活动方面与UML的状态图、序列图和协同图成为互补关系。另外,也可用于描述工作流、业务流和开发过程等。

#include bool GetCharge(int Sum,int Money); void Getsmalcharge(int Money,int *ChargeNum); void main() { char state='N'; int Sum=0; char Pro; printf("\n********************************\n"); while(true) { state='N'; Sum=0; while(state=='N'||state=='n') { printf("\n输入购买物品(a,b,c):"); scanf("%c",&Pro;); getchar(); switch(Pro) { case 'a': Sum=Sum+1; break; case 'A': Sum=Sum+1; break; case 'b': Sum=Sum+5; break; case 'B': Sum=Sum+5; break; case 'c': Sum=Sum+10; break; case 'C': Sum=Sum+10; break; default: printf("\n输入物品有误!!!!\n"); break; }; printf("\n是否完成(Y/N):"); scanf("%c",&state;); getchar(); } int Money; printf("\n购买总价为:%d",Sum); bool st=false; while(!st) { printf("\n输入金额:"); scanf("%d",&Money;); getchar(); st=GetCharge(Sum,Money); }; printf("\n----------------购买结束------------\n"); printf("\n"); printf("\n"); printf("\n"); } } //---------------------------------------------------- bool GetCharge(int Sum,int Money) { int ChargeNum[4]; for(int i=0;iMoney) { printf("\n金额不够,请重新输入....."); return false; } else if(Sum==Money) { printf("\n余额为0"); return true; } else { int Result=Money-Sum; Getsmalcharge(Result,ChargeNum); printf("\n余额为%d元,应找零\n1 元%d张\n2 元%d张\n5 元%d张\n10元%d张\n",Result,ChargeNum[0],ChargeNum[1],ChargeNum[2],ChargeNum[3]); }//end if return true; } //------------------------------------ void Getsmalcharge(int Money,int *ChargeNum) { if(Money<0) return; int Sum=Money; int charge[4]={1,2,5,10}; ChargeNum[3]=Sum/charge[3]; Sum=Sum%charge[3]; ChargeNum[2]=Sum/charge[2]; Sum=Sum%charge[2]; ChargeNum[1]=Sum/charge[1]; Sum=Sum%charge[1]; ChargeNum[0]=Sum/charge[0]; Sum=Sum%charge[0]; } 或者这个试试#include main() { int x,n,y; float sum=0.0; printf("请选择: 1.日用品 2.文具 3. 食品\n"); scanf("%d",&x); switch(x) { case 1: printf("请选择:1.牙刷(3.5元/支) 2.牙膏(6.2元支)\n"); printf(" 3.肥皂(2元/块) 4.毛巾(8.6元/条)\n"); scanf("%d",&y); printf("数量?"); scanf("%d",&n); switch(y)/*匹配顾客选择的具体商品*/ { case 1: sum=3.5*n ; break; case 2: sum=6.2*n ; break; case 3: sum=2*n ; break; case 4: sum=8.6*n ; break; } break; case 2: printf("请选择:1.笔( 3元/支) 2.笔记本(1.2元/个)\n"); printf(" 3.文件夹(12元/个) 4.文具盒(8.6元/个)\n"); scanf("%c",&y); printf("数量?"); scanf("%d",&n); switch(y) { case 1: sum=3*n; break; case 2: sum=1.2*n; break; case 3: sum=12*n; break; case 4: sum=8.6*n; break; } break; case 3: printf("请选择:1.白糖(3.6元/包) 2.盐(1元/包)\n"); printf(" 3.饼(2元/个) 4.方便面(3.6元/条)\n"); scanf("%c",&y); printf("数量?"); scanf("%d",&n); switch(y) { case 1: sum=3.6*n; break; case 2: sum=1*n; break; case 3: sum=2*n; break; case 4: sum=3.6*n; break; } break; } printf("总计:%.2f 元\n",sum); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值