C语言链表实现学生信息管理系统

首先是创建结构体,内部存一些学生的基本信息。

struct Sqlist
{
    char number[20];
    char name[20];
    char sex[10];
    int age;
    char examtype[20];
    struct Sqlist *next;
};

结构体有了下边就是各类功能的实现:这里主要实现增删改查的基本功能

增加:

void AddList(struct Sqlist *L)
{
    int n,i;
    struct Sqlist *p=L->next;
    struct Sqlist*s=NULL;
    printf("输入增加学生人数:\n");
    scanf("%d",&n);
    printf("输入学生信息:\n");
    for( i=0; i<n; i++)
    {
        s=(struct Sqlist *)malloc(sizeof(struct Sqlist));
        scanf("%s%s%s%d%s",s->number,s->name,s->sex,&s->age,s->examtype);
        L->next=s;
        s->next=p;
    }
    printf("增加成功!!!!\n");
}

删除:

void DeleteList(struct Sqlist *L)
{
   struct Sqlist *p=L->next;
    struct Sqlist *pre=L,*r=p,*rpre=pre;
    char num3[20];
    printf("请输入要删除的学生学号:\n");
    scanf("%s",num3);
    while(p!=NULL)
    {
        if(strcmp(p->number,num3)==0)
        {
            r=p;
            rpre=pre;
        }
        pre=p;
        p=p->next;
    }
    rpre->next=r->next;
    free(r);
    printf("删除成功!!!!!\n");
}

修改:

void ReviseList(struct Sqlist *L)
{
    struct Sqlist *p=L->next;
    char num2[20];
    printf("输入修改的学生学号:\n");
    scanf("%s",num2);
    while(p!=NULL)
    {
        if(strcmp(p->number,num2)==0)
        {
            printf("请重新输入考生信息:\n");
            scanf("%s%s%s%d%s",p->number,p->name,p->sex,&p->age,p->examtype);
            printf("修改成功!!!!!\n");
            break;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("查无此人!!!!\n");
}

查找:

void SearchList(struct Sqlist *L)
{
    struct Sqlist *p=L->next;
    char num1[20];
    printf("输入要查找的学生学号:\n");
    scanf("%s",num1);
    while(p!=NULL)
    {
        if(strcmp(p->number,num1)==0)
        {
            printf("%s %s %s %d %s\n",p->number,p->name,p->sex,p->age,p->examtype);
            break;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("暂无该学生信息!!!!\n");
}

下边是完整代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Sqlist
{
    char number[20];
    char name[20];
    char sex[10];
    int age;
    char examtype[20];
    struct Sqlist *next;
};


struct Sqlist* CreateList(struct Sqlist *L)
{
    struct Sqlist *s,*r;
    int i,n;
    printf("输入学生人数:\n");
    scanf("%d",&n);
    printf("输入学生信息:\n");
    L=(struct Sqlist *)malloc(sizeof(struct Sqlist));
    r=L;
    for(i=0; i<n; i++)
    {
        s=(struct Sqlist *)malloc(sizeof(struct Sqlist));
        scanf("%s%s%s%d%s",s->number,s->name,s->sex,&s->age,s->examtype);
        r->next=s;
        r=s;
    }
    r->next=NULL;
    printf("成功创建!!!!\n");
    return L;
}

void DispList(struct Sqlist *L)
{
    struct Sqlist *p=L->next;
    while(p!=NULL)
    {
        printf("%s %s %s %d %s\n",p->number,p->name,p->sex,p->age,p->examtype);
        p=p->next;
    }
}

void SearchList(struct Sqlist *L)
{
    struct Sqlist *p=L->next;
    char num1[20];
    printf("输入要查找的学生学号:\n");
    scanf("%s",num1);
    while(p!=NULL)
    {
        if(strcmp(p->number,num1)==0)
        {
            printf("%s %s %s %d %s\n",p->number,p->name,p->sex,p->age,p->examtype);
            break;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("暂无该学生信息!!!!\n");
}

void AddList(struct Sqlist *L)
{
    int n,i;
    struct Sqlist *p=L->next;
    struct Sqlist*s=NULL;
    printf("输入增加学生人数:\n");
    scanf("%d",&n);
    printf("输入学生信息:\n");
    for( i=0; i<n; i++)
    {
        s=(struct Sqlist *)malloc(sizeof(struct Sqlist));
        scanf("%s%s%s%d%s",s->number,s->name,s->sex,&s->age,s->examtype);
        L->next=s;
        s->next=p;
    }
    printf("增加成功!!!!\n");
}
void ReviseList(struct Sqlist *L)
{
    struct Sqlist *p=L->next;
    char num2[20];
    printf("输入修改的学生学号:\n");
    scanf("%s",num2);
    while(p!=NULL)
    {
        if(strcmp(p->number,num2)==0)
        {
            printf("请重新输入考生信息:\n");
            scanf("%s%s%s%d%s",p->number,p->name,p->sex,&p->age,p->examtype);
            printf("修改成功!!!!!\n");
            break;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("查无此人!!!!\n");
}
void DeleteList(struct Sqlist *L)
{
   struct Sqlist *p=L->next;
    struct Sqlist *pre=L,*r=p,*rpre=pre;
    char num3[20];
    printf("请输入要删除的学生学号:\n");
    scanf("%s",num3);
    while(p!=NULL)
    {
        if(strcmp(p->number,num3)==0)
        {
            r=p;
            rpre=pre;
        }
        pre=p;
        p=p->next;
    }
    rpre->next=r->next;
    free(r);
    printf("删除成功!!!!!\n");
}
int main()
{
    int n;
    struct Sqlist *L=NULL;
   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");
    while(scanf("%d",&n)!=EOF)
    {
        switch(n)
        {
        case 1:
            L=CreateList(L);
            break;
        case 2:
            SearchList(L);
            break;
        case 3:
            ReviseList(L);
            break;
        case 4:
            DeleteList(L);
            break;
        case 5:
            AddList(L);
            break;
        case 6:
            DispList(L);
            break;
        case 7:
            exit(0);
        default:
            printf("输入有误!\n");
        }
    }

    return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值