软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷17
-
下面是一个Applet程序,其功能是在绘图区域中通过鼠标的移动来绘制直线,并且有清除绘图区域按钮,用来清除已经绘制的图像。
程序运行结果如图5所示。
import java.awt.*;
import java.applet.*;
/*
<applet code=ex6_7. class width=800 height=400>
</applet>
*/
public class ex6_7 extends Applet{
private Button btn;
private boolean bDraw,bClear;
private int upX,upY,downX,downY;
public void int(){
setLayout(null);
bClear=false;
bDraw=false;
btn=new Button("clear");
btn.reshape(250, 150,70,30);
add(btn);
}
public void paint (Graphics g){
if(bClear){
g.clearRect(0,0,getSize(). width,getSize(). height);
(1);
}
if(bDraw){
g.drawLine((2));
bDraw=false;
}
}
public void update (Graphics g){
(3);
}
public boolean mouseDown(Event event, int x,int y){
downX=x;
downY=y;
return true;
}
public boolean mouseup(Event event,int X,int y){
upX = x;
upY =y;
(4);
repaint();
return true;
}
public boolean action(Event event,Object object){
if((5)){
bClear=true;
repaint();
}
return true;
}
}
ex6_7. html
<HTML>
<HEAD>
<TITLE>ex6_7</TITLE>
</HEAD>
<BODY>
<appletcode=" ex6_7. class" width=800 height=400 >
</applet>
</BODY>
</HTML>
-
读下列程序说明和C程序,将应填入(n)处。
【程序说明】
该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。
【程序】
#include<stdio.h>
void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中
{
char t,*w;
w=c;
while((1))
{//找到字符串a,b当前字符中较小的字符
if(*a< *b)
{
t= *a;
(2);
{
else if (*a>*b)
{
t= *b;
(3);
}
else //字符串a,b当前字符相等
{
t= *a;
a++;
b++;
}
if((4)) //开始,可直接赋值
*w=t;
else if(t!=*w)
//如果a,b中较小的当前字符与c中当前字符不相等,才赋值(5);
}
if(*a!=\'\0') //如果字符串a还没有结束,则将a的剩余部分赋给C
while(*a!='\0')
if(*a!=*w)
{
*(++w)=*a;
a++;
}
else
(6);
if(*6!='\0') //如果字符串b还没有结束,则将b的剩余部分赋给c
while(*b!='\0')
if(*b! = *w)
{
*(++w)=*b;
b++;
}
else
b++;
(7);
}
void strsort(char*s) //将字符串S中的字符排序
{
int i,j,n;
char t,*w;
W=S;
for(n=0;*w!='\0';n++) //得到字符串长度n
w++;
for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序
for(j=i+1;j<n;j++)
if((8))
{
t=s[i];
s[i]=s[j];
(9);
}
}
void main()
{
char s1[100],s2[100],s3[100];
printf("\nPlease,input the first string:");
scanf("%s",s1);
printf("\nPlease input the second string:");
scanf("%s",s2);
strsort(s1); //将字符串s1排序
strsort(s2); //将字符串s2排序
printf("%s\n",s1);
printf("%s\n",s2);
s3[0]='\0'; //字符串s3的第一个字符先置'\0'结束标志
(10) //将s1和s2合并,按照字母顺序排列,
//且要删去相同字符,存入s3中
printf("%s",s3);
}
-
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。
【程序说明】
对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如.管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。
下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。
【程序1】
//普通雇员类
class Employee
{
public:
Employee(char*theName,float thePayRate);
char * getName()const;
float getPayRate()const;
float pay(float hoursWorked)const:
protected:
char*name; //雇员名称
float payRate; //薪水等级
};
Employee::Employee(char * theName,float thePayRate)
{
name=theName;
payRate=thePayRate;
}
char*Employee::getName()const
{
return name;
}
float Employee::getPayRate()const
}
return payRate;
}
float Employee::pay(float hoursWorked)const
{
return hoursWorked * payRate;
}
//管理人员类
Class Manager:public Employee
{
public:
//isSalaried付薪方式:true付薪固定工资,false按小时付薪
Manager(char * theName,float thePayRate,bool isSalaried);
bool getSalaried()const;
float pay(float hoursWorked)const;
protected:
bool Salaried;
};
Manager::Manager(Char*theName,float thePayRate,bool isSalaried)
:Employee(theName,thePayRate)
{
salaried=isSalaried;
}
bool Manager::getSalaried() const
{
return Salaried;
}
float Manager::pay(float hoursWorked)const
{
if(salaried)
return payRate;
/*else*/
return Employee::pay(hoursWorked);
}
//主管人员类
class Supervisor:public Employee
{
public:
Supervisor(Char*theName,float thePayRate,float theBouns):
Employee(theName,thePayRate,(1)),bouns(theBouns){}
float getBouns()const{return bouns;}
float pay(float hoursWorked)const
return (2)
}
protected:
float bouns;
}
#include" iostream.h"
void main()
{
Employee e("Jack",50.00);
Manager m("Tom",8000.00, true);
Supervior s("Tanya",8000.00,8000.00);
cout<<"Name:" <<e.getName()<<endl;
cout<<"Pay:"<<e.pay(80)<<endl; //设每月工作80小时
tout<<"Nabe:" <<m.getName()<<end,;
cout<<"Pay:" <<m.pay(40)<<endl;
cout<<"Nabe:" <<s.getName()<<endl;
cout<<"Pay:"<<s.pay(40)<<endl; //参数40在这里不起作用
}
【程序2】
#include "employee.h"
//普通雇员类
class Employee
{
public:
//构造函数
Employee(String theName,float thePayRate):
name(theNabe),payRate(thePayRate){}
//取雇员姓名
String getNabe() const{returnname;}
//取雇员薪水等级
float getPayRate()const{return payRate;}
//计算雇员薪水
virtual float pay(float hoursWorked)const {return (3);}
protected:
String name;  
-
阅读以下说明和流程图,回答问题1和问题2。
【说明】
某供销系统接受顾客的订货单,当库存中某配件的数量小于订购量或库存量低于一定数量时,向供应商发出采购单;当某配件的库存量大于或等于定购粮食,或者收到供应商的送货单并更新了库存后,向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。该供销系统的分层数据流图中部分数据流和文件的组成如下:
文件
配件库存=配件号+配件名+规格+数量+允许的最低库存量
数据流
订货单=配件号+配件名+规格+数量+顾客名+地址
提货单=订货单+金额
采购单=配件号+配件名+规格+数量+供应商名+地址
送货单=配件号+配件名+规格+数量+金额
假定顶层图(如图6所示)是正确的,“供应商”文件已由其他系统生成。
指出哪张图中的哪些文件可不必画出。
-
指出在哪些图中遗漏了哪些数据流。回答时使用如下形式之一:
(1)XX图中遗漏了XX加工(或文件)流向XX加工(或文件)的XX数据流;
(2)XX图中XX加工遗漏了XX输入(或输出)数据流。
-
有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列SQL语言建立了基本表。 CREATE TABLE ATHLETE
ANAME CHAR(20),
ASEX CHAR(1),
ATEAM CHAR(20));
CREATE TABLE |TEM
(INO CHAR(6)NOT NULL,
INAME CHAR(20),
ITIME CHAR(12),
IPLACE CHAR(20);
CREATE TABLE GAMES
(ANO CHAR(6)NOTNULL,
INO CHAR(6)NOT NULL,
SCORRE CHAR(10));
为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。
【E-R图】
【问题】
填充下列SQL程序1~4中的(1)~(7),使它们分别完成相应的功能:
程序1:统计参加比赛时男运动员人数。
SELECT (1)
FROM ATHLETE
WHERE ASEX='M';
程序2:查100872号运动员参加的所有项目及其比赛时间和地点。
SELECT ITEM,INO,IN A ME,ITIME,IPLACE
FROM GAMES,ITEM
WHERE (2);
AND (3);
程序3:查参加100035项目的所有运动员名单。
SELECT ANO,ANAME,ATEAM
FROM ATHLETE
WHERE (4);
(SELECT (4) (5)
FROM GAMES
WHERE GAMES ANO=ATHLETE.ANO AND INO='100035');
程序4:建立运动员成绩视图。
(6) ATHLETE-SCORE
AS SELECT ATHLETE,ANO,ANAME,ATEAM,INAME,SCORE
FORM (7) WHERE ATHLETE.ANO=GAMES. ANO AND GAMES.INO=ITEM.INO;
-
数据流图4中缺少2条数据流,请直接在图中添加。
-
数据流图5中缺少4条数据流,请直接在图中添加。
-
阅读下列说明和数据流图,回答问题1-问题3。
【说明】
某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。
1.病人初次来该医院看病,首先购买病历,记录病人基本情况。
2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。
3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。
4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。
医院收费系统的顶层图如图2所示;医院收费系统的第0层DFD图如图3所示。其中,加工1的细化图如图4所示,加工2的细化图如图5所示。
假定顶层图是正确的,“定价表”文件已由其他系统生成。
指出哪张图的哪些文件可以不必画出。