![C++大作業(yè):學(xué)生信息管理系統(tǒng)附代碼_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/224e0b9d-fd2d-4ea2-8eef-704b7c12cc26/224e0b9d-fd2d-4ea2-8eef-704b7c12cc261.gif)
![C++大作業(yè):學(xué)生信息管理系統(tǒng)附代碼_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/224e0b9d-fd2d-4ea2-8eef-704b7c12cc26/224e0b9d-fd2d-4ea2-8eef-704b7c12cc262.gif)
![C++大作業(yè):學(xué)生信息管理系統(tǒng)附代碼_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/224e0b9d-fd2d-4ea2-8eef-704b7c12cc26/224e0b9d-fd2d-4ea2-8eef-704b7c12cc263.gif)
![C++大作業(yè):學(xué)生信息管理系統(tǒng)附代碼_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/224e0b9d-fd2d-4ea2-8eef-704b7c12cc26/224e0b9d-fd2d-4ea2-8eef-704b7c12cc264.gif)
![C++大作業(yè):學(xué)生信息管理系統(tǒng)附代碼_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/224e0b9d-fd2d-4ea2-8eef-704b7c12cc26/224e0b9d-fd2d-4ea2-8eef-704b7c12cc265.gif)
文檔簡介
1、學(xué)生信息管理系統(tǒng)(附代碼)題目要求:設(shè)計一個類 CStudent ,類中包含一個學(xué)生的基本數(shù)據(jù)如下:編號,姓名,性別,年齡,數(shù)學(xué)成績,計算機成績,外語成績。 并假設(shè)編號為整數(shù),且從 1 號往后連續(xù)編碼;姓名為字符串,性別為字符。如: 1 LiPing m 18 89 98 94請采用 binary 文件形式,并使用隨機讀寫處理方式,對自定義 CStudent 類的對象數(shù)據(jù)進行 存儲與讀寫處理(即是說,總按具有連續(xù)編碼的編號 num 為“序 ”來對文件中的各對象數(shù)據(jù) 進行隨機讀寫處理) 。并設(shè)計該類的成員函數(shù),而且對輸出運算符“<<”進行重載,使該運算符能夠完成將一個學(xué)生的信息輸出到
2、屏幕上。要求成員函數(shù)完成以下功能:(1)從鍵盤輸入一個學(xué)生的有關(guān)信息, 并將它們存入到數(shù)據(jù)文件中 (按編號來確定寫出位 置)。(2)按編號對學(xué)生信息進行檢索并將檢索結(jié)果顯示在屏幕上。(3)按姓名對學(xué)生信息進行檢索并將檢索結(jié)果顯示在屏幕上。(4)計算某編號學(xué)生的總成績與平均成績。(5)列出所有總成績超過n分的性別為s同學(xué)的有關(guān)信息(n,s由用戶從鍵盤輸入)。Code:*2. * 名稱 :student.cpp*3. *描述:學(xué)生管理程序*4. * 功能:添加,修改,按條件查詢學(xué)生信息 *5. *環(huán)境: Fedora Linux 11 & GCC & x86 *6. * 備注:da
3、velv 第一次 Class 于 2010-01-10*7. * 更新:新建了可復(fù)用的搜索模板 searchframe *8.*9.10. #include <iostream>11. #include <cstring>12. #include <vector>5.56.#include <fstre
4、am> #include <cstdlib>using namespace std;#define CIN_LEN1024/ 緩沖區(qū)長度#define"data"/ 數(shù)據(jù)文件名/ 結(jié)構(gòu)和類 / / struct data/ 學(xué)生個人信息int id;/ 學(xué)號char name20;/ 名字 char major20;/ 專業(yè) char sex;/ 性別 double ch,en,ma;/ 成績 int grade;/ 年級;class CStudent protected:bool altered;/ 是否修改 data info;/ 學(xué)生信息 publi
5、c:static int nowid ;/ 新學(xué)生自增 id static void displayhead();/ 顯示表頭 static void displayshorthead();/ 顯示短表頭 CStudent();/ 構(gòu)造 void displayinfo();/ 顯示全部學(xué)生信息 void displayshortinfo();/ 顯示學(xué)生短信息 double getsum();/ 取總成績 double getave();/ 取得平均分 double getch();/ 取語文成績 double geten();/ 取外語成績 double getma();/ 取數(shù)學(xué)成績 i
6、nt set(bool isnew);/ 設(shè)置學(xué)生信息 int getgrade();/ 取年級 int getid();/ 取學(xué)號 bool isaltered();/ 取是否修改 char getsex();/ 取性別 char* getname();/ 取姓名 char* getmajor();/ 取專業(yè) data* getinfo();/ 取學(xué)生全部信息57. /定義友元函數(shù)以便重載運算符58. friend ostream& operator<<(ostream&,const CStudent&);59. friend istream& o
7、perator>>(istream&,CStudent&);60.61. ;62.63. int CStudent:nowid = 1;/ 初始化類靜態(tài)成員64.65. CStudent:CStudent()/ 基類構(gòu)造66. 67. info.id=CStudent:nowid+;/ 子增 id68. strcpy(,"None");/ 名字69. info.ch=0;/ 語文成績70. info.en=0;/ 外語成績71. info.ma=0;/ 數(shù)學(xué)成績72. info.grade=1;/ 年級73. altered=f
8、alse;/ 未被修改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
9、: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 ;117. 118. bool CStudent
10、:isaltered()119. 120. return altered;121. 122. data *CStudent:getinfo()123. 124. return &info;125. 126. void CStudent:displayinfo()127. 128. cout<<*this<<"t"<<getsum()<<"t"<<getave()<<endl;/ 利用重載運算符輸出129. 130. void CStudent:displayshortinfo
11、()131. 132. cout << *this<<endl;133. 134. void CStudent:displayhead()135. 136. cout<<"nt學(xué)號t姓名t性別t專業(yè)t年級t中文t英文t數(shù)學(xué)t總分t平均分n"137. 138. void CStudent:displayshorthead()139. 140. cout<<"nt學(xué)號t姓名t性別t專業(yè)t年級t中文t英文t數(shù)學(xué)n"141. 142. int CStudent:set(bool isalter)143. 144.
12、cout<<" 輸入學(xué)生信息 :n"145.146.147.displayshortinfo();displayshorthead(); if (isalter)148. cout<<"t"<<info.id<<"t"149. cin.clear();150. cin>> *this;/ 從標準輸入獲取學(xué)生信息151. altered=true;/ 已修改152.153. if(cin.fail()154. 155. cout<<" 錄入失敗n"
13、;156. cin.clear();157. cin.ignore(CIN_LEN,'n');/ 這兩行是用來清空輸入緩沖158. return -1;159. 160. else161. 162. cout<<" 錄入成功 n"163. return 1;164. 165. 166.167. /重載輸出符168. ostream &operator<<(ostream& out,const CStudent &right)169. 170. /輸出學(xué)生的全部信息171. out <<"t
14、"<<.id<<"t"<<<<"t"<<.sex<<"t"172. <<.major<<"t"<<.grade<<"t"<<.ch<<"t"173. <<.en&l
15、t;<"t"<<.ma;174. return out;175. 176. /重載輸入符177. istream& operator>>(istream& in,CStudent& right)178. 179. /輸入除 ID 外的其他信息180. in >>>>.sex>>.major181. >>.grade>>.ch>&
16、gt;.en>>.ma;182. return in;183. 184.185. /186. / 初始化函數(shù) /187. /188. int initial(vector<CStudent*> &stu)fstream 輸入文件 CStudent *p;00022.2
17、32.(, fstream:in|fstream:binary);/ 二進制輸入打開if (! 文件是否打開成功return -1;while( ()!=EOF )/ 是否到文件末尾 p=new CStudent();/ 新建一個學(xué)生對象(char*) p->getinfo(),sizeof(data);/ 讀入學(xué)生對象 if()/ 檢查讀入是否失敗return -2; stu.push_back(p);/ 對象加入 vector if(!stu.empty()/ 如果從文件讀入了對象id+1CStudent:now
18、id = stu.back()->getid()+1;/ 則自增 id 設(shè)置為最后一個學(xué)生 ();/關(guān)閉 return stu.size();/ 返回對象個數(shù) / / 信息增加函數(shù) / void insert(vector<CStudent*> &stu)char c='y'/ 輸入控制字符int flag = 1;/ 標志位, 1 表示新增成功CStudent *p=new CStudent();while(c != 'n')/ 是否繼續(xù)新增flag = p->set(false);/ 設(shè)置學(xué)生信息 if( flag = 1 )
19、/ 如果設(shè)置成功 stu.push_back(p);/ 對象加入 vector p = new CStudent();/ 新建下一個對象cout << " 是否繼續(xù)添加學(xué)生 (any/n)?" cin.clear();cin.ignore(CIN_LEN,'n'); cin.get(c);233. 234. /刪除最后一個新建的對象,因為沒有使用它235. delete p;236. CStudent:nowid-;237. 238.239. /240. / 查詢?nèi)啃畔⒑瘮?shù) /241. /242. int comparebynone(const
20、 void *a, const void *b )243. 244. return 0;245. 246. /247. / 按學(xué)號比較函數(shù) /248. /249. int comparebyid(const void *a, const void *b )250. 251. return *(const int *)a - (CStudent *)(b)->getid();252. 253. /254. / 按姓名比較函數(shù) /255. /256. int comparebyname(const void *a, const void *b )257. 258. return strcmp
21、(const char *)a, (const char *)(CStudent *)b)->getname();259. 260. /261. / 按年級比較函數(shù) /262. /263. int comparebygrade(const void *a, const void *b)264. 265. return (*(const int *)a - (CStudent *)b)->getgrade();266. 267. /268. / 按總分和性別比較函數(shù) /269. /270. int comparebymarkandsex(const void *a, const vo
22、id *b)271. 272. double mark;273. char sex;274. sscanf(const char*)a,"%lf%c",&mark,&sex);275. return !(276. ( (CStudent*)b)->getsum() >= mark )277. && ( (sex ='n') | (sex = (CStudent*)b)->getsex() )278. );279.280.281. 282. /283. / 搜索模板 /284. /285. template &
23、lt;typename T>286. void searchframe(const char *info, T &condition ,vector<CStudent *> &stu, (*compare)(const void *a, const void *b) ,bool isalter)287. int289.290.291.char c='y' int flag; while(c != 'n') 292.293.294.295.cin.clear();296.297.298.299.300.301.if(info !=
24、 NULL)cout<< " 輸入 "<<info<<":" /cin.ignore(CIN_LEN,'n'); cin>>condition;302.303.304.305.306.307.308.309.310.311.312.313.314.315.if(cin.fail()cout << " 輸入錯誤 n"else/ 遍歷 vector 查找 for(vector<CStudent*>:size_type ix =flag=0; ix!=s
25、tu.size(); +ix) /判斷是 name 是否相等if(compare(&condition,stuix) = 0) if( isalter ) stuix->set(isalter);else288.318.319.316.317.if(flag = 0)CStudent:displayhead();stuix->displayinfo();320.321.322.323.324.325.326.327.328.329.330.331.332.333.334.335.336.337.338. 339.flag = 1; if (flag = 0)/ 沒有查到 c
26、out<<"沒有”; if(info = NULL) cout<<" 符合條件 ";else cout<<info<<" 為 "<<condition;cout<<" 的學(xué)生 n";cout << " 是否繼續(xù) (any/n)?"; cin.clear();cin.ignore(CIN_LEN,'n'); cin.get(c);340. /341. / 信息檢索函數(shù) /342. /343. void fet
27、ch(vector<CStudent*> &stu)344. 345. int choose,id,grade;346. char name20,markandsex20;347.347. while (true)348. 349. cout << "nt1. 顯示全部學(xué)生信息 n"351."t2. 按學(xué)號查學(xué)生信息n"352."t3. 按姓名查學(xué)生信息n"353."t4. 按年級查學(xué)生信息n"354."t5. 按成績和性別查詢n"355."t6. 返回
28、上級菜單 nn"356. lchoose:357. cout<<" 輸入您的選擇 :";358. choose=0;359. cin>>choose;360. switch(choose)361. 362. case1 :searchframe(NULL,choose,stu,comparebynone,false);break;363. case2 :searchframe(”學(xué)號 ”,id,stu,comparebyid,false); break;364. case 3 :searchframe(”姓名",name,stu,
29、comparebyname,false); break;365. case 4 :searchframe(”年級 ”,grade,stu,comparebygrade,false); break;366. case 5 :searchframe(" 分 數(shù) 和 性 別 ",markandsex,stu,comparebymarkandsex,false); break;367.case 6 :return ;368.default: cout<<"輸入有誤 n"cin.clear();cin.ignore(CIN_LEN,'n'
30、;);gotolchoose;369.370.371. 372. /373. /信息保存函數(shù)/374. /375. int save(vector<CStudent*> &stu)376. 377. fstream file;378.378. (, fstream:out|fstream:binary);/二進制寫打開文件379. if (! 判斷打開是否成功380. return -1;381. /遍歷全部對象382. for(vector<CStudent*>:size_type ix =0;ix!=stu.size(); +ix)383. /判斷當前對象是
31、否已修改384. if(stuix->isaltered()385. / 修改了則寫入文件386. (ix*sizeof(data);387. (char*) stuix->getinfo(),sizeof(data);388. / 寫入是否成功389. if()390. return -2;391. 393.392. 393. ();394. return 0;395. 398.396. /397. /主函數(shù)/398. /402.399. int main()400. 401. vector<CStudent *> stu ;406.407.system("clear");/ 清屏408./讀入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境藝術(shù)設(shè)計與可持續(xù)發(fā)展的協(xié)同實踐
- 匯報溝通職場中的軟實力
- 未來商業(yè)發(fā)展趨勢與市場分析
- 生產(chǎn)線工藝改進的思路與實踐案例
- 吊裝工程專項方案
- “比賽場次”(說課稿)-2024-2025學(xué)年六年級數(shù)學(xué)上冊北師大版
- 《7 栽小蔥》(說課稿)三年級下冊科學(xué)蘇教版
- Module 1 Unit 2 I'm Danny(說課稿)-2024-2025學(xué)年牛津上海版(試用本)英語二年級上冊
- Unit3 What would you like?(說課稿)-2024-2025學(xué)年人教PEP版英語五年級上冊001
- 16 宇宙的另一邊 說課稿-2023-2024學(xué)年語文三年級下冊統(tǒng)編版
- 五年級上冊小數(shù)遞等式計算200道及答案
- 世界老年人跌倒的預(yù)防和管理指南解讀及跌倒應(yīng)急處理-
- GB/T 7251.2-2023低壓成套開關(guān)設(shè)備和控制設(shè)備第2部分:成套電力開關(guān)和控制設(shè)備
- 四川省地圖模板含市縣圖課件
- 帶拼音生字本模板(可A4打印)
- 小學(xué)語文必備文學(xué)常識???00題匯總(含答案)
- 英語人教版高中必修三(2019新編)第一單元教案
- 超高大截面框架柱成型質(zhì)量控制
- GB 9706.1-2020醫(yī)用電氣設(shè)備第1部分:基本安全和基本性能的通用要求
- 森林法講解課件
- 口腔頜面外科:第十六章-功能性外科與計算機輔助外科課件
評論
0/150
提交評論