版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、(完整)數(shù)據(jù)結(jié)構(gòu)大作業(yè)之家譜管理系統(tǒng)(完整)數(shù)據(jù)結(jié)構(gòu)大作業(yè)之家譜管理系統(tǒng) 編輯整理:尊敬的讀者朋友們:這里是精品文檔編輯中心,本文檔內(nèi)容是由我和我的同事精心編輯整理后發(fā)布的,發(fā)布之前我們對文中內(nèi)容進(jìn)行仔細(xì)校對,但是難免會(huì)有疏漏的地方,但是任然希望((完整)數(shù)據(jù)結(jié)構(gòu)大作業(yè)之家譜管理系統(tǒng))的內(nèi)容能夠給您的工作和學(xué)習(xí)帶來便利。同時(shí)也真誠的希望收到您的建議和反饋,這將是我們進(jìn)步的源泉,前進(jìn)的動(dòng)力。本文可編輯可修改,如果覺得對您有幫助請收藏以便隨時(shí)查閱,最后祝您生活愉快 業(yè)績進(jìn)步,以下為(完整)數(shù)據(jù)結(jié)構(gòu)大作業(yè)之家譜管理系統(tǒng)的全部內(nèi)容。c+實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)大作業(yè)之家譜管理系統(tǒng)歡迎界面:主菜單:其他一些運(yùn)行結(jié)
2、果不在一一列舉,一面篇幅過長。這個(gè)家譜管理系統(tǒng),支持鍵盤操作,所有的操作都可以用鍵盤完成,如選擇功能、退出等。代碼的實(shí)現(xiàn)使用的是c+11標(biāo)準(zhǔn),與舊標(biāo)準(zhǔn)或有不同。類的頭文件:includeiostream#includeusing std:string;using std:ostream;using std:istream;struct birthday /生日結(jié)構(gòu)變量int year=0; int month=0; int day=0; ;class memberfriend class familysystem;friend ostream &operator(istream &in, me
3、mber m);/從文件中讀入成員信息public:member()=default;/使用默認(rèn)合成構(gòu)造函數(shù)void sete();/通過控制臺(tái)輸入給成員賦值member() = default;/使用默認(rèn)合成析構(gòu)函數(shù)member pson=nullptr;/指向兒子的指針member pbro = nullptr;/指向兄弟的指針private:/成員的各種數(shù)據(jù)string name=”未知”;string birthplace = ”未知;birthday birthday;string sex = ”未知”;float height=0;int age=0;string educatio
4、n = ”未知;string job = 未知;string father = 未知;class familysystempublic:familysystem() = default;/使用默認(rèn)合成構(gòu)造函數(shù)familysystem()delete root;bool fileinit();/從文件中讀取數(shù)據(jù)int menu();/顯示菜單(功能)bool addmem();/增加成員bool deletemem();/刪除成員bool demandmem();/查詢bool demandave();/查詢家庭整體情況bool modifymem();/修改成員bool showfamily(
5、);/展示整個(gè)家譜bool savefile();/保存信息到文件中,將使用兩個(gè)文件,一個(gè)保存成員信息,一個(gè)保存家譜整體信息member* root = nullptr;/家譜數(shù)結(jié)構(gòu)的根節(jié)點(diǎn)指針?private:int total = 0;/總?cè)藬?shù)float aveage=0;/平均年齡float aveheight=0;/平均身高float avemember=0;/家庭平均人數(shù)float ratio=0;/男女比例void calculate();/計(jì)算平均值等member *seek(string);/查找是否存在成員void display(member*, int);/先序遍歷樹,用
6、于顯示所有成員;extern string gets();/用于接收鍵盤的輸入類的函數(shù)及相關(guān)操作函數(shù)的實(shí)現(xiàn)#includeiomanipincludeincludefstream#include#include#includesystemclass。husing std:cin;using std:cout;using std::endl;using std::setw;using std::vector;using std::ios;using std::ifstream;using std:ofstream;using std:istringstream;string gets()/從控制
7、臺(tái)獲取字符等信息string s;while (int n = _getch()if (n = 27)throw 27;break;else if (n = 13)cout endl;break;else if (n = 8)s.pop_back();cout (istream &in, birthday &b)/從文件中讀取生日的信息in b.year b.month b.day;return in;ostream &operator(ostream out, birthday &b)out b。year ” b.month ” ” b。day;return out;/與member相關(guān)的函
8、數(shù)void member:sete()tryistringstream sin;cout setw(20) 請輸入成員信息:n endl name; cout endl setw(20) birthplace; cout endl setw(20) birthday。year birthday。month birthday.day;if ( !sinbirthday.year 2014 | birthday。month 12 | birthday.day 31)cout 輸入錯(cuò)誤,請重新輸入:”;sin.str(gets()); else break;cout endl setw(20) se
9、x)if (sex = ”male sex = female” sex = 男 | sex = 女”)break;elsecout ”性別必須是male、female、男或者女,請重新輸入:;sin。str(gets()); sin.clear();cout endl setw(20) height)cout ”輸入錯(cuò)誤,請重新輸入:”;sin.str(gets()); sin.clear();cout endl setw(20) age) | age 300)cout 輸入錯(cuò)誤,請重新輸入:” endl;sin。str(gets(); sin.clear();cout endl educat
10、ion;cout endl setw(20) job;cout endl setw(20) father;catch (int ex)throw ex;return;ostream &operator(ostream out, const member &m)out endl setw(25) ”該成員信息如下: endl endlsetw(25)”姓名: ” endl endl setw(25) ”出生地: m。birthplace endl endl setw(25) 生日: m.birthday.year ” m.birthday.month ” ” m。birthday。
11、day endl endl setw(25) 性別: ” m.sex endl endl setw(25) 身高(厘米): m。height endl endl setw(25) 年齡: ” m。age endl endl setw(25) 學(xué)歷: ” cation endl endl setw(25) ”工作: ” m.job endl endl setw(25) 父親: m。father (istream &in, member &m)in m.birthplace m.birthday m。sex m。height m。age cation m.job
12、m。father;return in;/familysystem的成員函數(shù)int familysystem::menu()cout nn;cout ” -n”;cout | |n”;cout ” | 系統(tǒng)菜單 n”;cout ” | n;cout | 1.查詢成員 |n”;cout ” |n;cout ” 2。查詢家庭整體情況 n;cout n”;cout | 3.添加成員 n”;cout | n;cout | 4.刪除成員 |n”;cout n;cout ” | 5.修改成員信息 n;cout |n;cout | 6.顯示整個(gè)家譜 n;cout ” | n”;cout 按esc退出系統(tǒng) |n
13、;cout ” | |n;cout -n;cout = 49 &n=54) break;cout ”n請按下1、2、3、4、5、6選擇或按esc鍵退出! endl;return n;bool familysystem:fileinit()ifstream infile;/打開存儲(chǔ)成員信息的文件,讀入成員信息infile.open(”members。txt”, ios::in | ios::_nocreate);if (!infile)return false;vector temp)/將成員放入家族樹中,成員的父親必須是這一代的成員for (auto i = genely。begin(); i
14、 != genely.end(); +i)if ((*i)name = temp-father)if ((i)pson=nullptr)(*i)pson = temp;elsemember p = (*i)-pson;while (p-pbro!=nullptr)p = ppbro;ppbro = temp;next.push_back(temp);temp = nullptr;break;/若成員的父親不是這一代的成員,則將next賦予genely,迭進(jìn)下一代if (temp != nullptr)genely = next;/迭進(jìn)下一代next。clear();/清空nextfor (au
15、to i : genely)/將成員放入家族樹中if (iname = tempfather)i-pson = temp;next。push_back(temp);temp = nullptr;break;/動(dòng)態(tài)創(chuàng)建臨時(shí)成員變量,用于存儲(chǔ)輸入的下一個(gè)成員的信息temp = new member;infile。close();/關(guān)閉存儲(chǔ)成員信息的文件/若文件中沒有成員信息,將root置為空if (rootname = ”未知”)root = nullptr;/打開存儲(chǔ)家庭總體信息的文件,讀入信息infile.open(wholes.txt”, ios::in ios::_nocreate);if
16、 (!infile)return false;infile total aveage aveheight avemember ratio;infile。close();/關(guān)閉文件return true;member *familysystem::seek(string nam)/若家譜樹為空,返回空指針if (root = nullptr) return nullptr;/若root不為空,繼續(xù)查找member store = nullptr;/存儲(chǔ)返回的指針vectormember genely;/存儲(chǔ)這一代的指針genely。push_back(root);vectorpbro != nu
17、llptr)next.push_back(temp-pbro);temp = temppbro;genely = next;next.clear();end:return store;bool familysystem:addmem()cout sete();/輸入成員信息catch (int)return false;/檢查其父親是否存在member jubge = seek(tempfather);if (root = nullptr) root = temp;else if (jubge = nullptr)cout n 家譜中沒有此人父親的信息!無法插入!;cout n 請確認(rèn)此人是否
18、此家族中的人!”; else if (seek(tempname) != nullptr)cout ”nn 此人已存在于家譜中! endl;elsecout pson = nullptr) jubgepson = temp;elsemember *p = jubgepson;while (p-pbro != nullptr)p = p-pbro;p-pbro = temp;cout n 保存成功!n”;break;cout ”n按esc鍵返回菜單”;for (;;)if (_getch() = 27)break;return true;bool familysystem::deletemem(
19、)cout ”4。刪除成員.nn;cout na;catch (int)goto end;member *temp = seek(na);if (temp = nullptr)cout pson != nullptr)cout nn 此人有后代!若刪除此人其后代將同時(shí)被刪!”;cout pbro!=temp)p = ppbro; ppbro = nullptr;cout ”nn 刪除成功!nn”;cout”n按esc鍵返回菜單;for (;)if (_getch() = 27)break;end:return true;bool familysystem::demandmem()cout ”1
20、。查詢成員.nn”;cout 請輸入姓名:”; string na;tryistringstream sin(gets();sin na;catch (int)goto end;member *m=seek(na);if(m!=nullptr) cout m; else cout ”nn 對不起,家譜中沒有此人的信息!nn”;cout ”n按esc鍵返回菜單”;for (;;)if (_getch() = 27)break;end:return true;void familysystem:calculate()/若家譜樹為空,將各總體值置零if (root = nullptr)total =
21、 0; aveage = 0; aveheight = 0;avemember = 0; ratio = 0;return;/若root不為空,繼續(xù)vectormember* genely;/存儲(chǔ)這一代的指針genely。push_back(root);vector next;/存儲(chǔ)下一代的指針int girl = 0;/女性數(shù)int family = 0;/家庭數(shù)total = 0; aveage = 0; aveheight = 0;/initializefor (;;)/循環(huán)疊加各所需總體數(shù)據(jù)/在這一代中for (auto p : genely)+total;aveage += p-ag
22、e;aveheight += p-height;if (p-sex = ”female” | psex = ”女)+girl;/判斷下一代是否為空,若為空,跳到最后int jubge = 0;for (auto p : genely)if (ppson != nullptr)+jubge;+family;if (jubge = 0)goto cal;/找到下一代for (auto p : genely)member temp = ppson;if (temp = nullptr) continue;elsenext.push_back(temp);while (temp-pbro != nul
23、lptr)next.push_back(temp-pbro);temp = temppbro;genely = next;/迭進(jìn)下一代next.clear();/清空next/計(jì)算最后結(jié)果cal:total = total;aveage /= total;aveheight /= total;if (family = 0) family = 1;avemember = static_castfloat(total) / static_cast(family);if (girl!=0)ratio = static_cast(total girl) / static_castfloat(girl)
24、;else ratio = 0;/退出 return;bool familysystem:demandave()calculate();cout 2。查詢家庭整體情況。n”;cout endl endl;cout setw(30) ”家庭的整體情況如下:t endl endl endl;cout setw(30) ”總?cè)藬?shù):t total endl endl endl;cout setw(30) ”平均年齡:t” aveage endl endl endl;cout setw(30) ”平均身高:t aveheight endl endl endl;cout setw(30) ”家庭平均人數(shù):
25、t” avemember endl endl endl;cout setw(30) 男女比例:t” ratio;if( ratio!=0 ) cout ” : 1 endl;else cout endl;cout ”nn按esc鍵返回菜單;for (;)if (_getch() = 27)break;return true;bool familysystem:modifymem()cout ”5。修改成員信息。nn; cout na;catch (int)goto rend;member temp = seek(na); if (temp = nullptr)cout nn 家譜中沒有此人的信
26、息!n”;goto end;cout ”n 選擇修改項(xiàng):nn”;cout ” 1.姓名 2。出生地點(diǎn) 3.生日nn”;cout 4。性別 5。身高 6.年齡nn”;cout ” 7。學(xué)歷 8。工作 nn;cout ” 按esc鍵退出修改nn”;for (;;)int get = _getch();if (get = 27) break;switch (get)case 49:cout n 姓名原為:” tempname;cout tempname;if (temp-pson = nullptr) break;elsestring na = temp-name;temp=temp-pson;te
27、mpfather = na;while (temp-pbro != nullptr)temp = temppbro;tempfather = na;break;case 50:cout ”n 出生地點(diǎn)原為: temp-birthplace;cout tempbirthday;break;case 51:cout ”n 生日原為: temp-birthday;cout temp-birthday;break;case 52:cout n 性別原為:” sex;cout tempsex;while (tempsex != male&tempsex != femaletemp-sex != 男”&t
28、emp-sex != 女)cout tempsex;break;case 53:cout n 身高原為:” height;cout temp-height;break;case 54:cout ”n 年齡原為:” temp-age;cout temp-age;break;case 55:cout ”n 學(xué)歷原為: education;cout tempeducation;break;case 56:cout ”n 工作原為:” job;cout tempjob;break;default:;cout 修改成功!;end:cout”nn按esc鍵返回菜單;for (;)if (_getch()
29、= 27)break;rend:return true;void familysystem:display(member r, int n)string blank=”;for (int i = 0; i != n; +i)blank += ;cout blankr-namepbro != nullptr)display(r-pbro, n);return;bool familysystem::showfamily()cout 6。顯示整個(gè)家譜。nn”;if (root = nullptr) cout nn 家譜為空!nn”;else display(root, 0);/escapecout
30、”nn按esc鍵返回菜單”;for (;;)if (_getch() = 27)break;return true;bool familysystem:savefile()ofstream outfile;/打開保存家庭信息的文件,并寫入信息outfile.open(wholes.txt, ios::out);if (!outfile)return false;calculate();outfile total ” ” aveage aveheight ” avemember ” genely;/保存一代成員的指針genely.push_back(root);while (1)/輸出這一代成員
31、的信息for (auto p : genely)if (p != nullptr)outfile p-name ” birthplace ” pbirthday p-sex ” ” p-height age ” p-job ” education ” ”father endl;/計(jì)算這一代成員的兒女的人數(shù)/若這一代都沒有兒女,則退出int jubge = 0;for (auto p : genely)if (p != nullptr)if (ppson != nullptr)+jubge;if (jubge = 0) break;/找到下一代的成員,即這一代的兒女vector next;for
32、 (auto p : genely)member temp=ppson;if (temp!= nullptr)next。push_back(temp);while (temp-pbro != nullptr)next.push_back(temppbro);temp = temppbro;genely = next;/迭進(jìn)下一代next.clear();return true;主函數(shù)及歡迎界面的實(shí)現(xiàn)includetime.h#includesystemclass。husing std:cout;using std:endl;using std:flush;int main()/顯示系統(tǒng)歡迎界面
33、void welcome();system(color 02”);/將系統(tǒng)背景顏色置為黑色,前景暗綠色welcome();/畫面停留3秒const time_t start = time(0);while (1)time_t current = time(0);if (current start = 3) break;familysystem genealogy;/程序唯一的一個(gè)家譜對象/從文件中讀取出家庭成員的信息,若讀取不成功,則強(qiáng)制退出程序if (!genealogy。fileinit()system(cls”);/輸出錯(cuò)誤信息for (int i = 0; i != 10; +i)cout n”;string str = ”;cout str ”讀取文件時(shí)發(fā)生錯(cuò)誤,程序?qū)⒔K止!nnstr即將強(qiáng)制退出” flush;/5秒后退出const time_t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44809-2024物聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)系統(tǒng)設(shè)備兼容性要求和模型
- GB/T 44802-2024柔性直流輸電用絕緣柵雙極晶體管(IGBT)驅(qū)動(dòng)器技術(shù)規(guī)范
- 高中歷史 第一單元 從“朕即皇帝”到“主權(quán)在民”第1節(jié) 歐洲的君主專制教案 岳麓版選修2
- 2024秋五年級語文上冊 第四單元 15 小島教案 新人教版
- 2023六年級數(shù)學(xué)上冊 6 百分?jǐn)?shù)教案 新人教版
- 湖南省衡陽市高中數(shù)學(xué) 第一章 集合與函數(shù)概念 1.3 函數(shù)的基本性質(zhì) 1.3.1 單調(diào)性與最大(?。┲到贪?新人教A版必修1
- 八年級地理上冊 第二章 第三節(jié) 氣候與人類活動(dòng)教案1 中圖版
- 2024-2025學(xué)年高中化學(xué) 第一章 物質(zhì)結(jié)構(gòu)元素周期律 第二節(jié) 元素周期律第3課時(shí)教案1 新人教版必修2
- 租用家庭氧氣瓶合同(2篇)
- 棕櫚油供銷合同(2篇)
- 2024年度一級注冊消防工程師考試復(fù)習(xí)題庫及答案(共1000題)
- 《人工智能基礎(chǔ)》課件-AI的前世今生:她從哪里來
- 人教八年級上冊英語第六單元《Section A (1a-2d)》教學(xué)課件
- 食品工業(yè)技術(shù)經(jīng)濟(jì)學(xué)智慧樹知到期末考試答案章節(jié)答案2024年西華大學(xué)
- 家校攜手 同心共育 四年期中考試家長會(huì) 課件
- 正確使用網(wǎng)絡(luò)流行語+課件-2022-2023學(xué)年主題班會(huì)
- (完整word版)高考英語作文練習(xí)紙(標(biāo)準(zhǔn)答題卡)
- 通用技術(shù)學(xué)考300題
- 公寓購房合同范文
- 遷鋼煉鋼二期板坯連鑄機(jī)設(shè)備安裝施工方案
- 山西《建筑工程預(yù)算定額》定額說明及計(jì)算規(guī)則
評論
0/150
提交評論