问答题为避免活锁现象的发生,数据库管理系统采用_________策略处理事务的加锁请求。
问答题已知在IN.DAT文件中存有若干个(<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编写函数CalValue(),其功能是:(1)求出这个文件中共有多少个正整数totNum;(2)求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到OUT.DAT文件中。
注意:部分程序已经给出。
请勿改动主函数main()、读函数ReadDat0和写函数writeDat()的内容。
#include <stdio.h>
#include <conio.h>
#define MAXNUM 200
int xx[MAXNUM];
int totNum=0;
int totCnt=0;
double totPjz=0.0;
int ReadDat(void);
void writeDat(void);
void CalValue(void)
{
}
void main()
{
int i;
for (i=0;i<MAXNUM;i++)
xx[i]=0;
if(ReadDat())
{
printf("数据文件IN.DAT不能打开!/007/n");
return;
}
CalValue();
printf("IN.DAT文件中的正整数个数=%d个/n",totNum);
printf("符合条件的正整数个数=%d个/n",totCnt);
printf("平均值=%.2f/n",totPjz);
writeDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
if ((fp=fopen("IN.DAT","r"))==NULL)
return 1;
while (!feof(fp))
fscanf(fp,"%d,",
fclose(fp);
return 0;
}
void writeDat(void)
{
FILE *fp;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d/n%d/n%6.2f/n",totNum,totCnt,totPjz);
fclose(fp);
}
问答题在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式:
系(系号,系名),系号为主码
学生(学号,姓名,所在系号),学号为主码
课程(课程号,课程名,开课系号),课程号为主码
选课(学号,课程号,选课时间),学号和课程号为主码
开发人员在将关系模式实施到SQL Server 2008的“教务”数据库时,使用了如下表结构定义语句:
CREATE TABLE 系 (
系号 varchar(10) NOT NULL,
系名 varchar(100)
)
CREATE TABLE 学生 (
学号 varchar(50) NOT NULL,
姓名 varchar(50),
所在系号 varchar(10)
)
CREATE TABLE课程 (
课程号 varchar(50) NOT NULL,
课程名 varchar(100),
开课系号 varchar(10)
)
CREATE TABLE 选课 (
学号 varchar(50) NOT NULL,
课程号 varchar(50) NOT NULL,
选课时间 datetime
)
在执行如下查询语句时发现执行效率很低:
SELECT * FROM 选课 JOIN 学生 ON 学生.学号 = 选课.学号
JOIN 系 ON 系.系号 = 学生.所在系号
JOIN 课程 ON 课程.课程号 = 选课.课程号
WHERE 系.系号="012"
AND convert(varchar(10), 选课时间, 120) >="2010-01-01"
问答题在数据库系统中,_________映像关系用于提供数据与应用程序间的逻辑独立性。
问答题在SQL Server 2008中,对于更新操作的触发器,系统将产生2张逻辑工作表,其中存放更新前数据的逻辑工作表是_______。
问答题函数ReadDat()实现从IN.DAT文件中读取一篇英文文章并存入到字符串数组xx中。请编写函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat(),把结果xx输出到OUT.DAT文件中。
例如: 原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分程序已经给出。
请勿改动主函数main()、读数据函数ReadDat0和输出数据函数WriteDat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
char xx [50][80];
int maxline=0; /*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void StrOL(void)
{
}
void main()
{
if(ReadDat())
{
printf("数据文件IN.DAT不能打开!/n/007");
return;
}
StrOL();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN.DAT","r"))==NULL)
return,1;
while(fgets(xx[i],80,fp)!=NULL)
{
p=strchr(xx[i],'/n');
if (p)
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
for(i=0;i<maxline;i++)
{
printf("%s/n",xx[i]);
fprintf(fp,"%s/n",xx[i]);
}
fclose(fp);
}
问答题在SQL Server 2008中,设有教师表(教师号,姓名,所在部门号,职称)和部门表(部门号,部门名,高级职称人数)。请编写满足下列要求的后触发型触发器(设触发器名字为tri_zc)。每当在教师表中插入一名具有高级职称(“教授”或“副教授”)的教师时,或者将非高级职称教师的职称更改为高级职称时,均修改部门表中相应部门的高级职称人数。(假设一次操作只插入或更改一名教师的职称)。
问答题已知数据文件in.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中。请编写函数jsVal(),其功能是:把干位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd≥10且ab-cd≤20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并计算满足上述条件的四位数的个数cnt。 最后main()函数调用写函数writeDat(),把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。 注意:部分程序已经给出。 程序中已定义数组:a[200],b[200];已定义变量:cnt。 请勿改动数据文件in.dat中的任何数据及主函数main()、读函数readDat()和写函数writeDat()的内容。 #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void jsVal() void readDat() int i; FILE *fp; fp=fopen("in.dat","r"); for(i=0; i<MAX;i++) fscanf(fp,"%d,",&a[i]); fclose(fp); void writeDat() FILE*fp; int i; fp=fopen("out.dat","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp); void main() int i; readDat(); jsVal(); printf("满足条件的数=%d/n",cnt); for(i=0; i<cnt;i++) printf("%d",b[i]); printf("/n"); writeDat();
问答题下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且于位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat(),把结果cnt和sum输出到OUT.DAT文件中。 注意:部分源程序已经给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include<stdio.h> int cnt,sum; void countValue() void writeDat() FILE *fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n%d/n",cnt,sum); fclose(fp); void main() cnt=sum=0; countValue(); printf("满足条件的自然数的个数=%d/n",cnt); printf("满足条件的自然数的个数之和=%d/n",sum); writeDat();
问答题函数ReadDat()实现从IN.DAT文件中读取一篇英文文章,存入字符串数组xx中;请编写函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat(),把结果xx输出到OUT.DAT文件中。
替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。
原始数据文件存放的格式是:每行的宽度均小于80个字符。
注意:部分程序已经给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
unsigned char xx [50][80];
int maxline=0; /*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{
}
void main()
{
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!/n/007");
return;
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE*fp;
int i=0;
unsigned char *p;
if ((fp=fopen("IN.DAT","r"))==NULL)
return 1;
while (fgets(xx[i],80,fp) !=NULL)
{
p=strchr(xx[i],'i/n');
if(p)
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
for(i=0;i<maxline;i++)
{
printf("%s/n",xx[i]);
fprintf(fp,"%s/n",xx[i]);
}
fclose(fp);
}
问答题在数据仓库环境中,粒度是一个重要的设计问题。粒度越_________细节程度越高,能回答的查询就越多,数据量就比较大。
问答题已知在IN.DAT文件中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能是:按产品名称从大到小进行排列,若产品名称相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。 注意:部分源程序已经给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define MAX 100 typedef struct char dm[5]; /*产品代码*/ char mc[11]; /*产品名称*/ int dj; /*单价*/ int sl; /*数量*/ long je; /*金额*/ PRO; PRO sell[MAX]; void ReadDat(); void WriteDat(); void SortDat() void main() memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); void ReadDat() FILE *fp; char str[80],ch[11]; int i; fp=fopen("IN.DAT","r"); for(i=0; i<100;i++) fgets(str,80,fp); memcpy(sell[i].dm,str,4); memcpy(sell[i].mc,str+4,10); memcpy(ch,str+14,4); ch[4]=0; sell[i].dj=atoi(ch); memcpy(ch,str+18,5); ch[5]=0; sell[i].sl=atoi(ch); sell[i].je=(long)sell[i].dj*sell[i].sl; fclose(fp); void WriteDat() FILE *fp; int i; fp=fopen("OUT.DAT","w"); for(i=0;i<100;i++) printf("%s%s%4d%5d%5d/n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fprintf(fp,"%s%s%4d%5d%5d/n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fclose(fp);
问答题函数ReadDat()的功能是实现从文件IN73.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数CovertCharD(),该函数的功能是:以行为单位把字符串中的所有小写字母改成该字母的上一个字母,如果是字母a,则改成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT73.DAT中。 例如:原文Adb Bcdza abck LLhj 结果Aca Bbcyz, zabj LLgi 原始数据文件存放的格式是;每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: # include<stdio. h> # include<st ring. h> # inc lude char xx[50] [80]; int maxline=0; int ReadDat (void); void WriteDat (void); void CovertCharD () void main ( ) ( clrscr ( ); if (ReadDat ()) printf ("数据文件 IN73.DAT 不能打开/n/007"); return; CovertCharD (); WriteDat(); int ReadDat( FILE *fp; int i=0; char *p; if((fp=fopen("IN73.DAT","r"))==NULL) return 1; while(fgets(xx[i],80,fp)!=NULL) p=strchr(xx[i],'/n'); if(p) *p=0; i++; maxline=i; fclose(fp); return 0; void WriteDat (void ) FILE *fp; int i; clrscr(); fp=fopen("OUT73.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n" ,xx [i]); fprintf(fp, "%s/n", xx[i]); fclose(fp);
问答题设某全国性的运输企业建立了大型OLTP系统,并在该系统之上建立了数据仓库。OLTP系统和数据仓库中有如下数据表:运输明细表(运输单ID,发送站ID,终到站ID,货物ID,货物重量,运输价格,发货日期)汇总表1(发送站ID,终到站ID,货物ID,发货日期,总重,总运价)汇总表2(发送站ID,终到地区ID,货物ID,发货日期,总重,总运价)汇总表3(发送站ID,终到站ID,货物ID,发货月份,总重,总运价)汇总表4(发送地区ID,终到地区ID,货物类别ID,发货日期,总重,总运价) 该企业管理的货运站约有100个,货物约有500种共10类,各汇总表都建有主码,且各表有合理的维护策略,在每次维护后数据能保持一致。设有视图V,该视图的访问频率很高,其查询结果模式为(发送地区ID,终到站ID,发货月份,总重,总运价),该视图现以汇总表1为计算数据源。经监控发现,汇总表1的被访问频率过高,导致系统整体性能下降,而其它汇总表被访问频率较低。在不增加汇总表和索引的情况下,请给出一个改善系统服务性能的优化方案,并简要说明理由。
问答题已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中。请编写函数jsValue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat(),把结果输出到out.dat文件中。
例如:1239, 9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
8129, 9-8-1-2<0,则该数不满足条件计算平均值pjz2。
注意:部分源程序已经给出。
程序中已定义数组:a[300];已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include <stdio.h>
int a[300],cnt=0;
double pjz1=0.0,pjz2=0.0;
void jsValue()
{
}
void ReadDat()
{
FIIE *fp;
int i;
fp=fopen("in.dat","r");
for (i=0;i<300;i++)
fscanf(fp,"%d,",
fclose(fp);
}
void writeDat()
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(fp,"%d/n%7.2f/n%7.2f/n",cnt,pjz1,pjz2);
fclose(fp);
}
main()
{
ReadDat();
jsValue();
writeDat();
printf("cnt=%d/n满足条件的平均值pzj1=%7.2f/n不满足条件的平均值pzj2=%7.2f/n",cnt,pjz1,pjz2);
}
问答题设在SQL Server2008某数据库中有商品表和销售表,两个表的定义如下:
CREATE TABLE 商品表(
商品号 char(10) PRIMARY KEY,
商品名 varchar(40),
类别 varchar(20),
进货单价 int );
CREATETABLE 销售表(
商品号 char(10) REFERENCES 商品表(商品号),
销售时间 datetime,
销售数量 int,
销售单价 int,
PRIMARYKEY(商品号,销售时间) );
现要创建一个存储过程:查询指定类别的每种商品当前年销售总金额(销售总金额=销售单价* 销售数量)。请补全下列代码。
CREATEPROC p_TotalProfit
@lb varchar(20)
AS
SELECT 商品名,(SELECT______FROM 销售表 t1 WHERE______and______= year(Getdate())) AS 销售总金额
FROM 商品表 t2 WHERE______
问答题已知数据文件N.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中。请编写函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数writeDat(),把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:部分程序已经给出。
程序中已定义数组:a[200],b[200];已定义变量:cnt。
请勿改动数据文件IN.DAT中的任何数据及主函数main()、读函数readDat()和写函数writeDat()的内容。
#include <stdio.h>
#define MAX 200
int a[MAX],b[MAX],cnt=0;
void jsVal()
{
}
void readDat()
{
int i;
FILE *fp;
fp=fopen("IN.DAT","r");
for(i=0;i<MAX;i++)
fscanf(fp,"%d,",
fclose(fp);
}
void writeDat()
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d/n",cnt);
for(i=0;i<cnt;i++)
fprintf(fp,"%d/n",b[i]);
fclose(fp);
}
void main ()
{
int i;
readDat();
jsVal();
printf("满足条件的数=%d/n",cnt);
for(i=0;i<cnt;i++)
printf("%d",b[i]);
printf("/n");
writeDat();
}
问答题在一个数据库中,有如下关系模式:
T1(
a1
,a2,a3),T2(
a3
,a4),T3(
a6
,a7),T4(
a1
,
a3
,
a6
,a8)。
其中标下划线的是关系模式的主码。不同关系模式之间的同名属性代表它们之间存在主外码参照关系。
试画出相应的ER图,使得可以从该ER图推导出上述关系模式定义,其中实体和联系的名称可以自定。
请写出创建T1表的T-SQL语句,设所有列的数据类型均为整型。
问答题在某数据库中,相关表的建表语句如下:
create tableT1(
a1 int primary key,
a2 int,
a3 int foreign key references T2(a3));
create tableT2(
a3 int primary key,
a4 int,
a5 int foreign key references T2(a3));
create tableT3(
a1 int,
a3 int,
a6 int,
primary key (a1, a3),
a1 foreign key references T1(a1),
a3 foreign key references T2(a3));
请画出相应的E-R图,使得可以从该E-R图推导出上述表定义,其中实体和联系的名称可以自定,实体的主码属性请使用下划线标明。
问答题在in.da文件中有200个正整数,且每个数均在1000~9999之间。函数ReadDat()读取这200个数并存放到数组aa中。请编写函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat(),把结果bb输出到out.dat文件中。 例如:处理前6012 5099 9012 7025 8088 处理后9012 6012 7025 8088 5099 注意:部分程序已经给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include<Stdio.h> #include<string.h> #include<conio.h> int aa[200],bb[10]; void jsSort() void ReadDat() FILE *in; int i; in=fopen("in.dat","r"); for(i=0;i<200;i++) fscanf(in,"%d,",&aa[i]); fclose(in); void WriteDat() FILE *out; int i; out=fopen("out.dat","W"); for(i=0;i<10;i++) printf("%d",bb[i]); fprintf(out,"%d/n",bb[i]); fclose(out); void main() ReadDat(); jsSort(); WriteDat();
