学生信息管理系统(附代码) 题目要求:
设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。
如: 1 LiPing m 18 89 98 94
请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号 num为“序”来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函数,而且对输出运算符“<<”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。
要求成员函数完成以下功能:
(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4) 计算某编号学生的总成绩与平均成绩。
(5) 列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。 Code:
1. /**************************************** 2. *名称: student.cpp * 3. *描述: 学生管理程序 *
4. *功能: 添加,修改,按条件查询学生信息 * 5. *环境: Fedora Linux 11 & GCC & x86 *
6. *备注: davelv第一次Class于2010-01-10 * 7. *更新: 新建了可复用的搜索模板searchframe * 8. ****************************************/ 9.
10. #include
13. #include
16. using namespace std;
17. #define CIN_LEN 1024//缓冲区长度 18. #define FILENAME \数据文件名 19. /////////////////////////////////////
20. // 结构和类 // 21. /////////////////////////////////// 22. struct data//学生个人信息 23. {
24. int id;//学号
25. char name[20];//名字 26. char major[20];//专业 27. char sex;//性别
28. double ch,en,ma;//成绩 29. int grade;//年级 30. }; 31.
32. class CStudent 33. {
34. protected:
35. bool altered;//是否修改 36. data info;//学生信息 37. public:
38. static int nowid ;//新学生自增id 39. static void displayhead();//显示表头
40. static void displayshorthead();//显示短表头 41. CStudent();//构造
42. void displayinfo();//显示全部学生信息 43. void displayshortinfo();//显示学生短信息 44. double getsum();//取总成绩 45. double getave();//取得平均分 46. double getch();//取语文成绩 47. double geten();//取外语成绩 48. double getma();//取数学成绩
49. int set(bool isnew);//设置学生信息 50. int getgrade();//取年级 51. int getid();//取学号
52. bool isaltered();//取是否修改 53. char getsex();//取性别 54. char* getname();//取姓名 55. char* getmajor();//取专业
56. data* getinfo();//取学生全部信息
57. //定义友元函数以便重载运算符
58. friend ostream& operator<<(ostream&,const CStudent&); 59. friend istream& operator>>(istream&,CStudent&); 60. 61. }; 62.
63. int CStudent::nowid = 1;//初始化类静态成员 64.
65. CStudent::CStudent()//基类构造 66. {
67. info.id=CStudent::nowid++;//子增id 68. strcpy(info.name,\名字 69. info.ch=0;//语文成绩 70. info.en=0;//外语成绩 71. info.ma=0;//数学成绩 72. info.grade=1;//年级
73. altered=false;//未被修改 74. } 75.
76. int CStudent::getgrade() 77. {
78. return info.grade; 79. } 80.
81. double CStudent::getsum() 82. {
83. return info.ch+info.en+info.ma; 84. }
85. double CStudent::getave() 86. {
87. return (info.ch+info.en+info.ma)/3; 88. }
89. double CStudent::getch() 90. {
91. return info.ch; 92. } 93.
94. double CStudent::geten() 95. {
96. return info.en; 97. } 98.
99. double CStudent::getma() 100. {
101. return info.ma; 102. } 103.
104. int CStudent::getid() 105. {
106. return info.id; 107. } 108.
109. char CStudent::getsex() 110. {
111. return info.sex; 112. } 113.
114. char * CStudent::getname() 115. {
116. return info.name; 117. }
118. bool CStudent::isaltered() 119. {
120. return altered; 121. }
122. data *CStudent::getinfo() 123. {
124. return &info; 125. }
126. void CStudent::displayinfo() 127. {
128. cout<<*this<<\利用重载运算符输出 129. }
130. void CStudent::displayshortinfo() 131. {
132. cout << *this< 134. void CStudent::displayhead() 135. { 136. cout<<\学号\\t姓名\\t性别\\t专业\\t年级\\t中文\\t英文\\t数学\\t总分\\t平均分\\n\ 137. } 138. void CStudent::displayshorthead() 139. { 140. cout<<\学号\\t姓名\\t性别\\t专业\\t年级\\t中文\\t英文\\t数学\\n\ 141. } 142. int CStudent::set(bool isalter) 143. { 144. cout<<\输入学生信息:\\n\ 145. displayshorthead(); 146. if (isalter) 147. displayshortinfo(); 148. cout<<\ 149. cin.clear(); 150. cin>> *this;//从标准输入获取学生信息 151. altered=true;//已修改 152. 153. if(cin.fail()) 154. { 155. cout<<\录入失败\\n\ 156. cin.clear(); 157. cin.ignore(CIN_LEN,'\\n');//这两行是用来清空输入缓冲 158. return -1; 159. } 160. else 161. { 162. cout<<\录入成功\\n\ 163. return 1; 164. } 165. } 166. 167. //重载输出符 168. ostream &operator<<(ostream& out,const CStudent &right) 169. { 170. //输出学生的全部信息 171. out <<\ 172. < 176. //重载输入符 177. istream& operator>>(istream& in,CStudent& right) 178. { 179. //输入除ID外的其他信息 180. in >>right.info.name>>right.info.sex>>right.info.major 181. >>right.info.grade>>right.info.ch>>right.info.en>>right.info.ma; 182. return in; 183. } 184. 185. ///////////////////////////////// 186. // 初始化函数 // 187. //////////////////////////////// 188. int initial(vector