linux下c的管理系统,Linux C语言实现学生管理系统

一、内核链表:

1. 含义:

Linux 内核中自己实现了双向链表,可以在 include/linux/list.h 找到定义。

2. 作用:

不包含数据域,可以嵌入大结构体中,实现大结构体之间的连接。

3. 部分函数说明:/*

* 函数名:list_add

* 功  能:头部插入新结点

* 参  数:

*   new  --- 新结点

*   head --- 头结点

* 返回值:无

**/

static inline void list_add(struct list_head *new, struct list_head *head)

{

__list_add(new, head, head->next);

}

/*

* 函数名:list_add_tail

* 功  能:尾部插入新结点

* 参  数:

*   new  --- 新结点

*   head --- 头结点

* 返回值:无

**/

static inline void list_add_tail(struct list_head *new, struct list_head *head)

{

__list_add(new, head->prev, head);

}

/*

* 函数名:list_del

* 功  能:删除结点

* 参  数:

*   entry --- 结点入口

* 返回值:无

**/

static inline void list_del(struct list_head *entry)

{

__list_del(entry->prev, entry->next);

entry->next = (void *) 0;

entry->prev = (void *) 0;

}

/*

* 宏函数:list_entry

* 功  能:获取type类型结构体的起始地址

* 参  数:

*   ptr    --- 结点

*     type   --- 大结构体的类型

*   member --- 小结构体在大结构体中的名字

* 返回值:无

**/

#define list_entry(ptr, type, member) \

((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

/*

* 宏函数:list_for_each

* 功  能:遍历链表

* 参  数:

*   pos    --- 遍历的每个结点

*     head   --- 头结点

* 返回值:无

**/

#define list_for_each(pos, head) \

for (pos = (head)->next; pos != (head); \

pos = pos->next)

二、部分代码//学生信息结构体

struct stu

{

long long id;

char name[256];

long long tel;

struct list_head list;

};

//主函数

int main()

{

//创建头结点

struct list_head *head = malloc(sizeof(struct list_head));

//初始化头结点

INIT_LIST_HEAD(head);

while(1)

{

printf("\n-----------学生管理系统-----------\n");

printf("\n\t0:查看所有学生\n");

printf("\t1:添加学生信息\n");

printf("\t2:修改学生信息\n");

printf("\t3:删除学生信息\n");

printf("\t请输入:");

int mode;

scanf("%d",&mode);

printf("\n----------------------------------\n");

switch(mode)

{

case 0:

{

tarvel_node(head);

break;

}

case 1:

{

long long id;

char name[256];

long long tel;

printf("\n\t请输入学号:");

scanf("%lld",&id);

printf("\t请输入姓名:");

scanf("%s",name);

printf("\t请输入电话:");

scanf("%lld",&tel);

insert_node(head,id,name,tel);

break;

}

case 2:

{

long long id;

char name[256];

long long tel;

printf("\n\t请输入修改学生的学号(学号不允许修改):");

scanf("%lld",&id);

printf("\t请输入修改后的姓名:");

scanf("%s",name);

printf("\t请输入修改后的电话:");

scanf("%lld",&tel);

modify_all_node(head,id,name,tel);

break;

}

case 3:

{

long long id;

printf("\n\t请输入删除学生的学号:");

scanf("%lld",&id);

del_all_node(head,id);

break;

}

}

}

return 0;

}

运行命令:./main

三、实现效果

6d5893a18be7a322b62f64a423a1ffd8.png

0dc2a6ee9de2cf96718a04c09947247a.png

四、总结

后续跟新以下Demo:

ac3945b8a1f8b3355a33a375bec4a949.png

五、项目结构图

a40f0415d6258d6ae4d0058091a841c0.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值