1.1②运动会分数统计
【问题描述】
参加运动会的n个学校编号为1~n 。比赛分成m个男子项目和w个女子项目 , 项目编号分别为1~m和m+1~m+w 。由于各项目参加人数差别较大 , 有些项目取前五名 , 得分顺序为7 , 5 , 3 , 2 , 1;还有些项目只取前三名 , 得分顺序为5;3 , 2 。写一个统计程序产生各种成绩单和得分报表 。
【基本要求】
产生各学校的成绩单 , 内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表 , 内容包括校号、男子团体总分、女子团体总分和团体总分 。
【测试数据】
对于n=4 , m=3 , w=2 , 编号为奇数的项目取前五名 , 编号为偶数的项目取前三名 , 设计一组实例数据 。
【实现提示】
可以假设n≤20 , m≤30 , w≤20 , 姓名长度不超过20个字符 。每个项目结束时 , 将其编号、类型符(区分取前五名还是前三名)输入 , 并按名次顺序输入运动员姓名、校名(和成绩) 。
【选作内容】
允许用户指定某项目采取其他名次取法 。
废话不多说 , 直接上代码!(欢迎私信和评论!)
#include#include#include #define _CRT_SECURE_NO_WARNINGSusing namespace std;#define N 20 //学校最大数目#define M 30 //男子项目最大数#define W 20 //女子项目最大数//存放项目信息的结构体typedef struct{int inum;//项目编号int top;//取名次的数目int range[5];//名次int mark[5];//分数}itemnode;//存放学校信息的结构体typedef struct{int snum;//学校编号int score;//学校总分int mscore;//男子总分int wscore;//女子总分itemnode t[M + W];//项目数组}snode;snode a[N];//定义一个学校数组//菜单函数void menu(int n, int m, int w){//n代表学校数 , m代表男子数 , w代表女子数int c;void input(int n, int m, int w);//输入功能void output(int n, int m, int w);//输出功能void sortput(int n, int m, int w);//排序输出void search(int n, int m, int w);//查询功能cout<<"\t\t\t欢迎使用\t\t\t\t\t"<> c;switch (c) {case 1:input(n, m, w);break;case 2:output(n, m, w);break;case 3:sortput(n, m, w);break;case 4:search(n, m, w);break;case 5:cout<<"感谢使用,祝您天天开心!!"<> a[i].snum;for (j = 0; j < m + w; j++) {//总的项目的输入cout << "请输入项目编号:";cin>> a[i].t[j].inum;/*cout << "请输入该项目取前3还是前5(输入3或5):";cin >> a[i].t[j].top;*/if (a[i].t[j].inum % 2 == 0) {cout<<"编号为偶数取前三" << endl;cout << "获得的名次的个数(1--5):";}else if (a[i].t[j].inum % 2 == 1) {cout <<"编号为奇数的项目取前五"<> k;//输入获得名次的个数for (s = 0; s < k; s++) {//if (3 == a[i].t[j].top) {if(a[i].t[j].inum % 2 == 0){cout<<"请输入获得的名次(1--3):";}else {cout<<"请输入获得的名次(1--5):";}cin >> a[i].t[j].range[s];//输入所获得的名次的信息}cout << endl;}}for (i = 0; i < n; i++) {//初始化分数a[i].score = 0;//学校总分a[i].mscore = 0;//男子总分a[i].wscore = 0;//女子总分}for (i = 0; i < n; i++) {for (j = 0; j < m + w; j++) {cout << "项目" << j + 1 << "取得是前3还是前5(输入3或5) :";cin >> a[i].t[j].top;for (s = 0; s < 5; s++) {if (a[i].t[j].top == 3) {switch (a[i].t[j].range[s]) {case 0:a[i].t[j].mark[s] = 0;break;case 1:a[i].t[j].mark[s] = 5;break;case 2:a[i].t[j].mark[s] = 3;break;case 3:a[i].t[j].mark[s] = 2;break;}}else if (a[i].t[j].top == 5) {switch (a[i].t[j].range[s]) {case 0:a[i].t[j].mark[s] = 0;break;case 1:a[i].t[j].mark[s] = 7;break;case 2:a[i].t[j].mark[s] = 5;break;case 3:a[i].t[j].mark[s] = 3;break;case 4:a[i].t[j].mark[s] = 2;break;case 5:a[i].t[j].mark[s] = 1;break;}}/*else {cout << "信息输入错误!程序退出" << endl;cout << endl;exit(0);}*/a[i].score = a[i].score + a[i].t[j].mark[s];//学校总分if (j < m) {a[i].mscore = a[i].mscore + a[i].t[j].mark[s];}else {//女子总分a[i].wscore = a[i].wscore + a[i].t[j].mark[s];}}}}cout<<"输入完毕!(返回菜单请输入1):";cin >> q;cout << endl;if (q != 1) {cout<<"不能再添加信息了!";}cout << endl;savetofile();//保存文件menu(n, m, w);}#if(1)void output(int n, int m, int w)/*2.统计输出*/{readfromfile();int i, j, s, q = 0;for (i = 0; i < n; i++)/*显示结果*/{cout << "学校编号:" << a[i].snum << endl;cout << "学校总分:" << a[i].score << endl;cout << "男子总分" << a[i].mscore <<"" << "女子总分" << a[i].wscore << endl;for (j = 0; j < m + w; j++){// cout<<"项目编号:%d所取名次数量:%d\n", a[i].t[j].inum, a[i].t[j].top;cout << "项目编号:" << a[i].t[j].inum <<"" << "所取名次取前:" << a[i].t[j].top<<"名"<< endl;for (s = 0; s < 5; s++){if (a[i].t[j].range[s] != 0)cout<<"名次:"<< a[i].t[j].range[s] <<"" << "分数:"<< a[i].t[j].mark[s]<<""<> q;cout << endl;if (q != 1)cout<<"统计已经结束!";cout << endl;menu(n, m, w);}#endif//排序输出void sortput(int n, int m, int w)//n为学校数 , m为男子数 , w为女子数{readfromfile();int c, i, j, k, q = 0;int temp[N]={};cout << "\t**************排序输出系统**************" << endl;cout << endl;cout << "\t\t****1.按学校编号输出****" << endl;cout<<"\t\t****2.按学校总分输出****"<> c;switch (c) {case 1:for (i = 0; i < n; i++) {temp[i] = i;}//用的是冒泡排序输出for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {if (a[temp[i]].snum > a[j].snum) {k = temp[i];temp[i] = temp[j];temp[j] = k;}}}for (i = 0; i < n; i++) {//cout<<"学校标号:%d学校总分:%d男子总分:%d女子总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore;cout << "学校标号:" << a[temp[i]].snum << "" << "学校总分:" << a[temp[i]].score << endl;cout << "男子总分" << a[temp[i]].mscore << "" << "女子总分:" << a[temp[i]].wscore << endl;}break;case 2:for (i = 0; i < n; i++) {temp[i] = i;}for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {if (a[temp[i]].score < a[j].score) {k = temp[i];temp[i] = temp[j];temp[j] = k;}}}for (i = 0; i < n; i++) {// cout<<"学校编号:%d学校总分:%d男子总分:%d女子总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore;cout << "学校标号:" << a[temp[i]].snum << "" << "学校总分:" << a[temp[i]].score << endl;cout << "男子总分" << a[temp[i]].mscore << "" << "女子总分:" << a[temp[i]].wscore << endl;}break;case 3:for (i = 0; i < n; i++) {temp[i] = i;}for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {if (a[temp[i]].mscore < a[j].mscore) {k = temp[i];temp[i] = temp[j];temp[j] = k;}}}for (i = 0; i < n; i++) {printf("学校编号:%d学校总分:%d男团总分:%d女团总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore);}break;case 4:for (i = 0; i < n; i++) {temp[i] = i;}for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {if (a[temp[i]].wscore < a[j].wscore) {k = temp[i];temp[i] = temp[j];temp[j] = k;}}}for (i = 0; i < n; i++) {printf("学校编号:%d学校总分:%d男团总分:%d女团总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore);}break;default:printf("您的输入有误!请从新输入...");}printf("请选择 1.返回主菜单0.继续");scanf_s("%d", &q);printf("\n");}//=======================while (0 == q);printf("\n");//=======================if (q != 0) {menu(n, m, w);}}//查询功能void search(int n, int m, int w){readfromfile();int c, i, j, k, d, l, q = 0;cout<<"\t****************查询系统****************"<> c;switch (c) {case 1:cout<<"要查询的学校编号:";/*查找学校编号下标*/// scanf_s("%d", &c);cin >> c;for (i = 0; i < n; i++) {if (c == a[i].snum) {k = i;}}if (-1 == k) {cout<<"错误:这个学校没有参加此次运动会!"<> c;for (j = 0; j < m + w; j++) {if (c == a[k].t[j].inum) {d = j;}}if (-1 == d) {cout<<"此次运动会没有这个项目"<> c;for (i = 0; i < n; i++) {for (j = 0; j < m + w; j++) {if (c == a[i].t[j].inum) {l = j;}if (-1 == l) {cout<<"此次运动会没有该项目";}else {//printf("该项目取前 %d名,取得名次的学校\n", a[0].t[l].top);cout << "该项目取前a[0].t[l].top名,取得名次的学校" << endl;for (i = 0; i < n; i++) {for (j = 0; j < 5; j++) {if (a[i].t[l].range[j] != 0) {//cout<<"学校编号:%d,名次:%d\n", a[i].snum, a[i].t[l].range[j]);cout << "学校编号:" << a[i].snum << "" << ", 名次:" << a[i].t[l].range[j] << endl;}}}}}}break;default:cout << "输入错误,请重试!" << endl;}cout<<"请选择:1.返回主菜单 0.继续";//scanf_s("%d", &q);cin >> q;//printf("\n");cout << endl;} while (0 == q);//printf("\n");cout << endl;if (q != 0) {menu(n, m, w);}}//主函数int main(){int n, m, w;//n为学校个数 , m为男子数,w为女子数cout<<"\t\t\t欢迎使用\t\t\t\t"<> n;cout<<"输入男子项目个数:";cin >> m;cout<<"输入女子项目个数:";cin >> w;menu(n, m, w);}
【C++版数据结构课设----运动会分数统计系统】结果截图