第十六周 任务二

ゝ一世哀愁。 2022-06-11 02:49 623阅读 0赞
  1. /*
  2. * 程序头部注释开始
  3. * 程序的版权和版本声明部分
  4. * Copyright (c) 2011, 烟台大学计算机学院学生
  5. * All rights reserved.
  6. * 文件名称:学生成绩排序
  7. * 作 者:薛广晨
  8. * 完成日期:2011 年 06 月 02 日
  9. * 版 本号:x1.0
  10. * 对任务及求解方法的描述部分
  11. * 输入描述:文件score.dat
  12. * 问题描述:文件score.dat 中保存的是100 名学生的姓名和C++课、高数和英语成绩。
  13. (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
  14. (2)读入这名学生的成绩,用对象数组进行存储。
  15. (3)求出各科和总分的最高分。
  16. (4)请按总分的降序(高成绩在前,低成绩在后)排序
  17. (5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。
  18. * 程序输出:odered_score.dat
  19. * 程序头部的注释结束
  20. */
  21. #include <fstream>
  22. #include<iomanip>
  23. #include <string>
  24. #include<iostream>
  25. using namespace std;
  26. class Student
  27. {
  28. private:
  29. string name;
  30. double cgrade;
  31. double mathgrade;
  32. double englishgrade;
  33. double score;
  34. double average;
  35. public:
  36. Student();
  37. Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average);
  38. void set_name(string name);
  39. void set_cgrade(double cgrade);
  40. void set_mathgrade(double mathgrade);
  41. void set_englishgrade(double englishgrade);
  42. void set_score(double score);
  43. void set_average(double average);
  44. string get_name();
  45. double get_cgrade();
  46. double get_mathgrade();
  47. double get_englishgrade();
  48. double get_score();
  49. double get_average();
  50. friend void high_grade(Student s[]);
  51. friend void scoregrade(Student s[]);
  52. friend void averagegrade(Student s[]);
  53. friend void bubble_sort(Student s[]);//排序;
  54. };
  55. void cin_grade(Student s[]);//从文件得到数据;
  56. void cout_grade(Student s[]);//储存数据;
  57. int main( )
  58. {
  59. Student s1[100],s2;
  60. cin_grade(s1);//读入100人的原始分数
  61. scoregrade(s1);
  62. averagegrade(s1);
  63. high_grade(s1);
  64. bubble_sort(s1);
  65. cout_grade(s1);
  66. cout<<endl;
  67. system("PAUSE");
  68. return 0;
  69. }
  70. Student::Student()
  71. {
  72. this->name = "NULL";
  73. this->cgrade = 0;
  74. this->mathgrade = 0;
  75. this->englishgrade = 0;
  76. this->score = 0;
  77. this->average = 0;
  78. }
  79. Student::Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average)
  80. {
  81. this->name = name;
  82. this->cgrade = cgrade;
  83. this->mathgrade = mathgrade;
  84. this->englishgrade = englishgrade;
  85. this->score = score;
  86. this->average = average;
  87. }
  88. void cin_grade(Student s[])
  89. {
  90. int i;
  91. string name;
  92. double cgrade;
  93. double mathgrade;
  94. double englishgrade;
  95. ifstream infile("score.dat",ios::in);
  96. if(!infile)
  97. {
  98. cerr<<"open error!"<<endl;
  99. exit(1);
  100. }
  101. for(i=0;i<100;i++)
  102. {
  103. infile >> name >> cgrade >> mathgrade >> englishgrade;
  104. s[i].set_name(name);
  105. s[i].set_cgrade(cgrade);
  106. s[i].set_mathgrade(mathgrade);
  107. s[i].set_englishgrade(englishgrade);
  108. }
  109. infile.close();
  110. cout<<endl;
  111. }
  112. void cout_grade(Student s[])
  113. {
  114. int i;
  115. ofstream outfile("odered_score.dat",ios::out);
  116. if(!outfile)
  117. {
  118. cerr<<"open error!"<<endl;
  119. exit(1);
  120. }
  121. outfile << setiosflags(ios::left) << setw(12) << "姓名" << setw(8) << "C++" << setw(8) << "高数" << setw(8) << "英语" << setw(8) <<"总分" << setw(8) << "平均分" << endl;
  122. for(i=0;i<100;i++)
  123. outfile<<setiosflags(ios::left)<<setw(12)<<s[i].get_name()<<setw(8)<<s[i].get_cgrade()<<setw(8)<<s[i].get_mathgrade()<<setw(8)<<s[i].get_englishgrade()<<setw(8)<<s[i].get_score()<<setw(8)<<s[i].get_average()<<endl;
  124. outfile.close();
  125. }
  126. void Student::set_name(string name)
  127. {
  128. this->name = name;
  129. }
  130. void Student::set_cgrade(double cgrade)
  131. {
  132. this->cgrade = cgrade;
  133. }
  134. void Student::set_mathgrade(double mathgrade)
  135. {
  136. this->mathgrade = mathgrade;
  137. }
  138. void Student::set_englishgrade(double englishgrade)
  139. {
  140. this->englishgrade=englishgrade;
  141. }
  142. void Student::set_score(double score)
  143. {
  144. this->score=score;
  145. }
  146. void Student::set_average(double average)
  147. {
  148. this->average=average;
  149. }
  150. string Student::get_name()
  151. {
  152. return name;
  153. }
  154. double Student::get_cgrade()
  155. {
  156. return cgrade;
  157. }
  158. double Student::get_mathgrade()
  159. {
  160. return mathgrade;
  161. }
  162. double Student::get_englishgrade()
  163. {
  164. return englishgrade;
  165. }
  166. double Student::get_score()
  167. {
  168. return score;
  169. }
  170. double Student::get_average()
  171. {
  172. return average;
  173. }
  174. void bubble_sort(Student s[])
  175. {
  176. Student stud;
  177. int i,j;
  178. for(i=0;i<100-1;i++)
  179. {
  180. for(j=0;j<100-i-1;j++)
  181. {
  182. if(s[j].get_score()<s[j+1].get_score())
  183. {
  184. stud=s[j+1];
  185. s[j+1]=s[j];
  186. s[j]=stud;
  187. }
  188. }
  189. }
  190. }
  191. void high_grade(Student s[])
  192. {
  193. Student max_stud("nobody",0,0,0,0,0);
  194. for(int i=0;i<100;i++)
  195. {
  196. if(s[i].get_cgrade() > max_stud.get_cgrade())
  197. {
  198. max_stud.set_cgrade(s[i].get_cgrade());
  199. }
  200. if(s[i].get_mathgrade() > max_stud.get_mathgrade())
  201. {
  202. max_stud.set_mathgrade(s[i].get_mathgrade());
  203. }
  204. if(s[i].get_englishgrade() > max_stud.get_englishgrade())
  205. {
  206. max_stud.set_englishgrade(s[i].get_englishgrade());
  207. }
  208. if(s[i].get_score() > max_stud.get_score())
  209. {
  210. max_stud.set_score(s[i].get_score());
  211. }
  212. }
  213. cout<<"C++的最高分为:"<<max_stud.get_cgrade()<<endl;
  214. cout<<"高数的最高分为:"<<max_stud.get_mathgrade()<<endl ;
  215. cout<<"英语的最高分为:"<<max_stud.get_englishgrade()<<endl ;
  216. cout<<"总分的最高分为:"<<max_stud.get_score()<<endl;
  217. }
  218. void scoregrade(Student s[])
  219. {
  220. double grade;
  221. for(int i=0;i<100;++i)
  222. {
  223. grade=s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade();
  224. s[i].set_score(grade);
  225. }
  226. }
  227. void averagegrade(Student s[])
  228. {
  229. double average;
  230. for(int i=0;i<100;++i)
  231. {
  232. average=double(s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade())/3;
  233. s[i].set_average(average);
  234. }
  235. }
  236. 上机感言:虽然很累,但依然很爽

发表评论

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

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

相关阅读

    相关 任务

    实验目的:学会使用循环控制语句解决实际问题 实验内容:编写多分支选择结构程序,根据个人月收入总额,计算出应缴税款和税后收入。 include <iostrea

    相关 任务

    /实验目的:练习使用指针 实验内容:程序填空:按要求将缺少的代码填进去 程序的版权和版本声明部分 Copyright (c)

    相关 任务

    /【任务1】理解基类中成员的访问限定符和派生类的继承方式 由下面派生类Student1对基类Student的继承…… (1)请修改基类中成员的访问限