阅读下列说明和图,回答问题l至问题3,将解答填入答题纸的对应栏内。
【说明】
某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡器((:ardReader)读取ATM卡;系统与客户(Customer)的交互由客户控制台(CustomerCon—sole)实现;银行操作员(()perator)可控制系统的启动(System Startup)和停止(SystemShutdown);系统通过网络和银行系统(Bank)实现通信。当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction):
1.从ATM卡账户取款(withdraw);
2.向ATM卡账户存款(Deposit);
3.进行转账(Transfer);
4.查询(Inquire)ATM卡账户信息。
一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统进行验证。若个人验证码错误,则转个人验证码错误处理(Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出ATM卡,会话结束。系统采用面向对象方法开发,使用uML进行建模。系统的顶层用例图如图5—3所示,一次会话的序列图(不考虑验证)如图5—4所示。消息名称参见表5—4。
根据【说明】中的描述,给出图5—3中A1和A2所对应的参与者,u1至u3所对应的用例,以及该图中空 (1) 所对应的关系。(ul至u3的可选用例包括:Session、Trans-action、Inserl Card、Invalid PIN Process和Transfer)
可分送式配送需同时满足条件是:
A、各客户之间的距离很近。
B、同一路线上所有客户需求量之和不大于一辆车的额定装载重量和装载体积
C、客户对配送时效要求不高
D、配送中心车辆资源紧缺。
【问题 1】 (9分) 引入两个伪指令 a = R(X) 和 W(b,X) 。其中a = R(X) 表示读取当前红包记录的 ReceiverID 字段(记为数据项 X) 到变量 a 中, W(b,X)表示将抢红包人的唯一标识 b 的值写入到当前红包记录的 ReceiverID 字段(数据项 X) 中,变量 a 为空值时才会执行 W(b,X) 操作。假设有多个人同时抢同一红包(即同时对同一记录进行操作),用 ai=Ri (X)和 Wi(bi, X)表示系统依次响应的第i个人的抢红包操作。假设当前数据项 X 为空值,同时有三个人抢同一红包,则 (1)如下的调度执行序列: a1 =R1, a2 = R2(X),W1(b1 ,X),W2(b2,X), a3 = R3(X) 抢到红包的是第几人?并说明理由。 (2)引入共享锁指令 SLocki(X)、独占锁指令XLocki(X)和解锁指令 ULocki(X) ,其中下标 i表示第 i个抢红包人的指令。如下的调度执行序列: SLock1(X),a1 = R1(X),SLock2(X),a2 = R2(X),XLock1(X)...... 是否会产生死锁?并说明理由。 (3)为了保证系统第一个响应的抢红包人为最终抢到红包的人,请使用上述。)中引入的锁指令,对上述(1)中的调度执行序列进行修改,在满足 2PL协议的前提下,给 出一个不产生死锁的完整的调度执行序列。 【问题 2】 (6分) 下面是用 SQL实现的抢红包程序的一部分,请补全空缺处的代码 CREATE PROCEDURE ScrambleRed (IN BatchNo VARCHAR(20) , --红包批号 (IN RecvrNo VARCHAR(20)) 一接收红包者 BEGIN --是否已抢过此批红包 if exists(SELECT * FROM Red WHERE BatchID = BatchNo AND ReceiverID = RecvrNo) thm return -1; end if; ---读取此批派发红包中未领取的红包记录ID DECLARE NonRecvedNo VARCHAR(30); DECLARE NonRecvedNo CURSOR FOR SELECT ID FROM Red WHERE BatchID = BatchNo AND ReceiverID IS NULL; -打开游标 OPEN NonRecvedRed; FETCH NonRecvedRed INTO NonRecvedNo; while not error 一抢红包事务 BEGIN TRANSACTION; //写入红包记录 UPDATE RED STE RECDIVER ID =RecvrNo WHERE ID = nonRECVED AND(a) //执行状态判定 If<修改的记录数>= 1 THEN COMMIT; (b); Return 1; Else ROLLBACK; End if; (c); End while --关闭游标 CLOSE NonRecved RD Return 0; END
A.L2TP
B.PPTP
C.IPSec
D.TLS