虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > C语言利用结构体数组实现学生成绩管理系统

C语言利用结构体数组实现学生成绩管理系统
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了C语言利用结构体数组实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

要求:

某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。定义结构体类型描述学生信息,每个学生信息包括:学号、姓名、多门课的成绩、总成绩和平均成绩。用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统。
(1) 录入每个学生的学号、姓名和各科考试成绩。
(2) 计算每门课程的总分和平均分。
(3) 计算每个学生的总分和平均分。
(4) 按每个学生的总分由高到低排出名次表。
(5) 按学号由小到大排出成绩表。
(6) 按姓名的字典顺序排出成绩表。
(7) 按学号查询学生排名极其考试成绩。
(8) 按姓名查询学生排名极其考试成绩。
(9) 按优秀(90~100)、良好(80~90)、中等(70~80)、及格(60~70)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比。
(10) 输出每个学生的学号、姓名、各科考试成绩以及每门课程的总分和平均分。

代码:

    #include<stdio.h>#include<Windows.h>#include<conio.h>#define SN 30 //学生人数#define CN 6 //科目数#define NL 20 //名字字节长度typedef struct student{
    long int num;
    char name[NL];
    float score[CN];
    float sum;
    float aver;
    }
    STU;
    STU s[SN];
    int itemSelected=-1;
    int n=0;
    //学生数int m=0;
    //课程数int Menu();
    //菜单void chose(int itemSelected);
    //选择void inputScore();
    //输入分数void AverofC();
    //计算每门课程平均数void AverofS();
    //每名学生总分和平均分void sortByNum();
    //学生总分排行void sortByGrade();
    void sortByName();
    void findByNum();
    void findByName();
    void statisticsAnalysis();
    void printScore();
    void main(){
    printf("请输入学生总数(n<%d):n",SN);
    scanf("%d",&n);
    printf("请输入课程总数(m<%d):n",CN);
    scanf("%d",&m);
    while(1){
    itemSelected=Menu();
    chose(itemSelected);
    itemSelected=-1;
    }
    }
    int Menu(){
    int itemSelected;
    system("cls");
    printf("n ==============学生成绩管理系统===============n");
    printf("t 1.输入学号、姓名及各科成绩n");
    printf("t 2.计算每门课程总分和平均分n");
    printf("t 3.计算每个学生总分和平局分n");
    printf("t 4.按每个学生总分高低排出名次表n");
    printf("t 5.按学号从小到大排出成绩表n");
    printf("t 6.按学生字典顺序排出成绩表n");
    printf("t 7.按学号查询学生排名和考试成绩n");
    printf("t 8.按姓名查询学生排名和成绩n");
    printf("t 9.结果分析n");
    printf("t 10.输出信息n");
    printf("t 0.退出n");
    printf("===============================================n");
    printf("请选择选项:");
    scanf("%d",&itemSelected);
    return itemSelected;
    }
    void chose(int itemSelected){
    switch(itemSelected){
    case 1: inputScore();
    break;
    case 2: AverofC();
    break;
    case 3: AverofS();
    break;
    case 4: sortByGrade();
    break;
    case 5: sortByNum();
    break;
    case 6: sortByName();
    break;
    case 7: findByNum();
    break;
    case 8: findByName();
    break;
    case 9: statisticsAnalysis();
    break;
    case 10: printScore();
    break;
    case 0: exit(0);
    printf("即将退出程序");
    break;
    default: printf("输入错误!");
    break;
    }
    }
    void inputScore(){
    printf("n===============================================n");
    printf("请输入学生学号、姓名及各科信息(输入0停止信息输入)n");
    for(int i=0;
    i<n;
    i++){
    printf("学号(8位)");
    scanf("%ld",&s[i].num);
    if(s[i].num==0) break;
    getchar();
    //吸收多余换行符 printf("姓名");
    gets(s[i].name);
    printf("请输入各科成绩");
    s[i].sum=0;
    for(int j =0;
    j<m;
    j++){
    scanf("%f",&s[i].score[j]);
    s[i].sum +=s[i].score[j];
    }
    }
    }
    void AverofC(){
    float sum[CN]={
    0}
    ;
    float average[CN]={
    0}
    ;
    for(int i=0;
    i<m;
    i++){
    for(int j=0;
    j<n;
    j++){
    sum[i]+=s[j].score[i];
    }
    average[i]=sum[i]/n;
    printf("第%d门课程的总分为:%.2f,平均分为%.2fn",i+1,sum[i],average[i]);
    }
    getch();
    }
    void AverofS(){
    float sum[SN]={
    0}
    ;
    float average[SN]={
    0}
    ;
    for (int i=0;
    i<n;
    i++){
    for(int j=0;
    j<m;
    j++){
    sum[i]+=s[i].score[j];
    }
    average[i]=sum[i]/m;
    printf("第%d个学生的总分为:%.2f,平均分为%.2fn",i+1,sum[i],average[i]);
    }
    getch();
    }
    void sortByNum(){
    //按学号从小到大排序 STU temp1={
    0}
    ;
    for(int i=0;
    i<n-1;
    i++){
    if(s[i].num>s[i+1].num){
    temp1=s[i];
    s[i]=s[i+1];
    s[i+1]=temp1;
    }
    }
    printf("n==============按学号从小到排序===============n");
    for(int j=0;
    j<n;
    j++){
    printf("该学生的学号为:%dn",s[j].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[j].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[j].score[c]);
    }
    printf("n");
    }
    getch();
    }
    void sortByGrade(){
    //按总分从高到低排序 STU temp1={
    0}
    ;
    for(int i=0;
    i<n-1;
    i++){
    if(s[i].sum<s[i+1].sum){
    temp1=s[i];
    s[i]=s[i+1];
    s[i+1]=temp1;
    }
    }
    printf("n============按总成绩从高到低排序===========n");
    for(int j=0;
    j<n;
    j++){
    printf("该学生的学号为:%dn",s[j].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[j].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[j].score[c]);
    }
    printf("该学生的总成绩为:%.2f",s[j].sum);
    printf("n");
    }
    getch();
    }
    void sortByName(){
    //按姓名首字母字典顺序排序 STU temp1={
    0}
    ;
    for(int i=0;
    i<n-1;
    i++){
    if(((int)(s[i].name[0])>(int)(s[i+1].name[0]))){
    //将名字首字母转成成ASCII码从而比较大小排序 temp1=s[i];
    s[i]=s[i+1];
    s[i+1]=temp1;
    }
    }
    printf("n==============按学号从小到排序===============n");
    for(int j=0;
    j<n;
    j++){
    printf("该学生的学号为:%dn",s[j].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[j].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[j].score[c]);
    }
    printf("该学生的总成绩为:%.2f",s[j].sum);
    printf("n");
    }
    getch();
    }
    void findByNum() {
    int find=-1;
    //记录需要查找的学号,并作为查找成功与否的标识符 printf("请输入要查找的学号:");
    scanf("%d",&find);
    for(int i=0;
    i<n;
    i++){
    if(s[i].num==find){
    printf("n查找成功n");
    printf("该学生的学号为%dn",s[i].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[i].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[i].score[c]);
    }
    printf("该学生的总成绩为:%.2f",s[i].sum);
    printf("n");
    find=-2;
    }
    }
    if(find!=-2){
    printf("查无此人n");
    printf("按任意键继续");
    }
    getch();
    }
    void findByName(){
    int is_find=0;
    char find[SN];
    printf("请输入要查找的姓名:");
    getchar();
    gets(find);
    for(int i=0;
    i<n;
    i++){
    if(strcmp(s[i].name,find)==0){
    printf("n查找成功n");
    printf("该学生的学号为%dn",s[i].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[i].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[i].score[c]);
    }
    printf("该学生的总成绩为:%.2f",s[i].sum);
    printf("n");
    is_find=1;
    }
    }
    if(is_find!=1){
    printf("查无此人n");
    printf("按任意键继续");
    }
    getch();
    }
    void statisticsAnalysis(){
    printf("输出每门课程优秀、良好、中等、及格、不及格人数所占的百分比n");
    int a1[CN]={
    0}
    ,a2[CN]={
    0}
    ,a3[CN]={
    0}
    ,a4[CN]={
    0}
    ,a5[CN]={
    0}
    ;
    for(int i=0;
    i<n;
    i++){
    for(int j=0;
    j<m;
    j++){
    if(s[i].score[j]>=90 && s[i].score[j]<=100){
    a1[j]++;
    }
    else if (s[i].score[j]>=80 && s[i].score[j]<90){
    a2[j]++;
    }
    else if (s[i].score[j]>=70 && s[i].score[j]<80){
    a3[j]++;
    }
    else if (s[i].score[j]>=60 && s[i].score[j]<70){
    a4[j]++;
    }
    else if (s[i].score[j]<60){
    a5[j]++;
    }
    }
    }
    printf("n====================各们课程概况==================n");
    for(int k=0;
    k<m;
    k++){
    printf("第%d门课的优秀人数占%.2f%%,",k+1,(a1[k]/(n*1.0))*100);
    printf("良好人数占%.2f%%,",(a2[k]/(n*1.0))*100);
    printf("中等人数占%.2f%%,",(a3[k]/(n*1.0))*100);
    printf("及格人数占%.2f%%,",(a4[k]/(n*1.0))*100);
    printf("不及格人数占%.2f%%,",(a5[k]/(n*1.0))*100);
    printf("n");
    }
    getch();
    }
    void printScore(){
    printf("==============以下为学生信息==============");
    for(int j=0;
    j<n;
    j++){
    printf("该学生的学号为:%dn",s[j].num);
    printf("该学生的姓名为:");
    for(int k=0;
    k<NL;
    k++){
    printf("%c",s[j].name[k]);
    }
    printf("n该学生的各科成绩为n");
    for(int c=0;
    c<m;
    c++){
    printf("第%d门成绩为%.2fn",c+1,s[j].score[c]);
    }
    printf("该学生的总成绩为:%.2f",s[j].sum);
    printf("n");
    }
    getch();
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
  • C语言职工管理系统设计
  • C语言学生管理系统源码分享
  • C语言编写学生成绩管理系统
  • C语言实现图书管理系统
  • C语言实现简单学生管理系统
  • 学生成绩管理系统C语言代码实现
  • C语言通讯录管理系统完整版
  • C语言职工信息管理系统源码
  • C语言学生成绩管理系统源代码
相关热词搜索: C语言学生成绩管理系统 C语言成绩管理系统