Linux C语言实现学生管理系统

发布时间:2020-01-13
技术: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


三、实现效果

1578533765387026560.png1578533784462089442.png


四、总结

  后续跟新以下Demo:

1578533811666038362.jpg


五、项目结构图

1578533825003081949.jpg


本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码