C語言—學(xué)生管理系統(tǒng)(鏈表實現(xiàn),完整代碼)-創(chuàng)新互聯(lián)

#include#include//清屏要用到的頭文件
#include//文件操作要用到的頭文件
#include//字符串比較用到的strcmp的

//定義結(jié)構(gòu)體,來創(chuàng)建鏈表;
typedef struct Node
{
    int ID;
    char Name[30];
    int Score1,Score2,Score3,sum;
    double average;
    struct Node* next;  //指針域;
} node;
node list;

int Read_FILE(node* L);  //讀文件;
int Save_FILE(node* L);  //保存文件;
void Catalogue();  //目錄的函數(shù);

void Add_Printf();  //增加學(xué)生信息界面;
void Add(node* L,node e);  //實現(xiàn)增加信息的功能;

void Delete(node* L);  //刪除學(xué)生信息輸出界面;
void dodelete(node* s);  //實現(xiàn)刪除學(xué)生信息;

void Fix(node* L);  //修改學(xué)生信息;

void Search(node* L);  //查詢學(xué)生信息的輸出界面;
node* Search_id(int id,node* L);  //實現(xiàn)按學(xué)號查詢學(xué)生信息;
node* Search_in(char name[],node* L);  //實現(xiàn)按姓名查詢學(xué)生信息;

void Printf(node* L);  //實現(xiàn)輸出學(xué)生信息的功能;
void Printf_();  //界面;


void Sort(node* L);  //排序;
int cmpbsum(node * L);
int cmpssum(node * L);
int cmps1(node * L);
int cmpb1(node * L);
int cmps2(node * L);
int cmpb2(node * L);
int cmps3(node * L);
int cmpb3(node * L);
int cmpssave(node * L);
int cmpbave(node * L);



void Goodbye();  //退出系統(tǒng);s


int main()
{
    int choice=0;
    int go;
    while(1)
    {
        Catalogue();
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:
            Add_Printf();
            break;
        case 2:
            Delete(&list);
            break;
        case 3:
            Fix(&list);
            break;
        case 4:
            Search(&list);
            break;
        case 5:
            Printf(&list);
            break;
        case 6:
            Sort(&list);
            break;
        case 0:
            Goodbye();
            break;
        }
        printf("是否繼續(xù)操作?(用1表示Yes,用0表示No\n)");
        scanf("%d",&go);
        if(go==0)
        {
            break;
        }
    }
    return 0;
}

void Catalogue()
{
    system("cls");  //清屏;
    printf("************************\n");
    printf("************************\n");
    printf("*****1.增加學(xué)生信息*****\n");
    printf("*****2.刪除學(xué)生信息*****\n");
    printf("*****3.修改學(xué)生信息*****\n");
    printf("*****4.查詢學(xué)生信息*****\n");
    printf("*****5.輸出學(xué)生信息*****\n");
    printf("*****6.排序?qū)W生信息*****\n");
    printf("*****0.退出管理系統(tǒng)*****\n");
    printf("************************\n");
    printf("************************\n");
    printf("\n");
    printf("請輸入您想實現(xiàn)的功能對應(yīng)的編號:");
}

int Read_FILE(node* L)  //讀取文件;
{
    FILE* fpRead = fopen("D:\\code\\student\\student_information.txt","r");  //打開文件   //r,文件必須存在,只讀
    node st;  //創(chuàng)建一個st節(jié)點,用來存放讀出來的數(shù)據(jù);
    node* s;  //創(chuàng)建一個s節(jié)點,作用:把數(shù)據(jù)讀出來后用來連接的;
    node* t = L;  //把L表的頭節(jié)點賦值給t;       //通過st存放數(shù)據(jù)再把數(shù)據(jù)傳給s,通過s插入到t之后,t繼續(xù)遍歷;
    if(fpRead == NULL)
    {
        printf("文件打開失??!");
        return 0;
    }
    while(fscanf(fpRead,"%d %s %d %d %d %d %lf ",&st.ID,&st.Name,&st.Score1,&st.Score2,&st.Score3,&st.sum,&st.average)!=EOF)
    {
        s = (node*)malloc(sizeof(node));  //申請內(nèi)存;
        *s = st;
        //尾插法;
        t->next = s;
        t = s;
        t->next = NULL;
    }
    fclose(fpRead);
    return 1;
}

int Save_FILE(node* L)  //保存文件;
{
    FILE* fpWrite = fopen("D:\\code\\student\\student_information.txt","w+");  //w+s,文件存在截斷為0;不存在就創(chuàng)建;
    if(fpWrite == NULL)
    {
        printf("文件打開失??!");
        return 0;
    }
    node* p = L->next;
    while(p != NULL)
    {
        fprintf(fpWrite,"%d %s %d %d %d %d %lf\n",p->ID,p->Name,p->Score1,p->Score2,p->Score3,p->sum,p->average);
        p = p->next;
    }
    fclose(fpWrite);
    return 1;
}

void Add_Printf()  //增加學(xué)生信息的輸出界面;
{
    system("cls");
    node st;
    printf("請輸入學(xué)生的信息。\n");
    printf("請輸入學(xué)生學(xué)號:\n");
    scanf("%d",&st.ID);
    printf("請輸入學(xué)生姓名:\n");
    scanf("%s",&st.Name);
    printf("請輸入學(xué)生的高數(shù)成績:\n");
    scanf("%d",&st.Score1);
    printf("請輸入學(xué)生的思修成績:\n");
    scanf("%d",&st.Score2);
    printf("請輸入學(xué)生的專業(yè)課成績:\n");
    scanf("%d",&st.Score3);
    Add(&list,st);
}


void Add(node* L,node e)  //實現(xiàn)增加學(xué)生信息的功能;
{
    //頭插法;
    node* p = L;
    node* s = (node*)malloc(sizeof(node));
    *s = e;

    s->next = p->next;
    p->next = s;
    s->sum = s->Score1 + s->Score2 + s->Score3;
    s->average = (double)(s->Score1 + s->Score2 + s->Score3)/3.0;
    Save_FILE(L);  //增加之后要保存呀;
}

node* Search_id(int id,node* L)  //實現(xiàn)按學(xué)號查詢學(xué)生信息;
{
    node* p = L;
    while(p->next != NULL)
    {
        if(p->next->ID == id)
        {
            return p;
        }
        p = p->next;
    }
    return p->next;
}
node* Search_in(char name[],node* L)  //實現(xiàn)按姓名查詢學(xué)生信息;
{
    node* p = L;
    while(p->next != NULL)
    {
        if(strcmp(name,p->next->Name) == 0)  //strcmp(str1,str2) 若str1 str2相等,則返回0;
        {
            return p;
        }
        p = p->next;
    }
    return p->next;
}
void Search(node* L)  //查找學(xué)生信息的輸出界面;
{
    system("cls");
    int choice = 0;
    printf("如按學(xué)號查找請輸入‘1’ \n");
    printf("如按姓名查找請輸入‘0’ \n");
    scanf("%d",&choice);
    int id;
    char name[30];
    node* st;
    if(choice == 1)
    {
        printf("請輸入待查詢的學(xué)號:\n");
        scanf("%d",&id);
        st = Search_id(id,L);

        if(st == NULL)
        {
            printf("系統(tǒng)中并無此人!\n");
        }
        else
        {
            st = st->next;
            printf("——————————————————————————————————————————\n");
            printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|總分\t|平均分\t|\n");
            printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
            printf("——————————————————————————————————————————\n");
        }
    }
    else
    {
        printf("請輸入待查詢的姓名:\n");
        scanf("%s",name);
        st = Search_in(name,L);

        if(st == NULL)
        {
            printf("系統(tǒng)中并無此人!\n");
        }
        else
        {
            st=st->next;
            printf("——————————————————————————————————————————\n");
            printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|總分\t|平均分\t|\n");
            printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
            printf("——————————————————————————————————————————\n");
        }
    }
}

void Delete(node* L)  //刪除學(xué)生信息的輸出界面;
{
    system("cls");
    int id;
    node* p;
    printf("請輸入要刪除的學(xué)生的學(xué)號:\n");
    scanf("%d",&id);
    node* st = Search_id(id,L);
    p = st;
    if(st == NULL)
    {
        printf("系統(tǒng)中并無此人!\n");
        return 0;
    }
    st =st->next;
    printf("——————————————————————————————————————————\n");
    printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|總分\t|平均分\t|\n");
    printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
    printf("——————————————————————————————————————————\n");
    dodelete(p);
    printf("刪除成功!");
    Save_FILE(L);  //保存;
}

void dodelete(node* s)  //實現(xiàn)刪除學(xué)生信息;
{
    node* t = s->next;
    s->next = t->next;
    t->next = NULL;
    free(t);  //釋放 防止成為野指針;
}

void Fix(node* L)
{
    system("cls");
    int id;
    printf("請輸入要修改的學(xué)生的學(xué)號:\n");
    scanf("%d",&id);
    node* st = Search_id(id,L);
    if(st == NULL)
    {
        printf("系統(tǒng)中并無此人!\n");
        return 0;
    }
    st = st->next;
    int choice = 0;
    while(1)
    {
        system("cls");
        printf("——————————————————————————————————————————\n");
        printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|總分\t|平均分\t|\n");
        printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
        printf("——————————————————————————————————————————\n");
        printf("1.修改學(xué)生學(xué)號\n");
        printf("2.修改學(xué)生姓名\n");
        printf("3.修改學(xué)生高數(shù)成績\n");
        printf("4.修改學(xué)生思修成績\n");
        printf("5.修改學(xué)生專業(yè)課成績\n");
        printf("\n");
        printf("請輸入待修改數(shù)據(jù)的編號:\n");
        scanf("%d",&choice);

        switch(choice)
        {
        case 1:
            printf("請輸入學(xué)號:\n");
            scanf("%d",&st->ID);
            break;
        case 2:
            printf("請輸入姓名:\n");
            scanf("%s",&st->Name);
            break;
        case 3:
            printf("請輸入高數(shù)成績:\n");
            scanf("%d",&st->Score1);
            break;
        case 4:
            printf("請輸入思修成績:\n");
            scanf("%d",&st->Score2);
            break;
        case 5:
            printf("請輸入專業(yè)課成績:\n");
            scanf("%d",&st->Score3);
            break;
        }
        printf("是否繼續(xù),繼續(xù)請輸入1,否則輸入0\n");
        scanf("%d",&choice);
        if(choice == 0)
        {
            Save_FILE(L);
            break;
        }
    }
    printf("修改后的信息為:\n");
    printf("——————————————————————————————————————————\n");
    printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|\n");
    printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3);
    printf("——————————————————————————————————————————\n");
    Save_FILE(L);  //保存;
}


void Printf_()   //界面
{
    printf("——————————————————————————————————————————\n");
    printf("|學(xué)號\t|姓名\t|高數(shù)\t|思修\t|專業(yè)課\t|總分\t|平均分\t|\n");
    printf("——————————————————————————————————————————\n");
}

void Printf(node* L)  //功能
{
    system("cls");
    node* p = L->next;
    Printf_();
    if(p != NULL)
    {
        while(p != NULL)
        {
            printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",p->ID,p->Name,p->Score1,p->Score2,p->Score3,p->sum,p->average);
            printf("——————————————————————————————————————————\n");
            p =p->next;
        }
    }
}
int cmps1(node * L)   //高數(shù)升序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score1 >p->Score1)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmpb1(node * L)   //高數(shù)降序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score1< p->Score1)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmps2(node * L)   //思修升序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score2 >p->Score2)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmpb2(node * L)   //思修降序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score2< p->Score2)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmps3(node * L)   //專業(yè)課升序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score3 >p->Score3)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}

int cmpb3(node * L)   //專業(yè)課降序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->Score3< p->Score3)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmpssum(node * L)   //總分升序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->sum >p->sum)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmpbsum(node * L)  //總分降序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
            if(q->sum< p->sum)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
        tail = tail->next;
        q = tail->next;
        p = q->next;
    }
    return L;
}
int cmpsave(node * L)   //平均分升序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->average >p->average)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
int cmpbave(node * L)   //平均分降序;
{
    int i,count = 0, num;
    node *p, *q, *tail;
    p = L;
    while(p->next != NULL)
    {
        count++;
        p = p->next;
    }
    for(i = 0; i< count - 1; i++)
    {
        num = count - i - 1;
        q = L->next;
        p = q->next;
        tail = L;
        while(num--)
        {
            if(q->average< p->average)
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
        }
    }
    return L;
}
void Sort(node* L)
{

    system("cls");
    int choice = 1;
    int a=0;
    printf("0.按高數(shù)升序排列\(zhòng)n");
    printf("1.按高數(shù)降序排列\(zhòng)n");
    printf("2.按思修升序排列\(zhòng)n");
    printf("3.按思修降序排列\(zhòng)n");
    printf("4.按專業(yè)課升序排列\(zhòng)n");
    printf("5.按專業(yè)課序排列\(zhòng)n");
    printf("6.按三科總分升序排列\(zhòng)n");
    printf("7.按三科總分降序排列\(zhòng)n");
    printf("8.按平均分升序排列\(zhòng)n");
    printf("9.按平均分降序排列\(zhòng)n");
    printf("\n");
    printf("請輸入想要實現(xiàn)的功能的數(shù)字編號\n");
    scanf("%d",&a);
    switch(a)
    {
    case 0:
    {
        cmps1(L);
        break;
    }


    case 1:
    {
        cmpb1(L);
        break;
    }


    case 2:

    {
        cmps2(L);
        break;
    }


    case 3:
    {
        cmpb2(L);
        break;
    }

    case 4:
    {
        cmps3(L);
        break;
    }

    case 5:
    {
        cmpb3(L);
        break;

    }

    case 6:
    {
        cmpssum(L);
        break;
    }


    case 7:
    {
        cmpbsum(L);
        break;
    }
    case 8:
    {
        cmpsave(L);
        break;
    }
    case 9:
    {
        cmpbave(L);
        break;
    }
    }


    Printf_();   //界面
    Printf(L);  //功能
    Save_FILE(L);  //保存;

}



void Goodbye()
{
    system("cls");
    printf("已退出系統(tǒng),歡迎您下次使用!\n");
    exit(0);
}



你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站建設(shè)及推廣,對成都加固等多個領(lǐng)域擁有豐富的網(wǎng)站制作經(jīng)驗的網(wǎng)站建設(shè)公司。

網(wǎng)頁題目:C語言—學(xué)生管理系統(tǒng)(鏈表實現(xiàn),完整代碼)-創(chuàng)新互聯(lián)
本文路徑:http://muchs.cn/article22/eihcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、標簽優(yōu)化、ChatGPT、網(wǎng)站設(shè)計公司定制開發(fā)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)