代码注释较少,若给各位的阅读带来不便,请谅解
本人蒟蒻一枚,写得也是很不容易了,请多多鼓励

#include<bits/stdc++.h>
using namespace std;
void run(); //运行 
void menu();//菜单 
void Read();//读入 
void Put();//全部输出 
void Find();//查询 
void Insert();//添加 
void Delete(); //删除 
void Len();//输出长度 
void Save();//保存 
void Empty();//清空 
int Lenth();//求长度 
void readData();//提取数据 
void Data();//读取数据 
struct node{
    int number;
    char name[20];
    int ch;
    int ma;
    int en;
    int to = 0;
    double av;
    node *next;
}*head, *p, *r, a; 
int choose, member;
bool f = 1, flag;
int main()
{
    head = new node;
    r = head;
    system("color 74");
    cout<<"欢迎使用成绩查询系统\nMADE BY DIEGO\n";
    system("pause");
    system("cls");
    Data();
    system("cls");
    while(f)
    {
        system("color f1");
        run();
    }
    return 0;
}
void run()
{
    menu();
    system("cls");
    return;
}
void menu()
{
    cout<<setw(50)<<"MENU\n";
    cout<<"1:录入; 2:查询; 3:添加; 4:删除; 5:清空; 6:显示所有; 7:学生人数  8:保存并退出\n";
    cout<<"请输入您的选择:";
    scanf("%d", &choose);
    switch(choose)
    {
        case 1:Read();break;
        case 2:Find();break;
        case 3:Insert();break;
        case 4:Delete();break;
        case 5:Empty();break;
        case 6:Put();break;
        case 7:Len();break; 
        case 8:Save();break; 
    }
    return;
}
void Read()
{
    system("color f2");
    cout<<"请输入人数:";
    scanf("%d", &member);
    cout<<"输入顺序为:学号 姓名(长度不超过20) 语文分数 数学分数 英语分数\n"; 
    for(int i=1; i<=member; ++i)
    {
        scanf("%d%s%d%d%d", &a.number, &a.name, &a.ch, &a.ma, &a.en);
        p = new node;
        p->number = a.number;
        strcpy(p->name, a.name);
        p->ch = a.ch;
        p->ma = a.ma;
        p->en = a.en;
        p->to = a.ch+a.en+a.ma;
        p->av = p->to/3.0;
        p->next = NULL;
        r->next = p;
        r = p;
    }
    cout<<"录入完成\n\n";
    system("pause"); 
    return;
}
void Len()
{
    system("color f3");
    cout<<"学生人数为:";
    int n = 0;
    node *s = head;
    while(s != NULL)
    {
        ++n;
        s = s->next;
    }
    cout<<n-1<<endl<<endl;
    system("pause"); 
    return;
}
void Delete()
{
    int g; 
    system("color f5");
    cout<<"请输入删除结点编号:";
    scanf("%d", &g);
    node *x, *s;
    x = head;
    int j = 0;
    while(x->next!=NULL && j<g-1)
    {
        x = x->next;
        ++j;
    }
    if(x->next == NULL)
        printf("cannot find this one");
    else
    {
        s = x->next;
        x->next = s->next;
        free(s);
        cout<<"删除成功\n\n";
    }
    system("pause");
    return;
}
void Insert()
{
    int d;
    system("color f6");
    cout<<"请输入需添加的后一个结点位置:";
    scanf("%d", &d);
    cout<<"请输入数据(格式同录入数据):";
    node *x, *s;
    x = head;
    int j = 0;
    while(x!=NULL && j<d-1)
    {
        x = x->next;
        ++j;
    }
    if(x == NULL)
        printf("cannot find this one");
    else
    {
        s = new node;
        scanf("%d%s%d%d%d", &a.number, &a.name, &a.ch, &a.ma, &a.en);
        s->number = a.number;
        strcpy(s->name, a.name);
        s->ch = a.ch;
        s->ma = a.ma;
        s->en = a.en;
        s->to = a.ch+a.en+a.ma;
        s->av = s->to/3.0;
        s->next = x->next;
        x->next = s;
        cout<<"添加成功\n\n"; 
    }
    system("pause");
    return;
}
void Put()
{
    system("color f9");
    if(Lenth() == 0)
    {
        cout<<"无数据\n\n";
        system("pause");
        return;
    }
    cout<<"输出顺序为:学号 姓名 语文分数 数学分数 英语分数 总分 平均分\n";
    p = head->next;
    while(p->next != NULL)
    {
        printf("%d ", p->number);
        cout<<p->name;
        printf(" %d %d %d %d %.2f\n", p->ch, p->ma, p->en, p->to, p->av);
        p = p->next;
    }
    printf("%d ", p->number);
    cout<<p->name;
    printf(" %d %d %d %d %.2f\n", p->ch, p->ma, p->en, p->to, p->av);
    cout<<"\n";
    system("pause");
    return;
}
void Find()
{
    int pi;
    system("color f8");
    cout<<"请输入结点位置:";
    scanf("%d", &pi);
    node *s = head->next;
    int j = 1;
    while(s!=NULL && j<pi)
    {
        s = s->next;
        ++j;
    }
    if(s!=NULL && j==pi)
    {
        printf("%d ", s->number);
        cout<<s->name;
        printf(" %d %d %d %d %.2f\n", s->ch, s->ma, s->en, s->to, s->av);
    }
    else
        cout<<"cannot find this one";
    cout<<"\n\n";
    system("pause");
    return;
}
int Lenth()
{
    int n = 0;
    node *s = head;
    while(s != NULL)
    {
        ++n;
        s = s->next;
    }
    return n-1;
}
void Empty()
{
    system("color f5");
    node *x, *s;
    x = head;
    while(x->next!=NULL)
    {
        s = x->next;
        x->next = s->next;
        free(s);
    }
    free(x);
    cout<<"系统已清空\n\n";
    system("pause");
    return;
}
void Save()
{
    system("color 7C");
    freopen("score.txt", "w", stdout);
    printf("%d\n", Lenth());
    p = head->next;
    while(p->next != NULL)
    {
        printf("%d ", p->number);
        cout<<p->name;
        printf(" %d %d %d %d %.2f\n", p->ch, p->ma, p->en, p->to, p->av);
        p = p->next;
    }
    printf("%d ", p->number);
    cout<<p->name;
    printf(" %d %d %d %d %.2f\n", p->ch, p->ma, p->en, p->to, p->av);
    fclose(stdout);
    freopen("CON", "w", stdout);
    cout<<"保存成功\n\n蒟蒻代码,感谢使用\n";
    f = 0;
    return;
}
void Data()
{
    system("color 70");
    cout<<"是否读取数据?(1 是,0 否):";
    cin>>flag;
    if(flag)
    {
        readData();
        cout<<"读取成功\n";
    }
    else
        cout<<"未读取数据\n";
    system("pause");
    return;
}
void readData()
{
    freopen("score.txt", "r", stdin);
    scanf("%d", &member);
    for(int i=1; i<=member; ++i)
    {
        scanf("%d%s%d%d%d%d%f", &a.number, &a.name, &a.ch, &a.ma, &a.en, &a.to, &a.av);
        p = new node;
        p->number = a.number;
        strcpy(p->name, a.name);
        p->ch = a.ch;
        p->ma = a.ma;
        p->en = a.en;
        p->to = a.to;
        p->av = a.av;
        p->next = NULL;
        r->next = p;
        r = p;
    }
    fclose(stdin);
    freopen("CON", "r", stdin);
    return;
}