学生信息管理系统

1、主函数

#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Student_MM.h"
int main()
{
    while(1)
    {
    int Chose = 0;      //输入选择
    Menu();         //显示主菜单
    printf("请输入你的选择:");
    scanf("%d",&Chose);
        if (0 < Chose < 8)
        {
            printf("请重新选择!\n");
        }
        else
        {
            switch (Chose)
            {
                case 1:
                    Input();        //输入学生信息
                    break;
                case 2:
                    Delete();       //删除学生信息
                    break;
                case 3:
                    Browse();       //浏览学生信息
                    break;
                case 4:
                    Search();       //查找学生信息
                    break;
                case 5:
                    Rank();         //学生信息排序
                    break;
                    /*case 6:
                     Save();         //存储学生信息
                     break;
                     case 7:
                     output();       //导出学生信息
                     break;*/
                default:
                    break;
            }
        }
    }
           return 0;
}

2、sudden_MM.h

/***** 声明几个函数原形 *****/

#ifndef Student_MM_h
#define Student_MM_h

extern int Menu();         //显示主菜单
extern int Input();        //输入学生信息
extern int Delete();       //删除学生信息
extern int Browse();       //浏览学生信息
extern int Search();       //查找学生信息
extern int Rank();         //学生信息排序
extern int Save();         //存储学生信息
extern int output();       //导出学生信息

#endif /* Student_MM_h */

3、student_MM.c

/**************************/
/**********函数实现**********/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//包含自定义文件时,使用双引号
#include "Student_MM.h"
#define M 3
#define N 5
/**********************************************/
typedef struct student
{
    char Student_Num[20];       //学生学号
    char Name[50];              //学生姓名
    int Score[M];               //每一科目的分数
    int Sum;
}STUDENT;
STUDENT student[N];             //一共N个学生都使用struct
int ORS = 0;                    //定义起始人数是0个人
/**********************************************/
/**********************************************/
int Menu(void)
{
    printf("北航学生信息管理系统\n");
    printf("****************\n");
    printf("1、输入学生信息\n");
    printf("2、删除学生信息\n");
    printf("3、浏览学生信息\n");
    printf("4、查找学生信息\n");
    printf("5、学生信息排序\n");
    printf("6、储存学生信息\n");
    printf("7、导出学生信息\n");
    printf("----------------\n");
    return 0;
}
/**********************************************/
//请输入需要录入信息的学生个数
/**********************************************/
int Input(void)
{
    int Input_Num,i;
    //system("CLS");
    printf("请输入需要录入信息的学生个数:\n");
    scanf("%d",&Input_Num);
    for (i = ORS; i < ORS + Input_Num; i++)
    {
        printf("请输入%d学生的学号:\n",i + 1);
        scanf("%s",student[i].Student_Num);
        printf("请输入%d学生的姓名:\n",i + 1);
        scanf("%s",student[i].Name);
        printf("请输入第%d学生的%d门课的成绩:\n",i + 1,M);
        for (int j = 0; j < M; j++)
        {
            printf("请输入第%d门课的成绩:\n",j + 1);
            scanf("%d",&student[i].Score[j]);
        }
    }
    ORS = ORS + Input_Num;      //增加过后的人数
    return 0;
}
/**********************************************/
//删除学生信息
//1、输出全部学生信息或者指定学生信息
//2、
/**********************************************/
int Delete(void)
{
    int Error_Mark = 0;             //输出错误标志Error_Mark
    while ((Error_Mark = 0))//如果输入错误,提示再次输入,直到正确为止
    {
    char Chose[10];
    printf("删除全部学生信息(A)还是指定学生信息(I):\n");
    scanf("%s",Chose);
    if (strcmp(Chose,"A") == 0)     //删除全部
    {
        ORS = 0;                    //人数清零
        printf("删除成功!\n");
        Error_Mark = 1;
    }
    else if(strcmp(Chose, "I") == 0)//删除指定学生信息
    {
        Error_Mark = 1;
        //开始删除指定的学生信息...
        //1、显示所有学生的信息...
        //2、选择要删除的学生信息...
        //3、删除...
        char InputDel;  //要删除学生信息的学号
        printf("请输入要删除学生信息的学号:");
        scanf("%s",&InputDel);  //键入要删除的学号
        //其实就是删除指定的数组元素而已...
    }
    else
    {
        printf("输出错误请重新输入!\n");
        //Error_Mark =  1;            //输出错误标志位设置为1
    }
    }
    return 0;
}
/**********************************************/
//浏览学生信息
/**********************************************/
int Browse()
{
    //将学生的信息全部打印出来
    //1、学生学号
    //2、学生姓名
    //3、每一科目的分数
    for (int j = 0; j < ORS; j++)
    {
        student[j].Sum = 0;   //每个学生的初始总分是0分
        for (int i = 0; i < M; i++)
        {
            student[j].Sum += student[j].Score[i];
        }
    }           //计算每个学生的总成绩是多少
    //输出学生信息...
    for (int i = 0; i < ORS; i++)   //学生个数
    {
        printf("第%d个学生的学号是:%s\n",i + 1,student[i].Student_Num);//打印学号
        printf(".........姓名是:%s\n",student[i].Name);             //打印姓名
        for (int j = 0; j < M; j ++)//学生学号
        {
            printf("第%d科的分数是:%d\n",j + 1,student[i].Score[j]);
        }
        printf(".......总成绩是:%d\n",student[i].Sum);
        printf("_______\n");//打印学号
    }
    return 0;
}
/**********************************************/
//查找学生信息
/**********************************************/
int Search()
{
    //1、学号查找
    //2、姓名查找
    //3、分数查找....考多少分的是哪几个人或者大于多少分的是哪几个人
    printf("选择你所需要的查找方式:\n");
    printf("1、学号查找\n");
    printf("2、按姓名查找\n");
    printf("3、按照分数查找\n");
    int chose;  //你的选择
    scanf("%d",&chose);
    switch (chose)
    {
        case 1:
            //学号查找
            printf("请输入你的学号:\n");
            char InputNum[20];  //输入你所想要查找的学号
            scanf("%s",InputNum);
            for (int i = 0; i < ORS ; i++ )
            {
                //判断两个字符串是否相同
                if(strcmp(InputNum,student[i].Student_Num) == 0)  //找到了该学号,输出该学生的信息
                {
                    printf("该学生的基本信息如下:\n");
                    printf("_____\n");
                    printf("该学生的学号是:%s\n",student[i].Student_Num);
                    printf("该学生的姓名是:%s\n",student[i].Name);
                    printf("该学号生的各科分数是:\n");
                    for (int j = 0; j < M; j++)
                    {
                        printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
                    }
                }
            }
            break;
        case 2:
            //姓名查找
            printf("亲输入你想查找学生的姓名:");
            char SearchName[50];
            scanf("%s",SearchName); //输入查找的姓名
            //开始查找...
            for (int i = 0; i < ORS; i++) {
                if(strcmp(SearchName,student[i].Name) == 0)
                {
                    printf("该学生的基本信息如下:\n");
                    printf("_____\n");
                    printf("该学生的学号是:%s\n",student[i].Student_Num);
                    printf("该学生的姓名是:%s\n",student[i].Name);
                    printf("该学号生的各科分数是:\n");
                    for (int j = 0; j < M; j++)
                    {
                        printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
                    }
                }
            }
            break;
        case 3:
            //分数查找
            printf("请输入你想查找的是哪一科目:\n");
            int Inputls;    //输入查找的科目
            scanf("%d",&Inputls);
            //开始查找...
            printf("请输入待查找学生该科目的分数:\n");
            int InputScore; //待查找学生该科目的分数
            scanf("%d",&InputScore);
            for (int i = 0; i < ORS; i++)
            {
                if(InputScore == student[i].Score[Inputls - 1])//与所要查找科目的分数是相同的
                {
                    printf("该学生的基本信息如下:\n");
                    printf("_____\n");
                    printf("该学生的学号是:%s\n",student[i].Student_Num);
                    printf("该学生的姓名是:%s\n",student[i].Name);
                    printf("该学号生的各科分数是:\n");
                    for (int j = 0; j < M; j++)
                    {
                        printf("第%d科目的分数是:%d\n",j + 1,student[i].Score[j]);
                    }
                }
            }
            break;
        default:
            break;
    }
    return 0;
}
/**********************************************/
//学生信息排序
//定义一个排序函数
/**********************************************/
int Rank()
{
    //1、按学号排序...即学号从小到大排
    //2、按照某一科目或者总成绩的分数排序
    //3、按照姓氏排序...姓氏首字母排序
    //.....
    //选择排序方法
    printf("1、按学号排序...即学号从小到大排\n");
    printf("2、按照某一科目或者总成绩的分数排序\n");
    printf("3、按照姓氏排序...姓氏首字母排序\n");
    int chose;  //选择排序的方法
    int choice;
    printf("请输入排序方法:\n");
    scanf("%d",&chose);
    switch (chose)
    {
        case 1:
            //1、按学号排序...即学号从小到大排
            //...冒泡排序法
            //..转化成int型
            for (int i = 0 ; i < ORS - 1; i++)
            {
                for (int j = 0; j < ORS - i - 1; j++)
                {
                    if(strcmp(student[j].Student_Num , student[j + 1].Student_Num) > 0)
                    {
                        //学号重新排
                        char temp[20];
                        strcpy(temp,student[j].Student_Num);
                        strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                        strcpy(student[j + 1].Student_Num, temp);
                        //姓名也要随着改变...
                        char nameflash[20]; //临时转移姓名的数组
                        strcpy(nameflash,student[j].Name);
                        strcpy(student[j].Name,student[j + 1].Name);
                        strcpy(student[j + 1].Name,nameflash);
                        //分数也要改变...
                        for (int ii  = 0; ii < M; ii++)
                        {
                            int scoreflash; //分数临时变量
                            scoreflash = student[j].Score[ii];
                            student[j].Score[ii] = student[j + 1].Score[ii];
                            student[j + 1].Score[ii] = scoreflash;
                        }
                    }
                }
            }
            break;
        case 2:
            //2、按照某一科目或者总成绩的分数排序
                //...按照第一科目成绩排序
                //...按照第二科目成绩排序
                //...按照第三科目成绩排序
                //...按照总成绩排序
            printf("1...按照第一科目成绩排序\n");
            printf("2...按照第二科目成绩排序\n");
            printf("3...按照第三科目成绩排序\n");
            printf("4...按照总成绩排序\n");
            printf("请输入你选择的排序方式:\n");
            scanf("%d",&choice);
            switch (choice)
            {
                case 1:
                    printf("按照第一科目成绩的排序是:\n");
                    for (int i  = 0; i < ORS; i++)
                    {
                        for (int j = 0; j < ORS - i - 1; j++)
                        {
                            if (student[j].Score[0] < student[j + 1].Score[0])
                            {
                                //分数也要改变...
                                for (int ii  = 0; ii < M; ii++)
                                {
                                    int scoreflash; //分数临时变量
                                    scoreflash = student[j].Score[ii];
                                    student[j].Score[ii] = student[j + 1].Score[ii];
                                    student[j + 1].Score[ii] = scoreflash;
                                }
                                //姓名也要随着改变...
                                char nameflash[20]; //临时转移姓名的数组
                                strcpy(nameflash,student[j].Name);
                                strcpy(student[j].Name,student[j + 1].Name);
                                strcpy(student[j + 1].Name,nameflash);
                                //学号重新排
                                char temp[20];
                                strcpy(temp,student[j].Student_Num);
                                strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                                strcpy(student[j + 1].Student_Num, temp);
                            }
                        }
                    }
                    break;
                case 2:
                    printf("按照第二科目成绩的排序是:\n");
                    for (int i  = 0; i < ORS; i++)
                    {
                        for (int j = 0; j < ORS - i - 1; j++)
                        {
                            if (student[j].Score[1] < student[j + 1].Score[1])
                            {
                                //分数也要改变...
                                for (int ii  = 0; ii < M; ii++)
                                {
                                    int scoreflash; //分数临时变量
                                    scoreflash = student[j].Score[ii];
                                    student[j].Score[ii] = student[j + 1].Score[ii];
                                    student[j + 1].Score[ii] = scoreflash;
                                }
                                //姓名也要随着改变...
                                char nameflash[20]; //临时转移姓名的数组
                                strcpy(nameflash,student[j].Name);
                                strcpy(student[j].Name,student[j + 1].Name);
                                strcpy(student[j + 1].Name,nameflash);
                                //学号重新排
                                char temp[20];
                                strcpy(temp,student[j].Student_Num);
                                strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                                strcpy(student[j + 1].Student_Num, temp);
                            }
                        }
                    }
                    break;
                case 3:
                    printf("按照第三科目成绩的排序是:\n");
                    for (int i  = 0; i < ORS; i++)
                    {
                        for (int j = 0; j < ORS - i - 1; j++)
                        {
                            if (student[j].Score[2] < student[j + 1].Score[2])
                            {
                                //分数也要改变...
                                for (int ii  = 0; ii < M; ii++)
                                {
                                    int scoreflash; //分数临时变量
                                    scoreflash = student[j].Score[ii];
                                    student[j].Score[ii] = student[j + 1].Score[ii];
                                    student[j + 1].Score[ii] = scoreflash;
                                }
                                //姓名也要随着改变...
                                char nameflash[20]; //临时转移姓名的数组
                                strcpy(nameflash,student[j].Name);
                                strcpy(student[j].Name,student[j + 1].Name);
                                strcpy(student[j + 1].Name,nameflash);
                                //学号重新排
                                char temp[20];
                                strcpy(temp,student[j].Student_Num);
                                strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                                strcpy(student[j + 1].Student_Num, temp);
                            }
                        }
                    }
                    break;
                case 4:
                    printf("按照总成绩的排序是:\n");
                    for (int j = 0; j < ORS; j++)
                    {
                        student[j].Sum = 0;   //每个学生的初始总分是0分
                        for (int i = 0; i < M; i++)
                        {
                            student[j].Sum += student[j].Score[i];
                        }
                    }           //计算每个学生的总成绩是多少
                    
                    for (int i  = 0; i < ORS; i++)
                    {
                        for (int j = 0; j < ORS - i - 1; j++)
                        {
                            if (student[j].Sum < student[j + 1].Sum)
                            {
                                //分数也要改变...
                                for (int ii  = 0; ii < M; ii++)
                                {
                                    int scoreflash; //分数临时变量
                                    scoreflash = student[j].Score[ii];
                                    student[j].Score[ii] = student[j + 1].Score[ii];
                                    student[j + 1].Score[ii] = scoreflash;
                                }
                                //姓名也要随着改变...
                                char nameflash[20]; //临时转移姓名的数组
                                strcpy(nameflash,student[j].Name);
                                strcpy(student[j].Name,student[j + 1].Name);
                                strcpy(student[j + 1].Name,nameflash);
                                //学号重新排
                                char temp[20];
                                strcpy(temp,student[j].Student_Num);
                                strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                                strcpy(student[j + 1].Student_Num, temp);
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
        case 3:
            //3、按照姓氏排序...姓氏首字母排序
            //按照首字母的ascii进行排序
            //a - b
            for(int i  =0 ;i < ORS;i++)
            {
                for (int j = 0; j < ORS - i -1; j++)
                {
                    if (strcmp(student[j].Name, student[j + 1].Name) > 0)   //b,a故而交换位置
                    {
                        //分数也要改变...
                        for (int ii  = 0; ii < M; ii++)
                        {
                            int scoreflash; //分数临时变量
                            scoreflash = student[j].Score[ii];
                            student[j].Score[ii] = student[j + 1].Score[ii];
                            student[j + 1].Score[ii] = scoreflash;
                        }
                        //姓名也要随着改变...
                        char nameflash[20]; //临时转移姓名的数组
                        strcpy(nameflash,student[j].Name);
                        strcpy(student[j].Name,student[j + 1].Name);
                        strcpy(student[j + 1].Name,nameflash);
                        //学号重新排
                        char temp[20];
                        strcpy(temp,student[j].Student_Num);
                        strcpy(student[j].Student_Num, student[j + 1].Student_Num);
                        strcpy(student[j + 1].Student_Num, temp);
                    }
                }
            }
            break;
        default:
            break;
           //查看排序结果..
    }
    printf("新的排序结果是:\n");
    for (int i = 0; i < ORS; i++)
    {
        printf("第%d个学生的学号是:%s\n",i + 1,student[i].Student_Num);
    }
    return 0;
}
/**********************************************/
//存储学生信息
/**********************************************/
int Save()
{
    return 0;
}
/**********************************************/
//导出学生信息
/**********************************************/
int output()
{
    return 0;
}

…代码有待优化、补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值