标题:为什么进行到6哪里 不让我输入了 求解
只看楼主
袁广川
Rank: 2
等 级:论坛游民
帖 子:21
专家分:25
注 册:2016-11-12
结帖率:0
已结贴  问题点数:20 回复次数:4 
为什么进行到6哪里 不让我输入了 求解
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define SIZE 100
int n=0; //学生总人数
int max=0; //最高成绩
int min=0; //最低成绩
float aver=0.0; //平均成绩
int pass=0; //及格人数
float passRate=0.0; //及格率
float deviation=0.0; //标准差

struct student
{
    char num[13]; //学号 最多12位
    char name[10]; //姓名 最多4个汉字
    int score[3];  //平时成绩、期末成绩、总评
};

void main()
{
    char sele;
    struct student stu[100]; //学生信息及C++成绩
    int grade[10]={0};
//各分数段人数:0-9,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100

    void readScore(struct student stu[SIZE]); //读取学生平时成绩、期末成绩
    void cacuScore(struct student stu[SIZE], int grade[5]); //计算学生总评成绩、各分数段人数等
    void printScore(struct student stu[SIZE], int grade[5]);//打印学生成绩及试卷分析表
    void draw(int grade[5]);                                //打印模拟直方图
    void modiScore(struct student stu[SIZE]);                //修改学生平时成绩、期末成绩
    void deleScore(struct student stu[SIZE]);                //删除学生信息


    do
    {
        printf("\n   计算机05级《C++》学生成绩管理系统\n");
        printf("┌───────────────────┐\n");
        printf("│1:读取学生平时成绩、期末成绩          │\n");
        printf("│2:计算学生总评成绩、各分数段人数等    │\n");
        printf("│3:打印学生成绩及试卷分析表            │\n");
        printf("│4:打印模拟直方图                      │\n");
        printf("│5:修改学生平时成绩、期末成绩          │\n");
        printf("│6:删除学生信息                        │\n");
        printf("│0:退出                                │\n");
        printf("└───────────────────┘\n");
        
        do
        {
            printf("请选择(0~6):");
            fflush(stdin);
            sele=getchar();
        }while(sele<'0' || sele>'6');

        switch(sele)
        {
        case '1': readScore(stu); break;
        case '2': cacuScore(stu,grade); break;
        case '3': printScore(stu,grade); break;
        case '4': draw(grade); break;
        case '5': modiScore(stu); break;
        case '6': deleScore(stu); break;
        case '0': break;
        }
            
    }while(sele != '0');
}
//draw函数如下:
void draw(int grade[10])
{
    int i,j,max,k,temp,x;
    char screen[22][44];

    printf("\n模拟直方图:\n");
    max=0;
    for(i=0; i<=9; i++) //寻找分数段中人数最多的
    {
        if(grade[i]>max)
        {
            max=grade[i];
        }
    }

    for(i=0; i<=9; i++)
    {
        grade[i] = (int) (20*grade[i]/max +0.5); //计算显示时应输出的*的个数
    }

    for(i=0; i<=21; i++)    //先将输出的所有点清零
    {
        for(j=0; j<=41; j++)
        {
            screen[i][j]=0;
        }
    }

    //画X轴
    for(i=0; i<=41; i++)
    {
        screen[21][i]='-'; //X轴的所有点设置为符号 -
    }
    screen[21][42]='X';

    //画Y轴
    screen[0][0]='Y';
    for(i=1; i<=21; i++)
    {
        screen[i][0]='|';
    }

    //将符合条件的点赋值为*
    k=1;
    for(x=1; x<=10; x++,k=k+4)
    {
        temp=grade[x-1];
        if(temp!=0)
        {
            for(i=1; i<=temp; i++)
            {
                for(j=1; j<=4; j++)
                {
                    screen[20-i+1][j+k]='*';
                }
            }
        }
    }

    //输出直方图
    for(i=0; i<=21; i++)
    {
        for(j=0; j<=42; j++)
        {
            if(screen[i][j] != 0)
            {
                putchar(screen[i][j]);
            }
            else
            {
                putchar(' ');
            }
        }
        putchar('\n');
    }
    printf(" 0    10  20  30  40  50  60  70  80  90  100\n");
}
    void readScore(struct student stu[SIZE]) //读取学生平时成绩、期末成绩
    {
        FILE *p;
        int i;
        if((p=fopen("homework.txt","rb"))==NULL)
        {
            printf("此文件无法打开\n");
            exit(0);
        }
        else
        {
            i=0;
            do
            {
                fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
            //    printf("%s\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
                i++;
                n++;
            }while(!feof(p));
            printf("成绩读取完毕,可以计算成绩了。");        
        }
            fclose(p);
            return ;
    }
    void cacuScore(struct student stu[SIZE], int grade[10]) //计算学生总评成绩、各分数段人数等
    {
        int i;
        float sum=0.0;
        float z=0.0;
        max=min=stu[0].score[1];
        for(i=0;i<n;i++)
        {
            sum+=stu[i].score[1];
            if(stu[i].score[1]>max)    max=stu[i].score[1];
            if(stu[i].score[1]<min) min=stu[i].score[1];
            if(stu[i].score[1]<10) grade[0]++;
            else if(stu[i].score[1]<20) grade[1]++;
            else if(stu[i].score[1]<30) grade[2]++;
            else if(stu[i].score[1]<40) grade[3]++;
            else if(stu[i].score[1]<50) grade[4]++;
            else if(stu[i].score[1]<60) grade[5]++;
            else if(stu[i].score[1]<70) grade[6]++;
            else if(stu[i].score[1]<80) grade[7]++;
            else if(stu[i].score[1]<90) grade[8]++;
            else grade[9]++;
            if(stu[i].score[1]>=60) pass++;
        }
        aver=(float)sum/n;
        passRate=(float)(pass*1.0/n)*100;
        for(i=0;i<n;i++)
        {
            z=z+(stu[i].score[1]-aver)*(stu[i].score[1]-aver);
        }
        deviation=(float)sqrt(z/n);
        printf("成绩计算完毕,并将学生成绩信息保存到“homework.txt”中了,可以打印成绩了!\n");
    return;
    }
    void printScore(struct student stu[SIZE], int grade[5])//打印学生成绩及试卷分析表
    {
        int i;
        printf("打印学生成绩信息:");
        printf(" 学  号         姓 名   平时    期末    总评\n");
        for(i=0;i<n;i++)
        {
            printf("%s\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
        }
        printf("  各分数段人数:\n");
        printf("分数段  人数\n");
        printf("0~9  \t%d\n",grade[0]);
        printf("10~19\t%d\n",grade[1]);
        printf("20~29\t%d\n",grade[2]);
        printf("30~39\t%d\n",grade[3]);
        printf("40~49\t%d\n",grade[4]);
        printf("50~59\t%d\n",grade[5]);
        printf("60~69\t%d\n",grade[6]);
        printf("70~79\t%d\n",grade[7]);
        printf("80~89\t%d\n",grade[8]);
        printf("90-100\t%d\n",grade[9]);
        printf("期末考试总人数:%d\n",n);
        printf("期末考试卷面最高分:%d\n",max);
        printf("期末考试卷面最低分:%d\n",min);
        printf("期末考试卷面平均分:%.2f\n",aver);
        printf("期末考试卷面及格率:%.2f\n",passRate);
        printf("期末考试卷面成绩标准差:%.2f\n",deviation);
        return ;
    }
    void modiScore(struct student stu[SIZE])            //修改学生平时成绩、期末成绩
    {
        int i,a,b;
        FILE *p;
        char num1[13]; //学号 最多12位
        if((p=fopen("homework.txt","rb"))==NULL)
        {
            printf("can`t open the file\n");
            exit(1);
        };
        printf("请输入需要修改成绩的学生学号:");
        scanf("%s",num1);
        for(i=0;i<n;i++)
        {
            if(strcmp(stu[i].num,num1)==0) break;
        }
        if(i==n) printf("没有找到该学生的信息!\n");
        else
        {
            printf("请输入学生 安培 新的平时成绩、期末成绩,以空格间隔:\n");
            scanf("%d%d",&a,&b);
            stu[i].score[0]=a;
            stu[i].score[1]=b;
            stu[i].score[2]=a*0.2+b*0.8;
            fclose(p);
            if((p=fopen("homework.txt","w+"))==NULL)
            {
                printf("can`t open the file\n");
                exit(1);
            }
            i=0;
            do
            {
            //    fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
                fprintf(p,"%s %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
                i++;
            }while(i<n);
            printf("学生信息修改成功,请重新进行成绩计算!\n");
        }
        fclose(p);
    }
    void deleScore(struct student stu[SIZE])            //删除学生信息
    {
        int i,b;
        char z;
        FILE *p;
        char num1[13]; //学号 最多12位
        if((p=fopen("homework.txt","rb"))==NULL)
        {
            printf("can`t open the file\n");
            exit(1);
        };
        printf("请输入需要删除信息的学生学号:");
        scanf("%s",num1);
        for(i=0;i<n;i++)
        {
            if(strcmp(stu[i].num,num1)==0) break;
        }
        if(i==n) printf("没有找到该学生的信息!\n");
        else
        {
            printf("确实要删除 %s 的信息吗(Y/N)?:",stu[i].name);
            scanf("%c",&z);
            if(z=='Y')
            {
                printf("开始删除学生信息......\n");
                for(;i<n-1;i++)
                {
                    stu[i]=stu[i+1];
                }
                n=n-1;
                fclose(p);
                if((p=fopen("homework.txt","w+"))==NULL)
                {
                    printf("can`t open the file\n");
                    exit(1);
                }
                i=0;
                do
                {
                //    fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
                    fprintf(p,"%s %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
                    i++;
                }while(i<n-1);
                fprintf(p,"%s %s %d %d %d",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
                printf("学生信息删除成功,请重新进行成绩计算!\n");
            }
        }
        fclose(p);
    }
搜索更多相关主题的帖子: include 期末成绩 标准差 汉字 姓名 
2017-05-17 10:42
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:10 
文件不发出来怎么调试?
2017-05-17 10:55
袁广川
Rank: 2
等 级:论坛游民
帖 子:21
专家分:25
注 册:2016-11-12
得分:0 
回复 2楼 Emotiona
040109011045 董飞 60 14 23
050102941002 陈铖 92 76 79
050102941003 褚然然 97 83 85
050102941004 丁腾腾 92 56 63
050102941005 樊登旺 87 77 79
050102941006 耿洪超 85 68 71
050102941007 关艳利 94 90 90
050102941008 贺艳丽 88 85 85
050102941009 侯娜 94 89 90
050102941010 胡正康 76 91 88
050102941011 李俐明 92 90 90
050102941012 李晓呵 88 91 90
050102941013 李晓红 94 75 78
050102941014 李勇 73 82 80
050102941015 梁翠莉 73 78 77
050102941016 刘彩凤 93 68 73
050102941017 刘超 83 72 74
050102941018 刘亚梅 92 76 79
050102941019 孟东霞 95 92 92
050102941020 祁荣辉 82 62 66
050102941021 屈丽丽 95 89 90
050102941022 施婕 84 56 61
050102941023 石建敏 74 65 66
050102941024 史红瑾 93 90 90
050102941025 孙芳芳 95 76 79
050102941026 孙卓 92 88 88
050102941027 滕玉浩 73 58 61
050102941028 王广来 86 75 77
050102941029 王静静 93 78 81
050102941030 王庆祥 83 66 69
050102941031 王少帅 80 68 70
050102941032 王胜凯 96 90 91
050102941033 王宇飞 96 82 84
050102941034 王智勇 95 82 84
050102941035 吴培亚 86 75 77
050102941036 武贤磊 84 76 77
050102941037 闫晓敏 93 64 69
050102941038 杨文杰 95 93 93
050102941039 杨彦 95 70 75
050102941040 翟海飞 85 60 65
050102941041 张威 77 43 49
050102941042 张志超 74 76 75
050102941043 周亮亮 83 77 78
050102941044 谷艳昭 95 73 77
050102942001 卜爱利 83 81 81
050102942002 崔晶 92 61 67
050102942003 党兴伟 91 81 83
050102942004 刁建成 88 97 95
050102942005 丁涛 80 86 84
050102942006 顿嫦娥 81 69 71
050102942007 顿秀丽 73 57 60
050102942008 郭洪洋 93 83 85
050102942009 郭鹏涛 82 80 80
050102942010 黄四宝 81 55 60
050102942011 纪二飞 81 81 81
050102942012 李翠芳 85 90 89
050102942013 李宁 76 71 72
050102942014 刘晓伟 79 56 60
050102942015 刘亚舒 73 74 73
050102942016 刘志超 76 73 73
050102942017 刘志伟 87 82 83
050102942018 陆立征 83 75 76
050102942019 马玺 85 87 86
050102942020 孟凡龙 87 85 85
050102942021 钱新刚 83 77 78
050102942022 谈亚楠 93 74 77
050102942023 王立龙 91 87 87
050102942024 王秋余 87 67 71
050102942025 王玉静 87 84 84
050102942026 武瑞 60 89 83
050102942027 徐长江 84 76 77
050102942028 杨玉才 86 86 86
050102942029 姚立蕊 94 90 90
050102942030 詹二红 93 75 78
050102942031 张国权 93 89 89
050102942032 张红伟 93 69 73
050102942033 张艳伟 93 67 72
050102942034 张雨涛 93 69 73
050102942035 郑帅 61 65 64
2017-05-17 12:07
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
得分:10 
回复 楼主 袁广川
我把楼主的代码仔细看了一遍,请问能把问题描述得更清晰一点吗

............
2017-05-17 13:09
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
部分功能有问题。假如我不按0-6的顺序去执行,会怎么样?肯定会导致错误或者乱码。你想进行循环操作,就要考虑到代码整体。因为你没去处理这样的问题,下次再进行操作有些东西本来就存在,或者有些东西丢失。处理这些东西要花大量时间,你自己静下心来去考虑
2017-05-17 15:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477058-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.202802 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved