热点推荐

查看: 4283|回复: 0

c语言程序设计-成绩管理系统

[复制链接]

11

主题

17

帖子

67

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
67
发表于 2021-2-6 20:00:24 | 显示全部楼层 |阅读模式
某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。定义结构体类型描述学生信息,每个学生信息包括:学号、姓名、多门课的成绩、总成绩和平均成绩。用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统。
(注:红色部分为必做功能,黑色部分为选做功能)
  • 录入每个学生的学号、姓名和各科考试成绩。
  • 计算每门课程的总分和平均分。
  • 计算每个学生的总分和平均分。
  • 按每个学生的总分由高到低排出名次表。
  • 按学号由小到大排出成绩表。
  • 按姓名的字典顺序排出成绩表。
  • 按学号查询学生排名极其考试成绩。
  • 按姓名查询学生排名极其考试成绩。
  • 按优秀(90~100)、良好(80~90)、中等(70~80)、及格(60~70)、不及格(0~595个类别,对每门课程分别统计每个类别的人数以及所占的百分比。
  • 输出每个学生的学号、姓名、各科考试成绩以及每门课程的总分和平均分。
    要求程序运行后先显示如下菜单,并提示用户输入选项:

  • Input record
  • Caculate total and average score of every course
  • Caculate total and average score of every student
  • Sort in descending order by total score of every student
  • Sort in ascending order by number
  • Sort in dictionary order by name
  • Search by number
  • Search by name
  • Statistic analysis for every course
  • List record
  • Exit

Please input your choice
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 10
#define STU_MAX 30
#define COURSE_MAX 6
struct Stu {
        long num;
        char name[MAX_LEN];
        float score[COURSE_MAX];
        float sum;
        float aver;
} stu[STU_MAX];
int STU_NUM,COURSE_NUM;
int Menu() {
        int itemSelected;
        printf("Management for Students' scores\n");
        printf("1.Input record\n");
        printf("2.Caculate total and average score of every course\n");
        printf("3.Caculate total and average score of every student\n");
        printf("4.Sort in descending order by total score of every student\n");
        printf("5.Search by number\n");
        printf("6.List record \n");
        printf("0.Exit\n");
        printf("Please input your choice:\n");
        scanf("%d",&itemSelected);
        return itemSelected;
}
void ReadScore() {
        int i,j;
        printf("Input student's ID,name and score:\n");
        for(i=0; i<STU_NUM; i++) {
                scanf("%ld%s",&stu.num,stu.name);
                for(j=0; j<COURSE_NUM; j++) {
                        scanf("%f",&stu.score[j]);
                }
        }
}
void AverSumofEveryCourse() {
        int i,j;
        float sum[COURSE_MAX],aver[COURSE_MAX];
        for(j=0; j<COURSE_NUM; j++) {
                sum[j]=0;
                for(i=0; i<STU_NUM; i++)
                        sum[j]+=stu.score[j];
                if(STU_NUM>0) aver[j]=1.0*sum[j]/STU_NUM;
                else aver[j]=0;
                printf("course %d: sum=%.0f,aver=%.2f\n",j+1,sum[j],aver[j]);
        }
}
void AverSumofEveryStudent() {
        int i,j;
        for(i=0; i<STU_NUM; i++) {
                stu.sum=0;
                for(j=0; j<COURSE_NUM; j++)
                        stu.sum+=stu.score[j];
                if(COURSE_NUM>0) stu.aver=1.0*stu.sum/COURSE_NUM;
                else stu.aver=0;
                printf("student %d: sum=%.0f, aver=%.0f\n", i+1,stu.sum,stu.aver);
        }
}
void SearchbyNum() {
        long number;
        int i,j;
        printf("Input the number you want to search:\n");
        scanf("%ld",&number);
        for(i=0; i<STU_NUM; i++) {
                if(stu.num==number) {
                        printf("%ld\t%s\t",stu.num,stu.name);
                        for(j=0; j<COURSE_NUM; j++)
                                printf("%.0f\t",stu.score[j]);
                        printf("%.0f\t%.0f\t\n",stu.sum,stu.aver);
                        return ;
                }
        }
        printf("\nNot found!\n");
}
void SortbyScore() {
        struct Stu temp;
        int i,j;
        for(i=0;i<STU_NUM-1;i++) {
                for(j=0;j<STU_NUM-1-i;j++) {
                        if(stu[j].sum<stu[j+1].sum) {
                                temp=stu[j];
                                stu[j]=stu[j+1];
                                stu[j+1]=temp;
                        }
                }
        }
}
void PrintScore() {
        int i,j;
        for(i=0; i<STU_NUM; i++) {
                printf("%ld\t%s\t",stu.num,stu.name);
                for(j=0; j<COURSE_NUM; j++) {
                        printf("%.f\t",stu.score[j]);
                }
                printf("%.f\t%.f\n",stu.sum,stu.aver);
        }
}
main() {
        int ch;
        int n=0,m=0;
        printf("Input student number(n<=%d)\n",STU_MAX);
        scanf("%d",&STU_NUM);
        printf("Input course number(m<=%d)\n",COURSE_MAX);
        scanf("%d",&COURSE_NUM);
        while(1) {
                ch=Menu();
                switch(ch) {
                        case 1:
                                ReadScore();
                                break;
                        case 2:
                                AverSumofEveryCourse();
                                break;
                        case 3:
                                AverSumofEveryStudent();
                                break;
                        case 4:
                                SortbyScore();
                                printf("\nSort in descending order by score:\n");
                                PrintScore();
                                break;
                        case 5:
                                SearchbyNum();
                                break;
                        case 6:
                                PrintScore();
                                break;
                        case 0:
                                printf("End of program.");
                                exit(0);
                        default:
                                printf("Input error!");
                                break;
                }
        }
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表