目录
项目
一、中国计算机设计大赛赛事统计
二、校园导游咨询
三、算术表达式求解
项目内容
项目1:中国计算机设计大赛赛事统计
1. 问题描述
参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
2. 基本要求
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
3. 设计要求
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,可以完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
4. 测试数据
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
5. 实现提示
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
6. 问题分析和任务定义
利用结构体建立数组存放信息
int item[m0+5][n0+1];
//item[1][0]-item[m0][0] 存放项目编号
//item[0][1]-item[0][n] 存放学校编号
//item[1][]-item[m0][] 存放各项目成绩
//item[m0+1][] 存放各项目总成绩
//item[m0+3][] 存放学校各项目总成绩
//item[m0+4][] 存放学校按总分排序的名次
主函数中分模块,欢迎界面,输入信息,排序输出,查询模块等。
7. 数据结构的逻辑设计和物理设计
7.1逻辑设计
(1)结构体
#define n0 20 //学校最大数目
#define m0 20 //项目最大数目
typedef struct itemnode//存放信息
{
int item[m0+5][n0+1];
//item[1][0]-item[m0][0] 存放项目编号
//item[0][1]-item[0][n] 存放学校编号
//item[1][]-item[m0][] 存放各项目成绩
//item[m0+1][] 存放各项目总成绩
//item[m0+3][] 存放学校各项目总成绩
//item[m0+4][] 存放学校按总分排序的名次
}itemnode;
(2)主函数中存放欢迎界面,输入信息,排序输出,查询模块四个主要模块。
7.2物理设计
(1)欢迎界面
int n,m;
printf(" 计算机设计大赛赛事统计系统 \n");
printf("\t\t\t欢迎使用\t\t\t\t\n\n");
printf("该系统实现的功能有:\n");
printf(" 1.输入大赛相关信息;\n");
printf(" 2.能统计各学校总分并排序输出;\n");
printf(" 3.可以按学校编号,查询学校总分、各项目总分及名次;\n");
printf(" 4.可以按项目编号查询前三名获奖情况:\n");
printf("实现功能2、3、4要先录入信息哟~\n");
printf("请先输入大赛主要信息\n");
(2)输入信息
printf("输入学校个数:");
scanf("%d",&n);
printf("输入项目个数:");
scanf("%d",&m);
int c;
int i,j;
struct itemnode a;
for(i=1;i<n+1;i++)
{
printf("请输入第%d个学校编号:",i);
scanf("%d",&a.item[0][i]);
printf("\n");
}
for(j=1;j<m+1;j++)
{
printf("请输入第%d个项目编号:",j);
scanf("%d",&a.item[j][0]);
printf("\n");
}
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
printf("请输入第%d个学校第%d个项目成绩:",i,j);
scanf("%d",&a.item[j][i]);
printf("\n");
}
}
for(i=1;i<n+1;i++)
{
a.item[m+1][i]=0;
a.item[m+2][i]=0;
a.item[m+3][i]=0;
a.item[m+4][i]=0;
}
(3)排序输出
//下面计算各学校、各学校项目总分
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
a.item[m+3][i]+=a.item[j][i];//学校项目总分
}
}
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
a.item[m+1][i]+=a.item[j][i];//各项目总分
}
}
printf("****************************************排序输出*************************************\n");
int temp,temp1;
int xu;
for(i=2;i<n+1;i++)
{
temp=a.item[m+3][i];
for(j=i-1;j>=1&&temp>a.item[m+3][j];j--)//寻找插入位置
{
a.item[m+3][j+1]=a.item[m+3][j];//交换总分列
for(xu=0;xu<m+4;xu++)
{
if(xu!=m+3)//除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+3][j+1]=temp;//小于当前值的,插到当前值后面
}
//赋值名次
for(i=1;i<n+1;i++)
{
a.item[m+4][i]=i;
}
for(i=0;i<n+1;i++)
{
for(j=0;j<m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("项目%d\t\t",a.item[j][i]);
}
else if(j==m+1)
{
printf("各项目总成绩\t\t\t");
}
else if(j==m+3)
{
printf("学校总成绩\t");
}
else if(j==m+4)
{
printf("名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
int s;
printf("\t\t*******1.按学校总分排序输出*******\n");
printf("\t\t*******2.按学校编号输出*******\n");
printf("\t\t*******3.按各项目总分排序输出*******\n");
printf("\n\n");
printf("请选择要实现输出功能的编号(1—3):");
scanf("%d",&s);
switch(s)
{
case 1://学校总分排序
{
for(i=0;i<n+1;i++)
{
for(j=0;j<m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("项目%d\t\t",a.item[j][i]);
}
else if(j==m+1)
{
printf("各项目总成绩\t\t\t");
}
else if(j==m+3)
{
printf("学校总成绩\t");
}
else if(j==m+4)
{
printf("名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
case 2://学校编号排序
{
for(i=2;i<n+1;i++)
{
temp=a.item[0][i];
for(j=i-1;j>=1&&temp<a.item[0][j];j--)//寻找插入位置
{
a.item[0][j+1]=a.item[0][j];//交换学校列
for(xu=0;xu<m+5;xu++)
{
if(xu!=0)//除了学校那一列不交换 其他的都交换 因为学校的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[0][j+1]=temp;//小于当前值的,插到当前值后面
}
for(i=0;i<n+1;i++)
{
for(j=0;j<m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("项目%d\t\t",a.item[j][i]);
}
else if(j==m+1)
{
printf("各项目总成绩\t\t\t");
}
else if(j==m+3)
{
printf("学校总成绩\t");
}
else if(j==m+4)
{
printf("名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
case 3://各项目总分排序
{
for(i=2;i<n+1;i++)
{
temp=a.item[m+1][i];
for(j=i-1;j>=1&&temp>a.item[m+1][j];j--)//寻找插入位置
{
a.item[m+1][j+1]=a.item[m+1][j];//交换项目总分列
for(xu=0;xu<m+5;xu++)
{
if(xu!=m+1)//除了项目总分那一列不交换 其他的都交换 因为项目总分的那一列在上面交换
{
temp1=a.item[xu][j+1];
a.item[xu][j+1]=a.item[xu][j];
a.item[xu][j]=temp1;
}
}
}
a.item[m+1][j+1]=temp;//小于当前值的,插到当前值后面
}
for(i=0;i<n+1;i++)
{
for(j=0;j<m+5;j++)
{
if(i==0)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("项目%d\t\t",a.item[j][i]);
}
else if(j==m+1)
{
printf("各项目总成绩\t\t\t");
}
else if(j==m+3)
{
printf("学校总成绩\t");
}
else if(j==m+4)
{
printf("名次\t");
}
}
else if(j==0)
{
if(i!=0)
{
printf("学校%d\t",a.item[j][i]);
}
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
printf("\n");
}
}break;
}
(4)查询模块
//下面为查询模块
printf("**************************************查询模块***********************************\n");
int bianhao;
printf("请输入要查询的学校编号:");
scanf("%d",&bianhao);
printf("\n");
for(i=1;i<n+1;i++)
{
if(a.item[0][i]==bianhao)
{
printf("该学校的各项成绩及各项总分和名次如下:\n");
for(j=0;j<m+5;j++)
{
if(j==0)
{
printf("\t");
}
else if(j>=1&&j<m+1)
{
printf("项目%d\t\t",a.item[j][0]);
}
else if(j==m+1)
{
printf("各项目总成绩\t\t\t");
}
else if(j==m+3)
{
printf("学校总成绩\t");
}
else if(j==m+4)
{
printf("名次\t");
}
}
printf("\n");
for(j=0;j<m+5;j++)
{
if(j==0)
{
printf("学校%d\t",a.item[0][i]);
}
else
{
printf(" %d\t\t",a.item[j][i]);
}
}
}
}
printf("\n");
int bianhao1;
printf("请输入要查询的项目编号:");
scanf("%d",&bianhao1);
printf("\n");
for(i=2;i<n+1;i++)
{
temp=a.item[m+3][i];
for(j=i-1;j>=1&&temp>a.item[m+3][j];j--)/