| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2962 人关注过本帖, 2 人收藏
标题:学生成绩管理系统的编程题,求高手指导
只看楼主 加入收藏
红苹果jhwill
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-6-7
结帖率:50%
收藏(2)
已结贴  问题点数:20 回复次数:5 
学生成绩管理系统的编程题,求高手指导
学生成绩管理系统V2.0
某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的总分和平均分;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按成绩由低到高排出名次表;
(5)按学号由小到大排出成绩表;
(6)按学号查询学生排名及其考试成绩;
(7)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
(8)输出每个学生的学号、考试成绩,以及课程总分和平均分。
要求程序运行后先显示如下菜单,并提醒用户输入选项:
1.Input record
2.Caculate total and average score of course
3.Sort in descending order by score
4.Sort in ascending order by score
5.Sort in ascending order by number
6.Search by number
7.Statistic analysis
8.List record
0.Exit
Please enter your choice:
然后根据用户的选项执行相应的操作。
搜索更多相关主题的帖子: 考试成绩 学号查询 管理系统 百分比 成绩表 
2016-06-10 21:20
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:5 
像这种项目,可以用链表,也可以用文件读写方式写。
个人觉得用文件读写方式更容易。
至于代码,直接百度搜索都很多。楼主可以进行参考。。      

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-06-17 03:32
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
难得有题目给你练习就应该自己多写下,那里写不下去找来问不是更好。
2016-06-17 09:40
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:10 
必须说你的这道题貌似和我去年做过的很像,正好我存了副本,那就发上来。
我做这道题是在mooc  苏小红老师的课程里面遇到的除了2.0还有1.0 3.0 4.0 5.0版本的,
整个版本更迭在当时也是折磨的我、、、因为代码量、输出、都很大,不容易找到那个和题目要求不符的部分。
程序代码:
#define   MAX_LEN  10                        /* 字符串最大长度 */
#define   STU_NUM 30                       /* 最多的学生人数 */
#include<stdio.h>
#include<stdlib.h>
int   Menu(void);
void  ReadScore(long *num,float*score, int n);
void AverSumofEveryStudent(long *num,float*score, int n);
void  SortbyScore(long *num,float*score,int n);
void  SortbyScoreDesc(long *num,float*score,int n);
void  SortbyName(long *num,float*score,int n);
void  SearchbyNum(long *num,float*score,int n);
void  AsSortbyNum(long *num,float*score,int n);
void  PrintScore(long *num,float*score,int n) ;
int main() {
    int choice;
    long num[STU_NUM];
    float score[STU_NUM];
    int n;
    printf("Input student number(n<30):\n");
    scanf("%d",&n);
u1:
    choice=Menu();
    switch(choice) {
        case 1:
            ReadScore(num,score,n);
            goto u1;
            break;
        case 2:
            AverSumofEveryStudent(num,score,n);
            goto u1;
            break;
        case 3:
            SortbyScore(num,score,n);
            goto u1;
            break;
        case 4:
            SortbyScoreDesc(num,score,n);
            goto u1;
            break;
        case 5:
            SortbyName(num,score,n);
            goto u1;
            break;
        case 6:
            SearchbyNum(num,score,n);
            goto u1;
            break;
        case 7:
            AsSortbyNum(num,score,n);
            goto u1;
            break;
        case 8:
            PrintScore(num,score,n);
            goto u1;
            break;
        case 0:printf("End of program!\n");
            break;
        default:
            printf("Input error!\n");
            goto u1;
            break;
    }

    return 0;
}
void  PrintScore(long *num,float*score,int n) {
    for(int i=0; i<n; i++) {
        printf("%ld\t%.0f\n",num[i],score[i]);
    }
}
void  AsSortbyNum(long *num,float*score,int n) {
    int array[11]= {0};
    for(int i=0; i<n; i++) {
        if(score[i]<60)array[5]++;
        else if(score[i]<70)array[6]++;
        else if(score[i]<80)array[7]++;
        else if(score[i]<90)array[8]++;
        else if(score[i]<100)array[9]++;
        else if(score[i]==100)array[10]++;
    }
    printf("<60\t%d\t%.2f%%\n",array[5],array[5]*100.0/n);
    printf("%d-%d\t%d\t%.2f%%\n",60,69,array[6],array[6]*100.0/n);
    printf("%d-%d\t%d\t%.2f%%\n",70,79,array[7],array[7]*100.0/n);
    printf("%d-%d\t%d\t%.2f%%\n",80,89,array[8],array[8]*100.0/n);
    printf("%d-%d\t%d\t%.2f%%\n",90,99,array[9],array[9]*100.0/n);
    printf("%d\t%d\t%.2f%%\n",100,array[10],array[10]*100.0/n);
}
void  SearchbyNum(long *num,float*score,int n) {
    printf("Input the number you want to search:\n");
    long find;
    int flag=0;
    scanf("%ld",&find);
    for(int i=0; i<n; i++) {
        if(num[i]==find) {
            printf("%ld\t%.0f\n",num[i],score[i]);
            flag=1;
            break;
        }

    }
    if(flag==0)printf("Not found!\n");
}
void  SortbyName(long *num,float*score,int n) {

    for(int i=0; i<n; i++) {

        for(int j=i+1; j<n; j++) {
            if(num[j]<num[i]) {
                float temp;
                temp=score[i];
                score[i]=score[j];
                score[j]=temp;
                long n;
                n=num[i];
                num[i]=num[j];
                num[j]=n;
            }
        }
    }
    printf("Sort in ascending order by number:\n");
    for(int i=0; i<n; i++) {
        printf("%ld\t%.0f\n",num[i],score[i]);
    }
}
void  SortbyScoreDesc(long *num,float*score,int n) {

    for(int i=0; i<n; i++) {
        for(int j=i+1; j<n; j++) {
            if(score[j]<score[i]) {
                float temp;
                temp=score[i];
                score[i]=score[j];
                score[j]=temp;
                long n;
                n=num[i];
                num[i]=num[j];
                num[j]=n;
            }
        }
    }
    printf("Sort in ascending order by score:\n");
    for(int i=0; i<n; i++) {
        printf("%ld\t%.0f\n",num[i],score[i]);
    }

}
void  SortbyScore(long *num,float*score,int n) {

    for(int i=0; i<n; i++) {
        for(int j=i+1; j<n; j++) {
            if(score[j]>score[i]) {
                float temp;
                temp=score[i];
                score[i]=score[j];
                score[j]=temp;
                long n;
                n=num[i];
                num[i]=num[j];
                num[j]=n;
            }
        }
    }
    printf("Sort in descending order by score:\n");
    for(int i=0; i<n; i++) {
        printf("%ld\t%.0f\n",num[i],score[i]);
    }

}
void AverSumofEveryStudent(long *num,float*score, int n) {
    float sum=0;
    for(int i=0; i<n; i++)sum+=score[i];
    printf("sum=%.0f,aver=%.2f\n",sum,sum/n);
}
void  ReadScore(long *num, float*score, int n) {
    printf("Input student's ID and score:\n");
    for(int i=0; i<n; i++) {
        scanf("%ld%f",&num[i],&score[i]);
    }
}
int Menu(void) {
    printf("Management for Students' scores\n\
1.Input record\n\
2.Caculate total and average score of course\n\
3.Sort in descending order by score\n\
4.Sort in ascending order by score\n\
5.Sort in ascending order by number\n\
6.Search by number\n\
7.Statistic analysis\n\
8.List record\n\
0.Exit\n\
Please Input your choice:\n");
    int n;
    scanf("%d",&n);
    return n;
}


φ(゜▽゜*)♪
2016-06-17 15:52
红苹果jhwill
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-6-7
收藏
得分:0 
谢谢大家的帮忙
2016-06-18 23:56
红苹果jhwill
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-6-7
收藏
得分:0 
这是在我同学帮助下写的,大家可以参考一下
#include <stdio.h>
#define N 30
void hanshu1 (float a[],int b[],int n);                                               //输入学号和成绩
void hanshu2 (float a[],int j,float *p1,float *p2);                                   //计算总分和平均分
void hanshu3 (float a[],int n,int b[]);                                                //成绩由高到低排序
void hanshu4 (int a1[],float a2[],int n);                                              //成绩由低到高排序
void hanshu5 (int a1[],float a2[],int n);                                              //学号由低到高排序
int hanshu6 (int a[],float b[],int n,int m);                                           //输入学号查询成绩及其名次
void hanshu7 (float b[],int m,int *a,int *d,int *c,int *e,int *g);                     //统计各个成绩段的人数及百分比
main ()
{
    int a1[N];float a2[N];                                         //a1存放学号、a2存放成绩
    int i,j,n,t,m;                                                 //n存放学生总数、t存放选择菜单项、m存放查询学号
    int a,b,c,d,e;                                                 //该5个变量用于存放优秀、良好等人数
    float total,average;
    printf ("    成绩统计系统v2.0\n\n        选择菜单\n");
    printf ("1.录入每个学生的学号和考试成绩\n2.计算课程的总分和平均分\n3.按成绩由高到低排出名次表\n4.按成绩由低到高排出名次表\n");
    printf ("5.按学号由小到大排出成绩表\n6.按学号查询学生排名及其考试成绩\n7.统计各个成绩段的人数及百分比\n");
    printf ("8.输出每个学生学号、成绩,以及课程总分和平均分\n0.退出\n\n");
    printf ("请输入学生总人数:");
    scanf ("%d",&n);
    do                                                            //控制输入循环,直到用户输入0结束
    {
    printf ("请输入你所需操作的菜单选项前的序号:");
    scanf ("%d",&t);
    switch (t)
    {
        case 1:                                                          //输入学号和成绩
            hanshu1 (a2,a1,n);
            break;
        case 2:                                                         //计算总分和平均分
            hanshu2 (a2,n,&total,&average);
            printf ("总分为:%.1f\n平均分为:%.2f\n",total,average);
            break;
        case 3:                                                           //成绩由高到低排序
            hanshu3 (a2,n,a1);
            printf ("学号        成绩        名次\n");
            for (i=0;i<n;i++)
            {
                printf ("%d          %.1f           %d\n",a1[i],a2[i],i+1);
            }
            break;
        case 4:                                                                   //成绩由低到高排序
            hanshu4 (a1,a2,n);
            printf ("学号        成绩        名次\n");
            for (i=0,j=n;i<n;i++,j--)
            {
                printf ("%d          %.1f          %d\n",a1[i],a2[i],j);
            }
            break;
        case 5:                                                                       //学号由低到高排序
            hanshu5 (a1,a2,n);
            printf ("学号        成绩\n");
            for (i=0;i<n;i++)
            {
                printf ("%d          %.1f\n",a1[i],a2[i]);
            }
            break;
        case 6:                                                                     //输入学号查询成绩及其名次
            printf("请输入需要查询的学号:");
            scanf("%d",&m);
            i=hanshu6 (a1,a2,m,n);
            printf ("名次      成绩\n");
            printf("%d      %.1f\n",i+1,a2[i]);
            break;
        case 7:                                                                      //统计各个成绩段的人数及百分比
            hanshu7 (a2,n,&a,&b,&c,&d,&e);
            printf ("优秀人数为%d,所占百分比为%.2f%%\n良好人数为%d,所占百分比为%.2f%%\n",a,(float)a/n*100,b,(float)b/n*100);
            printf ("中等人数为%d,所占百分比为%.2f%%\n及格人数为%d,所占百分比为%.2f%%\n",c,(float)c/n*100,d,(float)d/n*100);
            printf ("不及格人数为%d,所占百分比为%.2f%%\n",e,(float)e/n*100);
            break;
        case 8:                                                                      //成绩总表(成绩、总分、平均分)
            printf ("学号        成绩\n");
            hanshu2 (a2,n,&total,&average);                                          
            for (i=0;i<n;i++)
            {
                printf ("%d           %.1f\n",a1[i],a2[i]);
            }
            printf ("总分为:%.1f\n平均分为:%.2f\n",total,average);
            break;
        case 0:
            break;
        default:                                                                   //处理输入的非法信息
            printf ("非法输入!\n");
    }   
    }
    while (t!=0);
}

void hanshu1 (float a[],int b[],int n)                                                  //输入学号和成绩
{
    int i;
    printf("请输入学生分数及其学号(用空格隔开):\n");
    for(i=0;i<n;i++)
    {
        scanf("%f %d",&a[i],&b[i]);
    }
}

void hanshu2 (float a[],int j,float *p1,float *p2)                                      //计算总分和平均分
{
    int i;float m=0,n=0;
    for(i=0;i<j;i++)
    {
        m=m+a[i];
    }
    n=(float)m/j;
    *p1=m;
    *p2=n;
}

void hanshu3 (float a[],int n,int b[])                                              //成绩由高到低排序
{
    int i,j,temp1;float temp2;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]<a[j])
            {
                temp2=a[i];temp1=b[i];
                a[i]=a[j];b[i]=b[j];
                a[j]=temp2;b[j]=temp1;
            }
        }
    }
}

void hanshu4 (int a1[],float a2[],int n)                                            //成绩由低到高排序
{
    int i,j,m;float t;
    for (i=0;i<n;i++)
    {
        for (j=i+1;j<n;j++)
        {
            if (a2[i]>a2[j])
            {
                t=a2[i];
                a2[i]=a2[j];
                a2[j]=t;
               
                m=a1[i];
                a1[i]=a1[j];
                a1[j]=m;
            }
        }
    }
}

void hanshu5 (int a1[],float a2[],int n)                                       //学号由低到高排序
{
    int i,j,m;float t;
    for (i=0;i<n+1;i++)
    {
        for (j=i+1;j<n;j++)
        {
            if (a1[i]>a1[j])
            {
                t=a2[i];
                a2[i]=a2[j];
                a2[j]=t;
               
                m=a1[i];
                a1[i]=a1[j];
                a1[j]=m;
            }
        }
    }
}

int hanshu6 (int a[],float b[],int n,int m)                                 //输入学号查询成绩及其名次
{   
    hanshu3(b,m,a);                                                        //调用hanshu3,得到成绩由高到低排序
    int i;
    for(i=0;i<m;i++)
    {
        if(n==a[i])
        {
            return (i);
        }
    }
}

void hanshu7 (float b[],int m,int *a,int *d,int *c,int *e,int *g)                        //统计各个成绩段的人数及百分比
{
    int i;
    *a=0;*d=0;*c=0;*e=0;*g=0;
    for(i=0;i<m;i++)
    {
        if(b[i]<=100&&b[i]>=90)
        {
            *a=*a+1;
        }
        if(b[i]<=89&&b[i]>=80)
        {
            *d=*d+1;
        }
        if(b[i]<=79&&b[i]>=70)
        {
            *c=*c+1;
        }
        if(b[i]>=60&&b[i]<=69)
        {
            *e=*e+1;
        }
        if(b[i]>=0&&b[i]<=59)
        {
            *g=*g+1;
        }
    }

2016-06-19 00:02
快速回复:学生成绩管理系统的编程题,求高手指导
数据加载中...
 
   



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

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