第十七周 【项目6-学生成绩统计】(6)

末蓝、 2022-08-06 04:27 209阅读 0赞
  1. 问题及代码:
  2. /*
  3. *Copyright (c) 2014,烟台大学计算机学院
  4. *ALL right reserved
  5. *文件名:学生成绩统计
  6. *作者;童宇
  7. *完成日期:2014年12月21日
  8. *版本号v1.0
  9. *问题描述:每位同学的信息学号、姓名、C++、高数、英语成绩
  10. *输入描述:从文件中读取N名学生的信息
  11. *程序输出:输出每位同学的信息学号、姓名、总分和均分。
  12. */
  13. #include <iostream>
  14. #include <fstream>
  15. #include <cstdlib>
  16. using namespace std;
  17. struct Student
  18. {
  19. char num[13];
  20. char name[10];
  21. int cpp;
  22. int math;
  23. int english;
  24. int grade;
  25. double average;
  26. };
  27. void calculate(Student s[],int n); //计算总分和均分,数据在s数组中,共有n个元素
  28. void sort1(Student [],int); //按总分降序排序
  29. void sort2(Student [],int); //按学号升序排序
  30. void output(Student [],int); //输出成绩单
  31. void outputExcellent(Student [],int);
  32. void cppoutput(Student [],int);
  33. int main()
  34. {
  35. int i,a,stuNum=0;
  36. Student stu[1000];
  37. ifstream infile("score.txt",ios::in); //以输入的方式打开文件
  38. if(!infile) //测试是否成功打开
  39. {
  40. cerr<<"open error!"<<endl;
  41. exit(1);
  42. }
  43. i=0;
  44. while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english)
  45. {
  46. stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english;
  47. ++stuNum;
  48. ++i;
  49. }
  50. infile.close();
  51. calculate(stu,stuNum);
  52. cout<<"数据读取完毕\n";
  53. while(a)
  54. {
  55. cout<<"请选择下面功能:\n1.输出成绩单\n2.按总分排序并输出成绩单\n3.按学号排序并输出成绩单\n4.输出获得奖学金同学的名单\n5.输出c++不及格同学姓名和c++成绩\n0.结束\n";
  56. cin>>a;
  57. switch (a)
  58. {
  59. case 1:
  60. {
  61. cout<<"\n下面是成绩单:\n"<<endl;
  62. output(stu,stuNum);
  63. };
  64. break;
  65. case 2:
  66. {
  67. cout<<"按总分降序排序后:\n"<<endl;
  68. sort1(stu,stuNum);
  69. output(stu,stuNum);
  70. };
  71. break;
  72. case 3:
  73. {
  74. cout<<"优秀者名单:\n"<<endl;
  75. outputExcellent(stu,stuNum);
  76. };
  77. break;
  78. case 4:
  79. {
  80. sort2(stu,stuNum);
  81. cout<<"按学号升序排序后:\n"<<endl;
  82. output(stu,stuNum);
  83. };
  84. break;
  85. case 5:
  86. cout<<"输出c++不及格同学姓名和c++成绩:\n";
  87. cppoutput(stu,stuNum);
  88. break;
  89. case 0:
  90. ;
  91. break;
  92. default:
  93. cout<<"请正确输入!\n";
  94. break;
  95. }
  96. }
  97. return 0;
  98. }
  99. void calculate(Student s[],int n) //计算总分和均分,数据在s数组中,共有n个元素
  100. {
  101. int i;
  102. for(i=0; i<n; i++)
  103. {
  104. s[i].grade=s[i].cpp+s[i].math+s[i].english;
  105. s[i].average=s[i].grade/3;
  106. }
  107. }
  108. void sort1(Student Stu[],int n) //按总分降序排序
  109. {
  110. int i,j;
  111. Student t;
  112. for(i=0; i<n-1; i++)
  113. {
  114. for(j=0; j<n-i-1; j++)
  115. {
  116. if(Stu[j].grade<Stu[j+1].grade)
  117. {
  118. t=Stu[j];
  119. Stu[j]=Stu[j+1];
  120. Stu[j+1]=t;
  121. }
  122. }
  123. }
  124. }
  125. void sort2(Student Stu[],int n) //按学号升序排序
  126. {
  127. int i,j;
  128. Student t;
  129. for(i=0; i<n-1; i++)
  130. {
  131. for(j=0; j<n-i-1; j++)
  132. {
  133. if(Stu[j].num<Stu[j+1].num)
  134. {
  135. t=Stu[j];
  136. Stu[j]=Stu[j+1];
  137. Stu[j+1]=t;
  138. }
  139. }
  140. }
  141. }
  142. void output(Student Stu[],int n) //输出成绩单
  143. {
  144. int i;
  145. cout<<"学号\t\t姓名\t\tC++\t数学\t英语\t总分\t平均分\n\n";
  146. for(i=0; i<n; i++)
  147. {
  148. cout<<Stu[i].num<<"\t"<<Stu[i].name<<"\t\t"<<Stu[i].cpp<<"\t"<<Stu[i].math<<"\t"<<Stu[i].english<<"\t"<<Stu[i].grade<<"\t"<<Stu[i].average<<endl;
  149. }
  150. }
  151. void outputExcellent(Student Stu[],int n)
  152. {
  153. int i;
  154. for(i=0; i<n; i++)
  155. {
  156. if(Stu[i].grade>270&&Stu[i].cpp>=85&&Stu[i].math>=85&&Stu[i].english>=85)
  157. {
  158. cout<<Stu[i].num<<"\t"<<Stu[i].name<<endl;
  159. }
  160. }
  161. }
  162. void cppoutput(Student stu[],int n)
  163. {
  164. int i;
  165. for(i=0; i<n; i++)
  166. {
  167. if(stu[i].cpp<60)
  168. {
  169. cout<<stu[i].name<<"\t"<<stu[i].cpp<<endl;
  170. }
  171. }
  172. }

运行结果:

Center

Center 1

Center 2

Center 3

Center 4

发表评论

表情:
评论列表 (有 0 条评论,209人围观)

还没有评论,来说两句吧...

相关阅读