C语言-学生管理系统(结构体+数组实现)

简介: C语言-学生管理系统(结构体+数组实现)

1. 学生管理系统功能介绍

前面文章里介绍了结构体类型,知道结构体类型里可以存放不同的数据类型,属于一个有序的集合。


这篇文章就使用结构体知识点完成一个小练习,使用结构体+数组设计一个简单的学生管理系统,作为结构体知识点的巩固练习。


功能如下:


(1). 欢迎界面提示


(2). 输入密码登录


(3). 功能: 录入学生信息、按照学号排序、按照成绩排序、输出所有学生信息、输出指定学生信息(学号、姓名、成绩)、计算成绩平均值值输出打印、删除指定学生信息、增加新的学生信息。


(4). 功能模块采用菜单方式选择


2. 框架设计

#include <stdio.h>
#include <stdlib.h>
void  Display_info(void);
char buff_user[50];
char buff_password[50];
int main()
{
    int a,i;
    printf("------欢迎使用xxxx学生管理系统------\n");
    for(i=1;i<=3;i++)
    {
        printf("请输入用户名:");
        scanf("%s",buff_user);
        printf("请输入密码:");
        system("stty -echo"); //系统函数---调用系统的命令 关闭回显
        scanf("%s",buff_password);
        printf("\n");
        system("stty echo"); //系统函数---调用系统的命令 开回显
        //比较密码是否正确
        if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
        {
            printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i);
        }
        else break;
    }
    //比较密码是否正确
    if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
    {
        printf("系统安全退出.\n");
        return 0;  //exit();  //终止进程
    }
/*
#include <stdlib.h>
void exit(int status);   比如: exit(0);
*/
    while(1)
    {
        Display_info();
        scanf("%d",&a);
        switch (a)
        {
        case 1:
            printf("选择录取学生信息\n");
            break;
        case 2:
            printf("输出学生信息\n");
            break;
         //............
        default:
            break;
        }
    }
    return 0;
}
//显示提示信息
void  Display_info(void)
{
    printf("------欢迎使用xxxx学生管理系统------\n");
    printf("1. 录取学生信息\n");
    printf("2. 输出学生信息\n");
    printf("3. 打印成绩平均值\n");
    printf("4. 增加学生信息\n");
    printf("5. 按照成绩排序输出学生信息.\n");
    printf("6. 删除指定学生信息\n");
    printf("请选择功能:\n");
}

3. 完整代码

#include <stdio.h>
#include <stdlib.h>
struct STU
{
    char name[100]; //姓名
    int age; //年龄
    char number[100]; //学号
    float grade;//成绩
};
//全局变量定义区域
char buff_user[50];
char buff_password[50];
struct STU stu_info[100];
int stu_cnt=0;  //存放学生总人数
//函数声明区域
void  Display_info(void);
int SystemLogin(void);
void add_info(struct STU *stu,int flag);
void grade_sort(struct STU *stu);
void del_info(struct STU *stu);
void print_info(struct STU *stu);
int main()
{
    int number;
    //1. 登录系统
    if(SystemLogin())
    {
        printf("系统安全退出.\n");
        exit(0);
    }
    //2.执行功能模块 
    while(1)
    {
        Display_info();
        scanf("%d",&number);
        switch (number)
        {
        case 1: //录入学生信息
            add_info(stu_info,1);
            break;
        case 2: //输出学生信息
            print_info(stu_info);
            break;
        case 3: //打印成绩平均值
            break;
        case 4: //增加学生信息
            add_info(stu_info,0);
            break;
        case 5: //按照成绩排序输出学生信息
            grade_sort(stu_info);
            break;
        case 6: //删除指定学生信息
            del_info(stu_info);
            break;
        case 7: //退出系统
            printf("-----系统安全退出------\n");
            exit(0); //退出当前进程
        default:
            break;
        }
    }
    return 0;
}
//显示提示信息
void  Display_info(void)
{
    printf("\n\n");
    printf("------欢迎使用xxxx学生管理系统------\n");
    printf("1. 录入学生信息(按照要求录入信息)\n");
    printf("2. 输出学生信息\n");
    printf("3. 打印成绩平均值\n");
    printf("4. 增加学生信息\n");
    printf("5. 按照成绩排序输出学生信息.\n");
    printf("6. 删除指定学生信息\n");
    printf("7. 退出系统\n");
    printf("请选择功能:");
}
/*
函数功能: 系统登录
返回值:  0表示成功 1表示失败 
*/
int SystemLogin(void)
{
    printf("------欢迎使用xxxx学生管理系统------\n");
    int i;
    for(i=1;i<=3;i++)
    {
        printf("请输入用户名:");
        scanf("%s",buff_user);
        printf("请输入密码:");
        system("stty -echo"); //系统函数---调用系统的命令 关闭回显
        scanf("%s",buff_password);
        printf("\n");
        system("stty echo"); //系统函数---调用系统的命令 开回显
        //比较密码是否正确
        if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
        {
            printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i);
        }
        else break;
    }
    //比较密码是否正确 
    if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
    {
        return 1; 
    }
    return 0;
}
/*
函数功能: 录入学生信息
int flag :1表示连续增加学生信息  0表示增加单个学生信息
*/
void add_info(struct STU *stu,int flag)
{
    int i;
    int tmp;
    int addr=stu_cnt; //学生总人数
    if(flag)
    {
        for(i=addr;i<sizeof(stu_info)/sizeof(stu_info[0]);i++)
        {
            printf("请输入学生姓名:");
            scanf("%s",stu[i].name);
            printf("请输入学生年龄:");
            scanf("%d",&stu[i].age);
            printf("请输入学号:");
            scanf("%s",stu[i].number);
            printf("请输入成绩:");
            scanf("%f",&stu[i].grade);
            stu_cnt++;  //记录总人数
            printf("是否继续录入?  0表示继续  1表示退出");
            scanf("%d",&tmp);
            printf("\n\n");
            if(tmp)break;
        }
    }
    else
    {
        printf("请输入学生姓名:");
        scanf("%s",stu[addr].name);
        printf("请输入学生年龄:");
        scanf("%d",&stu[addr].age);
        printf("请输入学号:");
        scanf("%s",stu[addr].number);
        printf("请输入成绩:");
        scanf("%f",&stu[addr].grade);
        stu_cnt++;  //记录总人数
    }
}
//输出学生信息
void print_info(struct STU *stu)
{
    int i;
    printf("--------------------------------------------------\n");
    for(i=0;i<stu_cnt;i++)
    {
        printf("学生姓名:%s\n",stu[i].name);
        printf("学生年龄:%d\n",stu[i].age);
        printf("学号:%s\n",stu[i].number);
        printf("成绩:%f\n",stu[i].grade);
        printf("\n");
    }
    printf("--------------------------------------------------\n");
}
//按照成绩排序输出学生信息
void grade_sort(struct STU *stu)
{
    int i,j;
    struct STU tmp;
    for(i=0;i<stu_cnt-1;i++)
    {
        for(j=0;j<stu_cnt-1-i;j++)
        {
            if(stu[j].grade<stu[j+1].grade)
            {
                tmp=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=tmp;
            }
        }
    }
}
//1234567890
//删除指定学生信息
void del_info(struct STU *stu)
{
    char number[100];
    int i,j;
    printf("请输入要删除学生的学号:");
    scanf("%s",number);
    printf("--------------------------------------------------\n");
    for(i=0;i<stu_cnt;i++)
    {
        if(strcmp(stu[i].number,number)==0)
        {
            printf("成功删除以下学生信息:");
            printf("学生姓名:%s\n",stu[i].name);
            printf("学生年龄:%d\n",stu[i].age);
            printf("学号:%s\n",stu[i].number);
            printf("成绩:%f\n",stu[i].grade);
            for(j=i;j<stu_cnt-1;j++)
            {
                stu[j]=stu[j+1];
            }
            stu_cnt--; //减去总数量
            break;
        }
    }
    if(i==stu_cnt+1)
    {
        printf("没有找到该学号.\n");
    }
    printf("--------------------------------------------------\n");
}
目录
相关文章
|
9天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
|
29天前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
15 0
|
12天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
9天前
|
存储 C语言
C语言自定义类型结构体详解
在C语言中,结构体是复合数据类型,能组合不同类型的数据显示。定义结构体用`struct`关键字,如`struct Student {char name[20]; int age; float score;};`。声明结构体变量如`struct Student stu1;`,访问成员用`.`操作符,如`stu1.age = 20;`。初始化可直接赋值`struct Student stu1 = {&quot;李四&quot;, 22, 85.5};`。结构体数组如`struct Student stuArray[3]`,结构体指针如`struct Student *pStu = &stu1;`。
5 0
|
12天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
12天前
|
存储 网络协议 编译器
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
|
15天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
15天前
|
存储 C语言
【C语言数组】创建、初始化、以及使用2
【C语言数组】创建、初始化、以及使用
|
21天前
|
存储 C语言
C语言实现学生成绩管理系统
C语言实现学生成绩管理系统
12 2