C语言课设——学生体测系统

刚刚考完试我十分的兴奋,再一想到就要过年回家了,就感觉我应该造福人类啊,所以就把我搞了接近两个星期的课设贴出来了,我是不是很好!(虽然极其的辣鸡,一个小小的课设就搞了700多行,各位小伙伴千万不要学我的,啰里八嗦的不是一个程序猿该有的素质!)

(so)大家就把这个当作参考,反正大概的格式都是差不多的。C语言课设——学生体测系统_第1张图片

大家用windows系统的话可以像我同学一样弄清屏(让它长得跟跳转了界面一样的),然后把界面搞得好看一点,还可以搞背景颜色(Windows的系统这些比较容易,大家随便在网上搜一下就行了,本小白就不贴别人的了)

不想听废话的可以直接往后翻代码那里(长得黑不溜秋的那个)

要求分析

C语言课设——学生体测系统_第2张图片
来分析一下。

   首先我们需要一个菜单可以让用户选择功能,然后可以从菜单界面跳转到不同功能的界面来实现。
   然后我们需要学生‍‍的数据,可以大概理解为学生是一个大类,学生的各项数据是这个大类下的不同元素。这个可以用结构体或者    来实现。
   输入功能可以直接用scanf来实现,这样就是整个程序运行一次;也可以用文件实现,但整体比较繁琐。
   排序功能,可以用冒泡排序法、选择排序法,这两个比较简单,容易上手。当然也可以尝试其他的排序方法。
   统计功能就是学生数据的遍历,遍历用循环实现。然后排序、取平均值等等,这里不多赘述。
   查询功能的实现也可以说是数据的遍历,在系统搜索到匹配的数据,将学生结构体的所有数据输出;如果遍历完仍然没有找到匹配的数据就给出提醒。
   修改和删除没有特别大的区别,同样也是数据的遍历,只不过删除要添加一个确认的功能。

我的实现

   学生数据我是用结构体来实现的。
   我使用了文件,所以输入、修改、删除等对数据有改动的功能都使用了文件的输入(代码可能会有错误,毕竟我自己运行的时候不是很稳定)。文件的实现还弄了一个保存函数。
   关于排序功能,我使用的是冒泡排序,然后使用了三个排序函数以实现分别对学号、姓名、各项成绩的排序,以至于这一块的代码比较繁琐。看到这篇文的朋友可以查找一些简化的方法,然后告诉我吧,我实在是不知道咋弄
   我的输出功能由两个函数实现,一个是输出一个学生的信息,另一个是输出所有学生的信息,其实就是多了一个循环,但是由于本咸鱼放弃了思考,就直接用了两个来搞。
   在此之外,我添加了密码功能,在进入系统时验证密码,然后可以选择修改密码,这里也是用文件实现的。

代码实现

这里我把每个模块分开贴出来,但是总体就是按照这个顺序实现的。

1.学生信息结构体的建立

#include "curses.h"
#include 
#include 
#include

int n=0,flag,d=0;//定义全局变量n为学生总数,flag为添加学生人数,d用于判断是否为首次输入数据

struct student            //定义学生信息结构体
{
    char num[20];  //定义学号(可以含字母)
    char name[20];
    int sex;
    float weight;
    float height;
    float BMI;     //定义体重指数
    int vc;        //定义肺活量
    int count;     //定义仰卧起坐或引体向上个数
    int score1;
    int score2;
    int score3;
    int scoreAll;   //定义总成绩
    char level[10];//定义成绩等级
}grades[20],temp[10];//得到20个基本学生结构体(用于记录数据)以及10个即将用到的临时学生结构体

2.主界面(菜单)的实现

int pass=0;//用于判断是否已经进行了密码验证
int main() {                    //定义主函数
    //定义在主函数之后的函数调用需要声明
    void rule(void);
    void find(void);
    void change(void);
    void delete1(void);
    void input(void);
    void statistic(void);
    void passwords(void);
    void print(void);
    void save(void);
    
    passwords();
    pass=1;      //执行完密码验证,使得下一次调用密码函数时使用修改密码的功能
    int choices;//定义选择的功能序号
    int f;      //用于判断是否退出系统
rerun:          //(label)用于goto的返回
    printf("\t-----------------------------------\n");
    printf("\t|         学生体测成绩系统            |\n");
    printf("\t|         0.退出系统                |\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-----------------------------------\n\n");

    printf("请选择功能");
    scanf("%d",&choices);
    printf("\n");
    while (choices>=0&&choices<=8) {
        switch (choices) {
            case 0:
                printf("请确认是否要关闭系统\n");
                printf("确认请输入1,否则输入0\n");
                scanf("%d",&f);
                if (f==1) {
                    printf("系统已关闭,感谢您的使用!");
                    exit(0);
                }if (f==0) {
                    goto rerun;
                }
                
            case 1:
                printf("执行成绩输入程序\n");
                if(d==0){
                    printf("请输入学生人数\t");
                    scanf("%d",&n);
                    input();
                    save();
                    d=1;
                    break;
                }
                if (d==1) {
                    printf("请输入学生人数\t");
                    scanf("%d",&flag);
                    input();
                    save();
                    break;
                }
                
            case 2:
                printf("执行查找成绩功能\n");
                find();
                save();
                goto rerun;
                break;
            case 3:
                printf("执行修改成绩功能\n");
                change();
                save();
                goto rerun;
                break;
            case 4:
                printf("执行删除成绩功能\n");
                delete1();
                save();
                goto rerun;
                break;
            case 5:
                printf("浏览全体学生成绩\n");
                print();
                goto rerun;
                break;
            case 6:
                printf("执行成绩排序功能\n");
                rule();
                goto rerun;
                break;
            case 7:
                printf("执行统计成绩功能\n");
                statistic();
                goto rerun;
                break;
            case 8:
                printf("执行修改密码功能\n");
                passwords();
                goto rerun;
                break;
            default:
                printf("输入错误!请重新输入\n");
                goto rerun;
        }
        
    }
    while (choices>8||choices<0) {
        printf("Error!\n请重新输入");
        scanf("%d",&choices);
    }
    
}

3.输入函数的实现

int i,j;
void input(){    //定义输入主函数
    void input1(void);
    if (d==0) {    //首次输入数据
        for(i=1;i<=n;i++){
            input1();  //调用input1来实现数据的录入
        }
        printf("\n输入完毕,返回系统主页\n\n");
    }else if (d==1){     //添加数据
        for(i=n+1;i<=n+flag;i++){
            input1();
        }
        n=n+flag;
        printf("\n输入完毕,返回系统主页\n\n");
    }
}

void input1(){//定义函数,用于输入每一个数据
    FILE * fp;   //定义文件
    fp=fopen("grades.pages","r");//以只读形式打开文件
    if(fp==NULL){
        printf("找不到学生信息文件!\n");
        exit(0);
    }
    //如果文件存在,依次根据提示输入学生各项信息
  
   while (!feof(fp)) {  
    printf("请输入第%d名学生的信息\n",i);
    printf("学号:\t");
    fscanf(fp,"%s",grades[i].num);
    if (grades[i].num<=0) {
        printf("数据可能错误,请再度确认\n");
        fscanf(fp,"%s",grades[i].num);
    }
    for(j=1;j<i;j++){
        if (strcmp(grades[i].num,grades[j].num)==0) {
            printf("输入重复学号,请重新输入,确认是否正确\n");
            fscanf(fp,"%s",grades[i].num);
            break;}
    }
    printf("姓名:\t");
    fscanf(fp,"%s",grades[i].name);
    printf("性别(男生为1,女生为2):");
    fscanf(fp,"%d",&grades[i].sex);
    if (grades[i].sex!=1&&grades[i].sex!=2) {
        printf("输入错误,请重新输入\n");
        fscanf(fp,"%d",&grades[i].sex);
    }
    printf("身高(m):\t");
    fscanf(fp,"%f",&grades[i].height);
    if (grades[i].height<=0.5||grades[i].height>=2.4) {
        printf("数据可能错误,请再度确认\n");
        fscanf(fp,"%f",&grades[i].height);
    }
    printf("体重(kg):");
    fscanf(fp,"%f",&grades[i].weight);
    if (grades[i].weight<=30||grades[i].weight>=200) {
        printf("数据可能错误,请再度确认\n");
        fscanf(fp,"%f",&grades[i].weight);
    }
    printf("肺活量:\t");
    fscanf(fp,"%d",&grades[i].vc);
    if (grades[i].vc<=300||grades[i].vc>=7000) {
        printf("数据可能错误,请再度确认\n");
        fscanf(fp,"%d",&grades[i].vc);
    }
    printf("仰卧起坐或引体向上个数:\t");
    fscanf(fp,"%d",&grades[i].count);
    if (grades[i].count<=0||grades[i].count>=65) {
        printf("数据可能错误,请再度确认\n");
        fscanf(fp,"%d",&grades[i].count);
    }
    //对学生成绩进行计算
    if (grades[i].sex==1) {
        if (grades[i].vc>4800) {
            grades[i].score1=100;
        }else if (grades[i].vc>4180) {
            grades[i].score1=80;
        }else if (grades[i].vc>3100) {
            grades[i].score1=60;
        }else  grades[i].score1=30;
        
        if (grades[i].count>19) {
            grades[i].score2=100;
        }else if (grades[i].count>15) {
            grades[i].score2=80;
        }else if (grades[i].count>9) {
            grades[i].score2=60;
        }else  grades[i].score2=30;
        
    }else if (grades[i].sex==2) {
        if (grades[i].vc>=3400) {
            grades[i].score1=100;
        }else if (grades[i].vc>3000) {
            grades[i].score1=80;
        }else if (grades[i].vc>2050) {
            grades[i].score1=60;
        }else  grades[i].score1=30;
        
        if (grades[i].count>56) {
            grades[i].score2=100;
        }else if (grades[i].count>52) {
            grades[i].score2=80;
        }else if (grades[i].count>24) {
            grades[i].score2=60;
        }else  grades[i].score2=30;
    }
    grades[i].BMI=grades[i].weight/(grades[i].height*grades[i].height);
    if (grades[i].BMI>=17.9&&grades[i].BMI<=23.9) {
        grades[i].score3=100;
    }else if (grades[i].BMI<17.9) {
        grades[i].score3=80;
    }else if(grades[i].BMI>=24.0&&grades[i].BMI<=27.9){
        grades[i].score3=80;
    }else if (grades[i].vc>27.9)
        grades[i].score3=60;
    
    grades[i].scoreAll=0.25*grades[i].score3+0.35*grades[i].score1+0.40*grades[i].score2;
    
    if (grades[i].scoreAll>=95) {
        strcpy(grades[i].level, "excellent");
    }else if (grades[i].scoreAll>=80) {
        strcpy(grades[i].level, "good");
    }else if (grades[i].scoreAll>=60) {
        strcpy(grades[i].level, "pass");
    }else  strcpy(grades[i].level, "fail");
}
    fclose(fp);//文件使用完毕关闭文件,将数据保留,避免流失
}

4.保存学生信息到文件中


void save()//保存学生信息到文件
{
    FILE *fp;
    if((fp = fopen("student.txt" , "w")) == NULL )// 以可写的方式打开当前目录下的.txt
    {
        printf("不能打开此文件,请按任意键退出\n");
        exit(1);
    }
    int i = 0;
    while(i < n)
        {
            i++;
                if(i < n)
               fprintf(fp, "\n");
        }
    fclose(fp);
}

5.输出函数的实现(仅输出一个学生的成绩,用于查找)


void printone(){//定义输出一个学生信息的函数
    if(grades[i].sex==1){
        printf("%s\t",grades[i].num);
        printf("%s\t",grades[i].name);
        printf("男\t");
        printf("%3.1f\t",grades[i].BMI);
        printf("%d\t\t",grades[i].vc);
        printf("%d\t\t",grades[i].count);
        printf("/\t\t");
        printf("%s\n\n",grades[i].level);
    }else if(grades[i].sex==2){
        printf("%s\t",grades[i].num);
        printf("%s\t",grades[i].name);
        printf("女\t");
        printf("%3.1f\t",grades[i].BMI);
        printf("%d\t\t",grades[i].vc);
        printf("/\t\t");
        printf("%d\t",grades[i].count);
        printf("%s\n\n",grades[i].level);
    }
  }

6.查找函数的实现


void find()                        //定义查找函数
{
    int i,trigger;
    char name[10];
    char num[20];
    char level[10];
    int chack;
    int choices;
    void print1(void);
refind:
    chack=0;//判断学生是否存在
    printf("\t请输入查询类型:1.姓名  2.学号  3.成绩等级");
    scanf("%d",&choices);
    if (choices==1) {
        printf("\t请输入要查询的学生姓名:");
        scanf("%s",name);
        for (i=1; i<=n; i++) {
            if(strcmp(grades[i].name,name)==0)//如果查询的学生信息存在
            {
                printf("学号       姓名    性别   BMI   肺活量    引体向上  仰卧起坐  最终成绩\n");
                printone();
                chack=1;
                break;
            }
        }
    }else if (choices==2){
        printf("\t请输入要查询的学生学号:");
        scanf("%s",num);
        for (i=1; i<=n; i++) {
            if(strcmp(num,grades[i].num)==0)
            {
                printf("学号       姓名    性别   BMI   肺活量    引体向上  仰卧起坐  最终成绩\n");
                printone();
                chack=1;
                break;
            }
        }
    }else if (choices==3){
        printf("\t请输入要查询的最终成绩等级:");
        scanf("%s",level);
        for (i=1; i<=n; i++) {
            if(strcmp(level, grades[i].level)==0)
            {
                printf("学号       姓名    性别   BMI   肺活量    引体向上  仰卧起坐  最终成绩\n");
                printone();
                chack=1;
                break;
            }
        }
    }
    if(chack==0)   printf("\t所查找学生不存在\n");
    printf("\t继续查询请输入1,否则请输入0退出查找");
    scanf("%d",&trigger);
    printf("\n");
    if(trigger==1)
        goto refind;//利用goto实现返回
    
}

7.修改函数的实现


void change()
{
    FILE * fp;
     fp=fopen("grades.txt","r");
     if(fp==NULL){
         printf("找不到学生信息文件!\n");
         exit(0);
     }
    while (!feof(fp)) {
    int i,triggerc=1;
    int k;
    char num[20];
    int chack=0;
    while (triggerc==1) {
        
        printf("\t请输入要修改成绩的学生学号:");
        scanf("%s",num);
        for (i=1; i<=n; i++) {
            if(strcmp(num,grades[i].num)==0){
                printf("请选择希望修改的内容\n");
                printf("1.姓名  2.性别  3.身高  4.体重\n5.肺活量  6.仰卧起坐或引体向上\n");
                scanf("%d",&k);
                printf("\n请输入该生修改后的信息\n");
                switch (k) {
                    case 1:
                        scanf("%s",grades[i].name);
                        printf("修改成功!\n");
                        break;
                    case 2:
                        scanf("%d",&grades[i].sex);
                        printf("修改成功!\n");
                        break;
                    case 3:
                        scanf("%f",&grades[i].height);
                        printf("修改成功!\n");
                        break;
                    case 4:
                        scanf("%f",&grades[i].weight);
                        printf("修改成功!\n");
                        break;
                    case 5:
                        scanf("%d",&grades[i].vc);
                        printf("修改成功!\n");
                        break;
                    case 6:
                        scanf("%d",&grades[i].count);
                        printf("\t修改成功!\n");
                        break;
                    default:
                        chack=1;//信息不存在则改变chack的值
                        break;
                }
                
            }
        }
        if (chack==1)
        { printf("\t不存在该生信息\n");}
        printf("\t继续修改请输入1,否则请输入0退出修改\n");
        scanf("%d",&triggerc);
        if (triggerc==0)  break;
        
    }
    }
    
}

8.密码函数的实现


void passwords()
{   FILE*p;//定义密码文件指针
    p=fopen("password.pages", "a+");
    if(p!=NULL){
       char password[10]={0};
       char pass1[10],pass2[10],pass3[10];
        char passfinal[10];
       fgets(passfinal,10, p);
       int i;
       if(pass==0){
           printf("请输入密码:\n");
           for(i = 0;i < 3;i++)
           {
            scanf("%s",password);
            if(strcmp(password,passfinal) == 0)
                break;
            else   printf("密码错误,请重新输入密码:\n");
           }
           if(i == 3){
              printf("输入错误密码超过上限,退出系统\n");
              exit(0);
           }else{
               printf("登录成功!\n");
               printf("\n");
           }
        }else if(pass==1){
            printf("请输入原密码\n");
            scanf("%s",pass1);
        repass:
            if (strcmp(pass1,passfinal)==0) {
                printf("密码正确,请输入新密码\n");
                scanf("%s",pass2);
                printf("请确认密码\n");
                scanf("%s",pass3);
                if (strcmp(pass2, pass3)==0) {
                    printf("密码修改成功,返回主程序\n");
                    strcpy(passfinal, pass2);
                    fclose(p);
                    return;
                }else printf("输入两次新密码不相同,");
            }else {
                printf("密码错误,请重新输入\n");
                scanf("%s",pass1);
                if (strcmp(pass1,passfinal)==0) {
                    goto repass;
                }else printf("密码连续2次输入错误,退出修改密码程序\n");
            }
        }
    }else if(p==NULL){
         printf("找不到密码文件!\n");
    }
    fclose(p);
}

9.删除功能


void delete1()
{
    int i,j,tai,re;
    char num[20];
redelete:
    printf("请输入要删除的学生的学号:\n");
    scanf("%s",num);
    
    printf("请确认是否删除,是请输入1,否则输入0返回主界面\n");
    scanf("%d",&re);
    if(re==1){
        for(i=1;i<=n;i++){
            if(strcmp(num,grades[i].num)==0)
                break;
        }
        if(i==n+1)//循环正常完成,没有中途跳出
        {
            printf("该学生不存在\n");
            printf("继续删除请输入1,退出请输入0\n");
            scanf("%d",&tai);
            if(tai==0)
                return;
            if (tai==1) {  
                goto redelete;//再次进行该功能的实现
            }
        }
        for(j=i;j<=n;j++)//在被删除的同学后,将后一名学生的信息给前一名学生
        {strcpy(grades[j].name, grades[j+1].name);
            strcpy(grades[j].num,grades[j+1].num);
            grades[j].sex=grades[j+1].sex;
            grades[j].height = grades[j+1].height;
            grades[j].weight = grades[j+1].weight;
            grades[j].vc = grades[j+1].vc;
            grades[j].count = grades[j+1].count;
            strcpy(grades[j].level,grades[j+1].level);
        }
        printf("删除成功!\n");
    }else if (re==0)
        return;
}

10.排序功能


void paixu(int i){//替换(就是懒得再写辣么多次,就单独搞了个函数)
    struct student t;
    
    t=grades[i];
    grades[i]=grades[i+1];
    grades[i+1]=t;
}

void compare(int k)//学号、姓名、总成绩的排序函数
{
    int i,j;
    for(j=1;j<=n;j++){
        for(i=1;i<n-j;i++){
            if (k==1) {
                if(strcmp(grades[i].name,grades[i+1].name)>0)
                    paixu(i);
            }else if (k==2){
                if(strcmp(grades[i].num,grades[i+1].num)>0)
                    paixu(i);
            }else if (k==3){
                if(grades[i].scoreAll<grades[i+1].scoreAll)
                    paixu(i);
            }
        }
    }
}

int sex;
void cmpsco(int m)//单项成绩的排序函数
{
    int i,j;
    for(j=1;j<=n;j++){
        for(i=1;i<n-j;i++){
            switch (m) {
                case 1:      //按身高排序
                    if(grades[i].height<grades[i+1].height){
                        paixu(i);
                    }
                    break;
                case 2:      //按体重排序
                    if(grades[i].weight<grades[i+1].weight){
                        paixu(i);
                    }
                    break;
                case 3:     //按体重指数排序
                    if(grades[i].BMI<grades[i+1].BMI){
                        paixu(i);
                    }
                    break;
                case 4:     //按肺活量排序
                    if(grades[i].vc<grades[i+1].vc){
                        paixu(i);
                    }
                    break;
                default:
                    break;
            }
        }
    }
}

void cmpscor(int m){    //引体向上或仰卧起坐的排序
    struct student t;
    int k=0;
    if (m==5) {     //按引体向上排序
        for(i=1;i<=n;i++){
            if(grades[i].sex==1){
                temp[k]=grades[i];          //得到仅有男生的结构体temp
                k++;
            }
        }
    }else if (m==6){
        for(i=1;i<=n;i++){
            if(grades[i].sex==2){
                temp[k]=grades[i];     //得到仅有女生的结构体temp
                k++;
            }
        }
    }
    sex=k;
    k=1;
    for(j=1;j<=sex-1;j++){
        for(i=1;i<sex-1-j;i++){
            if(temp[i].count<temp[i+1].count){
                t=temp[i];
                temp[i]=temp[i+1];
                temp[i+1]=t;
            }
        }
    }
}


void printsex(int m){   //排序时对男女生分别的输出
    printf("学号       姓名    性别   BMI   肺活量    引体向上  仰卧起坐  最终成绩\n");
    if(m==5){
        for (int i=1; i<=sex-1; i++) {
            printf("%s\t",temp[i].num);
            printf("%s\t",temp[i].name);
            printf("男\t");
            printf("%3.1f\t",temp[i].BMI);
            printf("%d\t\t",temp[i].vc);
            printf("%d\t\t",temp[i].count);
            printf("/\t\t");
            printf("%s\n\n",temp[i].level);
        }
    }else if(m==6){
        for (int i=1; i<=sex-1; i++) {
            printf("%s\t",temp[i].num);
            printf("%s\t",temp[i].name);
            printf("女\t");
            printf("%3.1f\t",temp[i].BMI);
            printf("%d\t\t",temp[i].vc);
            printf("/\t\t");
            printf("%d\t\t",temp[i].count);
            printf("%s\n\n",temp[i].level);
        }
    }
}

void print(){   //学生整体信息的输出
    printf("学号       姓名    性别   BMI   肺活量    引体向上  仰卧起坐  最终成绩\n");
    for(int i = 1;i <= n ;i++)
    {  printone();}
    printf("\n");
}

void rule()//排序主函数
{
    int k,m;
    printf("请输入排序任务方式(学号与成绩为升序排列,成绩为降序排列):\n");
    printf("0、退出\n");
    printf("1、学号\n");
    printf("2、姓名\n");
    printf("3、总成绩\n");
    printf("4、单项成绩 \n");
rerule:
    scanf("%d",&k);
    if (k==0) {
        
    }else if (k>0&&k<4) {
        compare(k);
        print();
    }else if(k==4){
        
        printf("请选择需要排序的成绩类型\n");
        printf("1.身高  2.体重  3.BMI  4.肺活量  5.仰卧起坐  6.引体向上\n");
        scanf("%d",&m);
        if (m>0&&m<5) {
            cmpsco(m);
            print();
        }
        if (m==5||m==6)
        {  cmpscor(m);
            printsex(m);
        }
    }else{
        printf("请输入正确的选择\n");
        goto rerule;
    }
}

11.统计功能


void statistic()
{
    //总成绩在不同分数段的男女生数量,各种指数的最大值最小值平均值
    int i,m;
    int vca,vcx = 0.0,vcn = 0.0;//定义肺活量的平均值,最大值,最小值
    float ba,bx = 0.0,bn = 0.0;//体重指数
    float pa = 0.0,px = 0.0,pn = 0.0;
    float sa,sx = 0.0,sn = 0.0;
    float pt = 0.0,st = 0.0;//定义总值
    int vct = 0;
    int n1=0,n2=0;
    double bt = 0.0;
    int e1=0,e2=0;//e1为男生excellent,e2为女生excellent……
    int g1=0,g2=0;
    int p1=0,p2=0;
    int f1=0,f2=0;
    for (i=1; i<=n; i++) {
        if(strcmp(grades[i].level,"excellent")==0){
            if (grades[i].sex==1)  e1++;
            if (grades[i].sex==2)  e2++;
        }else if(strcmp(grades[i].level,"good")==0){
            if (grades[i].sex==1)  g1++;
            if (grades[i].sex==2)  g2++;
        }else if(strcmp(grades[i].level,"pass")==0){
            if (grades[i].sex==1)  p1++;
            if (grades[i].sex==2)  p2++;
        }else if(strcmp(grades[i].level,"fail")==0){
            if (grades[i].sex==1)  f1++;
            if (grades[i].sex==2)  f2++;
        }
    }
    for (i=1; i<=n; i++) {
        vct=vct+grades[i].vc;
        bt=bt+grades[i].BMI;
        if (grades[i].sex==1) {
            pt=pt+grades[i].count;
            n1++;
        }else if (grades[i].sex==2) {
            st=st+grades[i].count;
            n2++;
        }
    }
    vca=vct/n;
    ba=bt/n;
    pa=pt/n1;
    sa=st/n2;
    for (m=3; m<=6; m++) {
        cmpsco(m);//对学生信息根据非仰卧起坐单项成绩排序
        cmpscor(m);//对学生信息根据仰卧起坐或引体向上排序
        //每一次排序完第一项和最后一项分别为最大值和最小值
        if (m==3) {
            bn=grades[1].BMI;
            bx=grades[n].BMI;
        }else if (m==4){
            vcx=grades[1].vc;
            vcn=grades[n].vc;
        }else if (m==5){
            px=temp[1].count;
            pn=temp[sex-1].count;
        }else if (m==6){
            sx=temp[1].count;
            sn=temp[sex-1].count;
        }
        
    }
    
    printf("\t成绩/性别     男   女\n");
    printf("\texcellent:   %d   %d\n",e1,e2);
    printf("\tgood:        %d   %d\n",g1,g2);
    printf("\tpass:        %d   %d\n",p1,p2);
    printf("\tfail:        %d   %d\n\n",f1,f2);
    printf("所有学生成绩统计\n");
    printf("\t数据/项目  体重指数    肺活量   引体向上   仰卧起坐\n");
    printf("\t平均值      %3.1f    %6d    %3.1f     %4.1f\n",ba,vca,pa,sa);
    printf("\t最大值      %3.1f    %6d    %3.1f     %4.1f\n",bx,vcx,px,sx);
    printf("\t最小值      %3.1f    %6d    %3.1f     %4.1f\n\n",bn,vcn,pn,sn);
}



注意⚠️

1.使用switch-case来实现选择,要注意每个case完结要加break。case只是一个label,没有特殊的识别作用,系统不会因为函数运行到下一个case了就自动跳出,当然这样的话可以实现相邻的几个case实现相同的语句而不重复。case后的东西和switch里的东西长得一样就跳到这个case,所以case也没有特别的顺序要求。
2.进行运算要注意数据类型。int/int=int,不能用float或其他来定义,不要问我怎么知道的。
3.搞这种不能二三十行代码就能搞定的东西,定义的变量、函数名就不要那么模棱两可,不要图方便就搞a、b、c…不然你自己可能过一段时间就忘记自己本来写的是啥了

你可能感兴趣的:(c语言)