您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“C++基于單鏈表如何實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++基于單鏈表如何實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
具體代碼如下
/*程序說(shuō)明: 程序是由單鏈表實(shí)現(xiàn)的學(xué)生成績(jī)管理系統(tǒng),主要功能有輸入/查找/刪除/修改/排序/顯示學(xué)生成績(jī); 輸入功能由帶頭結(jié)點(diǎn)的單鏈表實(shí)現(xiàn),并且使用前插法輸入學(xué)生信息; 輸入功能可以實(shí)現(xiàn)插入學(xué)生信息的功能,所以無(wú)需再專(zhuān)門(mén)寫(xiě)一個(gè)插入的函數(shù); 刪除/修改學(xué)生信息要用到查找功能,所以將查找與刪除/修改功能寫(xiě)到一起; 查找功能使用順序查找遍歷整個(gè)單鏈表; 使用直接插入法對(duì)學(xué)生信息排序; 程序主要復(fù)習(xí)對(duì)單鏈表的使用,所以并沒(méi)有完整的對(duì)錯(cuò)誤輸入的保護(hù)功能; 由于學(xué)過(guò)的是c++,但教科書(shū)是由c語(yǔ)言為主,所以寫(xiě)的代碼是混合c與c++; 編譯環(huán)境:visual studio 2017 2017.5.13 */ #include<iostream> using namespace std; struct Node; typedef struct Node* PNode; struct Node { long int stuId; char name[30]; //成績(jī) float Math; float English; float Chinese; float sum;//總分 PNode link; }; typedef struct Node* LinkList; //輸入學(xué)生信息 LinkList Input(LinkList llist) { LinkList p; long int n; cout << "\n***********************成績(jī)輸入入口***********************\n"; cout << "請(qǐng)輸入你想輸入的學(xué)生信息個(gè)數(shù):\n"; cin >> n; for (int i = n; i > 0; i--)//前插法插入信息 { p = (LinkList)malloc(sizeof(struct Node)); cout << "輸入學(xué)生學(xué)號(hào):\n"; cin >> p->stuId; cout << "輸入學(xué)生姓名:\n"; cin >> p->name; cout << "輸入學(xué)生數(shù)學(xué)成績(jī):\n"; cin >> p->Math; cout << "輸入學(xué)生英語(yǔ)成績(jī):\n"; cin >> p->English; cout << "輸入學(xué)生語(yǔ)文成績(jī):\n"; cin >> p->Chinese; p->sum = p->Math + p->English + p->Chinese;//總分 //使用含有頭結(jié)點(diǎn)的單鏈表實(shí)現(xiàn)信息的輸入 p->link = llist->link; llist->link = p; } return llist; } //查找/修正學(xué)生的信息 void Check(LinkList llist) { LinkList p, q; long int id; char sName[30]; cout << "\n***********************成績(jī)查改入口***********************\n"; if (llist->link == NULL) cout << "沒(méi)有學(xué)生信息記錄\n"; else { cout << "輸入查找方式:\n" << "1.按學(xué)號(hào)查找\n2.按姓名查找\n"; int a; cin >> a; if (a == 1)//按學(xué)號(hào)查找 { p = llist; q = p->link; cout << "輸入學(xué)生學(xué)號(hào):\n"; cin >> id; while (q->stuId != id&&q->link != NULL)//從單鏈表表頭順序查找 { p = q; q = q->link; } if (q->stuId == id) { cout << "學(xué)生信息如下:\n"; cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t" << q->English << "\t" << q->Chinese << "\t" << q->sum << endl; cout << "輸入功能序號(hào):\n" << "1.修改學(xué)生信息\n2.刪除學(xué)生信息\n0.退出\n"; int b; cin >> b; if (b == 1)//修改學(xué)生信息 { cout << "請(qǐng)輸入修正后的學(xué)生信息:\n"; cout << "輸入學(xué)生學(xué)號(hào):\n"; cin >> q->stuId; cout << "輸入學(xué)生姓名:\n"; cin >> q->name; cout << "輸入學(xué)生數(shù)學(xué)成績(jī):\n"; cin >> q->Math; cout << "輸入學(xué)生英語(yǔ)成績(jī):\n"; cin >> q->English; cout << "輸入學(xué)生語(yǔ)文成績(jī):\n"; cin >> q->Chinese; q->sum = q->Math + q->English + q->Chinese; } else if (b == 2)//刪除學(xué)生信息 { p->link = q->link; free(q); } } else cout << "查無(wú)此人\n"; } else if (a == 2)//按姓名查找 { p = llist; q = p->link; cout << "輸入學(xué)生姓名:\n"; cin >> sName; while (strcmp(sName, q->name) != 0 && q->link != NULL)//從單鏈表表頭順序查找 { p = q; q = q->link; } if (strcmp(sName, q->name) == 0) { cout << "學(xué)生信息如下:\n"; cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t" << q->English << "\t" << q->Chinese << "\t" << q->sum << endl; cout << "輸入功能序號(hào):\n" << "1.修改學(xué)生信息\n2.刪除學(xué)生信息\n0.退出\n"; int b; cin >> b; if (b == 1)//修改學(xué)生信息 { cout << "請(qǐng)輸入修正后的學(xué)生信息:\n"; cout << "輸入學(xué)生學(xué)號(hào):\n"; cin >> q->stuId; cout << "輸入學(xué)生姓名:\n"; cin >> q->name; cout << "輸入學(xué)生數(shù)學(xué)成績(jī):\n"; cin >> q->Math; cout << "輸入學(xué)生英語(yǔ)成績(jī):\n"; cin >> q->English; cout << "輸入學(xué)生語(yǔ)文成績(jī):\n"; cin >> q->Chinese; q->sum = q->Math + q->English + q->Chinese; } else if (b == 2)//刪除學(xué)生信息 { p->link = q->link; free(q); } } else cout << "查無(wú)此人"; } } } //對(duì)學(xué)生信息排序 void Sort(LinkList llist) { LinkList p, q, r; cout << "\n***********************成績(jī)排序入口***********************\n"; if (llist->link == NULL) cout << "沒(méi)有學(xué)生信息記錄\n"; else { cout << "選擇排序方式:\n" << "1.按學(xué)號(hào)\n2.按數(shù)學(xué)成績(jī)\n3.按英語(yǔ)成績(jī)\n4.按語(yǔ)文成績(jī)\n5.按總分\n"; int a; cin >> a; //使用直接插入法進(jìn)行排序 switch (a) { case 1://按學(xué)號(hào) p = llist->link->link; llist->link->link = NULL; while (p != NULL)//學(xué)號(hào)由小到大排列 { r = p->link; q = llist; while (q->link != NULL&&q->link->stuId < p->stuId)//查找插入位置 q = q->link; //插入 p->link = q->link; q->link = p; p = r; } break; case 2://按數(shù)學(xué) p = llist->link->link; llist->link->link = NULL; while (p != NULL)//數(shù)學(xué)成績(jī)由高到低排列 { r = p->link; q = llist; while (q->link != NULL&&q->link->Math > p->Math)//查找插入位置 q = q->link; //插入 p->link = q->link; q->link = p; p = r; } break; case 3://按英語(yǔ) p = llist->link->link; llist->link->link = NULL; while (p != NULL)//英語(yǔ)成績(jī)由高到低排列 { r = p->link; q = llist; while (q->link != NULL&&q->link->English > p->English)//查找插入位置 q = q->link; //插入 p->link = q->link; q->link = p; p = r; } break; case 4://按語(yǔ)文 p = llist->link->link; llist->link->link = NULL; while (p != NULL)//語(yǔ)文成績(jī)由高到低排列 { r = p->link; q = llist; while (q->link != NULL&&q->link->Chinese > p->Chinese)//查找插入位置 q = q->link; //插入 p->link = q->link; q->link = p; p = r; } break; case 5://按總分 p = llist->link->link; llist->link->link = NULL; while (p != NULL)//總分成績(jī)由高到低排列 { r = p->link; q = llist; while (q->link != NULL&&q->link->sum > p->sum)//查找插入位置 q = q->link; //插入 p->link = q->link; q->link = p; p = r; } break; } } } //顯示學(xué)生的信息 void Display(LinkList llist) { LinkList p; p = llist->link; cout << "\n***********************成績(jī)顯示入口***********************\n"; if (llist->link == NULL) cout << "沒(méi)有學(xué)生信息記錄\n"; else { cout << "學(xué)生信息如下:\n"; cout << "學(xué)號(hào)\t 姓名\t 數(shù)學(xué)\t 英語(yǔ)\t 語(yǔ)文\t 總分\n"; while (p)//輸出學(xué)生信息 { cout << p->stuId << "\t" << p->name << "\t" << p->Math << "\t" << p->English << "\t" << p->Chinese << "\t" << p->sum<<endl; p = p->link; } } } //程序主體 int main() { LinkList llist= (LinkList)malloc(sizeof(struct Node)); llist->link = NULL; int a, b=1; while (b)//循環(huán)使用菜單 { cout << "\n***********************成績(jī)管理系統(tǒng)***********************\n" << "請(qǐng)選擇你所需要的功能:\n" << "1.輸入學(xué)生信息\n2.查找/修正學(xué)生信息\n3.排序?qū)W生信息\n4.顯示學(xué)生信息\n5.退出\n"; cin >> a; switch (a) { case 1: llist=Input(llist); break; case 2: Check(llist); break; case 3: Sort(llist); break; case 4: Display(llist); break; case 5: b = 0; break; } } cout << "\n***********************感謝您的使用***********************\n"; cin.get(); cin.get(); }
讀到這里,這篇“C++基于單鏈表如何實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。