当前位置:   article > 正文

数据结构课设----运动会分数统计系统(C++版)_数据结构运动会分数统计

数据结构运动会分数统计

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个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。
【选作内容】
允许用户指定某项目采取其他名次取法。

废话不多说,直接上代码!(欢迎私信和评论!)

  1. #include<math.h>
  2. #include<process.h>
  3. #include <iostream>
  4. #define _CRT_SECURE_NO_WARNINGS
  5. using namespace std;
  6. #define N 20 //学校最大数目
  7. #define M 30 //男子项目最大数
  8. #define W 20 //女子项目最大数
  9. //存放项目信息的结构体
  10. typedef struct
  11. {
  12. int inum;//项目编号
  13. int top;//取名次的数目
  14. int range[5];//名次
  15. int mark[5];//分数
  16. }itemnode;
  17. //存放学校信息的结构体
  18. typedef struct
  19. {
  20. int snum;//学校编号
  21. int score;//学校总分
  22. int mscore;//男子总分
  23. int wscore;//女子总分
  24. itemnode t[M + W];//项目数组
  25. }snode;
  26. snode a[N];//定义一个学校数组
  27. //菜单函数
  28. void menu(int n, int m, int w)
  29. {//n代表学校数,m代表男子数,w代表女子数
  30. int c;
  31. void input(int n, int m, int w);//输入功能
  32. void output(int n, int m, int w);//输出功能
  33. void sortput(int n, int m, int w);//排序输出
  34. void search(int n, int m, int w);//查询功能
  35. cout<<"\t\t\t欢迎使用\t\t\t\t\t"<<endl;
  36. cout<<"运动会分数统计系统"<<endl;
  37. cout << endl;
  38. cout<<"1.信息输入"<<endl;
  39. cout<<"2.统计输出" << endl;
  40. cout <<"3.排序输出" << endl;
  41. cout<<"4.信息查询"<<endl;
  42. cout<<"5.退出系统"<<endl;
  43. cout << endl;
  44. cout<<"======================================================="<<endl;
  45. cout << endl;
  46. cout<<"请输入您想要实现的功能(0--4):"<<endl;
  47. cin >> c;
  48. switch (c) {
  49. case 1:
  50. input(n, m, w);
  51. break;
  52. case 2:
  53. output(n, m, w);
  54. break;
  55. case 3:
  56. sortput(n, m, w);
  57. break;
  58. case 4:
  59. search(n, m, w);
  60. break;
  61. case 5:
  62. cout<<"感谢使用,祝您天天开心!!"<<endl;
  63. exit(0);//正常退出
  64. default:
  65. cout<<"您输入有误,请重新输入!";
  66. menu(n, m, w);
  67. }
  68. }
  69. //将信息写入文件中
  70. void savetofile()
  71. {
  72. FILE* fp;//定义一个文件指针
  73. int i;
  74. if (NULL == (fp = fopen("file.txt", "w"))) {
  75. cout<<"打开文件失败!"<<endl;
  76. return;
  77. }
  78. for (i = 0; i < N; i++) {
  79. if ('\0' != a[i].snum)
  80. if (fwrite(&a[i], sizeof(snode), 1, fp) != 1) {
  81. cout << "存入信息失败!" << endl;
  82. return;
  83. }
  84. }
  85. fclose(fp);//关闭文件
  86. }
  87. //将信息从文件里取出
  88. void readfromfile()
  89. {
  90. int i;
  91. FILE* fp;
  92. if ((fp = fopen("file.txt", "rb")) == NULL) {
  93. cout<<"文件打开失败!"<<endl;
  94. return;
  95. }
  96. for (i = 0; i < N; i++) {
  97. fread(&a[i], sizeof(snode), 1, fp);
  98. }
  99. fclose(fp);
  100. }
  101. //信息输入功能
  102. void input(int n, int m, int w)
  103. {
  104. int i, j, s, k, q = 1;
  105. for (i = 0; i < n; i++) {
  106. cout<<"请输入学校的编号:"<<endl;
  107. cin >> a[i].snum;
  108. for (j = 0; j < m + w; j++) {//总的项目的输入
  109. cout << "请输入项目编号:";
  110. cin>> a[i].t[j].inum;
  111. /*
  112. cout << "请输入该项目取前3还是前5(输入3或5):";
  113. cin >> a[i].t[j].top;
  114. */
  115. if (a[i].t[j].inum % 2 == 0) {
  116. cout<<"编号为偶数取前三" << endl;
  117. cout << "获得的名次的个数(1--5):";
  118. }
  119. else if (a[i].t[j].inum % 2 == 1) {
  120. cout <<"编号为奇数的项目取前五"<<endl;
  121. cout << "获得的名次的个数(1--5):";
  122. }
  123. else {
  124. cout << "输入有误!程序退出....";
  125. return;
  126. }
  127. cin >> k;//输入获得名次的个数
  128. for (s = 0; s < k; s++) {
  129. //if (3 == a[i].t[j].top) {
  130. if(a[i].t[j].inum % 2 == 0){
  131. cout<<"请输入获得的名次(1--3):";
  132. }
  133. else {
  134. cout<<"请输入获得的名次(1--5):";
  135. }
  136. cin >> a[i].t[j].range[s];//输入所获得的名次的信息
  137. }
  138. cout << endl;
  139. }
  140. }
  141. for (i = 0; i < n; i++) {
  142. //初始化分数
  143. a[i].score = 0;//学校总分
  144. a[i].mscore = 0;//男子总分
  145. a[i].wscore = 0;//女子总分
  146. }
  147. for (i = 0; i < n; i++) {
  148. for (j = 0; j < m + w; j++) {
  149. cout << "项目" << j + 1 << "取得是前3还是前5(输入3或5) :";
  150. cin >> a[i].t[j].top;
  151. for (s = 0; s < 5; s++) {
  152. if (a[i].t[j].top == 3) {
  153. switch (a[i].t[j].range[s]) {
  154. case 0:
  155. a[i].t[j].mark[s] = 0;
  156. break;
  157. case 1:
  158. a[i].t[j].mark[s] = 5;
  159. break;
  160. case 2:
  161. a[i].t[j].mark[s] = 3;
  162. break;
  163. case 3:
  164. a[i].t[j].mark[s] = 2;
  165. break;
  166. }
  167. }
  168. else if (a[i].t[j].top == 5) {
  169. switch (a[i].t[j].range[s]) {
  170. case 0:
  171. a[i].t[j].mark[s] = 0;
  172. break;
  173. case 1:
  174. a[i].t[j].mark[s] = 7;
  175. break;
  176. case 2:
  177. a[i].t[j].mark[s] = 5;
  178. break;
  179. case 3:
  180. a[i].t[j].mark[s] = 3;
  181. break;
  182. case 4:
  183. a[i].t[j].mark[s] = 2;
  184. break;
  185. case 5:
  186. a[i].t[j].mark[s] = 1;
  187. break;
  188. }
  189. }
  190. /*else {
  191. cout << "信息输入错误!程序退出" << endl;
  192. cout << endl;
  193. exit(0);
  194. }*/
  195. a[i].score = a[i].score + a[i].t[j].mark[s];//学校总分
  196. if (j < m) {
  197. a[i].mscore = a[i].mscore + a[i].t[j].mark[s];
  198. }
  199. else {//女子总分
  200. a[i].wscore = a[i].wscore + a[i].t[j].mark[s];
  201. }
  202. }
  203. }
  204. }
  205. cout<<"输入完毕!(返回菜单请输入1):";
  206. cin >> q;
  207. cout << endl;
  208. if (q != 1) {
  209. cout<<"不能再添加信息了!";
  210. }
  211. cout << endl;
  212. savetofile();//保存文件
  213. menu(n, m, w);
  214. }
  215. #if(1)
  216. void output(int n, int m, int w) /*2.统计输出*/
  217. {
  218. readfromfile();
  219. int i, j, s, q = 0;
  220. for (i = 0; i < n; i++) /*显示结果*/
  221. {
  222. cout << "学校编号:" << a[i].snum << endl;
  223. cout << "学校总分:" << a[i].score << endl;
  224. cout << "男子总分" << a[i].mscore <<" " << "女子总分" << a[i].wscore << endl;
  225. for (j = 0; j < m + w; j++)
  226. {
  227. // cout<<"项目编号:%d 所取名次数量:%d\n", a[i].t[j].inum, a[i].t[j].top;
  228. cout << "项目编号:" << a[i].t[j].inum <<" " << "所取名次取前:" << a[i].t[j].top<<"名"<< endl;
  229. for (s = 0; s < 5; s++)
  230. {
  231. if (a[i].t[j].range[s] != 0)
  232. cout<<"名次:"<< a[i].t[j].range[s] <<" " << "分数:"<< a[i].t[j].mark[s]<<" "<<endl;
  233. }
  234. }
  235. cout << endl;
  236. }
  237. cout<<"\n";
  238. cout<<"统计完毕!返回? 1是 2否"; /*返回菜单*/
  239. cin >> q;
  240. cout << endl;
  241. if (q != 1)
  242. cout<<"统计已经结束!";
  243. cout << endl;
  244. menu(n, m, w);
  245. }
  246. #endif
  247. //排序输出
  248. void sortput(int n, int m, int w)//n为学校数,m为男子数,w为女子数
  249. {
  250. readfromfile();
  251. int c, i, j, k, q = 0;
  252. int temp[N]={};
  253. cout << "\t**************排序输出系统**************" << endl;
  254. cout << endl;
  255. cout << "\t\t****1.按学校编号输出****" << endl;
  256. cout<<"\t\t****2.按学校总分输出****"<<endl;
  257. cout<<"\t\t****3.按男子总分输出****"<<endl;
  258. cout<<"\t\t****4.按女子总分输出****"<<endl;
  259. cout<<"======================================================="<<endl;
  260. cout << endl;
  261. do {
  262. cout<<"请选择您想实现的功能的编号(1--4):";
  263. cin >> c;
  264. switch (c) {
  265. case 1:
  266. for (i = 0; i < n; i++) {
  267. temp[i] = i;
  268. }
  269. //用的是冒泡排序输出
  270. for (i = 0; i < n; i++) {
  271. for (j = i + 1; j < n; j++) {
  272. if (a[temp[i]].snum > a[j].snum) {
  273. k = temp[i];
  274. temp[i] = temp[j];
  275. temp[j] = k;
  276. }
  277. }
  278. }
  279. for (i = 0; i < n; i++) {
  280. //cout<<"学校标号:%d 学校总分:%d 男子总分:%d 女子总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore;
  281. cout << "学校标号:" << a[temp[i]].snum << " " << "学校总分:" << a[temp[i]].score << endl;
  282. cout << "男子总分" << a[temp[i]].mscore << " " << "女子总分:" << a[temp[i]].wscore << endl;
  283. }
  284. break;
  285. case 2:
  286. for (i = 0; i < n; i++) {
  287. temp[i] = i;
  288. }
  289. for (i = 0; i < n; i++) {
  290. for (j = i + 1; j < n; j++) {
  291. if (a[temp[i]].score < a[j].score) {
  292. k = temp[i];
  293. temp[i] = temp[j];
  294. temp[j] = k;
  295. }
  296. }
  297. }
  298. for (i = 0; i < n; i++) {
  299. // cout<<"学校编号:%d 学校总分:%d 男子总分:%d 女子总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore;
  300. cout << "学校标号:" << a[temp[i]].snum << " " << "学校总分:" << a[temp[i]].score << endl;
  301. cout << "男子总分" << a[temp[i]].mscore << " " << "女子总分:" << a[temp[i]].wscore << endl;
  302. }
  303. break;
  304. case 3:
  305. for (i = 0; i < n; i++) {
  306. temp[i] = i;
  307. }
  308. for (i = 0; i < n; i++) {
  309. for (j = i + 1; j < n; j++) {
  310. if (a[temp[i]].mscore < a[j].mscore) {
  311. k = temp[i];
  312. temp[i] = temp[j];
  313. temp[j] = k;
  314. }
  315. }
  316. }
  317. for (i = 0; i < n; i++) {
  318. printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore);
  319. }
  320. break;
  321. case 4:
  322. for (i = 0; i < n; i++) {
  323. temp[i] = i;
  324. }
  325. for (i = 0; i < n; i++) {
  326. for (j = i + 1; j < n; j++) {
  327. if (a[temp[i]].wscore < a[j].wscore) {
  328. k = temp[i];
  329. temp[i] = temp[j];
  330. temp[j] = k;
  331. }
  332. }
  333. }
  334. for (i = 0; i < n; i++) {
  335. printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n", a[temp[i]].snum, a[temp[i]].score, a[temp[i]].mscore, a[temp[i]].wscore);
  336. }
  337. break;
  338. default:
  339. printf("您的输入有误!请从新输入...");
  340. }
  341. printf("请选择 1.返回主菜单 0.继续");
  342. scanf_s("%d", &q);
  343. printf("\n");
  344. }
  345. //=======================
  346. while (0 == q);
  347. printf("\n");
  348. //=======================
  349. if (q != 0) {
  350. menu(n, m, w);
  351. }
  352. }
  353. //查询功能
  354. void search(int n, int m, int w)
  355. {
  356. readfromfile();
  357. int c, i, j, k, d, l, q = 0;
  358. cout<<"\t****************查询系统****************"<<endl;
  359. cout << endl;
  360. cout << "\t\t****1.按学校编号查询****"<<endl;
  361. cout << "\t\t****2.按项目编号查询****" << endl;
  362. cout << "======================================================="<<endl;
  363. cout << endl;
  364. do
  365. {
  366. k = -1; d = -1; l = -1;
  367. cout<<"请选择要实现功能的编号(1--2):";
  368. //scanf_s("%d", &c);
  369. cin >> c;
  370. switch (c) {
  371. case 1:
  372. cout<<"要查询的学校编号:"; /*查找学校编号下标*/
  373. // scanf_s("%d", &c);
  374. cin >> c;
  375. for (i = 0; i < n; i++) {
  376. if (c == a[i].snum) {
  377. k = i;
  378. }
  379. }
  380. if (-1 == k) {
  381. cout<<"错误:这个学校没有参加此次运动会!"<<endl;
  382. }
  383. else {
  384. cout<<"要查询的项目编号:"; /*查找项目编号下标*/
  385. //scanf_s("%d", &c);
  386. cin >> c;
  387. for (j = 0; j < m + w; j++) {
  388. if (c == a[k].t[j].inum) {
  389. d = j;
  390. }
  391. }
  392. if (-1 == d) {
  393. cout<<"此次运动会没有这个项目"<<endl;
  394. }
  395. else {
  396. //cout<<"这个项目取前 %d名,该学校的成绩如下:\n", a[k].t[d].top);
  397. cout << "这个项目取前" << a[k].t[d].top << "名,该学校的成绩如下:" << endl;
  398. for (i = 0; i < 5; i++) {
  399. if (a[k].t[d].range[i] != 0) {
  400. //cout<<"名次:%d\n", a[k].t[d].range[i];
  401. cout << "名次:" << a[k].t[d].range[i];
  402. }
  403. }
  404. }
  405. }
  406. break;
  407. case 2:
  408. cout<<"要查询的项目编号:"; /*查找项目编号下标*/
  409. //scanf_s("%d", &c);
  410. cin >> c;
  411. for (i = 0; i < n; i++) {
  412. for (j = 0; j < m + w; j++) {
  413. if (c == a[i].t[j].inum) {
  414. l = j;
  415. }
  416. if (-1 == l) {
  417. cout<<"此次运动会没有该项目";
  418. }
  419. else {
  420. //printf("该项目取前 %d名,取得名次的学校\n", a[0].t[l].top);
  421. cout << "该项目取前a[0].t[l].top名,取得名次的学校" << endl;
  422. for (i = 0; i < n; i++) {
  423. for (j = 0; j < 5; j++) {
  424. if (a[i].t[l].range[j] != 0) {
  425. //cout<<"学校编号:%d,名次:%d\n", a[i].snum, a[i].t[l].range[j]);
  426. cout << "学校编号:" << a[i].snum << " " << ", 名次:" << a[i].t[l].range[j] << endl;
  427. }
  428. }
  429. }
  430. }
  431. }
  432. }
  433. break;
  434. default:
  435. cout << "输入错误,请重试!" << endl;
  436. }
  437. cout<<"请选择:1.返回主菜单 0.继续";
  438. //scanf_s("%d", &q);
  439. cin >> q;
  440. //printf("\n");
  441. cout << endl;
  442. } while (0 == q);
  443. //printf("\n");
  444. cout << endl;
  445. if (q != 0) {
  446. menu(n, m, w);
  447. }
  448. }
  449. //主函数
  450. int main()
  451. {
  452. int n, m, w;//n为学校个数,m为男子数,w为女子数
  453. cout<<"\t\t\t欢迎使用\t\t\t\t"<<endl;
  454. cout << endl;
  455. cout << "\t***********运动会分数统计系统***********" << endl;
  456. cout << endl;
  457. cout<<"请先输入运动会主要信息"<<endl;
  458. cout<<"输入学校个数:";
  459. cin >> n;
  460. cout<<"输入男子项目个数:";
  461. cin >> m;
  462. cout<<"输入女子项目个数:";
  463. cin >> w;
  464. menu(n, m, w);
  465. }

结果截图 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/812898
推荐阅读
相关标签
  

闽ICP备14008679号