阅读以下说明和图,回答问题1和问题2,将答案写在对应栏内。
【说明】
某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管理两方面的功能。
(1)学生选修课管理
主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。
①新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。
②学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程己选修人数。学生所选几门课程在上课时间上不能冲突:若一门课程实际选课学生已达到40人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。
③选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、授课教师等。
学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。
教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。
④信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。
⑤把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。
(2)学生成绩管理
①学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。
②成绩查询;教师和教学管理人员可查询学生各门课程的成绩。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。
③成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。
完成下面的教学管理系统最高层用例图。
第2题
阅读以下说明,回答问题1~4,将解答填入对应的解答栏内。
[说明] 现有如下关系模式:R(A,B,C,DE),其中,A,B为组合键,R上存在的函数依赖有(A ,B) →E,B→C,C→D
该关系模式满足2NF吗?为什么?
第4题
由和规则)。请按表7-18写出工作流对象及对应的起始点、终止点和该工作流中的所有角色。
第5题
阅读以下关于工作流系统模型建立和性能分析的叙述,根据要求回答问题1~问题4。
[说明]
某软件开发公司向客户交付系统产品后,由技术支持部门负责向客户提供技术服务。该技术支持部门的业务流程如下:
①当该技术支持部门接到一个客户问询电话时,由客户服务代表(CSR)接听该电话。客户服务代表根据客户问询内容产生一份服务请求文件,并开始解决客户提出的问题;
②若客户服务代表解决了客户提出的问题,这份服务请求文件被标记为“已解决”;
③如果客户服务代表在2个小时内未能解决这个问题,客户服务代表将服务请求文件转交给技术支持代表(TSR)处理;
④如果技术支持代表也无法解决这个问题,他/她将邀请助理工程师(ENGR)来一起处理这个问题;
⑤若助理工程师解决了这个问题,该服务请求文件被标记为“已解决”;
⑥若技术支持代表和助理工程师认为,是由于系统的错误引起的问题,则告知客户该问题目前无法解决;并把服务请求文件转交给本公司的工程部门处理;
⑦对已经解决的服务请求,每个月底进行一次归档(放入归档数据库)。
该软件公司正在创建一个相应的工作流管理系统,目前正处于过程定义阶段,即创建工作流模型阶段。对于这些工作流模型,除了要考虑工作流的正确性外,工作流的性能也是十分重要的。工作流性能主要反映工作流定量方面的特性,例如,任务的完成时间、单位时间内处理的任务数量、资源的利用率及在预定时间标准内完成任务的百分比等。
图7-14所示的是一个简单的工作流模型(其中单位时间为1小时),它表示这样一个执行过程:每小时将会有20个任务到达c1,这20个任务首先经过处理task1,再经过处理task2,最终将结果传递到c3。处理task1和处理task2相互独立。
假设性能评价模型符合M/M/1排队模型,在计算性能指标的过程中可以使用下列公式进行计算:
其中,ρ表示资源利用率,λ表示单位时间内到达的任务数,μ表示该资源单位时间内能够完成的任务数。
工作流(Workflow)是针对业务流程中具有固定程序的常规活动而提出的一个概念,通过将业务流程分解,定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。以下关于工作流叙述中,错误的是(1)。 在UML中,用(2)表示企业业务的工作流。这种图显示出工作流中的步骤、决策点,以及完成每一步骤的角色和对象。
(1) A.引入工作流组织,能够在软件开发和业务两个层次受益 B.工作流管理系统在实际系统中的应用一般分为两个阶段,即模型建立阶段和模型执行阶段 C.工作流能有效地把人、信息和应用工具合理地组织在一起,发挥系统的最大效能 D.一个工作流包括一组活动及它们的相互顺序关系,还包括过程及活动的启动和终止条件,以及每个活动的描述
(2) A.交互图(interaction diagram)
B.业务图(business diagram)
C.用例图(use case diagram)
D.活动图(activity diagram)
第6题
阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。
[说明]
以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。
[JAVA代码]
//定义自己的异常类
class CCircleException extends Exception
{
}
// 定义类 CCircle
class CCircle
{
private double radius;
public void setRadius ( double r ) (1)
{
if ( r<0 ) {
(2)
}
else
(3)
}
Public void show ( ) {
System. out. println ( "area="+3.14*radius*radius );
}
}
public class ciusample
{
public static void main ( String args[] )
{
CCircle cir=new CCircle( );
(4) {
cir. setRadius ( -2.0 )
}
(5)
{
System. out. println ( e+" throwed" ) ;
}
cir. show( ) ;
}
}
第7题
阅读下列函数说明、图和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数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;
&n
第8题
阅读下列说明和数据流图,回答问题1至问题4,将解答填入答题纸的对应栏内。
[说明]
某基于微处理器的住宅安全系统,使用传感器(如红外探头、摄像头等)来检测各种意外情况,如非法进入、火警、水灾等。
房主可以在安装该系统时配置安全监控设备(如传感器、显示器、报警器等),也可以在系统运行时修改配置,通过录像机和电视机监控与系统连接的所有传感器,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个传感器赋予一个编号(即 id)和类型,并设置房主密码以启动和关闭系统,设置传感器事件发生时应自动拨出电话号码。当系统检测到一个传感器事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到事件的性质等信息。
[数据流图4-1]
数据流图4-1(住宅安全系统顶层图)中的A和B分别是什么?
第9题
阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。
【说明】StringEditor类的功能是:已知一个字符串,返回将字符串中的非字母字符都删除后的字符串。
public (1) {
public static String removeNonLetters( (2) ){
StringBuffer aBuffer=(3);
char aCharacter;
for(int i=0; i<original.length();i++){
aCharacter=(4);
if(Character.isLetter(aCharacter))
aBuffer.append( (5) );
}
return new String(aBuffer);
}
}
public class StringEditorTester{
public static void main(String args[]){
String riginal="Hi!, My Name is Mark, 234I think you are my classmate?!!";
System.out.println(StringEditor.removeNonLetters(original));
}
}
第10题
阅读下列函数说明和C代码及流程图,将应填入(n)处的字句写在对应栏内
[说明]
分糖果问题是一个经典问题。问题描述如下:幼儿国有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个小孩的初始数由键盘输入。经过多少次调整,使每个孩子手中的糖果一样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
[C程序]
include <stdlib.h>
include <stdio.h>
bool allequall (int child[], int n ) //判断各小孩子手中的糖果是否相等
{
for ( int i=0; i<n-1; i++)
if (child[i]!=child[i+1] )
return false; //不相等返回假
return true; //相等返回真
}
const int MaxNum=20; //定义最大人数
//主函数
void main ( )
{
int Num=0;
int *child;
int *child1;
//构造两个相应大小的数组child代表小朋友现有的粮果数child1代表小朋友原来有的糖果数
int Tnum=0;
int i=0;
do{
printf ( "Pelase input the number of the children: ").,
scanf ( "%d",&Num );
if ( Num>MaxNum )
printf ( "Error Number!!" );
} while ( Num>MaxNum );
child=new int [Nmn];
child1=new int [Num];
for ( i=0; i<Num; i++ ) //将数组赋值
{
printf ( "Input NO. %d child's candy numbers: ",i+1);
scanf ( "%d", &child[i] );
}
while ( (1) )
{
for (i=0; i<Num; i++ )
{
if( (2) )
{
(3)
Tnum++;
}
}
for ( i=0; i<Num; i++ )
child1[i]=child[i]; //将child1赋值用来记忆原来小朋友的粮果数
for ( i=0; i<Nam; i++ )
(4)
for (i=0; i<Num-1; i++)//用循环实现前一个小朋友粮果数加后一个小朋友粮果数的一半
{
child[i]/=2;
child[i]+=child 1 [i+1];
}
child[Num-1]/=2;
(5)
}
printf ( "每个同学最后分到糖果数目是%d\n", child[1]);
printf ( "老师分发出的糖果是%d\n", Tnum );
}
图12-7是一种解决问题的流程图,请根据该流程图将对应C代码(n)处补充完整。
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!