最近不少同窗由于学校的要求,须要完成本身的那个C语言课程设计,因而就有不少人私信或者加我私聊我,问的最多的仍是《学生成绩管理系统》,其实当你项目写多了你就会发现:其实各种的管理系统都离不开一个核心——链表!编程
是的,无论是你想要写学生成绩管理系统,宿舍管理系统、火车票管理系统亦或者仍是旅游管理系统等等,都须要用的到咱们的链式结构来写,那么今天呢,咱们就来看看如何利用C语言链式管理系统应该如何来写!微信
本期分享并非直接教你们写这个学生成绩管理系统,而是以这个为线头,引出咱们的大学项目类管理系统核心——链式结构。函数
话很少说,咱们接下来就来看看咱们的本文核心——链式结构管理系统的核心源码吧!让你作到:一表在手,系统我有!学习
先来看看咱们的singleList.h文件的代码,这个文件实际上也就是对咱们的数据进行具体的操做,固然,核心仍是咱们的链式结构:spa
#include <stdio.h> #include <stdlib.h> #include <string.h> 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; }
好了,本期分享就到这里了!但愿可以对你们有帮助,但愿你们都能依照本文分享的东西本身完成本身的管理系统哦~code
其实作为一个编程学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C语言C++交流Q群1108152000,无论你是小白仍是转行人士欢迎入驻,你们一块儿交流成长。blog
微信公众号:C语言编程学习基地,学习C/C++编程知识,欢迎关注~排序