基於檔案儲存的圖書館管理系統(C語言)
阿新 • • 發佈:2020-12-13
題目要求
知識架構
1. 檔案讀取和寫入
檔案順序讀取:讀寫字元、讀寫字串、讀寫二進位制資料
檔案隨機讀取:fseek()、rewind()函式等
2. 結構體宣告和結構體陣列的使用
typedef和struct NAME兩種宣告方式的特點
3. 全域性變數的宣告
在標頭檔案中宣告extern ‘全域性變數’,其他檔案就能直接呼叫該全域性變數
開發環境:VS2015
部分程式碼
main.c
1 #include <stdio.h> 2 //#include <windows.h> 3 #include <stdlib.h> 4 #include "liberary.h" 5 #include "reader.h" 6 #include "borrow.h" 7 8 int main() 9 { 10 //生成選單 11 while (1) 12 { 13 int str = 0,s; 14 printf("----------%d%20d圖書館管理系統%d%20d----------\n",str,str,str,str); 15 printf("\n%31d-輸入你的選擇-\n%31d[1]圖書類別管理\n%31d[2]讀者類別管理\n%31d[3]借閱登記管理\n%31d[4]修改系統引數\n%31d[0]退出系統\n",str,str,str,str,str,str); 16 printf("input:"); 17 scanf("%d", &s); 18 if (s == 1) 19 { 20 while (1) 21 { 22 printf("[1]新增圖書\t[2]刪除圖書\t[3]修改資訊\t[4]檢視圖書\t[0]退出\n"); 23 scanf("%d", &s); 24 if(s == 1) 25 { 26 printf("選擇圖書類別: [1]書籍\t[2]期刊\t[3]報刊\n"); 27 scanf("%d", &s); 28 additem(s); 29 } 30 else if (s == 2) 31 { 32 printf("選擇圖書類別: [1]書籍\t[2]期刊\t[3]報刊\n"); 33 scanf("%d", &s); 34 removeitem(s); 35 } 36 else if (s == 3) 37 { 38 printf("選擇圖書類別: [1]書籍\t[2]期刊\t[3]報刊\n"); 39 scanf("%d", &s); 40 updateitem(s); 41 } 42 else if (s == 4) 43 { 44 printf("選擇圖書類別: [1]書籍\t[2]期刊\t[3]報刊\n"); 45 scanf("%d", &s); 46 getitem(s); 47 } 48 else 49 break; 50 } 51 } 52 else if (s == 2) 53 { 54 while (1) 55 { 56 printf("[1]資訊錄入\t[2]登出讀者\t[3]修改資訊\t[4]檢視讀者\t[0]退出\n"); 57 scanf("%d", &s); 58 if (s == 1) 59 { 60 printf("選擇讀者類別: [1]學生\t[2]教師\n"); 61 scanf("%d", &s); 62 setreader(s); 63 } 64 else if (s == 2) 65 { 66 printf("選擇讀者類別: [1]學生\t[2]教師\n"); 67 scanf("%d", &s); 68 remreader(s); 69 } 70 else if (s == 3) 71 { 72 printf("選擇讀者類別: [1]學生\t[2]教師\n"); 73 scanf("%d", &s); 74 udreader(s); 75 } 76 else if (s == 4) 77 { 78 printf("選擇讀者類別: [1]學生\t[2]教師\n"); 79 scanf("%d", &s); 80 getreader(s); 81 } 82 else 83 break; 84 } 85 } 86 else if (s == 3) 87 { 88 while (1) 89 { 90 printf("[1]借書\t[2]續借\t[3]還書\t[4]檢視全部資訊\t[5]逾期未還資訊\t[0]退出\n"); 91 scanf("%d", &s); 92 if (s == 1) 93 { 94 int a[4]; 95 printf("輸入書的類別([1]書籍[2]期刊[3]報刊)以及書的編號:"); 96 scanf("%d%d", &a[0], &a[1]); 97 if (searchitem(a[0], a[1]) != 0) 98 { 99 if (udbrrowed(a[0], a[1], 1) == 1) 100 { 101 printf("輸入讀者類別([1]學生[2]教師)以及借書證號:"); 102 scanf("%d%d", &a[2], &a[3]); 103 if (searchreader(a[2], a[3]) > 0) 104 { 105 borrowed(a[2], a[0], a[1], a[3]); 106 } 107 else if (searchreader(a[2], a[3]) == 0) 108 { 109 printf("-----不存在這個借書證號-----\n"); 110 udbrrowed(a[0], a[1], -1); //放棄操作,把檔案改寫回來 111 } 112 else 113 { 114 printf("-----此借書證已被掛失-----\n"); 115 udbrrowed(a[0], a[1], -1); 116 } 117 } 118 } 119 else 120 printf("-----不存在編號為%03d的書籍!-----\n", a[1]); 121 } 122 else if (s == 2) //最多隻能續借一次 123 { 124 int m, n; 125 printf("輸入書的類別([1]書籍[2]期刊[3]報刊)以及書的編號:"); 126 scanf("%d%d", &m, &n); 127 udRecord(m,n,1); 128 } 129 else if (s == 3) 130 { 131 int m, n; 132 printf("輸入書的類別([1]書籍[2]期刊[3]報刊)以及書的編號:"); 133 scanf("%d%d", &m, &n); 134 if(udRecord(m, n, 2) != -1) 135 udbrrowed(m,n,-1); //修改完借閱表後緊接著修改圖書表的數量 136 } 137 else if (s == 4) 138 { 139 display(); 140 } 141 else if (s == 5) 142 { 143 printf("-----顯示所有到期未歸還的借閱資訊-----\n"); 144 showDelay(-1, -1); 145 } 146 else 147 break; 148 } 149 } 150 else if (s == 4) //這裡採用的是改變全域性變數的方式,只能在本次執行改變初始值,要永久改變需要設定檔案記錄 151 { 152 while (1) 153 { 154 printf("[1]學生最多可借本數\t[2]教師最多可借本數\t[3]續借日數\t[4]延期每日罰款\t[0]退出\n"); 155 scanf("%d", &s); 156 if (s == 1) 157 { 158 printf("Now : %d\tSet :",Maxstubw); 159 scanf("%d", &s); 160 Maxstubw = s; 161 } 162 else if (s == 2) 163 { 164 printf("Now : %d\tSet :",Maxteabw); 165 scanf("%d", &s); 166 Maxteabw = s; 167 } 168 else if (s == 3) 169 { 170 printf("Now : %d\tSet :",Applyforday); 171 scanf("%d", &s); 172 Applyforday = s; 173 } 174 else if (s == 4) 175 { 176 float st; 177 printf("Now : %.2f\t Set :",Delaytopay); 178 scanf("%f", &st); 179 Delaytopay = st; 180 } 181 else 182 break; 183 } 184 } 185 else 186 break; 187 188 } 189 190 return 0; 191 }
liberary.h
#pragma once #ifndef __LIBERARY_H__ #define __LIBERARY_H__ void additem(int symbol); void getitem(int no); void removeitem(int symbol); void updateitem(int symbol); int udbrrowed(int symbol, int id, int aord); int searchitem(int symbol, int id); #endif
reader.h
#pragma once #ifndef __READER_H__ #define __READER_H__ void setreader(int symbol); void getreader(int symbol); int searchreader(int symbol, int id); void remreader(int symbol); void udreader(int symbol); #endif
borrow.h
#pragma once #ifndef __BORROW_H__ //防止重複引用 #define __BORROW_H__ extern int Maxstubw; //設為外部訪問全域性變數 extern int Maxteabw; extern float Delaytopay; extern int Applyforday; void borrowed(int level, int symbol, int id, int no); void display(); int udRecord(int m,int n,int signal); void showDelay(int level,int no); #endif
全部程式碼太多了,原始碼在這裡:https://github.com/Charlottelemon/Liberary-Manager
如果是VS2015直接載入專案即可,其他IDE的話把程式碼和儲存檔案移植過去就好了。
執行截圖
-----------結束線-----------