c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现
生活随笔
收集整理的這篇文章主要介紹了
c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言課程設計,對于初學者來說,主要是綜合運用C語言基礎知識,以實際項目的形式鍛煉編程能力。從今天開始,一起輕松學做C語言課程設計常見項目,建議先運行代碼,再一步步理解其實現。
題目要求
圖書管理系統提供圖書信息管理以及借還管理。圖書信息至少包括:圖書編號、書名、價格、作者、借還狀態,提供以下功能:
- 1.增加圖書信息,錄入;
- 2.查詢已有的所有圖書信息;
- 3.刪除圖書;
- 4.修改圖書信息;
- 5.借閱圖書;
- 6.歸還圖書;
- 7.退出;
實現要點
- 該要求較為簡單,可采用結構數組實現
- 使用文件保存圖書信息;
- 圖書借還狀態使用整數保存,1表示已還,0表示借出;
備注:初學者掌握數組、鏈表、文件這幾種方式即可,對于計算機專業,學過數據結構課程的學生,還可以用二叉樹等方式實現更多功能。
其實做為一個學習者,有一個學習的氛圍跟一個交流圈子特別重要這里我推薦一個C/C++基礎交流583650410,不管你是小白還是轉行人士歡迎入駐,大家一起交流成長。
編程環境
- 采用Dev-C++集成開發環境;
- 涉及C語言知識點:結構、數組、枚舉、函數、文件讀寫;
源代碼
#include <stdio.h> #include <stdlib.h> */ // 書本最大數量 #define BOOK_NUM 200 // 書名最大長度 #define NAME_LEN 60 // 作者姓名最大長度 #define AUTHOR_LEN 60 // 結構保存書本信息 typedef struct {// 編號int id;// 書名char name[NAME_LEN];// 價格double price;// 作者char author[AUTHOR_LEN];// 借出狀態,1表示借出,0表示未借出int state; } BOOK; /* 全局數組保存圖書 */ BOOK books[BOOK_NUM]; /* 當前書本數量 */ int book_sum = 0; /*定義功能函數,實現圖書信息的增加、刪除、修改、查閱、借還等功能。 */ // 顯示功能菜單 void showMenu(); // 添加圖書信息 void addBook(); // 查看圖書信息 void queryBook(); // 刪除圖書信息 void deleteBook(); // 修改圖書信息 void updateBook(); // 借書 void borrowBook(); // 還書 void returnBook(); // 保存圖書信息到文件books.txt void saveBook(); // 讀取文件books.txt到全局數組books void readBook(); // 在屏幕顯示各類出錯信息,并退出程序 void error(const char* err); /*定義字符數組,暫存每行輸入 */ char a[1024];int main() {// 當文件books.txt已有圖書信息時// 先全部讀取所有書本信息readBook(); showMenu(); // 顯示功能主菜單 while (1) {printf("n請輸出0-6,回車結束!n");if (fgets(a, 1024, stdin) != NULL) { // 按行讀取,0-6字符表示功能switch (a[0]) {case '0': // 退出程序 printf("ByeBye,下次再見!n");exit(0);case '1': // 添加圖書addBook();break;case '2': // 查看圖書queryBook();break;case '3': // 刪除圖書deleteBook();break;case '4': // 修改圖書updateBook();break;case '5': // 借書borrowBook();break;case '6': // 還書 returnBook();break;default:printf("請重新輸入正確的功能數字0-6!n");}}}return 0; }void showMenu() {printf("----------歡迎使用圖書管理系統----------nn");printf("當前系統共用圖書%d本!nn", book_sum);printf("系統提供以下功能:n");printf("1:添加圖書n");printf("2:查看圖書n");printf("3:刪除圖書n");printf("4:修改圖書n");printf("5:借閱圖書n");printf("6:歸還圖書n");printf("0:退出系統nn"); }void addBook() {if (book_sum >= BOOK_NUM) {printf("抱歉,圖書已達最大數量,無法增加圖書!n");return;}printf("請您按提示添加圖書信息:n");printf("依次輸入編號 書名 價格 作者信息,以空格分隔:n");if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d%s%lf%s", &books[book_sum].id, books[book_sum].name, & books[book_sum].price, books[book_sum].author) != EOF) {int is_find = -1; // 根據編號查找圖書信息,如果編號已存在,則無法增加 int i = 0;for (i = 0; i < book_sum; i++){if (books[i].id == books[book_sum].id){is_find = i;break;}}if (is_find != -1)printf("該編號對應的圖書信息已經存在,無法增加!n");else {books[book_sum].state = 1;book_sum++;saveBook();printf("添加成功,當前共有%d本圖書!nn", book_sum);}}else {error("輸入有誤,請重新添加!n");} }void queryBook() {printf("圖書編號 書名 價格 作者 借閱狀態n");if (book_sum == 0)printf("當前書庫沒有圖書,請先增加圖書!n");int i;for (i = 0; i < book_sum; i++) {printf("%8d %20s %8.2f %8s %8sn", books[i].id, books[i].name, books[i].price, books[i].author, (books[i].state == 1 ? "1-未借出" : "0-已借出"));} }void deleteBook() {printf("請輸入要刪除的圖書編號:");int id = 0; // 臨時存放輸入的編號 int is_find = -1; // 根據編號查找圖書信息,查到以后存放的數組位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i = 0;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("該編號對應的圖書信息不存在!n");else {// 刪除is_find位置的圖書信息,并將后面的圖書信息前移 if (is_find == book_sum - 1)book_sum--;else {int i;for (i = is_find; i < book_sum; i++)books[i] = books[i + 1];book_sum--;}saveBook();printf("該編號%d對應的圖書信息刪除成功!n", id);}}else {error("輸入有誤,請重新輸入!n");} }void updateBook() {printf("請輸入要修改的圖書編號:");int id = 0; // 臨時存放輸入的編號 int is_find = -1; // 根據編號查找圖書信息,查到以后存放的數組位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("該編號對應的圖書信息不存在!n");else {printf("該編號對應的圖書信息如下,請按照提示修改:n");printf("圖書編號 書名 價格 作者 借閱狀態n");printf("%8d %20s %8.2f %8s %8snn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "未借出" : "已借出"));printf("依次輸入修改后的書名、價格、作者信息,以空格分隔:n");if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%s%lf%s", books[is_find].name, &books[is_find].price, books[is_find].author) != EOF) {saveBook();printf("修改成功,修改后的圖書信息如下:n");printf("圖書編號 書名 價格 作者 借閱狀態n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "未借出" : "已借出"));}else {error("輸入有誤,請重新修改!n");}}}else {error("輸入有誤,請重新輸入!n");} } void borrowBook() {printf("請輸入要借閱的圖書編號:");int id = 0; // 臨時存放輸入的編號 int is_find = -1; // 根據編號查找圖書信息,查到以后存放的數組位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("該編號對應的圖書信息不存在!n");else {printf("該編號對應的圖書信息如下:n");printf("圖書編號 書名 價格 作者 借閱狀態n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "1-未借出" : "0-已借出"));if (books[is_find].state == 0)printf("該編號對應的圖書已借出,請歸還后再借閱!n");else {books[is_find].state = 0;saveBook();printf("該編號對應的圖書借閱成功!n");}}}else {error("輸入有誤,請重新輸入!n");} }void returnBook() {printf("請輸入要歸還的圖書編號:");int id = 0; // 臨時存放輸入的編號 int is_find = -1; // 根據編號查找圖書信息,查到以后存放的數組位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("該編號對應的圖書信息不存在!n");else {printf("該編號對應的圖書信息如下:n");printf("圖書編號 書名 價格 作者 借閱狀態n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "1-未借出" : "0-已借出"));if (books[is_find].state == 1)printf("該編號對應的圖書未借出,無法歸還!n");else {books[is_find].state = 1;saveBook();printf("該編號對應的圖書歸還成功!n");}}}else {error("輸入有誤,請重新輸入!n");} }void saveBook() {FILE* fp = fopen("book.txt", "w+");if (fp != NULL) {/**按行寫入每本書信息到數組*/int i;for (i = 0; i < book_sum; i++)if (fprintf(fp, "%d %s %f %s %dn", books[i].id, books[i].name, books[i].price, books[i].author, books[i].state) == EOF) {fclose(fp);error("寫入book.txt文件失敗,請檢查!n");}if (fclose(fp) == EOF)error("關閉book.txt文件失敗,請檢查!n");}else {error("打開book.txt文件失敗,請檢查!n");} }void readBook() {FILE* fp = fopen("book.txt", "a+");if (fp != NULL) {/**按行讀取每本書信息到數組,并且統計書本數量信息*/int i = 0;while ((i < BOOK_NUM) && (fscanf(fp, "%d%s%lf%s%d", &books[i].id, books[i].name, & books[i].price, books[i].author, &books[i].state) != EOF)) {i++;}book_sum = i;if (fclose(fp) == EOF)error("關閉book.txt文件失敗,請檢查!n");}else {error("打開book.txt文件失敗,請檢查!n");} }void error(const char* err) {printf(err);exit(-1); }運行結果:
----------歡迎使用圖書管理系統---------- 當前系統共用圖書3本! 系統提供以下功能: 1:添加圖書 2:查看圖書 3:刪除圖書 4:修改圖書 5:借閱圖書 6:歸還圖書 0:退出系統請輸出0-6,回車結束! 2 圖書編號 書名 價格 作者 借閱狀態1 test02 10.00 zhangsan1 1-未借出2 test01 11.01 kdkal 1-未借出4 kdkd 100.11 kdkalal 1-未借出請輸出0-6,回車結束! 4 請輸入要修改的圖書編號:3 該編號對應的圖書信息不存在!請輸出0-6,回車結束! 3 請輸入要刪除的圖書編號:1 該編號1對應的圖書信息刪除成功!請輸出0-6,回車結束! 2 圖書編號 書名 價格 作者 借閱狀態2 test01 11.01 kdkal 1-未借出4 kdkd 100.11 kdkalal 1-未借出請輸出0-6,回車結束!其實做為一個學習者,有一個學習的氛圍跟一個交流圈子特別重要這里我推薦一個C/C++基礎交流583650410,不管你是小白還是轉行人士歡迎入駐,大家一起交流成長。
總結
以上是生活随笔為你收集整理的c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java resume过时方法_学点开发
- 下一篇: wordpress如何让百度快速收录_百