linux c单链表实现简单学生信息管理系统

Linux c学生信息管理系统是在linux平台下运行的c程序。

  • 开发的主要目的是为了对自己学习的总结也是对自己学习的点滴记录,以备后续查看学习。
  • 开发平台:centos7.2系统下开发运行
  • 完成功能
    1. 主要使用单向链表来保存学生的节点信息
    2. 通过链表对学生节点进行增删改查的操作
    3. 可以对学生按照学号和名字进行删除
    4. 对学生按照学号和名字进行查找

程序主要是练习模块化的操作设计,对程序进行模块开发,降低了系统对程序的耦合度,可以对链表进行二次开发,只要引用链表模块就可以根据自己的需要开发自己所需的系统程序,同时也是对链表的一些简单操作的学习。

程序结构

[root@localhost student_manage]# tree
.
├── main.c       // 程序主文件
├── makefile     
├── slist        // 链表模块文件目录
│   ├── slist.c  
│   └── slist.h
└── student      // 学生模块目录
    ├── student.c
    └── student.h

2 directories, 6 files
[root@localhost student_manage]#

程序结果

  1. 添加学生
[root@localhost student_manage]# make 
gcc main.c ./slist/slist.c ./student/student.c -o main
[root@localhost student_manage]# ./main 
**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 添加学生       2. 删除学生         ***
***       3. 查找学生       4. 修改学生         ***
***       5. 学生列表       6. 退出系统         ***
***                                            ***
**************************************************
请选择: 1

请输入学号: 1001
请输入名字: 张三
请输入年龄: 19
请输入性别: 男
请输入班级: 软件工程一班         

>>> 添加成功!
  1. 删除学生
**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 添加学生       2. 删除学生         ***
***       3. 查找学生       4. 修改学生         ***
***       5. 学生列表       6. 退出系统         ***
***                                            ***
**************************************************
请选择: 2

**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 学号删除       2. 名字删除         ***
***                                            ***
**************************************************
请选择: 1
请输入你要查找的学号: 1003

学号: 1003	名字: 李丽	年龄: 18	性别: 女	班级: 软件工程1班	


确定删除该学生吗?1 -- 删除   2 -- 撤销
请选择: 1

>>> 删除成功!
  1. 查找学生
**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 学号查找       2. 名字查找         ***
***                                            ***
**************************************************
请选择: 1

请输入你要查找的学号: 1005

学号: 1005	名字: 刘玉	年龄: 18	性别: 女	班级: 软件工程1班
  1. 修改学生
**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 添加学生       2. 删除学生         ***
***       3. 查找学生       4. 修改学生         ***
***       5. 学生列表       6. 退出系统         ***
***                                            ***
**************************************************
请选择: 4

**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 学号查找       2. 名字查找         ***
***                                            ***
**************************************************
请选择: 1
请输入你要查找的学号: 1005

学号: 1005	名字: 刘玉	年龄: 18	性别: 女	班级: 软件工程1班	

请输入新名字: 刘兰
请输入新年龄: 18
请输入新性别: 女
请输入新班级: 软件工程2班

>>> 修改成功!
  1. 学生列表
**************************************************
***          欢迎来到学生信息管理系统           ***
***                                            ***
***       1. 添加学生       2. 删除学生         ***
***       3. 查找学生       4. 修改学生         ***
***       5. 学生列表       6. 退出系统         ***
***                                            ***
**************************************************
请选择: 5

共有学生[ 5 ]人!

序号: [1]	学号: 1001	名字: 张三	年龄: 19	性别: 男	班级: 软件工程1班	
序号: [2]	学号: 1002	名字: 李四	年龄: 20	性别: 男	班级: 软件工程1班	
序号: [3]	学号: 1004	名字: 王雪	年龄: 18	性别: 女	班级: 软件工程1班	
序号: [4]	学号: 1005	名字: 刘兰	年龄: 18	性别: 女	班级: 软件工程2班	
序号: [5]	学号: 1006	名字: 王五	年龄: 19	性别: 男	班级: 软件工程1班

链表操作

链表结构类型

struct _Slist
{
    void    *data;
    Slist   *next;
};
  1. 追加节点元素到链表尾部
// 追加节点元素到链表尾部
Slist *slist_append(Slist *list, void *data)
{
    Slist *new_list;
    Slist *last;

    new_list = (Slist *)malloc(sizeof(Slist));
    new_list->data = data;
    new_list->next = NULL;

    if (list)
    {
        last = slist_last(list);
        last->next = new_list;
        return list;
    }
    return new_list;
}
  1. 从链表中删除节点
// 从链表中删除节点
Slist *slist_remove(Slist *list, void *data)
{
    Slist *tmp, *prev = NULL;

    tmp = list;
    while (tmp)
    {
        if (tmp->data == data)
        {
            if (prev)
                prev->next = tmp->next;
            else
                list = tmp->next;
            free(tmp);
            break;
        }
        prev = tmp;
        tmp = prev->next;
    }
    return list;
}
  1. 从链表中查找节点元素
// 根据节点查找
Slist *slist_find(Slist *list, void *data)
{
    while (list)
    {
        if (list->data == data)
            break;
        list = list->next;
    }
    return list;
}

学生程序模块

  1. 添加学生
// 添加学生
Slist *add_student(Slist *list)
{
	struct Student *stu = NULL;
	int age;
	char sex[SEX_LEN];
	char num[NUM_LEN];
    char name[NAME_LEN];
    char grade[GRADE_LEN];

	stu = malloc_student();
	if (stu == NULL)
	{
		printf("add student malloc is fail!\n");
		return list;
	}

    printf("请输入学号: ");
    scanf("%s", num);
    strcpy(stu->num, num);

	printf("请输入名字: ");
    scanf("%s", name);
    strcpy(stu->name, name);

    printf("请输入年龄: ");
    scanf("%d", &age);
    stu->age = age;

    printf("请输入性别: ");
    scanf("%s", sex);
    strcpy(stu->sex, sex);

    printf("请输入班级: ");
    scanf("%s", grade);
    strcpy(stu->grade, grade);

	list = slist_append(list, (void *)stu);

	printf("\n>>> 添加成功!\n\n");

	return list;
}
  1. 删除学生
    删除学生之前要先查找到该学生,可根据学号或者名字来删除学生
// 删除学生
Slist *delete_student(Slist *list)
{
    int num;
    int is_del;
    Slist *find_list = NULL;
    struct Student *stu = NULL;

    delete_menu();

    printf("请选择: ");
    scanf("%d", &num);

    switch (num)
    {
        case 1:
            find_list = find_student_by_num(list);
            break;
        case 2:
            find_list = find_student_by_name(list);
            break;
    }
    if (find_list == NULL)
    {
        printf("\n>>> 不存在该学生!\n");
        return list;
    }

    printf("\n");
    list_one_student(find_list);

    printf("\n确定删除该学生吗?1 -- 删除   2 -- 撤销\n");
    printf("请选择: ");
    scanf("%d", &is_del);

    if (is_del == 1)
    {
        stu = (struct Student *)(find_list->data);
        list = slist_remove(list, stu);

        printf("\n>>> 删除成功!\n\n");
    }
    return list;
}
  1. 查找学生
    可根据学号和名字进行查找
// 查找学生
void find_student(Slist *list)
{
    int num;
    Slist *find_list = NULL;

    find_menu();

    printf("请选择: ");
    scanf("%d", &num);
    printf("\n");

    switch (num)
    {
        case 1:
            find_list = find_student_by_num(list);
            break;
        case 2:
            find_list = find_student_by_name(list);
            break;
    }
    if (find_list == NULL)
        printf("\n>>> 不存在该学生!\n");
    printf("\n");
    list_one_student(find_list);
}
  1. 修改学生
    修改学生之前,要现根据学号或者名字查找到改学生
// 修改学生
Slist *update_student(Slist *list)
{
    int num;
    int age;
    Slist *find_list = NULL;
    struct Student *stu = NULL;
    char sex[SEX_LEN];
    char name[NAME_LEN];
    char grade[GRADE_LEN];

    find_menu();

    printf("请选择: ");
    scanf("%d", &num);

    switch (num)
    {
        case 1:
            find_list = find_student_by_num(list);
            break;
        case 2:
            find_list = find_student_by_name(list);
            break;
    }
    if (find_list == NULL)
    {
        printf("\n>>> 不存在该学生!\n");
        return list;
    }
    printf("\n");
    list_one_student(find_list);

    stu = (struct Student *)(find_list->data);

    printf("请输入新名字: ");
    scanf("%s", name);
    strcpy(stu->name, name);

    printf("请输入新年龄: ");
    scanf("%d", &age);
    stu->age = age;

    printf("请输入新性别: ");
    scanf("%s", sex);
    strcpy(stu->sex, sex);

    printf("请输入新班级: ");
    scanf("%s", grade);
    strcpy(stu->grade, grade);

    printf("\n>>> 修改成功!\n\n");

    return list;
}

至此一个简单的用链表实现的学生信息管理系统就已经实现了,当然一个真正的管理系统并不是如此的增删查改简单操作,可以在此基础上扩展自己的管理程序。也是对链表学习得个总结,希望对大家有帮助。

微信公众号关注【猿小呆】回复: 学生信息管理系统 即可获取完整代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值