前言:

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

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

思路 :

1: 分析需求:    

1 输入全班同学的信息。

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

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

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

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

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

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


2:设计:

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

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

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


3:实现

直接贴代码 如下

#include<stdio.h>
#include<stdlib.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;
    int cin1();     //信息录入函数声明
    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");
}

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








一直没发现程序无法运行, 经学弟提醒 检查后发现缺少一个头文件  #include <stdlib.h>   此头文件 在此功能调用system(“cls”); 清屏函数

特此感谢某位不认识的学弟


Logo

快速构建 Web 应用程序

更多推荐