问答题

【说明】
某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。
在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。
新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。
在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。
【用例图】


【表】

表3-1 学生课注册系统的实体类
实体类 说明
Professor 学校中讲课的教师
Strdent 学校中注册课程的学生
Schedule 学生在新学期选择登记的课程列表
CourseCatalog 学校所有课程的目录
Course 课程的基本信息
CourseOffering 新学期课程的开设信息,如课课教师、时间、地点等信息

表3-2 学生课程注册系统的边界类
边界类 说明
LoginForm 为教师、学生和注册管理提供登录的操作
RegisterCoursesForm 为学生提供选课注册的操作
ViewReportForm 为学生提供成绩查询的操作
SelectTeachCoursesForm 为教师提供查看学生选课情况的操作
SubmitGradesForm 为教师提供登记成绩的操作
MaintainProfessorsForm 为注册管理员提供维护教师信息的操作
MaintainStudentsForm 为注册管理员提供维护学生信息的操作
MaintainCoursesForm 为注册管理员提供维护课程信息的操作
CloseRegistrationForm 为注册管理员提供关闭注册的操作
BillingSystemNotice 提供与收费系统的信息交换接口

表3-3 学生课程注册系统的控制类
控制类 说明
RegisterCoursesControl 负责新学期学生的选课登记
ViewReportControl 负责学生成绩的查询
SelectTeachCoursesControl 负责新学期课程的学生选择情况
SubmitGradesControl 负责学生成绩的登记
CloseRegistrationControl 负责关闭课程注册
【协作图】


【时序图】
注释1:学生打算注册新的课程。
注释2:一张这学期可选择的课程列表。
注释3:显示一张为学生选课用的空白登记表。


1. 【问题1】
在UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)~(3)处表示的内容。

【参考答案】

用例的特征如下:用例总是由角色初始化:用例为角色提供值;用例具有完全性,即不管其内部是如何实现的,只有最终产生了返回角色......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
A代表故障代理,B代表报警器。
问答题
阅读下列函数说明,将应填入 (n) 处的字句写在答卷纸的对应栏内。 【函数1说明】 函数compare(SqList A,SqList B)的功能是:设A=(al,…,am)和B=(b1,…,bn)均为顺序表,“比较”两个顺序表A和B的大小。设A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(y,X,X,Z,X,Z),B=(y,x,x,z,y,x,x,2),则两者中最大的共同前缀为(y,x,x,2),在两表中除去最大共同前缀后的子表分别为A’=(X,Z)和B’=(y,x,x,2))。若A’=B’=空表,则 A=B:若A’=空表,而B’≠空表,或者两者均不为空表,且A’的首元小于B,的首元,则A<B;否则A>B。 提示:算法的基本思想为:若相等,则j+1,之后继续比较后继元素:否则即可得山比较结果。显然,j的初值应为0,循环的条件是j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有3种可能出现的情况需要区分。 【函数1】 int compare(SqList A,SqList B) 若A<B,则返回-1;若A=B,则返回o:若A>B,则返回1 j=0; while(j< (1) &&j<B.1ength) if( A.elem[j] < B.elem[j] ) return(-1); else if( A.elem[j] > B.elem[j] ) return(i); else (2) ff (A.length == B.length) return (0); else fi(A.length < B.length ) return(-1); else return(1); compare 函数1的时间复杂度是 (3) 【函数2说明】 函数 exchange_L( SLink &L, int m )的功能是:用尽可能少的辅助空间将单链表中前 m个结点和后 n 个结点的互换。即将单链表(a1,a2,...,am,b1,b2,...,bn) 改变成 (b1,b2,...,bn,a1,a2,…,am)。 【函数2】 void exchange_L( SLink &L, int m ) if( (4) && L->next) 链表不空且 m!=0 p = L->next; k = 1; while( k< m && p ) 查找am所在结点 p = (5) ; ++k; if( (6) &&p->next) n!=0 时才需要修改指针 ha = L->next; 以指针ha记a1 结点的位置 L->next = p->next; 将b1结点链接在头结点之后 p->next = NULL; 设am的后继为空 q: (7) ; 令q 指向b1结点 while(q->next)q= (8) ; 查的bn结点 q->next = (9) ; 将a1 结点链接到bn 结点之后 函数2的时间复杂度是 (10) 。