Bey-Hey 2022-03-11 21:07 采纳率: 85.7%
浏览 22
已结题

学生成绩管理系统,输出函数问题

当我的输出函数代码为
 int InputData()
 {
     int i=0;
     int err=1;
     int flag=1;
     char ch;
     while(flag)
     {
     printf("input the %dth student\n",i+1);
     printf("Please input student ID:");
     scanf("%d",&stu[i].ID);
     printf("Input Student Name:");
     scanf("%s",&stu[i].Name);
     printf("Input Student Sex:");
     scanf("%s",&stu[i].Sex);
     err=0;
     while(err==0)
     {
         printf("Please input English Score:\n");
         scanf("%d",&stu[i].English_Score);
         if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
         err=1;
         else
            {
            printf("输入成绩不规范请重新输入!\n");
            err=0;
            }
     }
     err=0;
     while(err==0)
        {
            printf("Input Math Score:\n");
            scanf("%d",&stu[i].Math_Score);
            if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
                err=1;
            else
               {
                printf("输入成绩不规范请重新输入!");
                err=0;
                }
        }
        err=0;
        while(err==0)
        {
            printf("Input C Score:\n");
            scanf("%d",&stu[i].C_Score);
            if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
                err=1;
            else
                {
                    printf("输入成绩不规范请重新输入!\n");
                    err=0;
                }
        }
        stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;

        while(1)
        {
         printf("continue input(1 or 2)?\n");
         printf("1-继续输入成绩\n");
         printf("2-停止输入成绩\n");
         scanf("%c",&ch);
            switch(ch)
            {
            case 1:
                i++;
                InputData();
                break;
            case 2:
                printf("即将返回主菜单...");
                menu();break;
            default:
                printf("请在1-2中选择!");
            }
            return i;
        }

    }
 }

这样时,无法进行继续输出和终止输出任务,直接显示菜单。

img

曾按照书上的方法打,输出代码如下
int InputData()
 {
     int i=0;
     int err=1;
     int flag=1;
     char ch;
     while(flag)
     {
     printf("input the %dth student\n",i+1);
     printf("Please input student ID:");
     scanf("%d",&stu[i].ID);
     printf("Input Student Name:");
     scanf("%s",&stu[i].Name);
     printf("Input Student Sex:");
     scanf("%s",&stu[i].Sex);
     err=0;
     while(err==0)
     {
         printf("Please input English Score:\n");
         scanf("%d",&stu[i].English_Score);
         if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
         err=1;
         else
            {
            printf("输入成绩不规范请重新输入!\n");
            err=0;
            }
     }
     err=0;
     while(err==0)
        {
            printf("Input Math Score:\n");
            scanf("%d",&stu[i].Math_Score);
            if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
                err=1;
            else
               {
                printf("输入成绩不规范请重新输入!");
                err=0;
                }
        }
        err=0;
        while(err==0)
        {
            printf("Input C Score:\n");
            scanf("%d",&stu[i].C_Score);
            if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
                err=1;
            else
                {
                    printf("输入成绩不规范请重新输入!\n");
                    err=0;
                }
        }
        stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;
        printf("continue input(Y or N)?");
        getchar();
        scanf("%c",&ch);
        if(ch=='Y'||'y')
            flag=1;
        else
            flag=0;
        i++;
        }
      return 1;
    }

运行结果是会继续输入成绩,返回不了菜单或终止程序。

img

我想达到的效果,当我输入1时继续输入,但我输入2时终止输入返回菜单。

我的程序完全代码


```c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1000
int n,m,i,j,k=1;
struct student
 {
     int ID;
     char Name;
     char Sex;
     int English_Score;
     int Math_Score;
     int C_Score;
     int Total;
 }stu[N];
int InputData();
 int SaveData();
 int ReadData();
 int Browe();
 int Select();
 int Insert();
 int Delect();
 int Modify();
 int SortTotal();
 int menu();
 int help();

 int main()
 {
    while(k)
    {
        menu();
    }
    system("pause");
    return 0;
 }
int menu()
{
    int num;
    printf(" *欢迎使用学生管理系统!*\n");
    printf("************目录************\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("*********0 退出程序********\n");
    printf("请选择菜单编号:\n");
    scanf("%d",&num);
switch(num)
 {
    case 1:help();break;
    case 2:InputData();break;
    case 3:SaveData();break;
    case 4:ReadData();break;
    case 5:Browe();break;
    case 6:Select();break;
    case 7:Insert();break;
    case 8:Delect();break;
    case 9:Modify();break;
    case 10:SortTotal();break;
    case 0:
    k=0;
    printf("即将退出程序!");
    return 0;
    break;
    default:
        printf("请在0-10之间选择!");
        system("pause");
        system("cls");
 }
}
 int help()
 {
   printf("\n您好,欢迎使用系统帮助!");
   printf("\n请您根据您的需求,依照菜单页面提示打出目标数字。");
   printf("\n本系统由编号为2021102019的程序员创建");
   printf("\n祝您使用愉快!");
 }

 int InputData()
 {
     int i=0;
     int err=1;
     int flag=1;
     char ch;
     while(flag)
     {
     printf("input the %dth student\n",i+1);
     printf("Please input student ID:");
     scanf("%d",&stu[i].ID);
     printf("Input Student Name:");
     scanf("%s",&stu[i].Name);
     printf("Input Student Sex:");
     scanf("%s",&stu[i].Sex);
     err=0;
     while(err==0)
     {
         printf("Please input English Score:\n");
         scanf("%d",&stu[i].English_Score);
         if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
         err=1;
         else
            {
            printf("输入成绩不规范请重新输入!\n");
            err=0;
            }
     }
     err=0;
     while(err==0)
        {
            printf("Input Math Score:\n");
            scanf("%d",&stu[i].Math_Score);
            if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
                err=1;
            else
               {
                printf("输入成绩不规范请重新输入!");
                err=0;
                }
        }
        err=0;
        while(err==0)
        {
            printf("Input C Score:\n");
            scanf("%d",&stu[i].C_Score);
            if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
                err=1;
            else
                {
                    printf("输入成绩不规范请重新输入!\n");
                    err=0;
                }
        }
        stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;

        while(1)
        {
         printf("continue input(1 or 2)?\n");
         printf("1-继续输入成绩\n");
         printf("2-停止输入成绩\n");
         scanf("%c",&ch);
            switch(ch)
            {
            case 1:
                i++;
                InputData();
                break;
            case 2:
                printf("即将返回主菜单...");
                menu();break;
            default:
                printf("请在1-2中选择!");
            }
            return i;
        }

    }
 }
 int SaveData()
 {
    int i;
    FILE *fp;
    char FileName[57];
    printf("请输入要保存的文件名:\n");
    scanf("%s", FileName);
    fp = fopen(FileName, "w");
    for (i = 0; i < n; i++)
        {
        fprintf(fp,"%d%s%s%d%d%d%d",&stu[i].ID,&stu[i].Name,&stu[i].Sex,&stu[i].English_Score,&stu[i].Math_Score,&stu[i].C_Score,&stu[i].Total);
       }
    printf("保存成功!\n");
    fclose(fp);
    system("pause");

}
int ReadData()
{
     int i=0;
    FILE*fp;
    int err;
    char *FileName;
    if((access(FileName,0))==-1)
    {
        printf("Didn't Found Data!Please select 1 to Input Data!\n");
        return-1;
    }
    fp=fopen(FileName,"rt");
    if(fp==NULL)
    {
        printf("open %s error!\n",FileName);
        return 0;
    }
    do
    {
        err=fscanf(fp,"%d%s%s%d%d%d%d\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
        i++;
    }while(err!=EOF);
    --i;
    fclose(fp);
    return i;
}
int Browe()
{
    int i,n;
    printf("ID Name  ENG  SEX MATH  C  Total\n");
    for(i=0;i<n;i++)
        printf("%d%s%d%d%d%d\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
}
int Select()
{
    int i, item, flag;
    char s1[N];
    printf("------------------\n");
    printf("-----1.按学号查询-----\n");
    printf("-----2.按姓名查询-----\n");
    printf("-----3.退出本菜单-----\n");
    printf("------------------\n");
    while (1)
    {
        printf("请选择子菜单编号:");
        scanf("%d", &item);
        flag = 0;
        switch (item)
        {
        case 1:
            printf("请输入要查询的学生的学号:\n");
            scanf("%s", s1);
            for (i = 0; i<n; i++)
            if (strcmp(s1,stu[i].ID) == 0)
            {
                flag = 1;
                printf("学生学号\t学生姓名\t性别\t大学英语成绩\t高等数学\tC语言成绩\t总成绩\n");
                printf("%d\t%s\t%c\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
            }
            if (0 == flag)
                printf("该学号不存在!\n"); break;
        case 2:
            printf("请输入要查询的学生的姓名:\n");
            scanf("%s", s1);
            for (i = 0; i<n; i++)
            if (strcmp(stu[i].Name, s1) == 0)
            {
                flag = 1;
                printf("学生学号\t学生姓名\t年龄\t性别\t大学英语成绩\t高等数学\tC语言成绩\t总成绩\n");
                printf("--------------------------------------------------------------------\n");
                printf("%d\t%s\t%c\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].ID, stu[i].Name, stu[i].Sex, stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
            }
            if (0 == flag)
                printf("该姓名不存在!\n"); break;
        case 3:return;
        default:printf("请在1-3之间选择\n");
        }
    }
}
int Insert()
{
    int i,Position,err;
    int *n;
    struct student InsertInfo;
    printf("Input Student Information to insert...\n");
    printf("Please input student ID:");
    scanf("%d",&InsertInfo.ID);
    printf("Input Student Name:");
    scanf("%s",InsertInfo.Name);
    printf("Input Student Sex");
    scanf("%c",InsertInfo.Sex);
    while(err==0)
     {
         printf("Please input English Score:");
         scanf("%d",&InsertInfo.English_Score);
         if(InsertInfo.English_Score>=0&&InsertInfo.English_Score<=100)
         continue;
         else
            err=0;
     }
     while(err==0)
        {
            printf("Input Math Score:");
            scanf("%d",&InsertInfo.Math_Score);
            if(InsertInfo.Math_Score>=0&&InsertInfo.Math_Score<=100)
                continue;
            else
                err=0;
        }
        while(err==0)
        {
            printf("Input C Score:");
            scanf("%d",&InsertInfo.C_Score);
            if(InsertInfo.C_Score>=0&&InsertInfo.C_Score<=100)
                continue;
            else
                err=0;
        }
        InsertInfo.Total=InsertInfo.English_Score+InsertInfo.Math_Score+InsertInfo.C_Score;
        printf("Input Position to Insert:");
        scanf("%d",&Position);
        if(Position>*n||Position<0)
        {
            printf("Insert position is illegal!\n");
            return-1;
        }
        for(i=*n;i>Position;i--)
            stu[i]=stu[i-1];
        stu[i]=InsertInfo;
        *n=*n+1;
        return 0;
}
int Delect()
{
int i, j, flag = 0;
char s1[N];
printf("请输入要删除学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
    {
        if (strcpy(stu[i].ID, s1) == 0)
        {
            flag = 1;
            for (j = i; j < n - 1; j++)
                {
                stu[j] = stu[j + 1];
                }
        }
    }
        if (0 == flag){
            printf("该学号不存在!!!\n");
        }
        if (1 == flag){
            printf("删除成功!");
            n--;
        }
        system("pause");
}
int Modify()
{
    int i, item, num = -1;
    char sex1, s1[N], s2[N];
    float score1;
    printf("请输入要要修改的学生的学号:\n");
    scanf("%s", s1);
    for (i = 0; i < n; i++)
        {
        if (strcmp(stu[i].ID, s1) == 0)
        {
            num = i;
            printf("1.修改学号\n");
            printf("2.修改姓名\n");
            printf("3.修改性别\n");
            printf("4.修改大学英语成绩\n");
            printf("5.修改高等数学成绩\n");
            printf("6.修改C语言成绩\n");
            printf("7.退出本菜单\n");
            while (1)
            {
                printf("请选择子菜单编号:");
                scanf("%d", &item);
                switch (item)
                {
                case 1:
                    printf("请输入新的学号:\n");
                    scanf("%s", s2);
                    strcpy(stu[num].ID, s2);
                    break;
                case 2:
                    printf("请输入新的姓名:\n");
                    scanf("%d", stu[num].Name);
                    break;
                case 3:
                    printf("请输入新的性别:\n");
                    scanf("%s", &sex1);
                    stu[i].Sex = sex1;
                    break;
                case 4:
                    printf("请输入新的大学英语成绩:\n");
                    scanf("%f", &score1);
                    stu[num].English_Score = score1;
                    break;
                case 5:
                    printf("请输入新的高等数学成绩:\n");
                    scanf("%f", &score1);
                    stu[num]. Math_Score= score1;
                    break;
                case 6:
                    printf("请输入新的C语言成绩:\n");
                    scanf("%f", &score1);
                    stu[num].C_Score= score1;
                    break;
                case 7:    return;
                default:printf("请在1-7之间选择\n");
                }
            }
            printf("修改完毕!请及时保存!\n");
        }
        else{
            printf("没有该学生学号!");
        }
    }
}

int SortTotal()
{
    int i,j,n;
    struct student temp;
    for (i=0;i<n-1;i++)
        for(j=0;j<n-1;j++)
    {
        if(stu[j].Total<stu[j+i].Total)
            temp=stu[j];
        stu[j]=stu[j+1];
        stu[j+1]=temp;
    }
}

```

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 3月11日
    • 修改了问题 3月11日
    • 修改了问题 3月11日
    • 创建了问题 3月11日

    悬赏问题

    • ¥15 jscolor 赋值input 没能引起前边色框的颜色变化
    • ¥100 驱动程序在\device\raidport1 上检测到控制器错误
    • ¥15 JS报错变量未定义,如何解决?
    • ¥20 找辅导 初学者 想实现一个项目 没有方向
    • ¥15 研究方向遥感场景识别分类。求深度学习基础课程
    • ¥15 关于渗漏场的电场分布模拟
    • ¥24 matlab怎么修改仿真初始时间
    • ¥15 两分段线性回归模型分析阈值效应
    • ¥15 前端和后端代码都没报错,但是点登录没反应的?
    • ¥100 需要远程解决QSQLITE问题!