最近不少同窗由於學校的要求,須要完成本身的那個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++編程知識,歡迎關注~排序