?
hello,各位小伙伴們大家好!你們今天有敲代碼嘛?
管理系統(tǒng)一直是我們計算機專業(yè)同學都要經歷的項目設計,而管理系統(tǒng)的核心知識點其實都是一樣的,無法就是換了個馬甲,今天我們就來看看很多同學都會遇到的管理項目之一:圖書管理系統(tǒng)!
?
用于圖書信息的管理。包括圖書信息的創(chuàng)建、圖書信息的打印、圖書信息的查詢、圖書信息的修改、圖書信息的刪除。方便用戶整理圖書,查詢圖書。
這個圖書管理系統(tǒng)是由單鏈表這一數(shù)據(jù)結構實現(xiàn)的,板塊包括圖書信息的創(chuàng)建、打印、查詢、修改、刪除、以及圖書價格的排序等組成。
代碼后面也有注釋的,基本很好理解的。
下面為源代碼:
?
#include#include #include //3.數(shù)據(jù)的設計 //3.1程序的數(shù)據(jù)存儲--->容器 //3.2數(shù)據(jù)的結構 --->圖書的信息 struct bookInfo { char name[20]; //書名 float price; //書籍的價格 int num; //書籍的數(shù)量 }; //定義鏈表 struct Node { struct bookInfo data; struct Node* next; }; struct Node* list = NULL; //將鏈表聲明成全局變量 //創(chuàng)建表頭:表頭就是結構體變量 struct Node* createHead() { //動態(tài)內存申請 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); //變量初始化 headNode->next = NULL; return headNode; } //創(chuàng)建節(jié)點:為插入做準備 // 把用戶的數(shù)據(jù)變成結構體變量 struct Node* createNode(struct bookInfo data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //數(shù)據(jù)插入(頭插法) void insertNodeByHead(struct Node* headNode, struct bookInfo data) { struct Node* newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode; } //尾插法 /*struct insertNodeByTall(struct Node* headNode, int data) { struct Node* pMove = headNode; while (pMove != NULL) { pMove = pMove->next; } struct Node* newNode = createHead(data); pMove->next = newNode; }*/ //指定刪除(刪除鏈表中元素) //posLeftNode->next=posNode->next; //free(posNode); void deleteNodeByName(struct Node* headNode, char* bookname) { struct Node* posLeftNode = headNode; struct Node* posNode = headNode->next; //書籍名字是字符串,字符串比較函數(shù) while (posNode != NULL && strcmp(posNode->data.name, bookname)) { posLeftNode = posNode; posNode = posLeftNode->next; } //討論查找的結果 if (posNode == NULL) return; else { printf("刪除成功! "); posLeftNode->next = posNode->next; free(posNode); posNode = NULL; } } //查找 struct Node* searchByName(struct Node* headNode, char* bookName) { struct Node* posNode = headNode->next; while (posNode != NULL && strcmp(posNode->data.name, bookName)) { posNode = posNode->next; } return posNode; } //打印鏈表 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; printf("書名 價格 數(shù)量 "); while (pMove != NULL) { printf("%s %.1f %d ", pMove->data.name, pMove->data.price, pMove->data.num); pMove = pMove->next; } } //直接文件操作 //文件寫操作 void saveInfoToFile(const char* filename, struct Node* headNode) { FILE* fp = fopen(filename, "w"); struct Node* pMove = headNode->next; while (pMove != NULL) { fprintf(fp, "%s %.1f %d ", pMove->data.name, pMove->data.price, pMove->data.num); pMove = pMove->next; } fclose(fp); } //文件讀操作 void readInfoFromFile(const char* fileName, struct Node* headNode) { FILE* fp = fopen(fileName, "r"); if (fp == NULL) { //不存在就創(chuàng)建出來這個文件 fp = fopen(fileName, "w+"); } struct bookInfo tempData; while (fscanf(fp, "%s %f %d ", tempData.name, &tempData.price, &tempData.num) != EOF) { insertNodeByHead(list, tempData); } fclose(fp); } //冒泡排序(鏈表) void bubbleSortList(struct Node* headNode) { 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.price > q->next->data.price) { //交換值 struct bookInfo tempData = q->data; q->data = q->next->data; q->next->data = tempData; } } } printList(headNode); } //2.交互 void keyDown() { int userkey = 0; struct bookInfo tempBook; //產生一個臨時的變量存儲書籍信息 struct Node* result = NULL; scanf("%d", &userkey); switch (userkey) { case 0: printf(" 【 登記 】 "); printf("輸入書籍的信息(name,price,num):"); scanf("%s%f%d", tempBook.name, &tempBook.price, &tempBook.num); insertNodeByHead(list, tempBook); saveInfoToFile("bookinfo.txt", list); break; case 1: printf(" 【 瀏覽 】 "); printList(list); break; case 2: printf(" 【 借閱 】 "); printf("請輸入你要借閱的書籍:"); scanf("%s", tempBook.name); result = searchByName(list,tempBook.name); if (result == NULL) printf("沒有相關書籍無法借閱! "); else { if (result->data.num > 0) { result->data.num--; printf("借閱成功 "); saveInfoToFile("bookinfo.txt", list); } else { printf("當前書籍無庫存,借閱失敗! "); } } break; case 3: printf(" 【 歸還 】 "); printf("請輸入你要歸還的書籍:"); scanf("%s", tempBook.name); result = searchByName(list, tempBook.name); if (result == NULL) printf("書籍來源非法! "); else { result->data.num++; printf("書籍歸還成功! "); saveInfoToFile("bookinfo.txt", list); } break; case 4: printf(" 【 查找 】 "); printf("你要查詢的書名:"); scanf("%s", tempBook.name); result = searchByName(list, tempBook.name); if (result == NULL) { printf("未找到相關結果! "); } else { printf("書名 價格 數(shù)量 "); printf("%s %.1f %d ", result->data.name, result->data.price, result->data.num); } break; case 5: printf(" 【 排序 】 "); bubbleSortList(list); break; case 6: printf(" 【 刪除 】 "); printf("輸入想要刪除的書名:"); scanf("%s", tempBook.name); deleteNodeByName(list, tempBook.name); saveInfoToFile("bookinfo.txt", list); break; case 7: printf(" 【 退出 】 "); printf(" 退出成功 "); system("pause"); exit(0); //關掉整個程序 break; default: printf(" 【 error 】 "); break; } } //1.界面--->菜單--->模塊 void makeMenu() { printf("---------------------------------- "); printf(" Eugeo圖書管理借閱系統(tǒng) "); printf("t0.登記書籍 "); printf("t1.瀏覽書籍 "); printf("t2.借閱書籍 "); printf("t3.歸還書籍 "); printf("t4.查找書籍 "); printf("t5.排序書籍 "); printf("t6.刪除書籍 "); printf("t7.退出系統(tǒng) "); printf("---------------------------------- "); printf("請輸入(0~7):"); } int main() { list = createHead(); //鏈表初始化 readInfoFromFile("bookinfo.txt", list); while (1) { makeMenu(); keyDown(); system("pause"); system("cls"); } }
?
圖書管理系統(tǒng)分享就到此結束啦,大家趕緊試試吧!
審核編輯:湯梓紅
評論
查看更多