C语言学生成绩管理系统,运行不出来如何改正错误,求解

要求:1.初次录入学生信息
2. 增加一名学生的信息
3. 学生信息浏览;
4. 信息查询(按学号查)
5. 信息查询(按姓名查)
6. 信息排序(按总分降序)
7. 信息排序(按姓名排序)
8. 信息删除(给定学号,删除该学生信息)
9. 信息修改(给定学号,修改该学生信息)
0. 退出

次要功能
10 自己加一个特色功能

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct st
{
char Name[20];
int Num;
float score[4];
float total;
float aver;
}STU;

int menu(void);
void readscore(struct st STU[],int n);
void readscore1(struct stu[],int n);
void printfscore(struct st STU[],int n);
void searchbynum(struct st STU[],int n);
void searchbyname (struct st STU[],int n);
void sortbyscore(struct st STU[],int n,int(*compare)(float a,float b));
void ascending(float a,float b);
void descending(float a,float b);
void sortbyname(struct st STU[],int n);
void de1(struct st STU[],int n);
void edit(struct st STU[],int n);
void aversumofeverystudent(struct st STU[],int n);

int main(void)
{
char ch;
int n=0;
switch(ch)
{
case 0:
printf("End of program!");
exit(0);
case 1:
readscore(STU,n);
break;
case 2:
n++;
readscore1(STU,n);
break;
case 3:
printscore(STU,n);
break;
case 4:
searchbynum(STU,n);
break;
case 5:
searchbyname(STU,n);
break;
case 6:
sortbyscore(STU,n,descending);
printf("\nsort in desending order by score:\n");
printscore(STU,n);
break;
case 7:
sortbyname(STU,n);
printf("\nsort in dictionary order by name:\n");
break;
case 8:
de1(STU,n);
printscore(STU,n);
break;
case 9:
edit(STU,n);
printscore(STU,n);
break;
case 10:
aversumofeverystudent(STU,n);
break;
default:
printf("input error!\n");
}
return 0;
}
int menu(void)
{
int itemselected;
printf("");
printf("学生成绩系统管理\n");
printf("0.退出\n");
printf("1.录入学生信息\n");
printf("2.增加一名学生信息\n");
printf("3.学生信息浏览\n");
printf("4.按学号查询学生信息\n");
printf("5.按姓名查询学生信息\n");
printf("6.按总分降序\n");
printf("7.按姓名排序\n");
printf("8.删除学生信息\n");
printf("9.修改学生信息\n");
printf("10.计算每个学生的平均分\n");
printf("
*");
printf("Input your choice:");
scanf("%d",&itemselected);
return itemselected;
}

void readscore(struct st STU[],int n)
{
int i;
for(i=0; i<n; i++)
scanf("%d%s%",&STU[i].num,&STU[i].name);
getchar();
system("pause");
}

void readscore1(struct st STU[],int n);
{
int i=n,j,flag,m=0;
printf("请输入待增加的学生人数:\n");
scanf("%d",&m);
if(m>0)
{
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d位学生的学号:\n",i+1);
scanf("%s",stu[i],stuid);
for(j=0;j<i;j++)
{
if(strcmp(stu[i].stuid,stu[j].stuid)==0)
{
printf("该学号已经存在,请重新输入!\n");
flag=1;
break;
}
}
}

    }
}

}
void printfscore(struct st STU[],int n)
{
int i;
for(i=0; i<n; i++)
printf("%d%s\n",STU[i].num,STU[i].name);
system("pause");
}

void searchbynum(struct st STU[],int n);
{
int num,i;
printf("请输入需要查询的学号:");
scanf("%d",&num);
getchar();
for(i=0; i<n; i++)
if(STU[i].num==num)
{
printf("%d%s",STU[i].num,STU[i].name);
break;
}
if(i==n)
printf("not found!\n");
system("pause");
}

void searchbyname(struct st STU[],int n)
{
int num,i;
printf("请输入要查询的姓名:");
scanf("%d",&num);
gether();
for(i=0;i<n;i++)
if(STU[i].Num==num)
{
printf("%d%s",STU[I].num,STU[i].score);
break;
}
if(i==n)
printf("not found!\n");
}

void sortbyscore(struct st STU[],int n)
{
int i,j;
struct st temp;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1; j++)
{

        if(STU[j].scoreChinese+y[j].scoreMath+y[j].scoreEnglish>y[j+1].scoreChinese+y[j+1].scoreMath+y[j+1].scoreEnglish)
        {

            temp=[j];
            STU[j]=STU[j+1];
            STU[j+1]=temp;

        }
    }
}
for(j=0; j<n; j++)
{
    STU[j].scoretotal=STU[j].scoreChinese+STU[j].scoreMath+STU[j].scoreEnglish;//计算总分//
    printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
    printf("----------------------------------------------------------------------------------------\n");
    printf("%d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \n",STU[j].num,STU[j].name,STU[j].scoreChinese,STU[j].scoreMath,STU[j].scoreEnglish,STU[j].scoretotal);

}
system("pause");    

}

void sortbyname(struct st STU[],int n)
{
int i,j,k,max=0;

for(i=0; i<n; i++)
{
    scanf("%d%s",&STU[i].num,&STU[i].name);
}
k=STU[0].name;
for(i=1; i<n; i++)
{
    if(strcmp(k,STU[i].name)<'0')
        k=STU[i].name;
}
j=k;
printf("%d %s %.1f %.1f %.1f",STU[j].num,STU[j].name);

system("pause");

}
void de1(struct st STU[],int n)
{
int i,j,temp=0;
int c;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d",&c);
for(i=0; i<=n; i++)
{
if(STU[i].num==c)
{
temp=1;
for(j=i; j<n-1; j++)
{
STU[j]=STU[j+1];
}
}
}
if(temp==0)
printf("该学生不存在\n");
if(temp==1)
{
printf("删除成功\n");
n--;
for(i=0; i<n; i++)
{
printf("%d %s ",STU[j].num,STU[j].name);
}
}
system("pause");
}

void edit(sturct st STU[],int n)
{
int i,c;
printf("请输入你要修改的学生的学号:");
scanf("%d",&c);
for(i=0;i<n;i++)
{
if(c==STU[i].num)
{
printf("请重新录入该学生信息\n");
scanf("%d %s ",&STU[i].num,&STU[i].name);
}
}
}

void aversumofeverystudent(struct st STU[],int n)
{
int i;
printf("total average\n");
for(i=0;i<sumofeverystudent;i++)
{
printf("%s:%5d%.2f\n",stu[i].name,total[i],(double)total[i]/sumofeverystudent);
}
}

给你改好了。功能都一样,有些变量名换了一下。

img

#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define len sizeof(struct student)
#define N 30

typedef struct student {
    char number;
    char name[20];
    int score[10];
    int total;

} student;

void menu();
void add(student stu[], int i, int m);                //添加
void output(student stu[], int i, int m);             //浏览
void search_by_number(student stu[], int i, int m);   //按学号查询信息
void search_by_name(student stu[], int i, int m);     //按姓名查询信息
void sortjiang_by_total(student stu[], int i, int m); //按总分降序
void sort_by_name(student stu[], int i, int m);       //按姓名排序
void deleted_by_number(student stu[], int i, int m); //给定学号,删除该学生信息
void change_by_number(student stu[], int i, int m); //给定学号,修改该学生信息
void sortsheng_by_total(student stu[], int i, int m); //按总分升序

//主函数
int main() {
    int q, w, m; //记录用户输入的功能选项,人数,科目数量
    student stu[w];
    int i, j, s; ////i、j作为学生人数和科目门数的循环变量,s为标记变量
    int first=0;
P:
    menu();
   
    if(first==0){
       q=1; 
     first=1;
    }else{
      printf("请选择您所需要的功能:");
      scanf("%d", &q);
     
    }
   
    //查错
    if (q < 0 || q > 10) {
        do {
            printf("请输入正确的功能序号:");
            scanf("%d", &q);
        } while (q < 0 || q > 10);
    }
   
       

    if (q == 0) {
        printf("感谢您使用本系统!再见!");
        exit(0);
    }

    switch (q) {
    case 0:
        break;
    case 1:
        if (q == 1) //首次录入信息
            printf("请输入学生人数:");
        scanf("%d", &w);
        printf("请输入科目门数:");
        scanf("%d", &m);
        for (i = 0; i < w; i++) { //循环录入学号和姓名
            printf("请请输入学号,姓名,各科成绩:\n");
            scanf("%d", &stu[i].number);
            scanf("%s", stu[i].name);
            for (j = 0; j < m; j++) { //循环录入各科成绩
                scanf("%d", &stu[i].score[j]);
            }
        }
        printf("\n  \n");
        s = 0;        //记录首次录入信息完毕
        goto P;       //回到功能菜单
        if (s == 0) { //防止用户重复录入
            do {
                printf("您已经录入过学生信息啦!\n");
                printf("如想增加学生信息,请选择功能2!");
                printf("\n  \n");
            } while (s != 1);
            goto P;
        }
    case 2:
        add(stu, i, m); //添加
        i++;
        printf("\n  \n");
        goto P;
    case 3:
        output(stu, i, m); //浏览
        printf("\n  \n");
        goto P;
    case 4:
        search_by_number(stu, i, m); //按学号查询
        printf("\n  \n");
        goto P;
    case 5:
        search_by_name(stu, i, m); //按姓名查询
        printf("\n  \n");
        goto P;
    case 6:

        sortjiang_by_total(stu, i, m); //按总分降序
        printf("\n  \n");
        goto P;
    case 7:
        sort_by_name(stu, i, m); //按姓名排序
        printf("\n  \n");
        goto P;
    case 8:
        deleted_by_number(stu, i, m); //给定学号,删除该学生信息
        printf("\n  \n");
        goto P;
    case 9:
        change_by_number(stu, i, m); //给定学号,修改该学生信息
        printf("\n  \n");
        goto P;
    case 10:
        sortsheng_by_total(stu, i, m); //按总分升序
        printf("\n  \n");
        goto P;
    }
    return 0;
}
void menu() {

    printf("1.初次录入学生信息2. 增加一名学生的信息3. 学生信息浏览;4. 信息查询(按学号查)5. 信息查询(按姓名查)6. 信息排序(按总分降序)7. 信息排序(按姓名排序)8. 信息删除(给定学号,删除该学生信息)9. 信息修改(给定学号,修改该学生信息)0. 退出\n");
}

void add(student stu[], int i, int m) //添加
{
    int j;
    printf("请输入所添加学生的学号,姓名,各科成绩:\n");
    scanf("%d", &stu[i].number);
    scanf("%s", &stu[i].name);
    for (j = 0; j < m; j++) {
        scanf("%f", &stu[i].score[j]);
    }

 
}

void output(student stu[], int i, int m) //浏览
{
    int j, r;
    for (j = 0; j < i; j++) {
        printf("%d %s", stu[j].number, stu[j].name);
        for (r = 0; r < m; r++) {
            printf(" %d", stu[j].score[r]);
        }
        printf("\n");
    }
   
}

void search_by_number(student stu[], int i, int m) //按学号查询信息
{
    int t, j, y = 1;
    int number;
    printf("请输入您所要查询的学号:");
    scanf("%d", &number);
    for (t = 0; t < i; t++) {
        if (number == stu[t].number) {
            y = 0;
            printf("%d %s", &stu[t].number, &stu[t].name);
            for (j = 0; j < m; j++) {
                printf("%d", &stu[t].score[j]);
            }
            printf("\n");
        }
    }
    if (y == 1) {
        printf("查无信息!");
    }
   
}

void search_by_name(student stu[], int i, int m) //按姓名查询信息
{
    int t, j, y = 1;
    char name;
    printf("请输入您所要查询的姓名:");
    scanf("%d", &name);
    for (t = 0; t < i; t++) {
        if (name == stu[t].name[i]) {
            y = 0;
            printf("%d %s", &stu[t].number, &stu[t].name);
            for (j = 0; j < m; j++) {
                printf("%d", &stu[t].score[j]);
            }
            printf("\n");
        }
    }
    if (y == 1) {
        printf("查无此人!");
    }
    
}

void sortjiang_by_total(student stu[], int i, int m) //按总分降序
{
    student temp;
    int o, k;
    if (m == -1) {
        for (o = 0; o < i; o++) {
            for (k = o + 1; k < i; k++) {
                if (stu[k].total > stu[o].total) {
                    temp = stu[k];
                    stu[k] = stu[o];
                    stu[o] = temp;
                }
            }
        }
        for (o = 0; o < i; o++) {
            printf("%s  ", stu[o].name);
            printf("%d\n", stu[o].total);
        }
    } else {
        for (o = 0; o < i; o++) {
            for (k = o + 1; k < i; k++) {
                if (stu[k].number > stu[o].number) {
                    temp = stu[k];
                    stu[k] = stu[o];
                    stu[o] = temp;
                }
            }
        }
        for (o = 0; o < i; o++) {
            printf("%s  ", stu[o].name);
            printf("%d\n", stu[o].number);
        }
    }
  
}

void sort_by_name(student stu[], int i, int m) //按姓名排序
{
    int j, h, w;
    char k[20];
    for (i = 0; i < w; i++) {
        scanf("%d\t\t%s\t\t", &stu[i].number, &stu[i].name);
        for (h = 0; h < m; h++) {
            scanf("%d", &stu[i].score[j]);
        }
    }
    strcpy(k, stu[0].name);
    for (i = 1; i < w; i++) {
        if (strcmp(k, stu[i].name) < 0)
            strcpy(k, stu[i].name);
    }
    j = k[i];
    printf("%d\t\t%s\t\t", stu[j].number, stu[j].name);
    for (h = 0; h < m; h++) {
        scanf("%d", &stu[j].score[h]);
    }
 
}

void deleted_by_number(student stu[], int i, int m) //给定学号,删除该学生信息
{
    int j, h, w, temp = 0;
    int c;
    printf("请输入需要删除的学生信息的学号:\n");
    scanf("%d", &c);
    for (i = 0; i <= w; i++) {
        if (stu[i].number == c) {
            temp = 1;
            for (j = i; j < w - 1; j++) {
                stu[j] = stu[j + 1];
            }
        }
    }
    if (temp == 0)
        printf("该学生不存在\n");
    if (temp == 1) {
        printf("删除成功\n");
        w--;
        for (i = 0; i < w; i++) {
            printf("%d\t\t%s\t\t", stu[j].number, stu[j].name);
            for (h = 0; h < m; h++) {
                scanf("%d", &stu[j].score[h]);
            }
        }
    }
 
}

void change_by_number(student stu[], int i, int m) //给定学号,修改该学生信息
{
    int c, h, w;
    printf("请输入你要修改的学生的学号:");
    scanf("%d", &c);
    for (i = 0; i < w; i++) {
        if (c == stu[i].number) {
            printf("请重新录入该学生信息\n");
            scanf("%d\t\t%s\t\t", &stu[i].number, &stu[i].name);
            for (h = 0; h < m; h++) {
                scanf("%d", &stu[i].score[h]);
            }
        }
    }

}

void sortsheng_by_total(student stu[], int i, int m) {
    int a, c, j, n, z, k, S;
    int sum[S];
    int v;
    student temp;
    for (j = 0; j < i; j++) {
        for (c = 0; c < m; c++) {
            sum[j] += stu[j].score[c];
        }
    }
    for (n = 0; n < i - 1; n++) {
        for (k = n + 1; k < i; k++) {
            if (sum[k] < sum[n]) {
                temp = stu[k];
                stu[k] = stu[n];
                stu[n] = temp;
                v = sum[k];
                sum[k] = sum[n];
                sum[n] = v;
            }
        }
    }
    for (a = 0; a < i; a++) {
        printf("%d\t\t%s\t\t", stu[a].number, stu[a].name);
        for (z = 0; z < m; z++) {
            printf("%d\t", stu[a].score[z]);
        }
        printf("总分%d\t\t", sum[a]);
        printf("\n");
    }
}

报错的地方帮你改正了,但我觉得你还需要再认真改一下代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct st
{
    char name[20];    //name改为小写
    int num;         //num改为小写
    float score[4];
    float total;
    float aver;
}STU;

int menu(void);
void readscore(struct st STU[], int n);
void readscore1(struct stu[], int n);
void printfscore(struct st STU[], int n);
void searchbynum(struct st STU[], int n);
void searchbyname(struct st STU[], int n);
void sortbyscore(struct st STU[], int n, int(*compare)(float a, float b));
void ascending(float a, float b);
void descending(float a, float b);
void sortbyname(struct st STU[], int n);
void de1(struct st STU[], int n);
void edit(struct st STU[], int n);
void aversumofeverystudent(struct st STU[], int n);

int main(void)
{
    char ch;
    struct st STU[50];  //定义一个STU数组
    int n = 0;
    scanf_s("%d", &n);
    scanf_s("%c", &ch);
    switch (ch)
    {
    case 0:
        printf("End of program!");
        exit(0);
    case 1:
        readscore(STU, n);
        break;
    case 2:
        n++;
        readscore1(STU, n);
        break;
    case 3:
        printscore(STU, n);
        break;
    case 4:
        searchbynum(STU, n);
        break;
    case 5:
        searchbyname(STU, n);
        break;
    case 6:
        sortbyscore(STU, n, descending);
        printf("\nsort in desending order by score:\n");
        printscore(STU, n);
        break;
    case 7:
        sortbyname(STU, n);
        printf("\nsort in dictionary order by name:\n");
        break;
    case 8:
        de1(STU, n);
        printscore(STU, n);
        break;
    case 9:
        edit(STU, n);
        printscore(STU, n);
        break;
    case 10:
        aversumofeverystudent(STU, n);
        break;
    default:
        printf("input error!\n");
    }
    return 0;
}
int menu(void)
{
    int itemselected;
    printf("");
    printf("学生成绩系统管理\n");
    printf("0.退出\n");
    printf("1.录入学生信息\n");
    printf("2.增加一名学生信息\n");
    printf("3.学生信息浏览\n");
    printf("4.按学号查询学生信息\n");
    printf("5.按姓名查询学生信息\n");
    printf("6.按总分降序\n");
    printf("7.按姓名排序\n");
    printf("8.删除学生信息\n");
    printf("9.修改学生信息\n");
    printf("10.计算每个学生的平均分\n");
    printf("*");
    printf("Input your choice:");
    scanf("%d", &itemselected);
    return itemselected;
}

void readscore(struct st STU[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        scanf("%d%s%", &STU[i].num, &STU[i].name);
    getchar();
    system("pause");
}

void readscore1(struct st STU[], int n)          //去掉分号
{
    int i = n, j, flag, m = 0;
    printf("请输入待增加的学生人数:\n");
    scanf("%d", &m);
    if (m > 0)
    {
            flag = 1;
            while (flag)
            {
                flag = 0;
                printf("请输入第%d位学生的学号:\n", i + 1);
                scanf("%s", STU[i].num);             //输入num字段
                for (j = 0; j < i; j++)
                {
                    if (strcmp(STU[i].num, STU[j].num) == 0)      //stu改为STU字段
                    {
                        printf("该学号已经存在,请重新输入!\n");
                        flag = 1;
                        break;
                    }
                }
            }
    }
}
void printfscore(struct st STU[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%d%s\n", STU[i].num, STU[i].name);
    system("pause");
}

void searchbynum(struct st STU[], int n)        //去掉分号
{
    int num, i;
    printf("请输入需要查询的学号:");
    scanf("%d", &num);
    getchar();
    for (i = 0; i < n; i++)
        if (STU[i].num == num)
        {
            printf("%d%s", STU[i].num, STU[i].name);
            break;
        }
    if (i == n)
        printf("not found!\n");
    system("pause");
}

void searchbyname(struct st STU[], int n)
{
    int num, i;
    printf("请输入要查询的姓名:");
    scanf("%d", &num);
    gether();
    for (i = 0; i < n; i++)
        if (STU[i].num == num)           //num改为小写
        {
            printf("%d%s", STU[i].num, STU[i].score);         //i改为小写
            break;
        }
    if (i == n)
        printf("not found!\n");
}

void sortbyscore(struct st STU[], int n)
{
    int i, j;
    struct st temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1; j++)
        {

            if (STU[j].score[0] + STU[j].score[1] + STU[j].score[2] > STU[j + 1].score[0] + STU[j + 1].score[1] + STU[j + 1].score[2])
            {

                temp = STU[j];
                STU[j] = STU[j + 1];
                STU[j + 1] = temp;

            }
        }
    }
    for (j = 0; j < n; j++)
    {
        STU[j].total = STU[j].score[0] + STU[j].score[1] + STU[j].score[2];//计算总分//
        printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
        printf("----------------------------------------------------------------------------------------\n");
        printf("%d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \n", STU[j].num, STU[j].name, STU[j].score[0], STU[j].score[1], STU[j].score[2], STU[j].total);

    }
    system("pause");
}

void sortbyname(struct st STU[], int n)
{
    int i, j, k, max = 0;

    for (i = 0; i < n; i++)
    {
        scanf("%d%s", &STU[i].num, &STU[i].name);
    }
    k = STU[0].name;
    for (i = 1; i < n; i++)
    {
        if (strcmp(k, STU[i].name) < '0')
            k = STU[i].name;
    }
    j = k;
    printf("%d %s %.1f %.1f %.1f", STU[j].num, STU[j].name);

    system("pause");
}
void de1(struct st STU[], int n)
{
    int i, j, temp = 0;
    int c;
    printf("请输入需要删除的学生信息的学号:\n");
    scanf("%d", &c);
    for (i = 0; i <= n; i++)
    {
        if (STU[i].num == c)
        {
            temp = 1;
            for (j = i; j < n - 1; j++)
            {
                STU[j] = STU[j + 1];
            }
        }
    }
    if (temp == 0)
        printf("该学生不存在\n");
    if (temp == 1)
    {
        printf("删除成功\n");
        n--;
        for (i = 0; i < n; i++)
        {
            printf("%d %s ", STU[j].num, STU[j].name);
        }
    }
    system("pause");
}

void edit(struct st STU[], int n)
{
    int i, c;
    printf("请输入你要修改的学生的学号:");
    scanf("%d", &c);
    for (i = 0; i < n; i++)
    {
        if (c == STU[i].num)
        {
            printf("请重新录入该学生信息\n");
            scanf("%d %s ", &STU[i].num, &STU[i].name);
        }
    }
}

void aversumofeverystudent(struct st STU[], int n)
{
    int i;
    printf("total average\n");
    for (i = 0; i < n; i++)
    {
        printf("%s:%5d%.2f\n", STU[i].name, STU[i].total, (double)STU[i].total / n);
    }
}