Linux C语言实现学生管理系统
技术:Linux、C语言
概述
Demo在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
三、实现效果
四、总结
后续跟新以下Demo:
五、项目结构图
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码