📄 student.cpp
字号:
#define M 20 /*定义学校与项目最大数量*/
#include <conio.h>
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int mm,m,w; /*定义全局变量 mm,m,w。mm记录学校数量,m记录男子项目,w记录女子项目*/
struct scorelist
{
int score; /*分数*/
char schoolnum[5]; /*学校编号*/
char itemnum[5]; /*项目编号*/
}; /*定义分数结构体类型*/
struct School
{
char schoolnum[5]; /*学校编号*/
struct scorelist list[M]; /*定义scorelist类型的结构体变量*/
int teamscore; /*学校分数*/
int mscore; /*男队分数*/
int gscore; /*女队分数*/
}; /*定义学校结构体类型*/
struct School school[M]; /*定义School类型的结构体数组*/
void Sum(){//求学校总分,男队总分,女队总分函数
int i,j;
for(i=1;i<=mm;i++){
school[i].teamscore=0;
school[i].gscore=0;
school[i].mscore=0;
for(j=1;j<=m+w;j++){
school[i].teamscore+=school[i].list[j].score;
if(j==m) school[i].mscore= school[i].teamscore;
}
school[i].gscore= school[i].teamscore-school[i].mscore;
}
}
void sort_teamsore() { //按学校总分排序输出函数
int i,j;
struct scorelist list1[M]; /*定义scorelist类型的结构体变量用来暂存学校编号,学校总分信息*/
struct scorelist temp; /* 定义scorelist类型的结构体变量temp,在数据交换时做暂存过度作用*/
for(i=1;i<=mm;i++){
for(j=0;j<=4;j++)
list1[i].schoolnum[j] = school[i].schoolnum[j];
list1[i].score = school[i].teamscore;
}
for(i=1;i<=mm-1;i++)
for(j=i+1;j<=mm;j++)
if(list1[j-1].score<list1[j].score){
temp.score=list1[j-1].score;
for(i=0;i<=4;i++)
temp.schoolnum[i]=list1[j-1].schoolnum[i];
list1[j-1].score= list1[j].score;
for(i=0;i<=4;i++)
list1[j-1].schoolnum[i]= list1[j].schoolnum[i];
list1[j].score= temp.score;
for(i=0;i<=4;i++)
list1[j].schoolnum[i]= temp.schoolnum[i];
}
printf(" 学校编号 学校总分\n");
for(i=1;i<=mm;i++){
printf("%17s%20d\n", list1[i].schoolnum,list1[i].score);
}
}
void sort_mscore() { /*按男队总分排序输出*/
int i,j;
struct scorelist list1[M]; /*定义scorelist类型的结构体变量用来暂存学校编号,学校总分信息*/
struct scorelist temp; /* 定义scorelist类型的结构体变量temp,在数据交换时做暂存过度作用*/
for(i=1;i<=mm;i++){
for(j=0;j<=4;j++)
list1[i].schoolnum[j] = school[i].schoolnum[j];
list1[i].score = school[i].mscore;
}
for(i=1;i<=mm-1;i++)
for(j=i+1;j<=mm;j++)
if(list1[j-1].score<list1[j].score){
temp.score=list1[j-1].score;
for(i=0;i<=4;i++)
temp.schoolnum[i]=list1[j-1].schoolnum[i];
list1[j-1].score= list1[j].score;
for(i=0;i<=4;i++)
list1[j-1].schoolnum[i]= list1[j].schoolnum[i];
list1[j].score= temp.score;
for(i=0;i<=4;i++)
list1[j].schoolnum[i]= temp.schoolnum[i];
}
printf(" 学校编号 男队总分\n");
for(i=1;i<=mm;i++){
printf("%17s%20d\n", list1[i].schoolnum,list1[i].score);
}
}
void sort_gscore() { /*按女队总分排序输出*/
int i,j;
struct scorelist list1[M];/*定义scorelist类型的结构体变量用来暂存学校编号,学校总分信息*/
struct scorelist temp; /* 定义scorelist类型的结构体变量temp,在数据交换时做暂存过度作用*/
for(i=1;i<=mm;i++){
for(j=0;j<=4;j++)
list1[i].schoolnum[j] = school[i].schoolnum[j];
list1[i].score = school[i].gscore;
}
for(i=1;i<=mm-1;i++)
for(j=i+1;j<=mm;j++)
if(list1[j-1].score<list1[j].score){
temp.score=list1[j-1].score;
for(i=0;i<=4;i++)
temp.schoolnum[i]=list1[j-1].schoolnum[i];
list1[j-1].score= list1[j].score;
for(i=0;i<=4;i++)
list1[j-1].schoolnum[i]= list1[j].schoolnum[i];
list1[j].score= temp.score;
for(i=0;i<=4;i++)
list1[j].schoolnum[i]= temp.schoolnum[i];
}
printf(" 学校编号 女队总分\n");
for(i=1;i<=mm;i++){
printf("%17s%20d\n", list1[i].schoolnum,list1[i].score);
}
}
void Search_byschnum()//按学校编号查找查询某学校的分数情况
{
int i;
int snum;
printf(" 请输入学校编号: \n ");
printf(" --------------\n");
scanf(" %8d",&snum);
for(i=1;i<=mm;i++)
{
if(snum==atoi(school[i].schoolnum))
break;
}
if(i<=mm){
printf("学校总分 男队总分 女队总分\n ");
printf("%7d%15d%15d\n",school[i].teamscore,school[i].mscore,school[i].gscore);
}
else
printf("未找到这学校\n"); }
void Search_item() {//按学校编号查找查询学校某项目分数
int i, j;
int ssnum,itemnu;
printf(" 请输入学校编号:\n");
printf(" --------------\n");
scanf(" %8d",&ssnum);
for(i=1;i<=mm;i++)
{
if(ssnum==atoi(school[i].schoolnum))
{
printf(" 请输入项目编号:\n ");
printf(" ---------------\n");
scanf(" %8d",&itemnu);
for(j=1;j<=m+w;j++)
{
if(itemnu==atoi(school[i].list[j].itemnum))
{
printf(" 这项目分数是:") ;
printf("%d \n",school[i].list[j].score);
}
if(itemnu==atoi(school[i].list[j].itemnum))
break;
}
}
if(ssnum==atoi(school[i].schoolnum)) break;
}
}
void Search_head3() {//按项目编号查询获得前三名的学校
int i,j,k;
int itemnu;
struct scorelist list1[M]; /*定义scorelist类型的结构体变量用来暂存学校编号,学校总分信息*/
struct scorelist temp; /* 定义scorelist类型的结构体变量temp,在数据交换时做暂存过度作用*/
printf(" 请输入项目编号:\n");
printf(" ---------------\n");
scanf(" %7d",&itemnu);
for(i=1;i<=mm;i++)
for(j=1;j<=w+m;j++)
if(itemnu==atoi(school[i].list[j].itemnum))
{
list1[i].score=school[i].list[j].score;
for(k=0;k<=4;k++)
{
list1[i].schoolnum[k]=school[i].schoolnum[k];
list1[i].itemnum[k]=school[i].list[j].itemnum[k];/*把项目分数,学校编号,项目编号暂存在list1结构体数组中*/
}
}
for(i=1;i<=mm-1;i++)
for(j=mm-1;j>=i;j--) /*冒泡排序法按某项目分数进行排序*/
if(list1[j-1].score<list1[j].score)
{
temp.score=list1[j-1].score;
for(k=0;k<=4;k++)
{
temp.schoolnum[k]=list1[j-1].schoolnum[k];
temp.itemnum[k]=list1[j-1].itemnum[k];
}
list1[j-1].score=list1[j].score;
for(k=0;k<=4;k++)
{
list1[j-1].schoolnum[k]=list1[j].schoolnum[k];
list1[j-1].itemnum[k]=list1[j].itemnum[k];
}
list1[j].score=temp.score;
for(k=0;k<=4;k++)
{
list1[j].schoolnum[k]=temp.schoolnum[k];
list1[j].itemnum[k]=temp.itemnum[k];
}
}
printf(" 这项目前三名的学校是 :\n");
printf(" 项目编号 学校编号 此项目分数\n");
for(i=1;i<=3;i++)
printf("%17s%22s%21d\n", list1[i].itemnum,list1[i].schoolnum,list1[i].score);
}
int menu_select( )
{//菜单选择
int sn;
printf(" ============================================\n");
printf(" * 运动会分数统计系统 *\n");
printf(" ============================================\n");
printf(" * 1.查找某学校总分,男女团队总分 *\n");
printf(" * 2.按学校总分排序输出 *\n");
printf(" * 3.按学校男队分数排序输出 *\n");
printf(" * 4.按学校女队分数排序输出 *\n");
printf(" * 5.按学校编号查找查询某学校的分数情况 *\n");
printf(" * 6.按学校编号查找查询学校某项目分数 *\n");
printf(" * 7.按项目编号查询获得前三名的学校 *\n");
printf(" * 0.退出 *\n");
printf(" ===========================================\n");
printf(" 选择 0-5:");
for( ; ; )
{
scanf("%d",&sn);
if (sn<0||sn>5){
printf("输入错误,请在0-5选");
printf("输入错误,请在0-5选择: ");}
else
break;
}
return sn;
}
main(){
FILE *f; /*创建文件指针*/
int i,j;
f=fopen("score.dat","r"); /*以读的方式打开score.dat文件*/
for(i=1;i<=3;i++){ /*读入学校书,男子项目数,女子项目数*/
if(i==1) fscanf(f,"%d",&mm);
if(i==2) fscanf(f,"%d",&m);
if(i==3) fscanf(f,"%d",&w);
}
for(i=1;i<=mm;i++) /*读入学校编号,项目编号,项目分数*/
{
fscanf(f,"%s",school[i].schoolnum);
for(j=1;j<=2*(w+m);j++)
{
if(j<=w+m)
fscanf(f,"%s",school[i].list[j].itemnum );
else
fscanf(f,"%d",&school[i].list[j-w-m].score );
}
}
fclose(f);
Sum();
for( ; ; ){
switch(menu_select( ) )
{
case 1:
printf(" ========================================\n");
printf(" * 1.查找某学校总分,男女团队总分 *\n");
printf(" ========================================\n");
printf(" 学校编号 学校总分 男队总分 女队总分\n");
for(i=1;i<=mm;i++)
printf(" %7s%14d%19d%20d\n",school[i].schoolnum,
school[i].teamscore,school[i].mscore,school[i].gscore) ;
break;
case 2:
printf(" =====================================\n");
printf(" * 按学校总分排序输出 *\n");
printf(" =====================================\n");
sort_teamsore();
break;
case 3:
printf(" ==========================================\n");
printf(" * 按学校男队分数排序输出 *\n");
printf(" =========================================\n");
sort_mscore();
break;
case 4:
printf(" ========================================\n");
printf(" * 按学校女队分数排序输出 *\n");
printf(" ========================================\n");
sort_gscore();
break;
case 5:
printf(" ========================================\n");
printf(" * 按学校编号查找查询某学校的分数情况 *\n");
printf(" ========================================\n");
Search_byschnum();
break;
case 6:
printf(" =======================================\n");
printf(" * 按学校编号查找查询学校某项目分数 *\n");
printf(" ========================================\n");
Search_item();
break;
case 7:
printf(" ========================================\n");
printf(" * 按项目编号查询获得前三名的学校 *\n");
printf(" ========================================\n");
Search_head3();
break;
case 0:
printf("good bye!\n");
return 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -