本系統能實行基本的圖書信息管理和借閱功能
下面是設計報告,代碼在后邊:
xxxxx大學
C語言課程設計報告
題 目 圖書管理系統設計
專業班級 xxxx級計算機科學與技術本科x班
組 別 計科第xx組
學生姓名 小哥哥
院 (系) 信息工程系
指導教師(職稱) xxx(教授)
完成時間 xxxx年x月xx日
XXX大學
課程設計任務書
題目 圖書管理系統設計
班級 xxxx級計算機科學與技術本科x班
學號 xxxxx 姓名 小哥哥
學號 xxxxx 姓名 xxxx
學號 xxxxx 姓名 xxxx
一、主要內容:
本課程設計結合本學期所學C語言知識,數組、函數、結構體、指針、鏈表、文件讀取操作等等,准備設計開發一個簡單的圖書管理系統。設計開發這個系統需要用到鏈表、文件讀取操作、結構體、函數、指針、等C語言知識。本課程設計將會實現對圖書信息的賬號登錄、注冊賬號、密碼修改、密碼查找、查找、輸出、排序、備份、恢復、圖書借閱和歸還功能。本着簡單、易用的設計原則,本課程設計在盡量優化界面在保證輸入輸出美觀的同時又不失友好的交互界面。
本次設計主要學習內容包括:
(一)進一步學習並熟練掌握C語言語法和編程思想。
(二)學習C語言提供的庫函數,熟悉CodeBlocks的開發工具。
(三)學習C語言函數、鏈表、結構體、文件讀取、指針等知識。
(四)學習軟件的設計與開發過程中所需要思想和細節。
二、基本要求:
(一)質量要求
(1)圖書管理系統的基本功能模塊的設計應包括:賬號登錄和修改、圖書信息的瀏覽和保存、圖書的借閱和歸還。
(2)對圖書管理系統設計並進行調試、修復、完善、測試。測試圖書信息的輸入輸出是否正確、測試文件的讀取與存儲是否正常、測試賬號切換后是否各項功能是否正常運行、測試評估界面是否合理,友好。
(3)定期主動向指導教師匯報任務進度,認真填寫相關報告文檔。
(4)按時完成各階段工作,不突擊,不抄襲。
(二)進度要求
(2)明確課程設計任務,搜集資料:2017年2月28日—3月14日。
(3)完成程序的設計與實現,撰寫課程設計論文初稿:2017年3月15日—5月15日。
(4)與指導教師溝通,完成課程設計論文定稿:2016年5月16日—2017年5月28日。
(5)進入課程設計論文審閱階段,准備答辯:2017年5月29日—6月9日。
三、主要參考資料:
[1] xxxx
[2] xxxxx
[3] xxx
[4] xxxx
完 成 期 限: xxxx年x月xx日
指導教師簽名:
年 月 日
目 錄
1概述. 1
1.1 設計思想. 1
1.2 設計原則. 1
1.3 課程設計報告內容及分工情況. 1
1.3.1 課程設計報告內容. 1
1.3.2 課程設計分工情況. 2
2總體設計. 3
2.1 功能模塊圖. 3
2.2 主函數 main() 3
2.3 程序流程圖. 4
3 詳細設計. 5
3.1 函數. 5
3.2 函數流程圖. 8
4運行結果與調試. 13
4.1 運行結果. 13
4.2 軟件調試. 15
結束語. 17
參考資料. 18
附錄. 19
1概述
1.1 設計思想
(1)該系統的設計分成幾個相對獨立的模塊,這些模塊都進行集中式管理。
(2)分層的模塊化程序設計思想,整個系統采用模塊化結構設計作為應用程序,有較強的可操作性和擴展性。
(3)合理的數據設計,在應用系統設計中,相對獨立的模塊間以數據相互連接,使各模塊間的耦合性較低,方便系統運行,提高系統安全性 。
1.2 設計原則
為了使本系統功能齊全完備,操作簡便,最大限度的提高用戶的使用的體驗,從而滿足用戶的實際需要,在設計開發過程中遵循了如下原則:
(1)合法性原則:規范錄入各種圖書信息和各種數據,對用戶的賬號信息進行規范保存。
(2)實用性原則:根據用戶對圖書信息瀏覽和借閱的基本需求設計各種功能,並能夠處理一些特殊情況的要求,此外,盡可能預留空間,以便擴充功能。
(3)易操作原則:要求設計的系統功能齊全,界面友好,操作方便,必要的地方進行提示。
(4)源程序可讀性原則:為了便於其他設計,維護人員讀懂代碼或以后的代碼修改,軟件升級維護,即可能做好代碼注釋工作。
1.3 課程設計報告內容及分工情況
1.3.1 課程設計報告內容
(1)系統功能模塊結構圖和程序流程圖
(2)數據結構設計及用法說明
(3)程序結構(畫功能模塊圖或流程圖)
(4)各模塊的功能
(5).實驗結果(包括輸入數據和輸出結果)
(6)設計體會
(7)參考文獻
1.3.2 課程設計分工情況
本組共有3人,具體分工情況如下:
(1)學號:xxxxx,姓名:小哥哥,具體負責寫全部代碼和功能實 現,並完成大部分課程設計報告。
(2)學號:xxxxxx,姓名:xxx,具體負責流程圖的制作。
(3)學號:xxxxxx,姓名:xxx,具體負責流程圖的制作。
2總體設計
2.1 功能模塊圖
本圖書管理系統分為三個功能模塊,分別是賬號管理功能、圖書信息管理功能、圖書借還管理功能。賬號管理功能可以進行賬號登錄、注冊賬號、找回密碼、修改密碼:圖書信息管理功能可以對圖書信息進行查找、排序、修改、恢復、和備份功能:圖書借還管理功能可以查詢用戶的借書記錄、借書、還書功能。
圖2-1圖書管理系統模塊圖
2.2 主函數 main()
函數的功能: 用於聯系各個功能函數模塊,以及退出程序時的退出畫面提示。
函數的入口: 整個程序是從主函數開始的。
函數的出口: 當從main()的ove函數開始中進入,即顯示出歡迎使用界面;跳出while循環,然后退出main()函數,即:退出整個程序。
函數調用關系:該函數不被其它函數調用
2.3 程序流程圖
本圖書管理系統在啟動后會先進入登錄界面進行登錄或各種賬號操作,然后進入圖書信息管理、圖書借還管理等實用性功能的操作。
圖2-2圖書管理系統流程圖
3 詳細設計
3.1 函數
(1) 功能函數ling()
函數的功能: 登錄賬號
函數的入口: 從main()中進入。
函數調用關系: 被主函數調用。
函數的出口: 當賬號登錄成功返回1然后結束該函數,或輸入密碼錯誤超過三次結束結束整個程序。
(2)功能函數FindByNum()
函數的功能: 按書號對圖書進行查找並輸出。
函數的入口: 程序從Find()的switch()開關結構中進入,即sclele的值為1時,開始進入該函數,進入函數后,在存儲圖書信息的stu結構數組中進行查找,找到后進行輸出,若沒找到則輸出“未找到該數”。
函數調用關系:被Find()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口: 當輸出結果信息用printf()標准輸出到屏幕上,然后結束該函數,而執行Find()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
(3)功能函數SortByScore
函數的功能: 對所有圖書信息按書名的首字母進行排序,並保存到文件“緩存區”中。
函數的入口: 從Sort()的switch()開關結構中進入,即sexh的值為1的時侯,進入該函數,開始對圖書信息按書名的首字母進行排序,然后將排序結果保存到文件“緩存區”中。
函數調用關系:被Sort()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口:把“排序完成”用printf()標准輸出到屏幕上,然后結束該函數,而執行Sort()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
(4)功能函數output()
函數的功能: 輸出所有圖書信息
函數的入口: 從Find()的switch()開關結構中進入,即sclele的值為4時,進入該函數。並調用PrintRecord()函數對每一條圖書信息進行輸出。
函數調用關系: 被Find()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口: 將所有圖書信息都輸入到屏幕上后,執行Find()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
(5)功能函數Huifu ()
函數的功能: 將所有圖書的信息恢復至備份時的狀態
函數的入口: 從Menu ()的switch()開關結構中進入,即select的值為4時,進入該函數。用freopen("圖書信息庫.txt", "r",stdin)將里邊的所有圖書信息都存入內存,然后再調用save()將所有圖書信息都存入到“緩存區”中。
函數調用關系: 被Menu ()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口: 將所有圖書信息都存入到“緩存區”中后,執行Menu ()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
(6)功能函數BorrowBook()
函數的功能: 借閱圖書
函數的入口: 從Borrow ()的switch()開關結構中進入,即shl的值為2時,進入該函數。之后對用戶的信譽值進行判斷,若低於60將無法借書。然后調用FindByName()函數對所借圖書進行搜索,若存在則輸入借書時間,否則借書失敗。
函數調用關系: 被Borrow ()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口: 將借書結果輸入到屏幕上后,執行Borrow ()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
(7)功能函數SendBook ()
函數的功能: 歸還圖書
函數的入口: 從Borrow ()的switch()開關結構中進入,即shl的值為3時,進入該函數。之后先判斷該用戶是否有借書記錄,並調用FindByName()函數找到還的圖書並對其數量進行修改,最后判斷是否按期歸還圖書和圖書有無破損。
函數調用關系: 被Borrow ()函數調用。由switch()開關結構中進入,並在文中無返回值的空值void函數。
函數的出口: 還書完成后后,執行Borrow ()函數中“break;”跳出switch()開關函數,繼續執行while循環結構。
3.2 函數流程圖
(1)賬號登錄流程如圖3-1所示。
圖3-1 賬號登錄流程圖
(2)按書號查找圖書流程如圖3-2所示。
圖3-2按書號查找流程圖
(3)按書名首字母排序流程圖如圖3-3所示 。
圖3-3按書名首字母排序流程圖
(4)輸出所有圖書信息流程如圖3-4所示。
圖3-4輸出所有圖書信息流程圖
(5)恢復備份功能流程如圖3-5所示。
圖3-5恢復備份流程圖
(6)借閱圖書流程如圖3-6所示。
圖3-6借閱圖書流程圖
(7)歸還圖書流程如圖3-7所示。
圖3-7歸還圖書流程圖
4運行結果與調試
4.1 運行結果
(1)在程序開始是進入登錄界面進行登錄界面或選擇切換賬號時輸出登錄界面。該界面可以進行登錄操作、注冊新賬號、找回賬號密碼、修改密碼和退出系統。
圖4-1 賬號登陸界面
(2)該界面為主界面,在登錄完成后或者從下一級界面返回后輸出該界面。該主界面可以選擇圖書信息管理功能、圖書借還功能、查看系統功能介紹、開發人員信息和退出系統的操作。
圖4-2 主界面
(3)該界面為圖書管理功能的主界面,可以選擇執行查找、排序、修改、恢復圖書信息、備份圖書信息的操作、返回上一級菜單的功能。
圖4-3圖書信息管理功能界面
(4)該界面可以實現圖書信息查找功能,可以按書號查找、按書名查找、按作者查找、查看全部圖書信息、返回上一級菜單的功能。
圖4-4 查找功能界面
(5)該界面可以進行排序的操作。可以進行按書名首字母排序、按圖書單價升序排序、按圖書單價降序排序,還可以返回上一級菜單。排序功能是在內存中進行,所以不進行輸出。
圖4-5排序功能界面
(6)該界面可以實現添加圖書、刪除圖書、刪除全部圖書信息、返回上一級菜單的功能。
圖4-6修改功能界面
(7)該界面可以實現對用戶借書記錄查詢、圖書借閱、圖書歸還、返回上一級菜單的功能。
圖4-7圖書借還管理功能界面
4.2 軟件調試
(1)每個選擇界面之后,前一屏幕的內容依舊存在,影響界面的美觀;經過老會長的幫助及上網搜索,發現利用“system(“cls”);”可以消去前一屏幕的內容;然而接下來又出現新的問題:每次在執行完講數據保存到文件的函數后都會輸出紊亂。經過多次調試和修改后,發現把是因為freopen(”CON”,stdout)運行不穩定導致,在更換了保存數據的方法后結決了此問題。
(2)在增加了切換賬號功能后,在創建新賬號后保存到文件的用戶借還書記錄總是出錯但內存中沒錯,經過調試發現是因為在新增賬號時用於存儲新賬號借還書記錄的指針名與一個變量名相同造成每次都判斷錯誤。最后更換了變量名,並使該指針每次使用前都指向NULL。
(3)在借書時不能判斷是因為圖書數量不足導致不能借閱還是因為沒用該圖書導致的不能借閱,最后給每種情況標記變量都設置了一不同的值來區分兩種不同的情況。
(4)最開始在每次關閉程序后在下次使用前需要手動恢復文件中的數據,不能連續的使用數據,最后加了一個文件來保存各類數據的數量以使數據能夠連續自主的調用,不需要再人工修改。
結束語
本系統包含51個函數,基本實現了圖書管理系統所需的基本功能。系統功能大致分為三個模塊,分別是登錄功能、圖書信息管理功能和圖書借還功能。啟動程序后首先執行的是登錄功能。在此功能中可以實現賬號登錄、注冊賬號、找回賬號密碼、修改賬號密碼功能。登錄時,若輸入密碼錯誤次數達到三次系統將自動關閉。在注冊賬號時若注冊的賬號已存在則不能再進行注冊。修改密碼時增加了驗證碼功能。在圖書信息管理模塊中可以進行圖書查找、排序、添加、刪除、備份圖書信息、回復圖書信息、切換賬號等功能。在圖書借還功能模塊可以進行圖書的借閱、歸還、借書記錄查詢功能。本系統在信息存儲時用了兩種方式。在存儲圖書信息和賬號信息時用的是結構數組,在存儲用戶借書記錄時用的是鏈表。通過此次圖書管理系統的設計熟練了結構數組、鏈表、文件的操作,同時對編寫小型的系統有了一定的了解,對於細節方面考慮的比以前有很大提升。
小哥哥:在該設計中主要完成了所有代碼的實現,並最終調試實現了該圖書管理系統的全部功能。還完成了大部分的設計報告。在設計的過程中熟練了對文件的各種操作,鏈表和結構數組的使用,清屏函數和暫停函數的使用,對做一個項目的過程有了一個大概的認識,知道了大致的規划。在設計過程中發現一些文件的操作和清屏函數會有沖突,通過改變對文件的操作解決了此問題;
xxx:除了小哥哥設計的這個圖書管理系統,我自己也嘗試着設計了一個圖書管理系統的功能,因此也發現了很多問題,比如說:在用add()函數添加新增圖書信息時,我就忘了字符型數據本身會吃掉回車的這一特點,忘了在%c前面加上空格,導致程序在循環的過程中一直無法正常顯示結果。但是,通過仔細耐心的檢查與對錯誤的分析,又在課本的相關章節進行了查閱,最終發現了這一問題。同時,我更加熟悉了結構體的使用,對函數的調用方式更加清楚。還有就是初步了解了函數指針的概念,能夠使用基礎的函數指針。同時,這也是我第一次嘗試畫各種各樣的流程圖,雖然畫的不好,但這確實是我的第一次嘗試,也覺得充滿了樂趣。
xxx:在本系統的設計中我參加設計了少量函數語句以及制作流程圖等任務,在這次的設計前我原本對函數和結構體等了解並不太清楚,通過這次的設計我清楚了這些語句的運用,並且我學會了文件的操作,在文件的修改等地方出現了問題,后來通過查閱資料和討論解決了這個問題。
參考資料
[1] 《C語言程序設計(第二版)》,甘勇等編著,中國鐵道出版社,2015年9月
附錄
源代碼…….
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include <windows.h> #include<algorithm>
using namespace std; struct library{ int ID; char name[30]; double price; char author[30]; int quan; char itd[2000]; }stu[100]; struct asccount{ char AcName[30]; char password[12]; char nickname[30]; }sta[100]; struct Book{ char Name[30]; char time[40]; }; struct node{ char users[30]; int sexes; struct Book book[30]; int r; node *Next; }; typedef struct node *L; L pre, hnj=NULL, kl = new node; L HEAD = new node; char strr[30]; int num=42,LLL,jj=2,logo=0,h=0,F=1,k=2,huan,oo; void display(void);//顯示圖書信息管理菜單*
void load(void);//把圖書信息加載到內存*
void save(void);//將數據保存到磁盤*
void Sort(void);//排序*
void SortByScore(void);//按書名首字母排序*
void AscendVyPick(void);//按單價升序排序*
void DesendByPick(void);//按單價降序排序*
int cmp1(library a, library b);//按書名首字母排序判斷*
int cmp2(library a, library b);//按單價升序排序判斷*
int cmp3(library a, library b);//按單價降序排序判斷*
void IdArrange(void);//重新整理書號*
void Find(void);//查找*
void add(void);//添加*
void edit(void);//修改*
void DeleteAll(void);//刪除所有信息*
void PrintRecord(void);//輸出一條記錄*
void FindByName(void);//按書名查找*
void FindByNum(void);//按書號查找*
void FindByAuthor(void);//按作者查找*
void output(void);//輸出所有圖書信息*
void over(void);//結束程序*
void Huifu(void);//恢復出廠設置*
void PrinEdit(void);//輸出修改菜單*
void FindEdit(void);//輸出查找菜單*
void PrintSort(void);//輸出排序菜單*
void CheckUser(void);//檢驗賬號的合法性*
void addUser(void);//新建賬號*
void findPassword(void);//找回密碼*
void EditPassword(void);//修改密碼*
void loadUser(void);//將賬號讀入內存*
void saveUser(void);//將賬號存入磁盤*
void printuser(void);//輸出賬號菜單*
int ling(void);//賬號登錄*
void PrintBorrow(void);//打印借書管理系統菜單*
void Menu(void);//圖書信息管理*
void Borrow(void);//圖書借還系統*
void BorrowRecord(L q);//借書記錄*
void BorrowBook(L q, L y);//借書*
void SendBook(L q, L y);//還書*
L LookUser(L head);//用戶搜索*
void loadBorrow(L head);//將借書記錄加載到內存*
void saveBorrow(L head);//將用戶借書記錄加載到磁盤*
void FuactionIntrod(void);//系統功能介紹*
void Intropeople(void);//開發人員介紹*
void Mainmenu(void);//打印主菜單*
void hhk(void);//打印操作錯誤 *
void loaduu(void);//數據數加載到內存*
void saveuu(void);//數據數加載到磁盤*
void Cpy(void);//備份圖書信息*
void HideCursor(void);//隱藏光標*
void inwrong(void);//判斷輸入是否正確*
void shan(void); void beifen(void); int main() { int i,selt; HideCursor(); LLL = 1; loaduu(); if(!ling()) return 0; system("cls"); load(); while(1){ Mainmenu(); oo = scanf("%d",&selt); if(!oo){ inwrong(); continue; } switch(selt){ case 1: Menu(); saveuu(); break; case 2: Borrow(); break; case 3: FuactionIntrod(); break; case 4: system("cls"); Intropeople(); break; case 5: system("cls"); if(ling() == 0){return 0;} system("cls"); break; case 6: saveuu(); system("cls"); over(); return 0; default : system("cls"); hhk(); system("cls"); break; } } return 0; } //判斷輸入是否正確
void inwrong(void) { char s[50]; gets(s); system("cls"); printf("\t\t\t輸入錯誤!!\n"); system("PAUSE");system("cls"); } //隱藏光標
void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } //數據數加載到內存
void loaduu(void) { FILE *fp; fp = fopen("數據個數.txt", "r"); fscanf(fp, "%d", &num); fscanf(fp, "%d", &jj); fclose(fp); k = jj; } //數據數加載到磁盤
void saveuu(void) { FILE *fp; fp = fopen("數據個數.txt", "w"); fprintf(fp, "%d\n", num); fprintf(fp, "%d\n", jj); fclose(fp); } //備份圖書信息
void Cpy(void) { FILE *fp; int i; shan(); fp = fopen("圖書信息庫.txt", "w"); for(i = 0; i < num; i++){ fprintf(fp, "%d\n",stu[i].ID); fprintf(fp, "%s\n",stu[i].name); fprintf(fp, "%.2lf\n",stu[i].price); fprintf(fp, "%s\n",stu[i].author); fprintf(fp, "%d\n",stu[i].quan); fprintf(fp, "%s\n",stu[i].itd); } fclose(fp); saveuu(); printf("\n\n\t\t\t備份成功!!\n"); system("PAUSE"); system("cls"); } //打印主菜單
void Mainmenu(void) { printf("\t ************************************************************\n"); if(LLL){ printf("\t * 歡迎使用小哥哥的圖書管理系統 *\n"); LLL = 0; } else{ printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); } printf("\t * *\n"); printf("\t * 圖書信息管理 請按 1 *\n"); printf("\t * *\n"); printf("\t * 圖書借還管理 請按 2 *\n"); printf("\t * *\n"); printf("\t * 系統功能介紹 請按 3 *\n"); printf("\t * *\n"); printf("\t * 開發人員介紹 請按 4 *\n"); printf("\t * *\n"); printf("\t * 切換賬號 請按 5 *\n"); printf("\t * *\n"); printf("\t * 退出系統 請按 6 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } //系統功能介紹
void FuactionIntrod(void) { system("cls"); printf("本系統能執行以下操作:\n\n"); printf("一、登錄界面功能介紹\n\n"); printf("1.登錄賬號\n\n2.注冊新賬號\n\n3.密碼找回\n\n4.修改密碼\n\n\t\t\t "); system("PAUSE"); system("cls"); printf("二、圖書信息管理系統功能介紹\n\n"); printf("1. 查找功能\n\n"); printf("1)按書號查找\n2)按書名查找\n3)按作者查找\n4)輸出所有圖書信息\n\n"); printf("2. 排序功能\n\n"); printf("1)按書名首字母排序\n2)按單價升序排序\n3)按單價降序排序\n\n"); printf("3. 修改功能\n\n"); printf("1)添加\n\n 可添加任意本書\n\n2)刪除一本圖書\n3)刪除全部圖書\n\n"); printf("4. 恢復圖書信息\n\n 如錯誤刪除圖書信息,可恢復上一次備份的圖書信息\n\n"); printf("5.備份圖書信息\n\n\t\t\t "); system("PAUSE"); system("cls"); printf("三、圖書借還系統功能介紹\n\n"); printf("1.借閱圖書功能\n\n"); printf("此功能可使用戶借閱本系統中現存的圖書\n\n"); printf("2.還書功能\n\n"); printf("此功能可方便用戶還書\n\n"); printf("3. 用戶借書還書記錄查詢功能\n\n"); printf("此功能可查詢個人借書和還書記錄\n\n"); printf("4. 用戶借書還書信譽查詢功能\n\n"); printf("此功能可查詢借書者的個人信譽值,若信譽值低於60將不能再通過本系統借書,同時,每一年年末都會對信譽值進行統計,\n"); printf("並將所有用戶信譽值恢復為100。\n\n"); printf("信譽值扣除標准:\n\n"); printf("1)借的書需在兩個工作日內歸還,逾期還書 每次扣除信譽值 5。\n"); printf("2)對圖書造成損壞或丟失的 每次扣除信譽值 10 , 並原價賠償。\n"); printf("3)超過還書時間一個工作日的,信譽值將被直接清零,並不能在本系統進行任何操作。\n\n"); printf("四、切換賬號功能\n\n 可以切換賬號\n\n\t\t\t "); system("PAUSE"); system("cls"); } //檢驗賬號的合法性
void CheckUser(void) { int i,flag = 0,K,KK; char ss[30],sf[10]; printf("\t\t\t\t請輸入登錄賬號:\n\n\t\t\t\t "); scanf("%s",ss); for(i = 0; i < jj; i++){ if(strcmp(sta[i].AcName, ss) == 0){ strcpy(strr, ss); flag = 1; break; } } if(!flag){ printf("\n\t\t\t\t此賬號還未注冊!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return; } printf("\t\t\t\t請輸入密碼:\n\n\t\t\t\t "); scanf("%s",sf); if(strcmp(sta[i].password, sf) == 0){ h = 0; flag = 2; } if(flag == 1){ system("cls"); printf("\t\t\t\t密碼錯誤!!\n\n\t\t\t "); system("PAUSE"); system("cls"); h++; return ; } else if(flag == 2){ printf("\t\t\t 請輸入下面的驗證碼:\n"); srand((unsigned)time(NULL)); K = rand(); printf("\n\t\t\t\t %d\n\t\t\t\t ",K); oo = scanf("%d",&KK); if(!oo){ inwrong(); return ; } if(KK != K){ printf("\n\t\t\t驗證碼錯誤!!\n"); system("PAUSE"); system("cls"); return ; } logo = 1; } } //將賬號存入磁盤
void saveUser(void) { int i; FILE *fp; fp = fopen("賬號.txt", "w"); for(i = 0; i <= jj; i++){ fprintf(fp, "%s\n", sta[i].AcName); fprintf(fp, "%s\n", sta[i].password); fprintf(fp, "%s\n", sta[i].nickname); } fclose(fp); } //新建賬號
void addUser(void) { FILE *fp; int j=0,i; char c[12],str[30]; printf("\t\t\t請輸入賬號:\n\n\t\t\t "); scanf("%s",str); for(i = 0; i < jj; i++){ if(strcmp(sta[i].AcName, str) == 0){ printf("\t\t\t該賬號已被注冊,請重新申請!!\n\n\t\t\t "); system("PAUSE"); return ; } } strcpy(sta[jj].AcName, str); printf("\t\t\t請輸入密碼(密碼長度不超過十個字符):\n\n\t\t\t "); scanf("%s", sta[jj].password); printf("\t\t\t請再輸入一次密碼:\n\n\t\t\t "); scanf("%s",c); if(strcmp(sta[jj].password, c) != 0){ printf("\t\t\t兩次密碼不一致請從新申請\n\n\t\t\t"); system("PAUSE"); system("cls"); printf("\n"); addUser(); j = 1; } if(j) return ; printf("\n\t\t\t請輸入昵稱\n\n\t\t\t "); scanf("%s",sta[jj].nickname); saveUser(); printf("\t\t\t\t賬號申請成功!!\n\n\t\t\t"); jj++; strcpy(kl->users, sta[jj-1].AcName); kl->sexes = 0; strcpy(kl->book[0].Name, "0"); strcpy(kl->book[0].time, "0"); kl->r = 100; kl->Next = NULL; hnj = kl; saveuu(); loadBorrow(HEAD); saveBorrow(HEAD); system("PAUSE"); } //找回密碼
void findPassword(void) { int i; char a[30]; printf("\t\t\t請輸入要找回的賬號:\n\t\t\t\t"); scanf("%s",a); for(i = 0; i < jj; i++) if(strcmp(sta[i].AcName, a) == 0){ printf("\t\t\t密碼:%s\n",sta[i].password); system("PAUSE"); return ; } printf("\t\t\t\t查無此賬號!!\n\n\t\t\t"); system("PAUSE"); } //修改密碼
void EditPassword(void) { int i,K=0,KK=0; char a[30]; printf("\t\t\t 請輸入要修改密碼的賬號:\n\t\t\t "); scanf("%s",a); for(i = 0; i < jj; i++) if(strcmp(sta[i].AcName, a) == 0){ printf("\n\t\t\t 請輸入原密碼:\n\t\t\t "); scanf("%s",a); if(strcmp(sta[i].password, a) != 0){ printf("\n\t\t\t\t密碼錯誤!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } printf("\n\t\t\t 請輸入新密碼:\n\t\t\t "); scanf("%s",a); if(strcmp(sta[i].password, a) == 0){ printf("\n\t\t\t新密碼與原密碼重復,請從新修改!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } strcpy(sta[i].password, a); printf("\t\t\t 請輸入下面的驗證碼:\n"); srand((unsigned)time(NULL)); K = rand(); printf("\n\t\t\t\t %d\n\t\t\t\t ",K); oo = scanf("%d",&KK); if(!oo){ inwrong(); return ; } if(KK != K){ printf("\n\t\t\t驗證碼錯誤!!\n"); system("PAUSE"); system("cls"); return ; } printf("\n\t\t\t\t修改密碼成功!!\n"); saveUser(); system("PAUSE"); system("cls"); return ; } printf("\n\t\t\t\t查無此賬號!!\n\n\t\t\t"); system("PAUSE"); } //將賬號讀入內存
void loadUser(void) { int i; freopen("賬號.txt", "r", stdin); for(i = 0; i < jj; i++){ scanf("%s",sta[i].AcName); scanf("%s",sta[i].password); scanf("%s",sta[i].nickname); } freopen("CON", "r", stdin); } //輸出賬號菜單
void printuser(void) { printf("\t\t\t************************************\n"); printf("\t\t\t* 登錄 請按 1 *\n"); printf("\t\t\t* 注冊新賬號 請按 2 *\n"); printf("\t\t\t* 找回密碼 請按 3 *\n"); printf("\t\t\t* 修改密碼 請按 4 *\n"); printf("\t\t\t* 退出程序 請按 5 *\n"); printf("\t\t\t************************************\n"); } //賬號登錄
int ling(void) { int sh,i; hnj=NULL, kl = new node; h = logo = 0; while(1){ printuser(); loadUser(); loaduu(); oo = scanf("%d",&sh); if(!oo){ inwrong(); continue; } switch(sh){ case 1: CheckUser(); break; case 2: addUser(); saveuu(); system("cls"); break; case 3: findPassword(); system("cls"); break; case 4: EditPassword(); break; case 5: system("cls"); printf("\n"); printf("\t\t\t歡迎下次使用小哥哥的圖書管理系統\n"); return 0; default : system("cls"); hhk();system("cls"); break; } if(logo) return 1; if(h == 3){ printf("\t\t\t密碼錯誤三次,系統將自動關閉!!\n\n"); printf("\t\t\t歡迎下次使用小哥哥的圖書管理系統\n"); return 0; } } } //恢復出廠設置
void Huifu(void) { beifen(); saveuu(); int i = num; freopen("圖書信息庫.txt", "r",stdin); for(i = 0; i < num; i++){ scanf("%d",&stu[i].ID); scanf("%s",stu[i].name); scanf("%lf",&stu[i].price); scanf("%s",stu[i].author); scanf("%d",&stu[i].quan); scanf("%s",stu[i].itd); } freopen("CON", "r", stdin); save(); printf("\n\n\t\t\t恢復成功!!\n"); system("PAUSE"); system("cls"); } void PrintRecord(int i)//輸出一條記錄
{ printf("\t\t\t書號:%04d\n",stu[i].ID); printf("\t\t\t書名:%s\n",stu[i].name); printf("\t\t\t價格:%.2lf\n",stu[i].price); printf("\t\t\t作者:%s\n",stu[i].author); printf("\t\t\t庫存:%d\n",stu[i].quan); printf("\n簡介:%s\n\n",stu[i].itd); } //圖書信息管理
void Menu(void) { int select; system("cls"); load(); while(1){ display(); oo = scanf("%d",&select); if(!oo){ inwrong(); continue; } switch(select){ case 1: Find(); break; case 2: Sort(); break; case 3: edit(); break; case 4: Huifu(); break; case 5: Cpy(); break; case 6: system("cls"); return ; default : hhk(); system("cls"); break; } } } //顯示圖書信息管理菜單
void display(void) { char str[3][20] = {"查找 請按 1","排序 請按 2","修改 請按 3"}; int i,j; printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); printf("\t * *\n"); printf("\t * 查找 請按 1 *\n"); printf("\t * *\n"); printf("\t * 排序 請按 2 *\n"); printf("\t * *\n"); printf("\t * 修改 請按 3 *\n"); printf("\t * *\n"); printf("\t * 恢復圖書信息 請按 4 *\n"); printf("\t * *\n"); printf("\t * 備份圖書信息 請按 5 *\n"); printf("\t * *\n"); printf("\t * 返回上一級菜單 請按 6 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } //打印開發人員信息
void Intropeople(void) { printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 開發人員信息 *\n"); printf("\t * *\n"); printf("\t * 計科二班 賈迪 *\n"); printf("\t * *\n"); printf("\t * 計科二班 闞雯雯 *\n"); printf("\t * *\n"); printf("\t * 計科二班 李正玉 *\n"); printf("\t ************************************************************\n\n"); system("PAUSE"); system("cls"); } void hhk(void)//打印操作錯誤
{ printf("\n"); printf("\t\t\t 操作錯誤,請從新選擇操作選項!!\n\n"); system("PAUSE"); } //結束程序
void over() { printf("\n\t\t\t小哥哥圖書管理系統祝您閱讀愉快!!!\n"); } //把圖書信息加載到內存
void load() { int i; freopen("緩存區.txt", "r", stdin); for(i = 0; i < num; i++){ scanf("%d",&stu[i].ID); scanf("%s",stu[i].name); scanf("%lf",&stu[i].price); scanf("%s",stu[i].author); scanf("%d",&stu[i].quan); scanf("%s",stu[i].itd); } freopen("CON", "r", stdin); } //將數據保存到磁盤
void save() { int i; FILE *fp; fp = fopen("緩存區.txt", "w"); for(i = 0; i < num; i++){ fprintf(fp, "%d\n",stu[i].ID); fprintf(fp, "%s\n",stu[i].name); fprintf(fp, "%.2lf\n",stu[i].price); fprintf(fp, "%s\n",stu[i].author); fprintf(fp, "%d\n",stu[i].quan); fprintf(fp, "%s\n",stu[i].itd); } fclose(fp); } //輸出修改菜單
void PrinEdit() { printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); printf("\t * *\n"); printf("\t * 添加 請按 1 *\n"); printf("\t * *\n"); printf("\t * 刪除一本圖書 請按 2 *\n"); printf("\t * *\n"); printf("\t * 刪除全部圖書 請按 3 *\n"); printf("\t * *\n"); printf("\t * 返回上一級菜單 請按 4 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } void add()//添加
{ FILE *fp; fp = fopen("緩存區.txt","a"); int n,p,i; double q; char str[30],st[1000]; printf("\t\t\t 親,請輸入你需要添加幾項\n\n\t\t\t "); oo = scanf("%d",&n); if(!oo){ inwrong(); return ; } for(i = num+1; i <= num+n; i++){ fprintf(fp, "%d\n",i); stu[i-1].ID = i; printf("\t\t\t 請輸入書名\n\n\t\t\t "); scanf("%s",str); strcpy(stu[i-1].name, str); fprintf(fp, "%s\n",str); printf("\t\t\t 請輸入價格\n\n\t\t\t "); scanf("%lf",&q); stu[i-1].price = q; fprintf(fp, "%.2lf\n",q); printf("\t\t\t 請輸入作者\n\n\t\t\t "); scanf("%s",str); strcpy(stu[i-1].author, str); fprintf(fp, "%s\n",str); printf("\t\t\t 請輸入該書的數量\n\n\t\t\t "); scanf("%d",&p); stu[i-1].quan = p; fprintf(fp, "%d\n",p); printf("\t\t\t 請輸入該書的簡介\n\n\t\t\t "); scanf("%s",st); strcpy(stu[i-1].itd, st); fprintf(fp, "%s\n",st); } num += n; fclose(fp); save(); saveuu(); system("PAUSE"); system("cls"); } void beifen(void) { FILE *fp; if((fp = fopen("刪除.txt", "r")) == NULL){ printf("數據庫加載失敗,請重啟本系統!\n"); return ; } fscanf(fp, "%d",&num); fclose(fp); } void shan(void) { FILE *fp; if((fp = fopen("刪除.txt", "w")) == NULL){ printf("數據庫加載失敗,請重啟本系統!\n"); return ; } fprintf(fp, "%d\n", num); fclose(fp); } //刪除所有信息
void DeleteAll() { FILE *fp; if((fp = fopen("緩存區.txt", "w")) == NULL){ printf("數據庫加載失敗,請重啟本系統!\n"); return ; } fprintf(fp, "0"); printf("\t\t\t刪除成功,若想恢復請恢復備份!!\n\t\t\t"); fclose(fp); num = 0; saveuu(); system("PAUSE"); system("cls"); } void DeleteRecord()//刪除一條信息
{ int j,i,flag = 0; printf("\t\t\t 請輸入書號\n\t\t\t "); oo = scanf("%d",&j); if(!oo){ inwrong(); return ; } if(j == num){ num--; save(); printf("\t\t\t 刪除成功!\n\t\t\t "); system("PAUSE"); system("cls"); return ; } for(i = 0 ; i < num-1; i++){ if(stu[i].ID == j) flag = 1; if(flag){ strcpy(stu[i].name, stu[i+1].name); stu[i].price = stu[i+1].price; strcpy(stu[i].name, stu[i+1].name); stu[i].quan = stu[i+1].quan; strcpy(stu[i].itd, stu[i+1].itd); } } num--; save(); saveuu(); printf("\t\t\t刪除成功!\n"); system("PAUSE"); system("cls"); } //修改
void edit() { system("cls"); load(); int i,sele; while(1){ PrinEdit(); oo = scanf("%d",&sele); if(!oo){ inwrong(); continue; } switch(sele){ case 1: add(); break; case 2: DeleteRecord(); break; case 3: DeleteAll(); break; case 4: system("cls"); return ; default : system("cls"); hhk(); break; } } } //輸出查找菜單
void FindEdit() { printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); printf("\t * *\n"); printf("\t * 按書號查找 請按 1 *\n"); printf("\t * *\n"); printf("\t * 按書名查找 請按 2 *\n"); printf("\t * *\n"); printf("\t * 按作者查找 請按 3 *\n"); printf("\t * *\n"); printf("\t * 輸出所有圖書信息 請按 4 *\n"); printf("\t * *\n"); printf("\t * 返回上一級菜單 請按 5 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } //按書號查找
void FindByNum(void) { system("cls"); if(num == 0){ printf("\n\n\t\t\t數據庫中暫沒有圖書信息,請添加圖書信息\n\n\t\t\t "); system("PAUSE"); return ; } int i,sex; printf("\t\t\t 請輸入要查找的書號:\n\n\t\t\t\t"); oo = scanf("%d",&sex); if(!oo){ inwrong(); return ; } if(sex > num){ printf("\t\t\t\t未找到該書!!\n\n\t\t\t "); system("PAUSE"); return ; } for(i = 0; i < num; i++){ if(stu[i].ID == sex){ PrintRecord(i); printf("\t\t\t "); system("PAUSE"); return; } } } //按書名查找
void FindByName() { system("cls"); if(num == 0){ printf("\n\n\t\t\t數據庫中暫沒有圖書信息,請添加圖書信息\n\n\t\t\t "); system("PAUSE"); return ; } int i; char s[30]; printf("\t\t\t 請輸入要查找的書名:\n\n\t\t\t "); scanf("%s",s); for(i = 0; i < num; i++){ if(strcmp(stu[i].name, s) == 0){ if(F == 1) PrintRecord(i); else if(!F){ if(stu[i].quan == 0 && huan == 1) F = 99998; else if(stu[i].quan != 0 || huan == 0){ PrintRecord(i); F = i; } } printf("\t\t\t "); system("PAUSE"); return ; } } F = 99999; printf("\n\t\t\t 未找到該書!!\n"); printf("\n\t\t\t "); system("PAUSE"); } //按作者查找
void FindByAuthor() { system("cls"); if(num == 0){ printf("\n\n\t\t\t數據庫中暫沒有圖書信息,請添加圖書信息\n\n\t\t\t "); system("PAUSE"); return ; } int i; char s[30]; printf("\t\t\t 請輸入要查找的作者\n\n\t\t\t "); scanf("%s",s); for(i = 0; i < num; i++){ if(strcmp(stu[i].author, s) == 0){ PrintRecord(i); printf("\t\t\t "); system("PAUSE"); return ; } } printf("\n\t\t\t\t未找到有關該作者的書!!\n\n\t\t\t "); system("PAUSE"); } //輸出所有圖書信息
void output() { int i; if(num == 0){ printf("\n\n\t\t\t數據庫中暫沒有圖書信息,請添加圖書信息\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } for(i = 0; i < num; i++){ PrintRecord(i); } printf("\t\t\t "); system("PAUSE"); } //查找
void Find() { system("cls"); int i,sclele; F = 1; while(1){ FindEdit(); oo = scanf("%d",&sclele); if(!oo){ inwrong(); continue; } switch(sclele){ case 1: FindByNum(); break; case 2: FindByName(); break; case 3: FindByAuthor(); break; case 4: output(); break; case 5: system("cls"); return ; default : system("cls"); hhk(); break; } system("cls"); } } //排序
void Sort() { system("cls"); int sexh; while(1){ system("cls"); PrintSort(); oo = scanf("%d",&sexh); if(!oo){ inwrong(); continue; } switch(sexh){ case 1: SortByScore(); break; case 2: AscendVyPick(); break; case 3: DesendByPick(); break; case 4: system("cls"); return ; default : system("cls"); hhk(); break; } } } //輸出排序菜單
void PrintSort() { printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); printf("\t * *\n"); printf("\t * 按書名首字母排序 請按 1 *\n"); printf("\t * *\n"); printf("\t * 按單價升序排序 請按 2 *\n"); printf("\t * *\n"); printf("\t * 按單價降序排序 請按 3 *\n"); printf("\t * *\n"); printf("\t * 返回上一級菜單 請按 4 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } //按書名首字母排序判斷
int cmp1(library a, library b) { if(strcmp(a.name, b.name) == -1) return 1; else
return 0; } //按單價升序排序判斷
int cmp2(library a, library b) { return a.price < b.price; } //按單價降序排序判斷
int cmp3(library a, library b) { return a.price > b.price; } //重新整理書號
void IdArrange() { int i; for(i = 0; i < num; i++) stu[i].ID = i+1; } //按書名首字母排序
void SortByScore() { int i; sort(stu, stu+num, cmp1); IdArrange(); save(); printf("\n\t\t\t\t排序完成!!\n\n\t\t\t "); system("PAUSE"); } //按單價升序排序
void AscendVyPick() { int i; sort(stu, stu+num, cmp2); IdArrange(); save(); printf("\n\t\t\t\t排序完成!!\n\n\t\t\t "); system("PAUSE"); } //按單價降序排序
void DesendByPick() { int i; sort(stu, stu+num, cmp3); IdArrange(); save(); printf("\n\t\t\t\t排序完成!!\n\n\t\t\t "); system("PAUSE"); } //打印借書菜單
void PrintBorrow(void) { printf("\t ************************************************************\n"); printf("\t * *\n"); printf("\t * 您可以進行以下操作: *\n"); printf("\t * *\n"); printf("\t * 借書記錄查詢 請按 1 *\n"); printf("\t * *\n"); printf("\t * 圖書借閱 請按 2 *\n"); printf("\t * *\n"); printf("\t * 圖書歸還 請按 3 *\n"); printf("\t * *\n"); printf("\t * 返回上一級菜單 請按 4 *\n"); printf("\t * *\n"); printf("\t ************************************************************\n\n"); } //將用戶借書記錄加載到磁盤
void saveBorrow(L head) { int i; L p = head->Next; FILE *fp; fp = fopen("借書記錄.txt", "w"); while(p){ fprintf(fp, "%s\n", p->users); fprintf(fp, "%d\n", p->sexes); for(i = 0; i < p->sexes; i++){ fprintf(fp, "%s\n", p->book[i].Name); fprintf(fp, "%s\n", p->book[i].time); } fprintf(fp, "%d\n", p->r); p = p->Next; } fclose(fp); } //將借書記錄加載到內存
void loadBorrow(L head) { int i,j; L p, rear = head; freopen("借書記錄.txt", "r", stdin); for(i = 0; i < k; i++){ p = new node; scanf("%s",p->users); scanf("%d",&p->sexes); for(j = 0; j < p->sexes; j++){ scanf("%s",p->book[j].Name); scanf("%s",p->book[j].time); } scanf("%d\n",&p->r); rear->Next = p; rear = p; } rear->Next = NULL; freopen("CON", "r", stdin); if(hnj != NULL){ rear->Next = kl; rear = kl; } rear->Next = NULL; saveBorrow(head); } //用戶搜索
L LookUser(L head) { L p = head; while(p){ p = p->Next; if(strcmp(p->users, strr) == 0) break; } return p; } //借書記錄
void BorrowRecord(L q) { int i; system("cls"); printf("\t\t借書的數量:%d\n\n",q->sexes); for(i = 0; i < q->sexes; i++){ printf("\t\t%d.%s\n",i+1, q->book[i].Name); printf("\t\t 借書時間:%s\n\n",q->book[i].time); } printf("\t\t信譽值:%d\n\n",q->r); printf("\t\t\t "); system("PAUSE"); system("cls"); } //借書
void BorrowBook(L q, L y) { int o,i; char str[30]; huan = 1; system("cls"); if(q->r < 60){ printf("\n\n"); printf("\t\t\t信譽值低於60,不能進行借書操作!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } F = 0; FindByName(); if(F == 99998){ printf("\n"); printf("\t\t\tSORRY,該書已沒有庫存!!\n\n\t\t\t "); system("PAUSE"); system("cls"); F = 1; return ; } else if(F == 99999){ system("cls"); return ; } strcpy(q->book[q->sexes].Name, stu[F].name); stu[F].quan--; printf("\n\t\t請輸入借書時間(格式為year/month/day):\n\n\t\t\t "); scanf("%s",str); strcpy(q->book[q->sexes].time, str); q->sexes++; F = 1; save(); saveBorrow(y); printf("\n\t\t\t\t借書成功!!\n\n\t\t\t "); system("PAUSE"); system("cls"); } //還書
void SendBook(L q, L y) { system("cls"); int i,kk=0,flag = 1; char st[30]; F = huan = 0; if(q->sexes == 0){ printf("\n\t\t\t 您還沒有借書哦!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } FindByName(); if(F == 99999){ system("cls"); return ; } for(i = 0; i < q->sexes; i++) if(strcmp(q->book[i].Name, stu[F].name) == 0) flag = 0; if(flag){ system("cls"); printf("\n\t\t\t 您還沒有借該書哦!!\n\n\t\t\t "); system("PAUSE"); system("cls"); return ; } for(i = 0; i < q->sexes; i++){ if(strcmp(q->book[i].Name, stu[F].name) == 0 && kk == 0){ strcpy(st, q->book[i].time); if(i == q->sexes-1) break; kk = 1; } if(kk){ strcpy(q->book[i].Name, q->book[i+1].Name); strcpy(q->book[i].time, q->book[i+1].time); } } q->sexes--; stu[F].quan++; save(); for(i = 1; i <= 16; i++) printf(" "); printf("\t\t\t借書時間:%s\n\n",st); printf("\t\t 請管理員判斷是否逾期還書或圖書有破損\n\n\t\t\t "); system("PAUSE"); printf("\n\t\t 按時還書 請按 1\n\n"); printf("\t\t 逾期還書但不超過一個工作日 請按 2\n\n"); printf("\t\t 還書時間超過一個工作日 請按 3\n\n"); printf("\t\t 圖書有破損 請按 4\n\n\t\t "); scanf("%d",&kk); if(kk == 1) printf("\n\t\t\t\t感謝您的使用!!\n\n"); else if(kk == 2){ q->r -= 5; if(q->r < 60) printf("由於您的不良行為較多,信譽值已不足60,本年度將不能在本系統借書!!\n\n"); else printf("請保持良好的借書行為,信譽不足將無法在本系統借書!!\n\n"); } else if(kk == 3){ q->r = 0; printf("由於您的還書時間超過規定時間一個工作日,所以本年度將不能在本系統借書!!\n\n"); } else if(kk == 4){ q->r -= 10; printf("\t\t\t由於圖書有破損,請原價賠償!!\n\n"); for(i = 0; i < num; i++) if(strcmp(stu[i].name, stu[F].name) == 0){ printf("\t\t\t\t原價:%.2lf\n\n",stu[i].price); break; } if(q->r < 60) printf("由於您的不良行為較多,信譽值已不足60,本年度將不能在本系統借書!!\n\n"); else printf("請保持良好的借書行為,信譽不足將無法在本系統借書!!\n\n"); } saveBorrow(y); printf("\t\t\t "); system("PAUSE"); system("cls"); } //圖書借還系統
void Borrow(void) { system("cls"); int shl,i; L head = new node; loadBorrow(head); pre = LookUser(head); while(1){ PrintBorrow(); oo = scanf("%d", &shl); if(!oo){ inwrong(); continue; } switch(shl){ case 1: BorrowRecord(pre); break; case 2: BorrowBook(pre, head); break; case 3: SendBook(pre, head); break; case 4: system("cls"); return ; default : system("cls"); hhk(); break; } } }
