使用c语言单向链表实现简单学生成绩管理系统
本文优化整个代码框架结构,完善用户可以对系统信息的修改。本例中,使用一系列c语言知识,有利于巩固c语言语法,具体包括结构体,枚举,while循环,switch语句,还有数据结构等内容。
基于上一个内容(使用c语言单向链表实现简单学生成绩管理系统(1))作如下修改。
修改1:实现基于姓名对数据进行修改和删除
简单解释下节点的删除
代码实现
//链表中删除数据--根据姓名
int delete_data(student_msg_t * head,char * name)
{
if(isnull(head))
{
printf("no student msg\n");
return -1;
}
int flag = 0;
student_msg_t * temp_node;
//用于备份要删除的节点地址
temp_node = (student_msg_t*)malloc(sizeof(student_msg_t));
if(temp_node == NULL)
{
printf("create temp node fail\n");
return -1;
}
while(head->next != NULL)
{
if(0 == strncmp(head->next->msg.name,name,strlen(name)))
{
//删除此节点
temp_node = head->next;
head->next = temp_node->next;
free(temp_node);
temp_node = NULL;
flag = 1; //判断找到需要删除的信息
break;
}
else
head = head->next;
}
if(flag == 0)
printf("the list do not have the name\n");
else
printf("delete the name msg is success\n");
return 0;
}
//链表中修改数据--根据姓名
int modify_data(student_msg_t * head,grade_msg_t * grade_msg)
{
if(isnull(head))
{
printf("no student msg\n");
return -1;
}
int flag = 0;
while(head->next != NULL)
{
if(0 == strncmp(head->next->msg.name,grade_msg->name,strlen(grade_msg->name)))
{
//修改此节点
head->next->msg.chinese = grade_msg->chinese;
head->next->msg.math = grade_msg->math;