标题:新手,写了一个班级成绩管理程序,有几点不会
只看楼主
请多关照
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2016-11-3
结帖率:33.33%
已结贴  问题点数:3 回复次数:8 
新手,写了一个班级成绩管理程序,有几点不会
希望大神能帮忙解决一下。
下面是我写的代码,结构体数组一直搞不明白。希望大神能帮我分析一下。
另外,有个保存的函数我写不出来,能帮我补充一下么(一共就那么点积分了,真抱歉)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct chengji//构造体数组,也不太会,查的资料,后边跟的a[i]也不知道为什么总是错误的。 这个程序应该是N个学生的M门课程,然而弄不出来M门课程,所以改为三门
{
    int xuehao;
    char mingzi;
    float kecheng[3];
};a[i];
int menu(){//显示界面
    int x;
    printf("                                班级成绩管理系统                       \n");
    printf("********************************************************************************\n");
    printf("请选择系统功能项: \n");
    printf("   a.成绩录入     b.成绩显示     c.成绩保存     d.成绩排序     e.成绩修改     f.成绩统计    g.退出系统\n");
    printf("********************************************************************************\n");
    for (;;){
        printf("请输入  a ~ g 中的一个选项:");
        scanf("%c",&x);
        switch(x){
            case 'a':printf("成绩录入");break;
            case 'b':printf("成绩显示");break;
            case 'c':printf("成绩保存");break;
            case 'd':printf("成绩排序");break;
            case 'e':printf("成绩修改");break;
            case 'f':printf("成绩统计");break;
            case 'g':printf("退出系统");break;
            default:printf("输入错误,请重新输入");
        }
        return x;
    }
    }
void baocun(){//保存这个函数  我也不会写
}
void luru(){//对成绩进行录入,N个学生,三门课程:语 数  外。这不会,没写出来
    int N,i,j;
    char temp[N];
    for(i=1;i<=N;i++){
        printf("分别输入:\n姓名,学号,科目成绩:语,数,外:\n");
    }
}
void paixu(){//对某科成绩进行排序
    int i,j,t,N;
    for(i=1;i<=N;i++)//N次比较
    for(j=1;j<=N-i;j++)
    if(a[i].kecheng[1]>a[i+1].kecheng[1]){
        t=a[1].kecheng[1];a[i].kecheng[1]=a[i+1].kecheng[1];a[i+1].kecheng[1]=t;
    }
    printf("语文成绩排序结果:%s   %d   %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[1]);
    for(i=1;i<=N;i++)//N次比较
    for(j=1;j<=N-i;j++)
    if(a[i].kecheng[2]>a[i+1].kecheng[2]){
        t=a[1].kecheng[2];a[i].kecheng[2]=a[i+1].kecheng[2];a[i+1].kecheng[2]=t;
    }
    printf("数学成绩排序结果:%s   %d   %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[2]);
    for(i=1;i<=N;i++)//N次比较
    for(j=1;j<=N-i;j++)
    if(a[i].kecheng[3]>a[i+1].kecheng[3]){
        t=a[1].kecheng[3];a[i].kecheng[3]=a[i+1].kecheng[3];a[i+1].kecheng[3]=t;
    }
    printf("外语成绩排序结果:%s   %d   %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[3]);
}
void xianshi(){//显示录入学生的成绩信息
    int N;
    for(int t=1;t<=N;t++){
        printf("姓名   学号   语   数   外\n");
        printf("%s    %d   %.1f   %.1f   %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[1],a[i].kecheng[2],a[i].kecheng[3]);
        if (a[i+1].xuehao==0) break;
    }
}
void xiugai(){//修改成绩
    int x,z,c,s,N;
    printf ("请输入密码:");
    scanf("%d",&x);
    if(x==1234){//对密码进行判断
        for (;;){//提取某个学生的信息
            printf("输入要修改的学生号\n");
            scanf("%d",&c);
            for(int i=1;i<=N;i++){
                if(c==a[i].xuehao){ s=i;
                }
            }
        }
        system("cls");//清屏
        printf("请输入选择\n");
        printf("%d   %s    %.1f   %.1f   %.1f\n",a[i].xuehao,a[i].mingzi,a[i].kecheng[1],a[i].kecheng[2],a[i].kecheng[3]);
        for(;;){//对某一科目进行修改
            printf ("1.语文 2.数学 3.外语 4.退出\n");
            scanf("%d",&z);   
            if(z>=1&&z<=3){//修改语文成绩
                if(z==1){
                    system("cls");
                    for(;;){
                        printf ("输入语文分数0~100:\n");
                        scanf("%f",&a[s].kecheng[1]);
                        if(a[s].kecheng[1]>=0&&a[s].kecheng[1]<=100) printf("修改成功\n");
                    }   
                }
                if(z==2){
                    for(;;){
                        printf("输入数学分数0~100:\n");
                        scanf("%f",&a[s].kecheng[2]);
                        if(a[s].kecheng[2]>=0&&a[s].kecheng[2]<=100) printf("修改成功\n");
                    }
                }
                if(z==3){
                    for(;;){
                            printf("输入外语分数0~100:\n");
                            scanf("%f",&a[s].kecheng[3]);
                            if(a[s].kecheng[3]>=0&&a[s].kecheng[3]<=100) printf("修改成功\n");   
                    }
                }
                if(z==4){
                    break;
                }
            }
        }
    }
    else printf ("密码错误,请重新输入。\n");
}
void pinjun(){//各科平均成绩
    float sum1=0,sum2=0,sum3=0,ave1,ave2,ave3;
    int j=0,k=0,l=0,N;
    for(int i=1;i<=N;i++){//计算平均成绩
        sum1=sum1+a[i].kecheng[1]; j++;
        sum2=sum2+a[2].kecheng[2]; k++;
        sum3=sum3+a[3].kecheng[3]; l++;
    }
    ave1=sum1/j;ave2=sum2/k;ave3=sum3/l;
    printf("语文的平均成绩:%.2f \n 数学的平均成绩:%.2f \n 外语的平均成绩:%.2f\n",ave1,ave2,ave3);
    int m=0,n=0,p=0;
    for(i=1;i<=N,i++){//计算超过的人数
        while(a[i].kecheng[1]>ave1)  m++;
        while(a[i].kecheng[2]>ave2)  n++;
        while(a[i].kecheng[3]>ave3)  p++;
    }
    printf("超过语文平均成绩的人数是:%d\n 超过数学平均成绩的人数是:%d\n 超过外语平均成绩的人数是:%d\n",m,n,p);
}
int bye(){//退出系统,也不懂
    int ch;
    ch=getchar();
    return 0;
}
int main(){
    for (;;){
        switch(menu()){
            case 'a':luru();//成绩录入
            system("pause");//按任意键继续
            system("cls");
            break;
            case 'b':xianshi();//成绩显示
            system("pause");
            system("cls");
            break;
            case 'c':baocun();//成绩保存  不会写。
            system("pause");
            system("cls");
            break;
            case 'd':paixu();//成绩排序   
            system("pause");
            system("cls");
            break;
            case 'e':xiugai();//成绩修改
            system("pause");
            system("cls");
            break;
            case 'f':pinjun();//成绩统计
            system("pause");
            system("cls");
            break;
            case 'g':bye();//退出系统
            return 0;
            }
        }
    }
//技术要求:
//题目9:班级成绩管理系统
//对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能要求:
//(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单:
// 请选择系统功能项: a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序
//e、成绩修改(要求先输入密码) f、成绩统计  g、退出系统
//1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩  
//3)显示超过某门课程平均成绩的学生人数  
//(4)执行一个具体的功能之后,程序将重新显示菜单。 (5)将学生成绩保存到文件中。
 
搜索更多相关主题的帖子: 管理程序 include mingzi 结构体 课程 
2016-11-08 20:23
syl411120229
Rank: 2
等 级:论坛游民
帖 子:8
专家分:30
注 册:2016-11-7
得分:1 
学多久可以自己编这个
2016-11-08 21:18
请多关照
Rank: 2
等 级:论坛游民
帖 子:12
专家分:20
注 册:2016-11-3
得分:0 
回复 2楼 syl411120229
我学了1个月左右吧。还是新手。不知道那些大神为什么不帮一下小新手呢。。。提点一下后辈多好

我是一个很笨很笨的新手,请多多关照,谢谢~
2016-11-08 21:38
leishao1104
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2016-11-8
得分:1 
我只自学了一点   不过看得出你的错误很多,,,,竟然你会用函数,,,那你为什么不用switch构造函数呢???
2016-11-08 21:47
leishao1104
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2016-11-8
得分:0 
待会我试试哈!
2016-11-08 21:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:1 
回复 3楼 请多关照
以下是引用请多关照在2016-11-8 21:38:31的发言:

我学了1个月左右吧。还是新手。不知道那些大神为什么不帮一下小新手呢。。。提点一下后辈多好

大哥,我们学了一个月才学到数组,你也叫新手?光能写出这么长的代码已经很牛了

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-09 02:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
不知你学到动态链表没有,对于人数不确定的,一般用动态链表,这题工程量较大,改动较大。
而且很多语法不到位。
如果真的想改,建议——重做
还有,最好不要等到程序写完后再来找错,建议写一段测试一段……
水平不够,还是先放一放吧。最好等到学完数据结构后再来做这题。

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-09 02:29
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:1 
main的switch和menu的switch最好合并起来写,两个是真没必要。
例如:case 'a':printf("成绩录入");
               luru();//成绩录入
               system("pause>nul&&cls");//暂停和清除屏幕
               break;
只是统计班级里的信息没必要用到链表,用线性表就好了(线性表和数组的操作差不多)。
可以看出基础不牢,有待加强,代码就留着以后你自己修改吧。
2016-11-09 09:28
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:1 
程序代码:
void luru(){//对成绩进行录入,N个学生,三门课程:语 数  外。这不会,没写出来
    int N,i,j;
    char temp[N];
    for(i=1;i<=N;i++){
        printf("分别输入:\n姓名,学号,科目成绩:语,数,外:\n");
    }
} 
楼主能不能告诉我N是多少?
我学编程没多久老师就说了不能使用未初始化的变量。for(i=1;i<=N;i++)...你这个循环是打算随机执行吗?
char temp[N];//定义数组不能使用变量,必须使用常量。当然现在貌似新的标准已经允许了,只不过还是不允许使用未初始化的变量定义数组。
-------------------------
程序代码:
int menu(){//显示界面
    int x;
     scanf("%c",&x);
return x;
}
首先我要说明,这样读写,在目前的情况下是没问题的。只是既然你才刚学编程没多久,那就踏实本分些,用%d读int,用%c读char。  后续的学习你还要接触指针,现在就开始张冠李戴,后面的指针你会非常难以理解。你会觉得老师说的都是对的,自己却想不出来。。。刚学编程,我建议还是死板一点,等到接触算法的时候,你去玩花活才会得心应手。
--------------------------
程序代码:
struct chengji//构造体数组,也不太会,查的资料,后边跟的a[i]也不知道为什么总是错误的。 这个程序应该是N个学生的M门课程,然而弄不出来M门课程,所以改为三门
{
    int xuehao;
    char mingzi;
    float kecheng[3];
};a[i];//前面多了个分号;a[i],i是多少?不知道i的大小你让人家怎么给你建立数组?
程序代码:
struct chengji
{
    int xuehao;
    char mingzi;
    float kecheng[3];
}a[100];//这样写就在声明定义这个结构体的时候直接定义了一个结构体数组,a[100]是一个全局变量(即后面的所以函数都可以访问并修改到这个a[100])

-------
还有别的问题,我只挑比较基础的错误指出。
system("Pause");是一个“叫系统暂停”的指令,其实没必要写那么多的,一般人家只在main函数的最后一行前写一个,让程序执行完以后不自动关闭。




φ(゜▽゜*)♪
2016-11-09 09:57



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




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

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