C语言:基于数组的学生管理系统的增删改查排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 9999
int n,c;           //设置全局变量                                 //基于数组的学生管理系统
struct school           //建立结构体
{
    char num[20];
    char name[50];
    char sex;
    float Chinese1;
    float Math1;
    float English1;
    float average;
}student[N];
void fanghui()          //给全局变量定值
{
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t\t\t需要管理多少个学生?   ");
    scanf("%d",&n);
    system("cls");
}
int Menu();          //一级菜单
void fun1(struct school student[999]);          //学号排序
void fun2(struct school student[999]);          //姓名排序
int fun3();          //按照某门课排序
void fun4(struct school student[999]);          //平均分排序
void fanghui();       //调用全局变量
void input_data(struct school student[]);          //录入信息
void output_data();          //输出信息
void increase();          //增添信息
void strike();          //删减信息
void revise();          //修改信息
int sort();          //排序大函数
int seek(char numb[20]);          //查找学号
int menu();          //二级菜单
void Chinese(struct school student[999]);          //语文成绩排序
void English(struct school student[999]);          //数学成绩排序
void Math(struct school student[999]);          //英语成绩排序
int third();          //三级菜单
int main()
{
    fanghui();          //调用全局变量
    int choose;
    while(1)          //switch循环,选择功能
    {
        choose = Menu();
        switch(choose)
        {
            case 1:
                input_data(student);
                break;
            case 2:
                output_data();
                break;
            case 3:
                increase();
                break;
            case 4:
                strike();
                break;
            case 5:
                revise();
                break;
            case 6:
                sort();
                break;
            case 7:
                exit(0);
                break;
            default:
                system("cls");
                printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
                break;
            }
        getch();          //输入回车后继续
    }
    return 0;
}
int Menu()          //一级菜单
{
    system("cls");
    int choose;
    printf("\n");
    printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|   学生成绩管理系统V1.0|\t\t\t\n");
	printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|\t1.录入信息\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t2.打印信息\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t3.增加信息\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t4.删除信息\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t5.修改信息\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t6.信息排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t7.退出系统\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\n");
	printf("\t\t\t\t\t请输入您要选择的功能键: ");
    scanf("%d",&choose);
    return choose;
}
int menu()          //二级菜单
{
    int cho;
    system("cls");
    printf("\n");
    printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|    二级菜单V1.0 \t|\t\t\t\n");
	printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|\t1.学号排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t2.姓名排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t3.学科排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t4.平均分排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t5.返回上一级\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t(tip:排序功能一次不成功可反复按)\n");
	printf("\n");
	printf("\t\t\t\t\t请输入您要选择的功能键: ");
	scanf("%d",&cho);
    return cho;
}
int third()          //三级菜单
{
    int p;
    system("cls");
    printf("\n");
    printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|     三级菜单V1.0 \t|\t\t\t\n");
	printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\t\t\t\t\t|\t1.语文排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t2.数学排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t3.英语排序\t|\t\t\t\t\n");
	printf("\t\t\t\t\t|\t4.返回上一级\t|\t\t\t\t\n");
	printf("\t\t\t\t\t-------------------------\n");
	printf("\n");
	printf("\t\t\t\t\t请输入您要选择的功能键: ");
	scanf("%d",&p);
    return p;
}
void input_data(struct school student[])
{
    int i;
    system("cls");          //清屏
    for(i=0;i<n;i++)
    {
        printf("\n");
        printf("输入学号:");
        scanf("%s",student[i].num);
        printf("输入姓名:");
        getchar();
        gets(student[i].name);
        printf("输入性别(m or f):");
        scanf("%c",&student[i].sex);
        printf("输入语数英成绩(0~100):");
        scanf("%f%f%f",&student[i].Chinese1,&student[i].Math1,&student[i].English1);
        printf("\n");
        if(student[i].Chinese1>100 || student[i].Chinese1<0 ||           //两个if判断是否符合信息
           student[i].Math1>100 || student[i].Math1<0 ||
           student[i].English1>100 || student[i].English1<0)
        {
            printf("成绩输入错误!\n按回车返回菜单。");
            getch();
            Menu();          //不成功返回菜单
        }
        if(student[i].sex != 'm' && student[i].sex != 'f')
        {
            printf("性别输入错误!\n按回车返回菜单。");
            getch();
            Menu();
        }
    }
    printf("录入成功!\n");
    printf("按回车继续……");
}
void output_data(struct school student[999])          //输出信息
{
    int i;
    system("cls");
    for(i=0;i<n+c;i++)         //计算平均分
    {
        student[i].average = student[i].Chinese1+student[i].Math1+student[i].English1;
        student[i].average = 1.0*student[i].average/3;
    }
    printf("\t\n\n学生信息:\n");
    printf("       学号        姓名     性别   语文   数学   英语   平均分\n");
    printf("--------------------------------------------------------------\n");
    for(i=0;i<n+c;i++)
    {
        printf("%10s%13s%6c%8.2f%8.2f%8.2f%8.2f\n",student[i].num,student[i].name,student[i].sex,student[i].Chinese1,student[i].Math1,student[i].English1,student[i].average);
    }
    printf("\n\n打印完成...\n");
    printf("按回车继续……");
}
void increase()          //增加信息
{
    int c,i,k;
    system("cls");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t  \t添加多少个学生信息?   ");
    scanf("%d",&c);          //输入添加人数
    system("cls");
    k = n;
    for(i=n;i<k+c;i++)          //执行添加人数后的输入
    {
        printf("输入学号:");
        getchar();
        scanf("%s",student[i].num);
        printf("输入姓名:");
        getchar();
        gets(student[i].name);
        printf("输入性别(m or f):");
        scanf("%c",&student[i].sex);
        printf("输入三门课成绩(0~100):");
        scanf("%f%f%f",&student[i].Chinese1,&student[i].Math1,&student[i].English1);
        if(student[i].Chinese1>100 || student[i].Chinese1<0 ||           //两个if判断是否符合信息
           student[i].Math1>100 || student[i].Math1<0 ||
           student[i].English1>100 || student[i].English1<0)
        {
            printf("成绩输入错误!\n按回车返回菜单。");
            getch();
            Menu();          //不成功返回菜单
        }
        if(student[i].sex != 'm' && student[i].sex != 'f')
        {
            printf("性别输入错误!\n按回车返回菜单。");
            getch();
            Menu();
        }
        printf("\n");
        n++;
    }
    printf("添加成功!\n");
    printf("按回车继续……");
}
int seek(char num[20])          //查找学号
{
    int i;
    for(i=0;i<n;i++)
    {
        if(!strcmp(student[i].num,num))          //输入学号到该函数,判断该学号是否存在
            return i+1;
    }
    return 0;
}
void strike()          //删除学生信息
{
    int a,j,i;
    char number[20],xuanz;
    system("cls");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t  \t输入要删除的学生学号: ");
    scanf("%s",number);
    system("cls");
    a = seek(number);         //输入学号到seek函数调用,查找该学号是否存在
    if(a!=0)
    {
        printf("\n\n");
        printf("要删除的学生信息如下\n");
        printf("       学号        姓名     性别   语文   数学   英语\n");
        printf("-----------------------------------------------------\n");
        printf("%10s%13s%6c%8.2f%8.2f%8.2f\n",student[a-1].num,student[a-1].name,student[a-1].sex,student[a-1].Chinese1,student[a-1].Math1,student[a-1].English1);
        printf("是否修改该学生信息(Y or N)?");
        getchar();
        scanf("%c",&xuanz);
        if(xuanz == 'Y' || xuanz == 'y')
        {
            for(i=0;i<n;i++)
            {
                if(strcmp(number,student[i].num)==0)         //如果遇到学号相等实现删除操作
                {
                    for(j=i+1;j<n;j++,i++)
                        student[i] = student[j];
                    n--;
                    printf("删除完成……\n");
                    printf("按回车继续……");
                }
            }
        }
        else
        {
            printf("失败(按任意键继续)!");
            getch();
            Menu();
        }
    }
    else
    {
        printf("\n失败(该学生不存在)!\n");
        printf("按回车继续……");
    }

}
void revise()         //修改学生信息
{
    int a;
    char xuanz;
    char newnum[20],number[20];
    system("cls");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t  \t输入要修改的学生学号: ");
    scanf("%s",number);
    system("cls");
    a = seek(number);         //调用函数
    if(a!=0)
    {
        printf("\n\n");
        printf("       学号        姓名     性别   语文   数学   英语\n");
        printf("-----------------------------------------------------\n");
        printf("%10s%13s%6c%8.2f%8.2f%8.2f\n",student[a-1].num,student[a-1].name,student[a-1].sex,student[a-1].Chinese1,student[a-1].Math1,student[a-1].English1);
        printf("是否修改该学生信息(Y or N)?");
        getchar();
        scanf("%c",&xuanz);
        if(xuanz == 'Y' || xuanz == 'y')         //判断是否
        {
            system("cls");
            printf("输入新的信息:\n");
            printf("输入学号:");
            scanf("%s",newnum);
            printf("输入姓名:");
            getchar();
            gets(student[a-1].name);
            printf("输入性别(m or f):");
            scanf("%c",&student[a-1].sex);
            printf("输入三门课成绩(0~100):");
            scanf("%f%f%f",&student[a-1].Chinese1,&student[a-1].Math1,&student[a-1].English1);
            if(student[a-1].Chinese1>100 || student[a-1].Chinese1<0 ||           //两个if判断是否符合信息
               student[a-1].Math1>100 || student[a-1].Math1<0 ||
               student[a-1].English1>100 || student[a-1].English1<0)
            {
                printf("成绩输入错误!\n按回车返回菜单。");
                getch();
                Menu();          //不成功返回菜单
            }
            if(student[a-1].sex != 'm' && student[a-1].sex != 'f')
            {
                printf("性别输入错误!\n按回车返回菜单。");
                getch();
                Menu();
            }
                printf("\n");
                strcpy(student[a-1].num,newnum);
                printf("修改成功!");
                printf("按回车继续……");
        }
        else
        {
            printf("失败(按任意键继续)!");
            getch();
            Menu();
        }
    }
    else
        {
            printf("\n失败(该学生不存在)!\n");
            printf("按回车继续……");
        }
}
int sort()         //排顺序
{
    system("cls");
    int ch;
           //调用菜单函数
    while(1)
    {
        ch = menu();
        switch(ch)
        {
            case 1:
                fun1(student);
                break;
            case 2:
                fun2(student);
                break;
            case 3:
                fun3();
                break;
            case 4:
                fun4(student);
                break;
            case 5:
                return(1);         //返回上一级
                break;
            default:
                system("cls");
                printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
                break;
        }
        getch();
    }
}
void fun1(struct school student[999])         //姓名排序
{
    int i,j;
    system("cls");
    for(i=0;i<n+c-1;i++)         //冒泡法排序
    {
        for(j=i+1; j<n+c; j++)
            if(strcmp(student[i].num,student[i+1].num)>0)
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n姓名由小到大排序");
    output_data(student);         //调用函数
}
void fun2(struct school student[999])         //学号排序
{
    int i,j;
    system("cls");
    for(i=0;i<n+c-1;i++)         //冒泡法
    {
        for(j=i+1;j<n+c;j++)
            if(strcmp(student[i].name,student[i+1].name)>0)         //用strcmp比较两个字符串
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n姓名由小到大排序:");
    output_data(student);
}
int fun3()         //某门课排序
{
    system("cls");
    int a;
             //调用函数
    while(1)
    {
        a = third();
        switch(a)
        {
            case 1:
                Chinese(student);
                break;
            case 2:
                Math(student);
                break;
            case 3:
                English(student);
                break;
            case 4:
                return(1);
            default:
                system("cls");
                printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
                break;
        }
        getch();
    }
}
void fun4(struct school student[999])         //平均分排序
{
    system("cls");
    int i,j;
    for(i=0;i<n+c;i++)         //计算平均分
    {
        student[i].average = student[i].Chinese1+student[i].Math1+student[i].English1;
        student[i].average = 1.0*student[i].average/3;
    }
    for(i=0;i<n+c-1;i++)         //冒泡法
    {
        for(j=i+1;j<n+c;j++)
            if(student[i].average>student[i+1].average)
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n平均成绩由小到大排序:");
    printf("\t\n\n学生信息:\n");
    printf("       学号        姓名     性别   语文   数学   英语   平均分\n");
    printf("--------------------------------------------------------------\n");
    for(i=0;i<n+c;i++)
    {
        printf("%10s%13s%6c%8.2f%8.2f%8.2f%8.2f\n",student[i].num,student[i].name,student[i].sex,student[i].Chinese1,student[i].Math1,student[i].English1,student[i].average);
    }
}
void Chinese(struct school student[999])         //语文成绩排序
{
    system("cls");
    int i,j;
    for(i=0;i<n+c-1;i++)         //冒泡法
    {
        for(j=i+1;j<n+c;j++)
            if(student[i].Chinese1>student[i+1].Chinese1)
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n语文成绩由小到大排序:");
    output_data(student);
}
void Math(struct school student[999])
{
    system("cls");
    int i,j;
    for(i=0;i<n+c-1;i++)
    {
        for(j=i+1;j<n+c;j++)
            if(student[i].Math1>student[i+1].Math1)
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n数学成绩由小到大排序:");
    output_data(student);
}
void English(struct school student[999])
{
    system("cls");
    int i,j;
    for(i=0;i<n+c-1;i++)
    {
        for(j=i+1;j<n+c;j++)
            if(student[i].English1>student[i+1].English1)
            {
                student[999] = student[i];
                student[i] = student[i+1];
                student[i+1] = student[999];
            }
    }
    printf("\n\n英语成绩由小到大排序:");
    output_data(student);
}

 希望这篇文章对你有帮助

仅供参考!

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coolstuz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值