学生成绩管理系统(结构体版)

来源:互联网 发布:mac看照片怎么下一张 编辑:程序博客网 时间:2024/06/06 12:32

前言:

又到了期末,还没开始复习的我,又开始帮别人写C语言期末作业了,既然是帮别人写学生成绩管理系统,那就贴出来好了。ps:我上半学期学完可是没做这个东西,既然别人让帮忙那不得做完装装逼。

不是我 不想用链表,人家不会 ,所以 只能写结构体版了 ,以后谁让我写链表版的我在贴出来就是了。

思路 :

1: 分析需求:    

1 输入全班同学的信息。

2 统计每位同学的期末考试总成绩和平均成绩,并保存。

3 统计各科的最高分、最低分、不及格率,保存及输出,不及格率保留两位小数。

4 可以按照学号进行查找,输出查找到的信息。

5 按学号递增的顺序进行排序。

(6)  按总成绩递减的顺序进行排序。 

所以说我的目录面板就确定了


2:设计:

1:我构造了 1个输入函数 和 4个输出函数 去对应 我需要的功能

2: 我想要在每次打印完所需内容后返回主菜单并清屏, 所以我多加了了一个清屏函数

3:我的习惯是从来不写函数声明(我懒),把函数写在主函数上面。ps:人家要求写,我也栏得改回去


3:实现

直接贴代码 如下

#include<stdio.h>struct student{    int num; //学号    int math; //数学成绩    int eng;  //英语成绩    int C;    //C语言成绩    int sum;  //总成绩    double av;  //平均成绩} st[100],t;  //保存n个人的信息int main(){    int n; //n为学生人数    int i,j;    void cin(int n);     //信息录入函数声明    void output1(int n);  //各科信息统计函数声明    void output2(int n);    //查询(学号递增)函数声明    void output3(int n);    //查询 (总分递减函数声明    void output4(int n);    //查询(按序号)函数声明    void cls();              //清屏函数声明    while (1)    {        printf ("\t\t*****************************************\n");        printf ("\t\t*                                       *\n");        printf ("\t\t*           学生信息管理系统            *\n");        printf ("\t\t*                                       *\n");        printf ("\t\t*  1:信息录入        2:各科信息统计   *\n");        printf ("\t\t*  3:查询(学号递增)  4:查询 (总分递减)*\n");        printf ("\t\t*  5:查询(按序号)     6:退出          *\n");        printf ("\t\t*                                       *\n");        printf ("\t\t*****************************************\n\n");        int n;        printf ("请输入所需功能的序号:\n");        int gn;   //功能编号        scanf("%d",&gn);        if (gn==1)        {            n = cin1(); //录入入n个学生的信息            cls();   //清屏        }        else if (gn==2)        {            output1 (n); //查询各科信息            cls();        }        else if (gn==3)        {            output2 (n); //按学号查询            cls();        }        else if (gn==4)        {            output3 (n); //按总分查询            cls();        }        else if (gn==5)        {            output4 (n);  //按学号查询成绩            cls();        }        else if (gn==6)            break;    }    return 0;}void cls()   //清屏{    getchar();   //吃掉在上次操作最后的回车    printf ("按回车继续:\n");    getchar();    system("cls");}int cin1(){    int n;    printf ("请输入学生的个数:\n");    scanf("%d",&n);    int i;    for (i=0; i<n; i++)    //录入n个学生成绩    {        printf ("请输入第%d个人的学号,数学成绩,英语成绩,C语言成绩(用空格隔开)\n",i+1);        scanf ("%d%d%d%d",&st[i].num,&st[i].math,&st[i].eng,&st[i].C);        st[i].sum = st[i].math+st[i].eng+st[i].C;        st[i].av = 1.0*st[i].sum/3;    }    return n;}void output1(int n){    int i;    int manm=0,mane=0,manc=0;   //数学,英语, c 的不及格人数    int maxm=0,maxe=0,maxc=0;   //数学,英语, c 最高分    int lowm=100,lowe=100,lowc=100;  //数学,英语, c 最低分    for (i=0; i<n; i++)    {        if (st[i].math<60)        // 累加小于60的人数            manm++;        if (st[i].eng<60)            mane++;        if (st[i].C<60)            manc++;        if (maxm<st[i].math)       // 找出最高分            maxm = st[i].math;        if (maxe<st[i].eng)            maxe = st[i].eng;        if (maxc<st[i].C)            maxc = st[i].C;        if (lowm>st[i].math)       //// 找出最低分            lowm = st[i].math;        if (lowe>st[i].eng)            lowe = st[i].eng;        if (lowc>st[i].C)            lowc = st[i].C;    }    double ram,rae,rac;   //各科不及格比例    ram = 1.0*manm/n;    rae = 1.0*mane/n;    rac = 1.0*manc/n;    printf ("\t\t*****************************************\n");    printf ("\t\t            数学     英语      C语言      \n");    printf ("\t\t 最高分      %d        %d       %d           \n",maxm,maxe,maxc);    printf ("\t\t 最低分      %d        %d       %d           \n",lowm,lowe,lowc);    printf ("\t\t 不及格率    %.2lf%%  %.2lf%%   %.2lf%%   \n",100*ram,100*rae,100*rac);    printf ("\t\t*****************************************\n\n");}void output2(int n){    int i,j;    for (i=0; i<n; i++)    //按学号递增排序    {        for (j=i+1; j<n; j++)        {            if (st[i].num>st[j].num)            {                t = st[i];                st[i] = st[j];                st[j] = t;            }        }    }    printf ("\t\t***********************学号递增************************\n");    printf ("\t\t*   学号     数学     英语       C语言      总分*\n");    for (i=0; i<n; i++)    {        printf ("\t\t*    %d       %d      %d        %d      %d   *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);    }}void output3(int n){    int i,j;    for (i=0; i<n; i++) //按总分递减排序    {        for (j=i+1; j<n; j++)        {            if (st[i].sum>st[j].sum)            {                t = st[i];                st[i] = st[j];                st[j] = t;            }        }    }    printf ("\t\t***********************总分递减***********************\n");    printf ("\t\t*   学号     数学     英语      C语言   总分*\n");    for (i=0; i<n; i++)    {        printf ("\t\t*    %d       %d      %d      %d      %d    *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);    }}void output4(int n){    int i,num1,flag=0;    printf ("请输入需要查询的学生学号:\n");    scanf("%d",&num1);    for (i=0; i<n; i++)    {        if (st[i].num==num1)   //当找到该学号后输出        {            flag=1;            printf ("\t\t*   学号     数学     英语       C语言        总分*\n");            printf ("\t\t*    %d       %d      %d          %d        %d    *\n",st[i].num,st[i].math,st[i].eng,st[i].C,st[i].sum);        }    }    if (flag==0)        printf ("该学生不存在\n");}


附上几章例图 自己感受一下 ,匆忙写完,有新想法再回来改