C++基于單鏈表實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)
更新時(shí)間:2022年05月30日 17:18:25 作者:昭昭霜影
這篇文章主要為大家詳細(xì)介紹了C++基于單鏈表實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C++實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
/*程序說明: ? ? 程序是由單鏈表實(shí)現(xiàn)的學(xué)生成績管理系統(tǒng),主要功能有輸入/查找/刪除/修改/排序/顯示學(xué)生成績; ? ? 輸入功能由帶頭結(jié)點(diǎn)的單鏈表實(shí)現(xiàn),并且使用前插法輸入學(xué)生信息; ? ? 輸入功能可以實(shí)現(xiàn)插入學(xué)生信息的功能,所以無需再專門寫一個(gè)插入的函數(shù); ? ? 刪除/修改學(xué)生信息要用到查找功能,所以將查找與刪除/修改功能寫到一起; ? ? 查找功能使用順序查找遍歷整個(gè)單鏈表; ? ? 使用直接插入法對(duì)學(xué)生信息排序; ? ? 程序主要復(fù)習(xí)對(duì)單鏈表的使用,所以并沒有完整的對(duì)錯(cuò)誤輸入的保護(hù)功能; ? ? 由于學(xué)過的是c++,但教科書是由c語言為主,所以寫的代碼是混合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]; ? ? //成績 ? ? 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***********************成績輸入入口***********************\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é)成績:\n"; ? ? ? ? cin >> p->Math; ? ? ? ? cout << "輸入學(xué)生英語成績:\n"; ? ? ? ? cin >> p->English; ? ? ? ? cout << "輸入學(xué)生語文成績:\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***********************成績查改入口***********************\n"; ? ? if (llist->link == NULL) ? ? ? ? cout << "沒有學(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é)成績:\n"; ? ? ? ? ? ? ? ? ? ? cin >> q->Math; ? ? ? ? ? ? ? ? ? ? cout << "輸入學(xué)生英語成績:\n"; ? ? ? ? ? ? ? ? ? ? cin >> q->English; ? ? ? ? ? ? ? ? ? ? cout << "輸入學(xué)生語文成績:\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 << "查無此人\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é)成績:\n"; ? ? ? ? ? ? ? ? ? ? cin >> q->Math; ? ? ? ? ? ? ? ? ? ? cout << "輸入學(xué)生英語成績:\n"; ? ? ? ? ? ? ? ? ? ? cin >> q->English; ? ? ? ? ? ? ? ? ? ? cout << "輸入學(xué)生語文成績:\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 << "查無此人"; ? ? ? ? } ? ? } } //對(duì)學(xué)生信息排序 void Sort(LinkList llist) { ? ? LinkList p, q, r; ? ? cout << "\n***********************成績排序入口***********************\n"; ? ? if (llist->link == NULL) ? ? ? ? cout << "沒有學(xué)生信息記錄\n"; ? ? else ? ? { ? ? ? ? cout << "選擇排序方式:\n" ? ? ? ? ? ? << "1.按學(xué)號(hào)\n2.按數(shù)學(xué)成績\n3.按英語成績\n4.按語文成績\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é)成績由高到低排列 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? 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://按英語 ? ? ? ? ? ? p = llist->link->link; ? ? ? ? ? ? llist->link->link = NULL; ? ? ? ? ? ? while (p != NULL)//英語成績由高到低排列 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? 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://按語文 ? ? ? ? ? ? p = llist->link->link; ? ? ? ? ? ? llist->link->link = NULL; ? ? ? ? ? ? while (p != NULL)//語文成績由高到低排列 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? 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)//總分成績由高到低排列 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? 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***********************成績顯示入口***********************\n"; ? ? if (llist->link == NULL) ? ? ? ? cout << "沒有學(xué)生信息記錄\n"; ? ? else ? ? { ? ? ? ? cout << "學(xué)生信息如下:\n"; ? ? ? ? cout << "學(xué)號(hào)\t 姓名\t 數(shù)學(xué)\t 英語\t 語文\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***********************成績管理系統(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(); }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c++ 入門——淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)
這篇文章主要介紹了c++ 淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)的相關(guān)資料,幫助大家入門c++ 編程,感興趣的朋友可以了解下2020-08-08C++實(shí)現(xiàn)LeetCode(98.驗(yàn)證二叉搜索樹)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(98.驗(yàn)證二叉搜索樹),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C/C++ 中sizeof(''a'')對(duì)比詳細(xì)介紹
這篇文章主要介紹了C/C++ 中sizeof('a')的值對(duì)比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02