第十七周 任务一

朱雀 2022-06-11 05:23 310阅读 0赞
  1. /*
  2. * 程序头部注释开始
  3. * 程序的版权和版本声明部分
  4. * Copyright (c) 2011, 烟台大学计算机学院学生
  5. * All rights reserved.
  6. * 文件名称:学生成绩处理
  7. * 作 者:薛广晨
  8. * 完成日期:2011 年 06 月 08 日
  9. * 版 本号:x1.0
  10. * 对任务及求解方法的描述部分
  11. * 输入描述:文件score.dat
  12. * 问题描述:保存为二进制文件ASCII 文件score.dat 中保存的是100 名学生的姓名和C++课、高数和英语成绩。
  13. (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
  14. (2)读入学生的成绩,并求出总分,用对象数组进行存储。
  15. (3)将所有数据保存到一个二进制文件binary_score.dat 中,最后在文件中写入你自己的各科成绩(咱不谦虚,也求个好运,全100分)。
  16. (4)为验证输出文件正确,再将binary_score.dat 中的记录逐一读出到学生对象中并输出查看。
  17. * 程序输出:binary_score.dat
  18. * 程序头部的注释结束
  19. */
  20. #include <fstream>
  21. #include<iomanip>
  22. #include <string>
  23. #include<iostream>
  24. using namespace std;
  25. class Student
  26. {
  27. private:
  28. string name;
  29. double cgrade;
  30. double mathgrade;
  31. double englishgrade;
  32. double score;
  33. double average;
  34. public:
  35. Student();
  36. Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average);
  37. void set_name(string name);
  38. void set_cgrade(double cgrade);
  39. void set_mathgrade(double mathgrade);
  40. void set_englishgrade(double englishgrade);
  41. void set_score(double score);
  42. void set_average(double average);
  43. string get_name();
  44. double get_cgrade();
  45. double get_mathgrade();
  46. double get_englishgrade();
  47. double get_score();
  48. double get_average();
  49. friend void scoregrade(Student s[]);
  50. friend void averagegrade(Student s[]);
  51. friend void bubble_sort(Student s[]);//排序;
  52. friend void cin_grade(Student s[]);//从文件得到数据;
  53. friend void cout_grade(Student s[]);//储存数据;
  54. };
  55. int main( )
  56. {
  57. Student stud[101];
  58. cin_grade(stud);//读入101人的原始分数
  59. scoregrade(stud);
  60. averagegrade(stud);
  61. bubble_sort(stud);
  62. cout_grade(stud);
  63. cout<<endl;
  64. system("PAUSE");
  65. return 0;
  66. }
  67. Student::Student()
  68. {
  69. this->name = "NULL";
  70. this->cgrade = 0;
  71. this->mathgrade = 0;
  72. this->englishgrade = 0;
  73. this->score = 0;
  74. this->average = 0;
  75. }
  76. Student::Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average)
  77. {
  78. this->name = name;
  79. this->cgrade = cgrade;
  80. this->mathgrade = mathgrade;
  81. this->englishgrade = englishgrade;
  82. this->score = score;
  83. this->average = average;
  84. }
  85. void cin_grade(Student s[])
  86. {
  87. int i;
  88. string name;
  89. double cgrade;
  90. double mathgrade;
  91. double englishgrade;
  92. ifstream infile("score.dat",ios::in);
  93. if(!infile)
  94. {
  95. cerr<<"open error!"<<endl;
  96. exit(1);
  97. }
  98. for(i=0;i<101;i++)
  99. {
  100. infile >> name >> cgrade >> mathgrade >> englishgrade;
  101. s[i].set_name(name);
  102. s[i].set_cgrade(cgrade);
  103. s[i].set_mathgrade(mathgrade);
  104. s[i].set_englishgrade(englishgrade);
  105. }
  106. infile.close();
  107. cout<<endl;
  108. }
  109. void cout_grade(Student stud[])
  110. {
  111. int i;
  112. ofstream outfile("binary_score.dat",ios::binary);
  113. if(!outfile)
  114. {
  115. cerr<<"open error!"<<endl;
  116. exit(1);
  117. }
  118. cout << setiosflags(ios::left) << setw(12) << "姓名" << setw(8) << "C++" << setw(8) << "高数" << setw(8) << "英语" << setw(8) <<"总分" << setw(8) << "平均分" << endl;
  119. for(int i = 0; i < 101; i++)
  120. {
  121. outfile.write((char *)&stud[i],sizeof(stud[i]));
  122. cout<<setiosflags(ios::left)<<setw(12)<<stud[i].get_name()<<setw(8)<<stud[i].get_cgrade()<<setw(8)<<stud[i].get_mathgrade()<<setw(8)<<stud[i].get_englishgrade()<<setw(8)<<stud[i].get_score()<<setw(8)<<stud[i].get_average()<<endl;
  123. }
  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<101-1;i++)
  179. {
  180. for(j=0;j<101-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 scoregrade(Student s[])
  192. {
  193. double grade;
  194. for(int i=0;i<101;++i)
  195. {
  196. grade=s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade();
  197. s[i].set_score(grade);
  198. }
  199. }
  200. void averagegrade(Student s[])
  201. {
  202. double average;
  203. for(int i=0;i<101;++i)
  204. {
  205. average=double(s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade())/3;
  206. s[i].set_average(average);
  207. }
  208. }

1339135253_3639.jpg

1339135263_8887.jpg

1339135274_6684.jpg

上机感言:使用二进制文件虽然看不懂,但是它也不是给人看的,它的效率却比ASCII的高。

发表评论

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

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

相关阅读

    相关 任务

    / 实验内容:【任务3】阅读P314的例10.1(电子版的在平台上见txt文件)。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定是doub

    相关 任务

    / 实验内容:利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数 程序的版权和版本声明部分 Copyrigh

    相关 任务

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

    相关

    一.学习   1.这一周基本上进入复习周了,大家都在备考当中,而我感觉这一周的效率不是很高,没有复习到多少东西,进度和16周的没有什么区别,所以自己内心还是有点小慌张