学生成绩管理系统C++

#include <iostream>
#include <cmath>
#include <cstring>
#include <string.h>
#include <stdlib.h>
typedef long long ll;
typedef long long LL;
using namespace std;
/**************************************
 6、【学生成绩管理】
 实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
 能实现对学生信息的简单管理。
 具体要求:
 建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
 程序运行时显示一个简单的菜单,例如:
 (1):信息输入(INPUT)
 (2):总分统计(COUNT)
 (3):总分排序(SORT)
 (4):查询(QUERY)
 其中:
 (1):对4个学生的信息进行输入;
 (2):对每个学生的3门课程统计总分;
 (3):对4个学生的总分按降序排序并显示出来;
 (4):查询输入一个学号后,显示出该学生的有关信息;
 数据结构:
 struct student
 {
 int num;//学号
 char name[20];//姓名
 int foxscore;//fox成绩
 int cscore;//C语言
 int englishscore;//英语成绩
 struct student *next;
 };
 操作:1.成绩信息输入;
 2.统计总分;
 3.排序;
 4.查询
 ***************************************/

typedef struct student
{
    int num;
    string name;
    int foxscore;
    int cscore;
    int englishscore;
    int sum_score;
    student *next;
}student,*linklist;

void Create_linklist(linklist &h)
{
    linklist p,q;
    int numm;
    string na;
    int fox;
    int cc;
    int english;
    h = new student();
    p = h;
    cout<<"请输入学号,姓名,fox成绩,c语言成绩,英语成绩,-1结束."<<endl;
    while(cin>>numm && numm!=-1)
    {
        cin>>na>>fox>>cc>>english;
        q=new student();
        q->num = numm;
        q->name = na;
        q->foxscore = fox;
        q->cscore = cc;
        q->englishscore = english;

        p->next = q;
        p = q;
    }
    p->sum_score=p->foxscore+p->cscore+p->englishscore;
    p->next = NULL;

    p = h->next;
}

void Display(linklist h)
{
    linklist p;
    p = h->next;
    while(p)
    {
        cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl;
        p = p->next;
    }
}

void Tongji(linklist h)
{
    linklist p;
    p = h->next;
    int sum;
    while(p)
    {
        sum = 0;
        sum = sum+p->cscore+p->englishscore+p->foxscore;
        p->sum_score = sum;
        cout<<p->name<<"的总分是:"<<sum<<endl;
        p = p->next;
    }
}

void Score_sort(linklist &h)
{
    linklist p,q;
    int t;
    t=5;
    while(t--)
    {
        p = h->next;
        while(p && p->next)
        {
            if(p->sum_score<p->next->sum_score)
            {
                q = new student();
                q->num = p->num;
                q->name = p->name;
                q->cscore = p->cscore;
                q->englishscore = p->englishscore;
                q->foxscore = p->foxscore;
                q->sum_score = p->sum_score;

                p->num = p->next->num;
                p->name = p->next->name;
                p->cscore = p->next->cscore;
                p->englishscore = p->next->englishscore;
                p->foxscore = p->next->foxscore;
                p->sum_score = p->next->sum_score;

                p->next->num = q->num;
                p->next->name = q->name;
                p->next->cscore = q->cscore;
                p->next->englishscore = q->englishscore;
                p->next->foxscore = q->foxscore;
                p->next->sum_score = q->sum_score;
            }
            p = p->next;
        }
    }
    cout<<"已排序,顺序为:"<<endl;
    p=h->next;
    while(p)
    {
        cout<<"学号:"<<p->num<<" 姓名:"<<p->name<<" fox成绩:"<<p->foxscore<<" c语言成绩:"<<p->cscore<<" english成绩:"<<p->englishscore<<"总分为:"<<p->sum_score<<endl;
        p=p->next;
    }
}

void Search(linklist h)
{
    int number;
    cout<<"请输入要查找的学号:";
    cin>>number;
    linklist p = h->next;
    while(p)
    {
        if(p->num == number)
        {
            cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
            return ;
        }
        p = p->next;
    }
    cout<<"没有此人信息。"<<endl;
}

void Score_search(linklist h)
{
    int score;
    cout<<"请输入要查找的总分:";
    cin>>score;
    linklist p = h->next;
    while(p)
    {
        if(p->sum_score == score)
        {
            cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
            return ;
        }
        p = p->next;
    }
    cout<<"没有此人信息。"<<endl;
}


void Copy(linklist &a,linklist h)
{
    a = h;
}

void Name_search(linklist h)
{
    string str;
    cout<<"请输入要查找的名字:"<<endl;
    cin>>str;
    linklist p = h->next;
    while(p)
    {
        if(p->name == str)
        {
            cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
            return ;
        }
        p = p->next;
    }
    cout<<"没有此人的信息。"<<endl;
}

void C_sum(linklist h)
{
    linklist p;
    int sum = 0;
    p = h->next;
    while(p)
    {
        sum += p->cscore;
        p = p->next;
    }
    cout<<"所有人的C语言总分为:"<<sum<<endl;
}
void Fox_sum(linklist h)
{
    linklist p;
    int sum = 0;
    p = h->next;
    while(p)
    {
        sum += p->foxscore;
        p = p->next;
    }
    cout<<"所有人的fox总分为:"<<sum<<endl;
}

void English_sum(linklist h)
{
    linklist p;
    int sum = 0;
    p = h->next;
    while(p)
    {
        sum += p->englishscore;
        p = p->next;
    }
    cout<<"所有人的英语总分为:"<<sum<<endl;
}

void Add(linklist &h)
{
    linklist p,q;
    int numm;
    string na;
    int fox;
    int cc;
    int english;
    p = h;
    while(p->next)
    { p = p->next;}
    cout<<"请输入学号,姓名,fox成绩,c语言成绩,英语成绩."<<endl;
    cin>>numm>>na>>fox>>cc>>english;
    q=new student();
    q->num = numm;
    q->name = na;
    q->foxscore = fox;
    q->cscore = cc;
    q->englishscore = english;
    p->next = q;
    int sum = 0;
    p = p->next;
    sum = sum+p->cscore+p->englishscore+p->foxscore;
    p->sum_score = sum;
    p->next = NULL;
    cout<<numm<<"插入成功。"<<endl;
}

void Delete(linklist &h)
{
    int number;
    cout<<"请输入要删除的人的学号:"<<endl;
    cin>>number;
    linklist p,q;
    p = h;
    while(p->next)
    {
        if(p->next->num == number)
        {
            q = p->next;
            p->next = p->next->next;
            free(q);
            cout<<number<<"已经删除"<<endl;
        }
        p = p->next;
    }
}

void Error()
{
    cout<<"请输入正确的选项."<<endl;
}

void menu()
{
    /*
     (1):信息输入(INPUT)
     (2):总分统计(COUNT)
     (3):总分排序(SORT)
     (4):查询(QUERY
     */
    linklist head = NULL;
    cout<<"实验一:【学生成绩管理】"<<endl;
    int op;
    while(1)
    {
        cout<<"(1):信息输入(INPUT)"<<endl;
        cout<<"(2): 插入一个人的信息(ADD_IN)"<<endl;
        cout<<"(3): 删除一个人的信息(DELETE)"<<endl;
        cout<<"(4):学号查询(QUERY)"<<endl;
        cout<<"(5): 姓名查询(NAME_SEARCH)"<<endl;
        cout<<"(6): 总分查询(SCORE_SEARCH)"<<endl;
        cout<<"(7): 英语成绩合计(ENGLISH_SUM)"<<endl;
        cout<<"(8): fox成绩合计(FOX_SUM)"<<endl;
        cout<<"(9): C语言成绩合计(C_SUM)"<<endl;
        cout<<"(10):总分统计(COUNT)"<<endl;
        cout<<"(11):总分排序(SORT)"<<endl;
        cout<<"(12): 拷贝(显示全部)(COPY)"<<endl;
        cout<<"(0): 退出(EXIT)"<<endl;
        cout<<"请输入您要进行的操作,0表示结束"<<endl;
        cin>>op;
        if(!op)
            break;
        if(op==1)
        {
            Create_linklist(head);
            cout<<"链表创建完毕,您输入的学生信息是:"<<endl;
            Display(head);
            cout<<endl<<endl;
            continue;
        }
        if(op == 2)
        {
            Add(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==3)
        {
            Delete(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==4)
        {
            Search(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==5)
        {
            Name_search(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==6)
        {
            Score_search(head);
            cout<<endl<<endl;
            continue;
        }
        if(op == 7)
        {
            English_sum(head);
            cout<<endl<<endl;
            continue;
        }
        if(op == 8)
        {
            Fox_sum(head);
            cout<<endl<<endl;
            continue;
        }
        if(op == 9)
        {
            C_sum(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==10)
        {
            Tongji(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==11)
        {
            Score_sort(head);
            cout<<endl<<endl;
            continue;
        }
        if(op==12)
        {
            linklist copier;
            Copy(copier,head);
            cout<<"拷贝完成!"<<endl<<"拷贝后的链表为:"<<endl;
            Display(copier);
            cout<<endl<<endl;
            continue;
        }
        else
        {
            Error();
            cout<<endl<<endl;
            continue;
        }
    }
}

int main()
{
    /*
     学号,  姓名, fox成绩,c语言成绩,   英语成绩,   总分
     000001 li       1     2           3            6
     000002 yi       3     4           5            12
     000003 xin      1     1           1             3
     000004 liyixin 100     100          100        300

     fox合计   c合计  英语合计
     105     107   109
     */
    menu();
    cout<<"实验完成!!!!!!!!!!!!!!!!"<<endl;
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_37486501/article/details/80974079