问答题

【说明】
公司IT部门决定开发一个计算机管理系统以记录期刊的传阅情况。
期刊在公司内部传阅,员工可以要求加入传阅队列。图书室登记公司收到的期刊,交给名单中的第一名员工。员工应在3个工作日内完成阅读,员工阅读完毕后通知系统,系统提醒下一位阅读者取书,下一个员工必须确认已收到期刊。当传阅名单中“下一位”员工出差在外时将无法进行传阅,此时将期刊传给再下一位,而将该员工做标记,再次传递此书时优先考虑该员工。最后一位员工阅读完毕后,将期刊交还图书室以便共用。系统能在员工忘记传递期刊时发出提醒信息。系统详细记录期刊传阅情况,当员工阅读完后通知系统,系统记录该员工的员工号及日期,并在备注栏注明是传出;同样,当员工收到期刊后给系统收书确认,系统记录该员工的员工号及日期,并在备注栏注明是收到。
公司的员工都有一个唯一的员工号。公司订阅了多种期刊,为每一本期刊(有唯一期刊流水号)产生一份传阅名单,并详细记录传阅情况。员工的出差情况存储在系统主机中。
该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,图9-4是该系统的类图的一部分,图9-5描述了成功传递期刊的序列图。




【问题2】
根据题意,将图9-5中的(1)~(5)处补充完整。

【参考答案】

(1)通知系统 (2)读取下一位阅读者 (3)读取员工状态
(4)提醒取书 (5)添加传阅记录
热门 试题

问答题
【说明】 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为: m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2] 其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数,1表示负数。 运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减的情况。注:不考虑溢出情况,即数组足够大。 【函数】 int cmp(int *LA, int *LB); *比较长整数LA与LB的绝对值大小* *若LA绝对值较大返回正值,LA较小返回负值,相等则返回0* int ADD(int *LA, int*LB, int *LC) *计算长整数LA与LB的和,结果存储于LC中* *注意:正数与负数的和相当于正数与负数绝对值的差* *数据有误返回0,正常返回1* if(LA==NULL || LB==NULL || LC==NULL)return 0; int *pA, *pB,i,N,carry,flag; flag=LA[0]+LB[0]; switch(flag) *根据参与运算的两个数的符号进行不同的操作* case 0: case 2: LC[0]=LA[0]; *LA与LB同号,结果符号与LA(LB)相同* pA=LA; pB=LB; (1) ; break; case 1: *LA与LB异号* *比较两者的绝对值大小,结果符号与较大者相同* flag= (2) ; if(flag>0) *LA较大* LC[0]=LA[0]; pA=LA; pB=LB; else if(flag<0) *LB较大* LC[0]=LB[0]; pA=LB; pB=LA; else *LA与LB相等* LC[0]=0; LC[1]=0; return 1; flag=-1; break; default: return 0; break; *switch* *绝对值相加减* *注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减的情况* (3) ; N=LA[1]>LB[1]LA[1]:LB[1]; for(i=0;i<N;i++) if(i>=pA[1]) *LA计算完毕* carry+=flag *pB[i+2]; else if(i>=pB[1]) *LB计算完毕* carry +=pA[i+2]; else carry +=pA[i+2]+flag *pB[i+2]; LC[i+2]=Carry%10; carry =10; if( (4) ) *需要借位,针对减法* LC[i+2]+=10; carry--; *for* if( (5) ) *最高进位,针对加法* LC[i+2]=carry; i++; if(LC[i+1]==0)i--;严若最高位为零,针对减法* LC[1]=i; return 1; ; *ADD*