本段程序代码来源于博客园: https://www.cnblogs.com/switch-and-for/p/3403936.html 未具体完善

本段程序代码来源于博客园:

https://www.cnblogs.com/switch-and-for/p/3403936.html

运行环境:Visual studio

gets为未定义标识符

原因是在visual的较高版本中gets()函数会报错是因为这个函数不安全,可能会因为读取的字符长度太长而导致缓冲区溢出甚至程序崩溃。

此时应换用fgets()或者gets_s()函数就可以解决问题。

调用scanf()函数时

调用查询学生成绩时,界面显示

 

与程序显示的数学成绩相矛盾,需要在源代码中第5项的英语成绩改为数学成绩

将管理员登录功能更改为用户注册界面。

#include <stdio.h>

#include<stdlib.h>

#include <string.h>

void manu();

struct student

{

    int num;

    int password;

    char name[20];

    int cl;

    int ch;

    int math;

    int sum;

    int aver;

}stu[200] = { {200,456852,"张三",1,89,98},{201,456852,"李四",2,67,100},{202,456852,"王五",1,78,99} };

struct student stu1[20];

int N = 0;

int n = 3;

void add()

{

    char a, b;

    int i, j;

    int k;

    int count = 0;

    int count1 = 0;

    system("cls");

    do

    {

        printf("添加第%d学生的信息\n", n + 1);

        printf("输入学生的学号");

        scanf_s("%d", &k);

        for (i = 0; i < n; i++)

        {

            if (stu[i].num == k)

            {

                printf("学号重复");

                count1++;

                system("pause");

                system("cls");

                manu();

            }

 

        }

        if (count1 == 0)

        {

            stu[n].num = k;

        }

        fflush(stdin);

        printf("输入学生的姓名");

        gets_s(stu[n].name);

        fflush(stdin);

        printf("输入学生的班级");

        scanf_s("%d", &stu[n].cl);

        printf("输入学生的语文成绩");

        fflush(stdin);

        scanf_s("%d", &stu[n].ch);

        printf("输入学生的数学成绩");

        fflush(stdin);

        scanf_s("%d", &stu[n].math);

        n++;

        fflush(stdin);

        printf("输入Y停止输入\n");

        scanf_s("%c", &a);

 

    } while (a != 'Y');

 

 

    printf("是否要实现插入操作输入y进入");

    fflush(stdin);

    scanf_s("%c", &b);

    printf("%c", b);

    if (b == 'y' || b == 'Y')

    {

        system("cls");

        printf("插入哪个学号之前");

        scanf_s("%d", &j);

        k = 1;

        for (i = 0; i < n; i++)

        {

            if (stu[i].num == j)

            {

                j = i;

                printf("此学号存在");

                k--;

                break;

            }

 

 

        }

        if (k == 1)

        {

            printf("学号不存在");

            system("pause");

            system("cls");

            manu();

        }

        for (i = n; i >= j; i--)

        {

            stu[i + 1] = stu[i];

        }

        n++;

        printf("登陆学生信息\n");

        printf("输入学生的学号\n");

        scanf_s("%d", &k);

        for (i = 0; i < n; i++)

        {

            if (stu[i].num == k)

            {

                printf("学号重复");

                count++;

                system("pause");

                system("cls");

                manu();

            }

 

 

        }

        if (count == 0)

        {

            stu[j].num = k;

        }

 

 

        fflush(stdin);

        printf("输入学生的姓名");

        fflush(stdin);

        gets_s(stu[j].name);

        fflush(stdin);

        printf("输入学生的班级");

        scanf_s("%d", &stu[j].cl);

        printf("输入学生的语文成绩");

        fflush(stdin);

        scanf_s("%d", &stu[j].ch);

        printf("输入学生的数学成绩");

        fflush(stdin);

        scanf_s("%d", &stu[j].math);

    }

    else

    {

        printf("输入有误\n");

        system("pause");

        system("cls");

        manu();

    }

    system("cls");

    manu();

 

 

}

void display()

{

    int j;

    system("cls");

    printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

    for (j = 0; j < n; j++)

    {

        printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

    }

    system("pause");

    system("cls");

    manu();

 

}

void Delete()

{

    int  nm;

    int count;

    int j, m = 0;

    char k;

 

    system("cls");

    printf("\t******************欢迎进入删除界面*****************************\t\n");

    //display();

    printf("\t\t选择按学号查找\n");

    fflush(stdin);

    scanf_s("%d", &nm);

    for (j = 0; j < n; j++)

    {

        if (stu[j].num == nm)

        {

            printf("找到了\n");

            count = j;

            m++;

 

            break;

        }

 

 

    }

    if (m == 0)

    {

        printf("没找到\n");

        printf("y重新输入\n");

        fflush(stdin);

        system("pause");

        scanf_s("%c", &k);

        if (k == 'y' || k == 'Y')

        {

            Delete();

 

        }

 

    }

 

 

 

    for (j = count; j < n; j++)

    {

        stu[j] = stu[j + 1];

    }

    n--;

    system("pause");

    display();

    system("pause");

    manu();

 

 

 

 

 

}

void Class()

{

    int i, j;

    int k = 0;

    char a;

    system("cls");

    printf("输入班级号\n");

    scanf_s("%d", &i);

    printf("\t学号\t姓名\t班级\t语文成绩\t数学成绩\n");

    for (j = 0; j < n; j++)

    {

        if (stu[j].cl == i)

        {

            printf("\t%d\t%s\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

            k = 1;

            continue;

        }

 

    }

 

    if (k == 0)

    {

        printf("很抱歉 没找到\n");

        printf("输入y继续");

        scanf_s("%c", &a);

        if (a == 'y' || a == 'Y')

        {

            system("pause");

            system("cls");

            manu();

        }

        else

        {

            printf("输入有误");

            system("pause");

            system("cls");

            manu();

 

        }

 

    }

 

    system("pause");

    system("cls");

    manu();

 

}

void num()

{

    int i, j;

    int k = 0;

    char a;

    system("cls");

    printf("输入学号\n");

    scanf_s("%d", &i);

    printf("\t学号\t姓名\t班级\t语文成绩\t数学成绩\n");

    for (j = 0; j < n; j++)

    {

        if (stu[j].num == i)

        {

            printf("\t%d\t%s\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

            k = 1;

            continue;

        }

 

    }

 

    if (k == 0)

    {

        printf("很抱歉 没找到\n");

        system("pause");

        printf("输入y继续");

 

        scanf_s("%c", &a);

        if (a == 'y' || a == 'Y')

        {

            system("pause");

            system("cls");

            manu();

        }

        else

        {

            printf("输入有误");

            system("pause");

            system("cls");

            manu();

 

        }

 

    }

    system("pause");

    system("cls");

    manu();

}

void tiaojian(int score)

{

    int i;

    int k = 0;

    for (i = 0; i < n; i++)

    {

        if (stu[i].ch >= score && stu[i].math >= score)

        {

            printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

            printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[i].num, stu[i].name, stu[i].cl, stu[i].ch, stu[i].math);

            k++;

            system("pause");

            system("cls");

            manu();

        }

 

    }

    if (k == 0)

    {

        printf("不存在满足条件的学生");

        system("pause");

        system("cls");

        manu();

 

    }

}

void lookfor()

{

    int i;

    int k = 0;

    system("cls");

    printf("\t=======================欢迎进入查找界面=========================\t\n");

 

 

    printf("             1,按班级查找\n");

    printf("             2,按学号查找\n");

    printf("             3,单科在90分以上\n");

    printf("             4,单科在80分以上\n");

    printf("             5,单科在60分以上\n");

    printf("             6,单科在60分以下\n");

    fflush(stdin);

    scanf_s("%d", &i);

    switch (i)

    {

    case 1:Class();

        break;

    case 2:num();

        break;

    case 3:

        tiaojian(90);

        break;

    case 4:

        tiaojian(80);

        break;

    case 5:

        tiaojian(60);

        break;

    case 6:

 

        for (i = 0; i < n; i++)

        {

            if (stu[i].ch < 60 && stu[i].math < 60)

            {

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[i].num, stu[i].name, stu[i].cl, stu[i].ch, stu[i].math);

                k++;

                system("pause");

                system("cls");

                manu();

            }

 

        }

        if (k == 0)

        {

            printf("不存在满足条件的学生");

            system("pause");

            system("cls");

            manu();

 

        }

        break;

 

 

 

 

    }

}

void xiugai()

{

    int i;

    int j;//循环序号

    char a[20];

    int k = 0;//标志点  

    int m;//选择点

    int h;//循环序号

    int count = 0;//标志点

    int g;

    system("cls");

    printf("\t******************欢迎进入修改界面*****************************\t\n");

    printf("                      按学号查找\n");

    printf("输入学号\n");

    fflush(stdin);

    scanf_s("%d", &g);

    for (j = 0; j < n; j++)

    {

        if (stu[j].num == g)

        {

            k++;

            printf("找到了\n");

            printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

            printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

 

 

            printf("                1,修改该生的学号\n");

            printf("                2,修改该生的姓名\n");

            printf("                3,修改该生的班级\n");

            printf("                4,修改该生的语文成绩\n");

            printf("                5,修改该生的数学成绩\n");

            scanf_s("%d", &m);

            if (m == 1)

            {

                printf("学号修改成:\n");

                scanf_s("%d", &i);

                for (h = 0; h < n; h++)

                {

                    if (stu[h].num == i)

                    {

                        printf("学号重复");

                        k++;

                        system("pause");

                        system("cls");

                        manu();

                    }

 

 

 

                }

                if (k != 0)

                {

                    stu[j].num = i;

                }

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

                system("pause");

                system("cls");

                manu();

                break;

            }

            if (m == 2)

            {

                printf("姓名修改成:\n");

                scanf_s("%s", &stu[j].name);

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

                system("pause");

                system("cls");

                manu();

            }

            if (m == 3)

            {

                printf("班级修改成:\n");

                scanf_s("%d", &stu[j].cl);

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

                system("pause");

                system("cls");

                manu();

            }

            if (m == 4)

            {

                printf("语文成绩修改成:\n");

                scanf_s("%d", &stu[j].ch);

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

                system("pause");

                system("cls");

                manu();

            }

            if (m == 5)

            {

                printf("数学成绩修改成:\n");

                scanf_s("%d", &stu[j].math);

                printf("\t学号\t姓名\t班级\t语文成绩   数学成绩\n");

                printf("\t%d\t%s\t %d\t  %d  \t     %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);

                system("pause");

                system("cls");

                manu();

            }

 

 

        }

 

    }

    if (k == 0)

    {

        printf("没找到\n");

        system("pause");

        system("cls");

        xiugai();

    }

 

}

void clear()

{

    n = 0;

    printf("信息已经清空");

    system("pause");

    display();

    manu();

 

}

void Exit()

{

    system("exit");

}

void sort()

{

    int i;

    int j, k;

    system("cls");

    printf("\t===============欢迎进入排序界面===============\t\n");

    printf("\n");

    printf("\n");

    printf("\n");

    printf("\t\t     1,按姓名排序\n");

    printf("\t\t     2,按班级排序\n");

    printf("\t\t     3,按语文成绩排序\n");

    printf("\t\t     4,按数学排序\n");

    printf("\t\t     5,按总分排序\n");

    scanf_s("%d", &i);

    switch (i)

    {

    case 1:

 

        for (j = 0; j < n; j++)

        {

            for (k = 0; k < n; k++)

            {

                if (stu[k].name > stu[k + 1].name)

                {

                    stu[199] = stu[k];

                    stu[k] = stu[k + 1];

                    stu[k + 1] = stu[199];

 

                }

            }

 

 

        }

        display();

        break;

    case 2:

        for (j = 0; j < n; j++)

        {

            for (k = 0; k < n - 1; k++)

            {

                if (stu[k].cl > stu[k + 1].cl)

                {

                    stu[199] = stu[k];

                    stu[k] = stu[k + 1];

                    stu[k + 1] = stu[199];

 

                }

            }

 

 

        }

        display();

        break;

    case 3:

        for (j = 0; j < n; j++)

        {

            for (k = 0; k < n - 1; k++)

            {

                if (stu[k].ch > stu[k + 1].ch)

                {

                    stu[100] = stu[k];

                    stu[k] = stu[k + 1];

                    stu[k + 1] = stu[100];

 

                }

            }

 

        }

        display();

        break;

    case 4:

        for (j = 0; j < n; j++)

        {

            for (k = 0; k < n - 1; k++)

            {

                if (stu[k].math > stu[k + 1].math)

                {

                    stu[199] = stu[k];

                    stu[k] = stu[k + 1];

                    stu[k + 1] = stu[199];

 

                }

            }

 

 

        }

        display();

        break;

    case 5:

        for (j = 0; j < n; j++)

        {

            stu[j].sum = stu[j].math + stu[j].ch;

            stu[j].aver = stu[j].sum / 2;

 

        }

        for (j = 0; j < n; j++)

        {

            for (k = 0; k < n - 1; k++)

            {

                if (stu[k].sum > stu[k + 1].sum)

                {

                    stu[199] = stu[k];

                    stu[k] = stu[k + 1];

                    stu[k + 1] = stu[199];

 

                }

            }

 

 

        }

        display();

        break;

    }

}

void zhuce()

{

    int a, b;

    printf("请输入工号/学号:\n");

    scanf_s("%d", &a);

    for (int i = 0; i < n; i++)

    {

        if (stu[i].num == a)

        {

            printf("学号重复!");

            system("pause");

            system("cls");

            printf("请重新输入:");

            zhuce();

        }

        else

        {

            stu[i].num = a;

            fflush(stdin);

            printf("输入学生的姓名");

            gets_s(stu[n].name);

            fflush(stdin);

            printf("输入学生的班级");

            scanf_s("%d", &stu[n].cl);

            printf("输入学生的语文成绩");

            fflush(stdin);

            scanf_s("%d", &stu[n].ch);

            printf("输入学生的数学成绩");

            fflush(stdin);

            scanf_s("%d", &stu[n].math);

            fflush(stdin);

            scanf_s("%c", &a);

            stu[i].password = 456852;

            printf("注册成功!");

            break;

        }

    }

    printf("注册成功!\n初始密码为:456852\n");

    manu();

}

void tongji()

{

    int i, j, k = 0;

    int summath = 0;

    int avermath;

    int sumch = 0;

    int averch;

    char a;

    system("cls");

    printf("\t\t==========1,每个学生的总分平均分============\n");

    printf("\t\t==========2,统计各个科目的平均分============\n");

    printf("\t\t==========3,统计班级的单科平均分============\n");

    printf("\t\t==========4,统计班级的总平均分==============\n");

 

    scanf_s("%d", &i);

    switch (i)

    {

    case 1:for (j = 0; j < n; j++)

    {

        stu[j].sum = stu[j].math + stu[j].ch;

        stu[j].aver = stu[j].sum / 2;

 

    }

          printf("\t学号\t姓名\t班级\t语文\t数学\t总分\t平均分\n");

          for (j = 0; j < n; j++)

          {

              printf("\t%d\t%s\t%d\t%d\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math, stu[j].sum, stu[j].aver);

          }

          system("pause");

          system("cls");

          manu();

          break;

    case 2:

        for (j = 0; j < n; j++)

        {

            summath += stu[j].math;

            avermath = summath / n;

            sumch += stu[j].ch;

            averch = sumch / n;

        }

        printf("\t学号\t姓名\t班级\t语文\t数学\t语文均分\t数学均分\n");

        for (j = 0; j < n; j++)

        {

            printf("\t%d\t%s\t%d\t%d\t%d  \t%d  \t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math, averch, avermath);

        }

        system("pause");

        system("cls");

        manu();

 

        break;

    case 3:                          //统计班级的单科平均分

        printf("输入班级号");

        scanf_s("%d", &i);

        for (j = 0; j < n; j++)

        {

            if (stu[j].cl == i)

            {

                summath += stu[j].math;

                sumch += stu[j].ch;

                k++;

            }

            else

            {

                printf("您输入的班级号不存在\n");

                system("pause");

                system("cls");

                tongji();

 

            }

        }

        avermath = summath / k;

        averch = sumch / k;

        printf("\t班级\t语文均分\t数学均分\n");

        printf("\t%d\t%d\t%d\n", i, averch, avermath);

        system("pause");

        system("cls");

        manu();

        break;

    case 4:                                 //统计班级的总平均分

        printf("输入班级号");

        scanf_s("%d", &i);

        for (j = 0; j < n; j++)

        {

            if (stu[j].cl == i)

            {

                summath += stu[j].math + stu[j].ch;

 

                k++;

            }

            else

            {

                printf("您输入的班级号不存在\n");

                system("pause");

                system("cls");

                tongji();

 

            }

 

        }

        avermath = summath / k;

        printf("\t班级\t总均分\n");

        printf("\t%d\t%d\n", i, avermath);

        system("pause");

        system("cls");

        manu();

        break;

    }

 

}

void  manu()

{

    int i;

    system("cls");

    printf("\t************************************************************\n");

    printf("\t                           管理员登陆界面                        \n");

    printf("\t************************************************************\n");

    printf("\t                      欢迎进入学生管理成绩系统                  \n");

    printf("\t0,功能:\n");

    printf("\t1,浏览学生成绩\n");

    printf("\t2,添加学生成绩\n");

    printf("\t3,修改学生成绩\n");

    printf("\t4,删除学生成绩\n");

    printf("\t5,清空记录\n");

    printf("\t6,按要求查询学生成绩\n");

    printf("\t7,按要求排序\n");

    printf("\t8,按要求统计成绩\n");

    printf("\t9,关闭程序\n");

    printf("\t请选择功能:\n");

    scanf_s("%d", &i);

    switch (i)

    {

    case 1:

        display();

        break;

    case 2:

        add();

        break;

    case 3:

        xiugai();

        break;

    case 4:

        Delete();

        break;

    case 5:

        clear();

        break;

    case 6:

        lookfor();

        break;

    case 7:

        sort();

        break;

    case 8:

        tongji();

        break;

    case 9:

        break;

    }

}

 

void main()

{

    int i;

    char a[20] = { 'l','i','u' };

    int j = 123;

    char b[20];

    int k;

    printf("\t\t\t  1.普通用户登陆\n");

    printf("\t\t\t  2.用户注册\n");

    printf("\t\t\t  功能选择:\n");

    scanf_s("%d", &i);

    if (i == 1)

    {

        printf("输入用户名和密码\n");

        printf("用户名\n");

        fflush(stdin);

        gets_s(b);

        printf("密码\n");

        scanf_s("%d", &k);

 

        if (strcmp(a, b) == 0 && j == k)

        {

            manu();

        }

        else

        {

            printf("输入错误");

            system("exit");

        }

 

    }

    if(i==2)

    {

        zhuce();

    }

    else

    {

        printf("输入错误");

        system("exit");

    }

}

posted @ 2022-03-01 19:13  空劫  阅读(78)  评论(0编辑  收藏  举报