学生管理系统

该程序是一个用C语言编写的简单学生管理系统,包括初始化、判断列表是否为空/满、插入学生信息、打印所有信息、按姓名修改/删除/显示信息、清空及销毁表等操作。用户通过命令行交互进行管理。
摘要由CSDN通过智能技术生成
/*===============================================
*   文件名称:学生管理系统
*   创 建 者:     
*   创建日期:2022年12月28日
*   描    述:
================================================*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 100

typedef struct STU
{
    char xuehao[20];
    char name[20];
    float score;
}stu_t;

typedef stu_t data_t;

typedef struct list
{
    data_t data[SIZE];
    int last;
}seqlist;

//初始化
seqlist *seqlistCreate()
{
    seqlist *seq = (seqlist *)malloc(sizeof(data_t)*SIZE);
    if(seq == NULL)
        perror("malloc");

    bzero(seq->data,sizeof(data_t)*SIZE);
    seq->last = -1;

    return seq;
}

//判空
int seqlist_is_empty(seqlist *seq)
{
    return (seq->last == -1)?1:0;
}

//判满
int seqlist_is_full(seqlist *seq)
{
    return (seq->last == SIZE-1)?1:0;
}

//求表长
int seqlistLength(seqlist *seq)
{
    return seq->last+1;
}

//插入
int seqlistInsert(seqlist *seq)
{
    if(seqlist_is_full(seq))
    {
        puts("表已满");
        return -1;
    }

    char x_h[20] = {0};
    char m_z[20] = {0};
    float f_s = 0;

    scanf("%s",x_h);
    getchar();
    scanf("%s",m_z);
    scanf("%f",&f_s);

    seq->last++;

    strcpy(seq->data[seq->last].xuehao,x_h);
    strcpy(seq->data[seq->last].name,m_z);
    seq->data[seq->last].score = f_s;


}

//打印
void seqlistDisplay(seqlist *seq)
{
    if(seqlist_is_empty(seq))
    {
        puts("列表为空");
        return;
    }

    for(int i = 0;i <= seq->last;i++)
    {
        printf("%s %s %f\n",seq->data[i].xuehao,seq->data[i].name,seq->data[i].score);
    }

}

//按名字修改分数
int seqlistChangeByName(seqlist *seq)
{
    char m_z[20] = {0};
    float f_s = 0;

    scanf("%s%f",m_z,&f_s);

    for(int i = 0;i <= seq->last;i++)
    {
        if(strcmp(seq->data[i].name,m_z) == 0)
        {
            seq->data[i].score = f_s;
            return 0;
        }
    }

    puts("没有这个人");
    return -1;
}

//按名字删除信息
void seqlistDeleteByName(seqlist *seq)
{
    char m_z[20] = {0};
    scanf("%s",m_z);


    if(seqlist_is_empty(seq))
        return;
    for(int i = 0;i <= seq->last;i++)
    {
        if(strcmp(seq->data[i].name,m_z) == 0)
        {
            for(int j = i;j <= seq->last;j++)
            {
                seq->data[j] = seq->data[j+1];
            }
        }
    }

    seq->last--;
}

//按名字查看信息
int seqlistShowByName(seqlist *seq)
{
    char m_z[20] = {0};

    scanf("%s",m_z);

    for(int i = 0;i <= seq->last;i++)
    {
        if(strcmp(seq->data[i].name,m_z) == 0)
        {
            printf("%s %s %f\n",seq->data[i].xuehao,seq->data[i].name,seq->data[i].score);
            return 0;
        }
    }
    
    puts("没有这个人");
    return -1;
}

//清空
void seqlistClear(seqlist *seq)
{
    seq->last = -1;
}

//销毁
void seqlistDestroy(seqlist **seq)
{
    free(*seq);
    *seq = NULL;
}

//管理界面
void home_page()
{
    printf("/*********************/\n");
    puts("欢迎使用学生管路系统");
    puts("请根据提示完成相关操作");
    puts("1.添加学生信息     2.打印全部学生信息 3.根据名字删除信息 4.根据名字修改信息");
    puts("5.根据名字显示信息 6.清空表           7.销毁表           0.退出系统");
    puts("");
    printf("请输入指令:");

    puts("/*********************/");
}
int main(int argc, char *argv[])
{ 
    seqlist *seq = seqlistCreate();
    if(seq == NULL)
        perror("seqlistCreat");
    int m = 0;

    while(1)
    {
        home_page();
        scanf("%d",&m);

        switch(m)
        {
            case 1:seqlistInsert(seq);system("clear");break;

            case 2:seqlistDisplay(seq);break;

            case 3:seqlistDeleteByName(seq);system("clear");break;

            case 4:seqlistChangeByName(seq);system("clear");break;

            case 5:seqlistShowByName(seq);break;

            case 6:seqlistClear(seq);system("clear");break;

            case 7:seqlistDestroy(&seq);break;
            
            case 0:return 0;
                   
            default:break;
        }
    }
    
#if 0   
    int i = 0;
    while(i < 2)
    {
        seqlistInsert(seq);
        i++;
    }
    seqlistDisplay(seq);
    
    
    seqlistChangeByName(seq);
    seqlistDisplay(seq);

    seqlistClear(seq);
    seqlistDisplay(seq);
#endif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值