C language-student management system (structure + array implementation)

1. Introduction to student management system functions

The previous article introduced the structure type. We know that the structure type can store different data types and belongs to an ordered collection.

This article uses structure knowledge points to complete a small exercise and uses structure + array to design a simple student management system as a consolidation exercise for structure knowledge points.

The functions are as follows:

(1). Welcome interface prompts

(2). Enter password to log in

(3). Function: Enter student information, sort by student ID, sort by score, output all student information, output specified student information (student ID, name, grades), calculate average score output and print, delete specified student information, Add new student information.

(4). Function modules are selected using menu method
Insert image description here

2. Frame design

#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. Complete code

#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");
}

Guess you like

Origin blog.csdn.net/xiaolong1126626497/article/details/132800001