struct lnode是什么结构类型_C/C++编程笔记:C语言成绩管理系统,链式结构体管理系统源码分享...

b17bd205fa82ff0d0cd19deae14cbae1.gif

最近很多同学因为学校的要求,需要完成自己的那个C语言课程设计,于是就有很多人私信或者加我私聊我,问的最多的还是《学生成绩管理系统》,其实当你项目写多了你就会发现:其实各类的管理系统都离不开一个核心——链表!

是的,不管是你想要写学生成绩管理系统,宿舍管理系统、火车票管理系统亦或者还是旅游管理系统等等,都需要用的到我们的链式结构来写,那么今天呢,我们就来看看如何利用C语言链式管理系统应该如何来写!

740fafa153068f5533e6355245ddd221.png

本期分享并不是直接教大家写这个学生成绩管理系统,而是以这个为线头,引出我们的大学项目类管理系统核心——链式结构。

话不多说,我们接下来就来看看我们的本文核心——链式结构管理系统的核心源码吧!让你做到:一表在手,系统我有!

源码献上

先来看看我们的singleList.h文件的代码,这个文件实际上也就是对我们的数据进行具体的操作,当然,核心还是我们的链式结构:

singleList.h

#include

#include

#include

struct MM

{

char name[20];

int age;

int num;

char addr[20];

};

struct Node

{

//int data;

struct MM data;

struct Node* next;

};

//所有涉及到数据的地方都要改

struct Node* createHead()

{

struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));

headNode->next = NULL;

return headNode;

}

struct Node* createNode(struct MM  data)

{

struct Node * newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->next = NULL;

return newNode;

}

void insertByHead(struct Node* headNode, struct MM data)

{

struct Node* newNode = createNode(data);

newNode->next = headNode->next;

headNode->next = newNode;

}

//按查找浏览

void searchAllInfo(struct Node* headNode, char *name)

{

struct Node* pMove = headNode->next;

while (pMove != NULL)

{

//!strcmp(pMove->data.name,name)条件可以改为

//strcmp(pMove->data.name,name)==0

//!:否定  真变假 ,假变真

//!-1等于0

//计算机中非零表示成立

if (!strcmp(pMove->data.name, name))

printf("%s\t%d\t%d\t%s\n", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);

pMove = pMove->next;

}

}

//按姓名查找

struct Node* searchInfo(struct Node* headNode, char *name)

{

struct Node* pMove = headNode->next;

while (pMove != NULL&&strcmp(pMove->data.name, name))

{

pMove = pMove->next;

}

return pMove; //返回NULL没有找到

}

//改为按照姓名的方式

//删除一个方式

void deleteByAppoin(struct Node* headNode, char *name)

{

struct Node* posNodeLeft = headNode;

struct Node* posNode = headNode->next;

//字符串比较+数据剥洋葱

while (posNode != NULL&&strcmp(posNode->data.name ,name))

{

posNodeLeft = posNode;

posNode = posNodeLeft->next;

}

if (posNode == NULL)

{

printf("未找到指定位置,无法删除!\n");

}

else

{

posNodeLeft->next = posNode->next;

free(posNode);

posNode = NULL;

printf("删除成功!\n");

}

}

//删除所有姓名相同的

void deleteAll(struct Node* headNode, char *name)

{

while (searchInfo(headNode, name) != NULL)

{

deleteByAppoin(headNode, name);

}

}

//修改所有姓名相同的

void modifyALL(struct Node* headNode, char *name,struct MM newInfo)

{

while (searchInfo(headNode, name) != NULL)

{

searchInfo(headNode, name)->data = newInfo;

}

}

//打印-->具体需求:抬头

void printList(struct Node* headNode)

{

struct Node* pMove = headNode->next;

//表格数据的表头

printf("name\tage\tnum\taddr\n");

while (pMove != NULL)

{

//打印结构体的数据需要剥洋葱

printf("%s\t%d\t%d\t%s\n", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);

pMove = pMove->next;

}

}

//链表的冒泡排序

void BubbleSortList(struct Node*headNode)

{

//0---size

for (struct Node* p = headNode->next; p != NULL; p = p->next)

{

for (struct Node* q = headNode->next; q->next != NULL; q = q->next)

{

if ((q->data.age > q->next->data.age))

{

struct MM tempData = q->data;

q->data = q->next->data;

q->next->data = tempData;

}

}

}

printList(headNode);

}

void BubbleSortByName(struct Node*headNode)

{

//0---size

for (struct Node* p = headNode->next; p != NULL; p = p->next)

{

for (struct Node* q = headNode->next; q->next != NULL; q = q->next)

{

if (strcmp(q->data.name, q->next->data.name)>0)

{

struct MM tempData = q->data;

q->data = q->next->data;

q->next->data = tempData;

}

}

}

printList(headNode);

}

好,接下来再来将我们的这个界面给完善一下:

界面以及其他操作

#define _CRT_SECURE_NO_WARNINGS

#include "singleList.h"

struct Node* list = NULL; //存储数据的容器

//1.菜单

void makeMenu()

{

printf("-----------【小姐姐管理系统】--------\n");

printf("\t0.退出系统\n");

printf("\t1.录入信息\n");

printf("\t2.浏览系统\n");

printf("\t3.修改系统\n");

printf("\t4.查找显示\n");

printf("\t5.删除信息\n");

printf("\t6.排序显示\n");

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

}

//2.做按键交互

void keyDown()

{

int userKey = 0;

struct MM tempData; //存储用户的数据

struct Node* posNode = NULL;

scanf("%d", &userKey);

switch (userKey)

{

case 0:

printf("正常退出,欢迎下次光临!\n");

system("pause");

exit(0);

break;

case 1:

//为当前函数传参

//增加全局变量

printf("请输入信息:(name,age,num,addr):");

scanf("%s%d%d%s", tempData.name, &tempData.age, &tempData.num, tempData.addr);

insertByHead(list,tempData);

break;

case 2:

printList(list);

break;

case 3: //修改 --->修改作业

printf("请输入要修改的姓名:");

scanf("%s", tempData.name);

//输入信息存储到临时变量 tempInfo

//循环去做修改: 知道posNode==NULL 位置

posNode = searchInfo(list, tempData.name);

if (posNode == NULL)

{

printf("未找到指定位置,无法修改!");

}

else

{

printf("请输入新的信息:(name,age,num,addr):");

scanf("%s%d%d%s", posNode->data.name, &posNode->data.age, &posNode->data.num, posNode->data.addr);

//posNode->data=tempInfo;

printf("修改成功!");

}

break;

case 4: //查找

printf("请输入要查找的姓名:");

scanf("%s", tempData.name);

searchAllInfo(list, tempData.name);

break;

case 5: //删除

printf("请输入要删除的姓名:");

scanf("%s", tempData.name);

deleteByAppoin(list, tempData.name);

break;

case 6:

BubbleSortList(list);

break; //

default:

printf("输入错误!,重新输入!\n");

break;

}

}

int main()

{

list = createHead(); //1.创建容器

while (1)

{

makeMenu();

keyDown();

system("pause");

system("cls");

}

system("pause");

return 0;

}

好了,本期分享就到这里了!希望能够对大家有帮助,希望大家都能依照本文分享的东西自己完成自己的管理系统哦~

关注我们的微信公众号,学习更多C/C++编程知识,欢迎关注~

QQ群1108152000,有一些源码和资料分享,也有直播课程可以看!

95e4c05487b51b3528064fc5a51d0229.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值