溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++基于單鏈表如何實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)

發(fā)布時(shí)間:2022-05-31 09:21:58 來(lái)源:億速云 閱讀:301 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(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)

讀到這里,這篇“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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

c++
AI