C语言链表实现考试报名管理系统

完整版

//源码

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

//定义一个考生结构体
typedef struct student
{
    char name[40];
    char no[18];
    int xb;
    int age;
    char tele[20];
    struct student *next;
}STU;

//函数声明放在这里
STU *LIstInit(STU *L);
STU *ListCreate(STU *L, int n);
void ListInsert(STU *L);
void ListDelete(STU *L);
void LIstSearch(STU *L);
void Input(STU *p,int i);
void Output(STU *L);
void PrintFile(STU *L);
void Menu();

//创建表头,初始化链表
STU *LIstInit(STU *L)
{
    STU *head=NULL;
    head=(STU *)malloc(sizeof(STU));
    head->next=NULL;
    L = head;
    return L;
}

//创建链表,将新生成的节点插入到链表的表头
STU *ListCreate(STU *L, int n)
{
    int i; 
    for (i = 0; i<n; i++)
    {
        STU *p;
        //将新生成的节点插入到链表中
        p=NULL;
        p = (STU *)malloc(sizeof(STU));
        Input(p,i);
        p->next = L->next;
        L->next = p;
    }
    return L;
}

//对链表进行节点的插入操作
void ListInsert(STU *L)
{
    STU *s = NULL;
    //生成一个新节点s
    s = (STU *)malloc(sizeof(STU));
    printf("请输入您要插入的考生的姓名:");
    scanf("%s",s->name);
    printf("请输入您要插入的考生的身份证号:");
    scanf("%s",s->no);
    printf("请输入您要插入的考生的性别(女性为0,男性为1):");
    scanf("%d",&s->xb);
    printf("请输入您要插入的考生的年龄:");
    scanf("%d",&s->age);
    printf("请输入您要插入的考生的电话号码:");
    scanf("%s",s->tele);
    s->next = L->next;
    L->next = s;
}

//对链表的进行节点的删除操作
void ListDelete(STU *L)
{
    char n[40];
    STU *p=L->next,*pre=L;  //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
    if(p==NULL)
        printf("数据为空,无法删除!");
    else
    {
        printf("请输入您要删除的考生姓名:");
        scanf("%s",n);
        while(strcmp(p->name,n)!=0)
        {
            pre=p;
            p=pre->next;
            if(p==NULL)
            {
                printf("没有找到相关信息,无法删除\n");
                return;
            }
        }
        pre->next=p->next;
        free(p);
        printf("删除成功");
    }
}

void LIstSearch(STU *L)
{
    char n[40];
    STU *p=L->next;
    if (p == NULL)
        printf("数据为空,无法查找!");
    else
    {
        printf("请输入您要查找的考生姓名:");
        scanf("%s",n);
        while (strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");
                return;
            }
        }
        printf("该考生的信息如下:\n");
        printf("%s\t",p->name);
        printf("\t%s",p->no);
        printf("\t%d",p->xb);
        printf("\t%d",p->age);
        printf("\t%s",p->tele);
        printf("\n");
    }
}

void ListModify(STU *L)
{
    int x,a,item;
    char nam[40],no[18],tel[20],n[40];
    STU *p=L->next;
    if (p == NULL)
        printf("数据为空,无法修改!");
    else
    {
        printf("请输入您要修改的考生姓名:");
        scanf("%s",n);
        while(strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
                printf("没有找到相关信息\n");
        }
        printf("请选择您要修改的考生信息类型:\n");
        printf("1、姓名\n2、身份证号\n3、性别\n4、年龄\n5、电话号码\n");
        scanf("%d",&item);
        switch(item)
        {
            case 1:
                printf("请输入您修改后的姓名:");
                scanf("%s",nam);
                strcpy(p->name,nam);
                break;
            case 2:
                printf("请输入您修改后的身份证号:");
                scanf("%s",no);
                strcpy(p->no,no);
                break;
            case 3:
                printf("请输入您修改后的性别:");
                scanf("%d",&x);
                p->xb=x;
                break;
            case 4:
                printf("请输入您修改后的年龄:");
                scanf("%d",&a);
                p->age=a;
                break;
            case 5:
                printf("请输入您修改后的电话号码:");
                scanf("%s",tel);
                strcpy(p->tele,tel);
                break;
        }
        printf("修改成功!");
    }
}

void Input(STU *p,int i)
{
    printf("请输入第%d名考生的姓名:",i+1);
    scanf("%s",p->name);
    printf("请输入第%d名考生的身份证号:",i+1);
    scanf("%s",p->no);
    printf("请输入第%d名考生的性别(女性为0,男性为1):",i+1);
    scanf("%d",&p->xb);
    printf("请输入第%d名考生的年龄:",i+1);
    scanf("%d",&p->age);
    printf("请输入第%d名考生的电话号码:",i+1);
    scanf("%s",p->tele);
}

void Output(STU *L)
{
    STU *p=L->next;
    while(p!=NULL)
    {
        printf("%s\t",p->name);
        printf("\t%s",p->no);
        printf("\t%d",p->xb);
        printf("\t%d",p->age);
        printf("\t%s",p->tele);
        printf("\n");
        p=p->next;
    }
}

void PrintFile(STU *L)
{
    STU *p=L->next;
    FILE *fp;
    fp=fopen("student.txt","w");
    fprintf(fp,"姓名\t\t身份证号\t\t性别\t年龄\t电话号码\n");
    while(p!=NULL)
    {
        fprintf(fp,"%s\t",p->name);
        fprintf(fp,"\t%s",p->no);
        fprintf(fp,"\t%d",p->xb);
        fprintf(fp,"\t%d",p->age);
        fprintf(fp,"\t%s",p->tele);
        fprintf(fp,"\n");
        p=p->next;
    }
    fclose(fp);
}

void Menu()
{
    printf("\n\n");
	printf("\t\t\t===================考试报名管理系统==================\n");
	printf("\t\t\t*                                                   *\n");
	printf("\t\t\t*          1>. 录入考生信息                         *\n");
	printf("\t\t\t*          2>. 全部考生信息                         *\n");
	printf("\t\t\t*          3>. 查看考生信息                         *\n");
	printf("\t\t\t*          4>. 修改考生信息                         *\n");
	printf("\t\t\t*          5>. 删除考生信息                         *\n");
	printf("\t\t\t*          6>. 插入考生信息                         *\n");
	printf("\t\t\t*          7>. 读取考生信息                         *\n");
	printf("\t\t\t*          8>. 保存考生信息                         *\n");
	printf("\t\t\t*          0>. 退出管理系统                         *\n");
	printf("\t\t\t*                                    欢迎使用本系统!*\n");
	printf("\t\t\t=====================================================\n");
	printf("\t\t\t输入选项,按回车进入选项:                             \n");
}

int main()
{
    int item,n;         //item用于接收输入的命令,n用于接收输入的考生人数
    char nam[30];         
    STU *L=NULL;
    L=LIstInit(L);
    do
    { 
        Menu();
        printf("请输入相应的数字,进行相应的操作:\n");
        scanf("%d",&item);
        system("cls");
        switch(item)
        {
            case 1:
                printf("请输入您要录入的考生人数:");
                scanf("%d",&n);
                L=ListCreate(L,n);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 2:
                printf("全部考生信息如下:\n");
                printf("姓名\t\t身份证号\t\t性别\t年龄\t电话号码\n");
                Output(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 3:
                LIstSearch(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;                                             
            case 4:
                ListModify(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 5:
                ListDelete(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 6:
                ListInsert(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 7:
                printf("功能完善中!");
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
            case 8:
                PrintFile(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 0:
                printf("即将退出考生信息管理系统.....");
                exit(0);
            default:
                printf("您输入的命令有误,请重新输入");
        }
        printf("\n\n\n\n");
    }while(item);
    return 0;
}

//主界面截图
在这里插入图片描述

阉割版

为了完成课程设计作业

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

//定义一个考生结构体
typedef struct student
{
    char name[40];
    char no[18];
    int xb;
    int age;
    char tele[20];
    struct student *next;
}STU;

//函数声明放在这里
void ListCreate(STU *L, int n);     //创建考生链表节点
void LIstSearch(STU *L);            //查找考生信息
void ListModify(STU *L);            //修改考生信息
void ListInsert(STU *L);            //插入考生信息
void ListDelete(STU *L);            //删除考生信息
void Input(STU *p,int i);           //输入考生信息
void Menu();                        //考试报名管理系统的菜单

//考生报名管理系统的主函数入口
int main()
{
    int item,n;                       //item用于接收输入的命令,n用于接收输入的考生人数      
    STU *L=NULL;                        //初始化一个头节点
    L=(STU *)malloc(sizeof(STU));       //为头节点开辟内存空间
    L->next=NULL;                       //将头节点的指针域置空4
    do
    {  
        Menu();                         //菜单
        printf("请输入相应的数字,进行相应的操作:\n");
        scanf("%d",&item);
        system("cls");
        switch(item)
        {
            case 1:
                printf("请输入您要录入的考生人数:");
                scanf("%d",&n);
                ListCreate(L,n);                      //创建考生链表节点
                getchar();
            	printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 2:
                LIstSearch(L);                        //查找考生信息
                getchar();
            	printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;                                             
            case 3:
                ListModify(L);                          //修改考生信息
                getchar();
            	printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 4:
                ListDelete(L);                          //删除考生信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 5:
                ListInsert(L);                          //插入考生信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
				getchar();
				system("cls");
                break;
            case 0:                                     //退出考试报名管理系统
                printf("即将退出考生信息管理系统.....");
                exit(0);
            default:
                printf("您输入的指令不正确,请重新输入");
        }
        printf("\n\n");
    }while(item);
    return 0;
}

//创建链表,将新生成的节点插入到链表的表头
void ListCreate(STU *L, int n)
{
    int i; 
    for (i = 0; i<n; i++)
    {
        STU *p;
        //将新生成的节点插入到链表中
        p=NULL;
        p = (STU *)malloc(sizeof(STU));
        Input(p,i);
        p->next = L->next;
        L->next = p;
    }
}

//查找考生信息
void LIstSearch(STU *L)
{
    char n[40];
    STU *p=L->next;
    if (p == NULL)
        printf("数据为空,无法查找!");
    else
    {
        printf("请输入您要查找的考生姓名:");
        scanf("%s",n);
        while (strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");
                return;
            }
        }
        printf("该考生的相关信息如下:\n");
        printf("姓名\t身份证号\t\t性别\t年龄\t电话号码\n");
        printf("%s\t",p->name);
        printf("%s",p->no);
        printf("\t%d",p->xb);
        printf("\t%d",p->age);
        printf("\t%s",p->tele);
        printf("\n");
    }
}

//修改考生信息
void ListModify(STU *L)
{
    int x,a,item;
    char nam[40],no[18],tel[20],n[40];
    STU *p=L->next;
    if (p == NULL)
        printf("数据为空,无法修改!");
    else
    {
        printf("请输入您要修改的考生姓名:");
        scanf("%s",n);
        while(strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");
                return;
            }
        }
        printf("请选择您要修改的考生信息类型:\n");
        printf("1:姓名\t 2:身份证号\t 3:性别\t 4:年龄\t 5:电话号码\n");
        scanf("%d",&item);
        switch(item)
        {
            case 1:
                printf("请输入您修改后的姓名:");
                scanf("%s",nam);
                strcpy(p->name,nam);
                break;
            case 2:
                printf("请输入您修改后的身份证号:");
                scanf("%s",no);
                strcpy(p->no,no);
                break;
            case 3:
                printf("请输入您修改后的性别:");
                scanf("%d",&x);
                p->xb=x;
                break;
            case 4:
                printf("请输入您修改后的年龄:");
                scanf("%d",&a);
                p->age=a;
                break;
            case 5:
                printf("请输入您修改后的电话号码:");
                scanf("%s",tel);
                strcpy(p->tele,tel);
                break;
            default:
                printf("您输入的指令不正确!\n");
        }
        printf("修改成功!");
    }
}

//删除考生信息
void ListDelete(STU *L)
{
    char n[40];
    STU *p=L->next,*pre=L;  //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
    if(p==NULL)
        printf("数据为空,无法删除!");
    else
    {
        printf("请输入您要删除的考生姓名:");
        scanf("%s",n);
        while(strcmp(p->name,n)!=0)
        {
            pre=p;
            p=pre->next;
            if(p==NULL)
            {
                printf("没有找到相关信息,无法删除\n");
                return;
            }
        }
        pre->next=p->next;
        free(p);
        printf("删除成功");
    }
}

//插入考生信息
void ListInsert(STU *L)
{
    STU *s = NULL;              //生成一个新节点s
    s = (STU *)malloc(sizeof(STU));
    printf("请输入您要插入的考生的姓名:");
    scanf("%s",s->name);
    printf("请输入您要插入的考生的身份证号:");
    scanf("%s",s->no);
    printf("请输入您要插入的考生的性别(女性为0,男性为1):");
    scanf("%d",&s->xb);
    printf("请输入您要插入的考生的年龄:");
    scanf("%d",&s->age);
    printf("请输入您要插入的考生的电话号码:");
    scanf("%s",s->tele);
    s->next = L->next;
    L->next = s;
}

//输入考生信息
void Input(STU *p,int i)
{
    printf("请输入第%d名考生的姓名:",i+1);
    scanf("%s",p->name);
    printf("请输入第%d名考生的18位身份证号:",i+1);
    scanf("%s",p->no);
    printf("请输入第%d名考生的性别(女性为0,男性为1):",i+1);
    scanf("%d",&p->xb);
    printf("请输入第%d名考生的年龄:",i+1);
    scanf("%d",&p->age);
    printf("请输入第%d名考生的11位电话号码:",i+1);
    scanf("%s",p->tele);
}

//考生信息管理系统的菜单
void Menu()
{
    printf("\n\n");
	printf("\t\t\t===================考试报名管理系统==================\n");
	printf("\t\t\t*                                                   *\n");
	printf("\t\t\t*          1>. 录入考生信息                         *\n");
	printf("\t\t\t*          2>. 查找考生信息                         *\n");
	printf("\t\t\t*          3>. 修改考生信息                         *\n");
	printf("\t\t\t*          4>. 删除考生信息                         *\n");
	printf("\t\t\t*          5>. 插入考生信息                         *\n");
	printf("\t\t\t*          0>. 退出管理系统                         *\n");
	printf("\t\t\t*                                    欢迎使用本系统!*\n");
	printf("\t\t\t=====================================================\n");
	printf("\t\t\t输入选项,按回车进入选项:                             \n");
}

//主界面截图
在这里插入图片描述

完整版包括了考试信息保存,输出全部信息等功能,是最初设计的时候方便调试加的,阉割版是为了课程设计修改的,很多功能做了阉割。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值