《《圖書館管理系統(tǒng)》word版.doc》由會員分享,可在線閱讀,更多相關《《圖書館管理系統(tǒng)》word版.doc(56頁珍藏版)》請在裝配圖網(wǎng)上搜索。
需求說明
大功能模塊及其小功能模塊說明
1.圖書查找模塊。依據(jù)書名,作者,出版社,類別,編號中的一個,查詢這本書的其它信息。每一種查詢方式為一個小模塊;
2.圖書借閱。實現(xiàn)圖書借還,預約功能。包括兩個小模塊:借書(預約功能包括在了借書模塊中),還書。
3.信息查詢管理。包括以下幾三個小模塊:查詢管理自身或其他用戶的信息(不同的帳號類型能查詢人群不同,查詢所得的信息有用戶基本信息,用戶歷史借閱記錄,用戶是否被封號。管理用戶信息僅管理員有該權限,管理員可手動封號),更改個人賬戶密碼,查看圖書借閱率;
4.圖書購入。僅有一個模塊。
還有部分功能的實現(xiàn)未劃分在這四大模塊中,單獨用函數(shù)實現(xiàn)。如:用戶登錄,新用戶注冊,系統(tǒng)根據(jù)用戶是否有借書逾期未還封號(有則封號,若用戶還了逾期未還的書則系統(tǒng)會解封)
詳細請見各模塊設計說明。
開發(fā)環(huán)境:DevC++,windows 7(32位)
若一直在登錄界面未登錄,時間向前推進
選擇是否登錄錄界面
總體結構:
若選擇登錄,輸入帳號,密碼
登錄失敗(密碼錯誤),重新登錄
(登錄成功),
選擇要進行的操作
退出登錄
信息查詢管理
圖書購入
借書還書
圖書查詢
數(shù)據(jù)文件說明:
“information.txt”:存儲圖書基本信息,程序運行時將文件中的信息導入到鏈表head中,以便使用。每一行的格式相同,否則在將文件中信息導入到鏈表時會出錯。每一行保存一本書的信息,按照順序分別為:圖書編號,書名,作者,出版社,類別,時間,價格。
在執(zhí)行了添加圖書這一操作后,更新這個文件。
“users.txt”:存儲用戶基本信息,登錄信息.程序運行時將文件中的信息導入到鏈表“head2”中,以便使用。每一行保存一個用戶的信息,分別為帳號,密碼。若用戶更改了密碼,則該文件會相應的更新。
“Completereord.txt”:存儲已完成的借閱記錄,程序運行時將文件中的信息導入到“headcomplete”這個鏈表中,以便使用。每一行為一本書的記錄,依次表示書的編號,借書的人的帳號,借書時間,還書時間。在還書時,會生成一條新紀錄,并更新到文件中。
“Uncompletereord.txt”:存儲未完的借書記錄。程序運行時將文件中的信息導入到“headUncomplete”這個鏈表中,以便使用。每一行為一條未完成的借閱記錄,一次表示借出去的書的編號,借書人帳號,借書時間,是否有人預約,預約者帳號(即預約者編號)。每借出一本書,會生成包括借書人帳號,書的編號,日期的借書記錄,并更新到文件中。每還一本書,會依據(jù)書的編號找到對應的“未完成記錄”,刪除。對應的文件作處理(將文件中第一行全賦值為0),避免要刪除的記錄恰好在頭節(jié)點上.
“Userstate.txt”:存儲用戶狀態(tài)。程序運行時將文件中的信息導入到“headuserstate”這個鏈表中,以便使用。每一行為一個用戶的狀態(tài),依次為這個帳號是否被封,帳號,現(xiàn)在借了幾本書,是否預約書,預約書的編號。若用戶借的書逾期不還,則會被封號,封號后不能再借書。若預約的書被還,則用戶在登錄時會收到提醒,但這本被預約的書可以被其他人借走
“rate.txt”:存儲每本書的歷史借閱次數(shù)。程序運行時將文件中的信息導入到“headrate”這個鏈表中,以便使用。每一行為一本書的借閱次數(shù),依次表示書的編號,這本書的借閱次數(shù)。每借出一本書,變會讓這本書的借閱次數(shù)加一。在查看借閱率時會將借閱次數(shù)最多的前五本書輸出。若是新購入的圖書,在第一次借出時會添加到鏈表中。
各模塊設計說明
先說明用戶登錄功能的實現(xiàn),登錄的實現(xiàn)是圖書查找模塊,圖書添加模塊,圖書購入,圖書借閱模塊實現(xiàn)的前提。
分為三類用戶:管理員,教師,學生。帳號(即學生學號,教師管理員的工號)的長度為10位,第一位用以區(qū)分用戶類別,1:管理員,2:教師,3:學生。第二到五位為入學年份(或參加工作年份),第六到七位為所屬學院,最后三位為院內編號。
登陸過程:在main函數(shù)中定義兩個變量int accounts,char passwords[10],要登陸時先提示用戶輸入帳號及密碼,經(jīng)登錄函數(shù)int login處理,若返回1,則登陸成功,再進行下一步動作;若返回0,說明登陸失敗,此時會提示登陸失敗的原因:密碼錯誤,并提示用戶重新輸入帳號密碼。
參考學校圖書館系統(tǒng)新用戶注冊機制,本系統(tǒng)注冊機制為:輸入學生學號(或工號),若是第一次登陸,則密碼默認為學號(或工號的后六位),登錄成功后會提示用戶是第一次登錄并建議用戶更改帳號密碼。第一次登陸后該用戶信息會添加到對應的文件中,下次登錄時身份為已注冊用戶。
1. 圖書查找模塊
將圖書的基本信息保存在一個名為information的文本文件中,程序運行時,先將文件中圖書的信息導入到鏈表head中。
查詢圖書信息時,用戶先選擇按哪種方式查詢,每種查詢的完成通過遍歷鏈表head完成,并輸出其他信息。下面說明具體查找算法。判斷搜索的類型,然后轉到相應的條件處。若是按書名搜索,先將要搜索的內容存放到數(shù)組里面;然后從存放書本信息的文件里讀取書名,采用BF算法,即樸素模式匹配算法,在書名里查找輸入的子串。若是按作者、出版社、類別、圖書編號來查找的話,則用全匹配的方法,只有輸入的信息與文件內容的完全相同,才會輸出所要搜索的圖書信息,否則顯示為無所要查找的圖書信息。
圖書編碼說明:圖書的編碼為六位,前兩位代表圖書類別,01:educate,02:novels,03:history,04:musics(當前就只有這么幾種圖書類別,之后會添加),最多可以有99中類型的書。中間兩位為同一類型中的不同書,同一類別下的圖書最多可以有99本不同的書。最后兩位表示同一本書的不同編號,圖書館中同樣的一本書有許多本,編上不同的編號,同一本書最大數(shù)量為99本。
2.圖書購入
購入添加新的圖書時,編碼方式:前兩位代表圖書類別,01:educate,02:novels,03:history,04:musics,中間兩位按照這類圖書中已有多少本編碼,若已有20本,則中間兩位為21.最后兩位依據(jù)圖書的數(shù)量編碼,若有10本,則最后兩位從01到10.添加時提示用戶先選擇添加的圖書是庫中已有的還是庫中沒有的。
若是庫中已有的書,則輸入庫中這本書最大的編號max,添加的數(shù)量。添加的第一本書的ID為max+1,第二本為max+2,以此類推,書的其它信息不用輸入,直接賦值就行。
若添加的書庫中沒有,則需輸入書名,類別,作者出版社等基本信息。書的編號的生成方式為:前兩位為書的類別;中間兩位,若這類書已有3本,則中間兩位為04,若這類書有5本,則為06;最后兩位從01開始,有多少本書就編碼到幾。添加完后書的信息保存在鏈表中,并更新到文件中。
每添加一本書,會在鏈表head中添加一個節(jié)點(若是已有的書,在鏈表中部添加這這節(jié)點,且上一個節(jié)點保存的書的ID比這本書恰好小1;若是庫中沒有的書,則在鏈表尾部添加節(jié)點)以保存它的信息。在添加完畢后會將鏈表中的信息重新寫進Information.Txt。
3. 信息查詢管理。
執(zhí)行此功能之前已登錄,按照用戶帳號的編碼方式可自動區(qū)分用戶是學生還是教師或者是管理員。對于學生,只能查詢自己的信息,如:學院,年級,借閱了幾本書,;對于老師,則可查詢自身和學生的信息;管理員則可以查詢所有老師學生的信息。查詢其它用戶信息時先輸入要查詢的人的帳號,遍歷鏈表head2及headUserstate以找到對應的用戶,找到后輸出相關信息。特別的,管理員具有封號的權限,若一個帳號被封,則該賬戶無法再借書,直至被解封。封號的實現(xiàn),通過修改headUserstate中節(jié)點的信息實現(xiàn)。鏈表headUserstate中的信息會更新到文件Userstate.txt中。
改密碼,改密碼需兩次輸入新密碼,若兩次的輸入有不同,會提示用戶兩次輸入的密碼不一樣,要求用戶重新輸入新密碼。改密碼會改變鏈表head2中對應的節(jié)點中的password『10』。鏈表head2中的信息會及時更新到文件Users中。
三種類型用戶都可以查看借閱率。通過遍歷鏈表headrate實現(xiàn)。
4.圖書借閱
借書預約:進入系統(tǒng)時已登錄,借書時用戶需輸入借幾本書。若借完這些書后未超過借書上限,則進入下一步,否則會讓用戶超過個人借書上限,需重新輸入要借書的數(shù)量。
若未超過上限,則輸入每本書的ID。對每一本書進行判斷,判斷是否能借。判斷一本書是否能借的方法為遍歷未完成的借書記錄(即鏈表headUncomplete),若在記錄中沒有這本書說明這本書可以借(沒被借出,或借出但已經(jīng)歸還)。每借一本書會生成一條未完成的借閱記錄,依據(jù)書的編號創(chuàng)建,包括借書人編號,借閱時間,是否有人預約,(若預約)預約者編號。若記錄中有這本書則說明這邊書已經(jīng)借出,用戶可選擇是否預約。選擇預約,會修改未完成記錄中這本書對應的記錄。將是否有人預約該成有(當一條未完成記錄生成時默認沒有人預約),并修改預約者編號(默認狀態(tài)下為00000000).當預約的書被還,預約者登錄時,用戶會收到提示。
還書:還書時輸入還書的數(shù)量及每本書的編號。每還一本書,會刪除未完成記錄中這本書對應的記錄(若這本書被預約,刪除之前會修改用戶狀態(tài)中表示已預約的書的狀態(tài)的變量,從而在用戶登錄時能收到提醒)。在已完成記錄(即鏈表headComplete)中添加一條,包括書的編號,借閱者編號,借閱日期,還書日期。
鏈表中的信息會及時更新到對應的文件中。
系統(tǒng)自動封號功能說明:遍歷未完成的借書記錄,若有逾期未還的書,則系統(tǒng)會自動封了這本書的借書人的帳號,這本書被還時會解封對應的帳號
Main函數(shù)中變量及數(shù)據(jù)結構體說明:
int choice,choice2,exist;//作用:功能選擇
int account;//存儲用戶帳號
int i=0,ss=0,de=0;//計數(shù)變量
int Time;//系統(tǒng)時間
char password[10];//存儲用戶登錄時輸入的密碼
FILE *timefile;//保存系統(tǒng)時間的文件指針
下面的指針都是指向對應鏈表的頭節(jié)點。
struct Information *head=NULL;//保存圖書信息
struct Users *head2=NULL;//保存用戶帳號,密碼
struct UncompleteRecords *headUncomplete=NULL;//保存未完成的借閱記錄
struct Userstate *headUserstate=NULL;//保存用戶帳號信息
struct CompleteRecords *headComplete=NULL;//保存已完成借閱記錄
struct rate *headrate=NULL;//保存每本書的借閱次數(shù)。
1.struct Information//圖書基本信息
{
int number;//圖書編號
char name[30];//書名
char writer[30];//作者
char press[30];//出版社
char kinds[20];//類別
int time;//出版時間
float price;//圖書價格
int amount;//備注:這個變量沒用
struct Information *next;
};
2.struct Users用戶基本信息
{
int account;//用戶帳號,也就是用戶ID
char password[10]; //登錄密碼
struct Users *next2;
};/
3.struct CompleteRecords//已完成的借閱記錄
{
int booknumber;//已經(jīng)完成的借還,包括書的編號
int userID;//借閱人ID
int borrowtime;//借閱時間
int returntime;//還書時間
struct CompleteRecords *Completenext;
};//每還一本書,在鏈表尾添加一個節(jié)點。
4.struct UncompleteRecords// 未完成的借閱記錄
{ //
int bookID;//于借出狀態(tài)的圖書的編號
int user;// 借書人
int time;// 借閱日期
int reserve;//reserve=1 有人預約,0 無人預約.有
int reserveID;//
struct UncompleteRecords *Uncompletenext;
};//借一本,在鏈表尾添加一個節(jié)點,還一本,刪除對應的節(jié)點
設置reserve及reserveID以實現(xiàn)圖書預約。有人預約書時修改reserve的值,并將預約人的帳號保存在reserveID中。在這本書被還,這條“未完成的借書記錄”被刪除之,修改用戶狀態(tài)信息,在用戶登錄時會提示預約的書可以借了。
5.struct Userstate//用戶狀態(tài)
{
int ban;//用來判斷帳號是否被封,被封則無法借書,0 表示此號被封,1 表示此號未被封,正常使用中
int ID;//用戶ID
int numbers;//用戶已經(jīng)借閱的圖書的數(shù)量(上限:學生5本,老師10本,管理員10本)
int reserve;//值為0 表示沒有預約,值為1表示預約了,值2表示預約的書可以借
int reserveID;//預約書的編號
struct Userstate *Userstatenext;
};
6.struct rate//每本書的歷史借閱次數(shù)
{
int bookID;
int times;
struct rate *ratenext;
};
范例執(zhí)行過程及結果
運行后的選擇登錄界面,若不登錄時間則推進。
進入登錄界面,輸入帳號,按回車,再輸入密碼
輸入的帳號為第一次登錄,即新用戶,密碼為帳號的后六位,若密碼輸入錯誤,則給出提示并重新輸入
登錄成功,選擇要進行的操作。由于是第一次操作,對用戶給出提示。
輸入1,選擇了圖書查詢,再選擇查詢方式。選擇了按書名查詢,輸入的是Gone,由于Gone_With_The_Wind這個書名和輸入最相似,因此輸出這本書的信息。若按照其它依據(jù)查詢,用的是完全匹配算法,輸入字符串的一部分只會打印出庫中沒有。
圖書查詢操作執(zhí)行完畢后,轉回功能選擇界面。選擇借書,回車,輸入要借書的數(shù)量,回車,會提示輸入要借的書的編號。010103這本書已經(jīng)被借出,選擇預約,另一本書借閱成功。
借書操作執(zhí)行完畢后,返回上一級,再進入信息查詢管理界面查看個人信息,查看借閱率,修改個人帳號密碼
該用戶是學生,若該用戶選擇了自己沒有權限執(zhí)行的操作,系統(tǒng)會提示。
退出登錄,帳號120001001(管理員)登錄,還010103這本書。
該管理員進入信息查詢管理界面,先查詢自己的信息
管理員查詢其它用戶信息
管理員封號,封號后再次查詢所封號的信息
管理員執(zhí)行圖書添加操作
管理員退出登錄,帳號320133003登錄(即本文檔開頭登錄的那個帳號),預約的書被還,系統(tǒng)提示用戶。
在未完成的借書記錄中有一本書是5月16號借的(期限30天),此時是6月18號,以超越期限.系統(tǒng)自動封號。
說明:圖書編號,用戶信息均存于txt文件中,若txt文件被更改或損壞,則范例無法正常執(zhí)行。
#include
#include
#include
#include
#include
#include
char de=1;
struct Information
{
int number;
char name[30];
char writer[30];
char press[30];
char kinds[20];
int time;
float price;
//int amount;//掘蛁ㄩ蠶衾骯珨掛抎衄嗣跺晤瘍眕極珋杅講ㄛ涴跺曹講羶蚚
struct Information *next;
};
struct Users
{
int account;
char password[10];
struct Users *next2;
};//蜆賦凳腔曹講剒猁孺喃ㄛ崝樓悵湔蚚誧俷靡俶梗脹價掛陓洘腔曹講
struct CompleteRecords
{
int booknumber;//眒冪俇傖腔質遜ㄛ婦嬤抎腔晤瘍
int userID;//質堐?ID
int borrowtime;//質堐奀潔
int returntime;//遜抎奀潔
struct CompleteRecords *Completenext;
};//藩遜珨掛抎ㄛ婓蟈桶帣氝樓珨跺誹萸﹝
struct UncompleteRecords//勤茼腔恅璃釬揭燴ㄛ旌轎猁刉壺腔暮翹?疑婓芛誹萸奻,偌抎腔晤瘍齬疑佼唗
{ //質抎奀ㄛ硐猁猁質腔抎帤婓眒質堤腔摩磁囀ㄛ寀褫眕質ㄛ瘁寀褫眕啎埮﹝蚚媼峎杅郪湔揣
int bookID;//衾質堤袨怓腔芞抎腔晤瘍
int user;// 質抎?
int time;// 質堐??
int reserve;//reserve=1 衄?啎埮ㄛ0 拸?啎埮
int reserveID;//
struct UncompleteRecords *Uncompletenext;
};//質珨掛ㄛ婓蟈桶帣氝樓珨跺誹萸ㄛ遜珨掛ㄛ刉壺勤茼腔誹萸
struct Userstate//偌蚚誧ID齬疑佼唗
{
int ban;//蚚懂瓚剿梛瘍岆瘁掩猾ㄛ掩猾寀拸楊質抎,0 桶尨森瘍秪質腔抎貣?帤遜掩猾ㄛ1 桶尨森瘍帤掩猾ㄛ淏都妏蚚笢 ,2桶尨森梛瘍秪?坳埻秪掩奪燴埜猾
int ID;//蚚誧ID
int numbers;//蚚誧眒冪質堐腔芞抎腔杅講ㄗ奻癹ㄩ悝汜5掛ㄛ橾呇10掛ㄛ奪燴埜15掛ㄘ
int reserve;//啎埮腔抎腔杅醴
int reserveID;//郔嗣褫啎埮珨掛ㄛ
struct Userstate *Userstatenext;
};
struct rate//悵湔質堐薹
{
int bookID;//抎腔晤瘍
int times;//盪妢質堐棒杅
struct rate *ratenext;
};
struct Information *read();//植恅璃笢絳?芞抎陓洘
struct Users *read2();//植恅璃笢絳?蚚誧陓洘
struct CompleteRecords *readcomplete();
struct UncompleteRecords *readuncomplete();
struct Userstate *readstate();
struct rate *readrate();
void prompt(int choice);//髡夔恁寁滲杅
void search(struct Information *head);//籵抎靡ㄛ麼釬氪ㄛ麼堤唳扦ㄛ麼濬梗脤戙芞抎陓洘
int login(struct Users *head2,struct Userstate *headUserstate,int account,char password[10]);
void changepassword(struct Users *head2,int account,char password[10]);
void borrowbook(struct UncompleteRecords *headUncomplete, struct Userstate *Userstatehead,struct rate *ratehead,int account,int Time);//黨蜊蟈桶帤俇傖腔質抎暮翹ㄛ袨怓笢腔陓洘
void returnbook(struct Userstate *headUserstate,struct UncompleteRecords *headUncomplete,struct CompleteRecords *headComplete,int account,int Time);//黨蜊涴?跺蟈桶
void lookusers(struct Userstate *headUserstate,struct UncompleteRecords *headUncomplete,struct CompleteRecords *headComplete,int account);//脤艘蚚誧價掛陓洘ㄛ蚚誧袨怓
void Borrowingrate(struct rate *ratehead);//質堐薹脤戙
void borrowrecords(struct UncompleteRecords *headUncomplete,struct CompleteRecords *headComplete,int account);//脤戙甜湖荂堤蚚誧腔質堐暮翹
void addbook(struct Information *head,struct rate *headrate,int time);
void check(struct UncompleteRecords *headUncomplete,struct Userstate *headstate,int Time);//潰脤岆瘁衄猁善?腔抎猁遜,?貣?祥遜寀猾瘍 ;甜賤猾梛瘍
void updateInformation(struct Information *head);
void updatefiles(struct CompleteRecords *headComplete,struct UncompleteRecords *headUncomplete,struct Userstate *Userstatehead,struct rate *ratehead);
DWORD WINAPI ThreadProc1(LPVOID lpParam){
de=getch();
}
main()
{
int choice,choice2,exist;
int account;
int i=0,ss=0;
int Time,timego=0;
int year,month,day;
char password[10];
struct Information *head=NULL;
struct Users *head2=NULL;
struct UncompleteRecords *headUncomplete=NULL;
struct Userstate *headUserstate=NULL;
struct CompleteRecords *headComplete=NULL;
struct rate *headrate=NULL;
FILE *timefile;
timefile=fopen("time.txt","r");
if(timefile==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
fscanf(timefile,"%d\n",&Time);
fclose(timefile);
head=read();
head2=read2();
headUncomplete=readuncomplete();
headUserstate=readstate();
headComplete=readcomplete();
headrate=readrate();
while(de!=0)//奀潔腔芢輛 ,恅璃載陔﹝筍蠶衾帤芢堤最唗ㄛ祥蚚婬笭陔絳?跪恅璃腔陓洘善蟈桶笢
{
i=0;
// printf(" *****紱釬ㄩ2 腎翹,0 豖堤炵苀***** %d爛%d堎%d?",Time/10000,(Time/100)%10,Time%100);
CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
while(de==1)
{
printf(" >>辣茩懂善芞抎奪燴炵苀<<\n");
printf(" *****紱釬ㄩ2 腎翹,0 豖堤炵苀***** %d爛%d堎%d?",Time/10000,(Time/100)%10,Time%100);
Sleep(3000);//匐鏃囀拸懷?寀奀潔砃?芢輛珨毞
system("cls");
if(Time%100==30&&(Time/100)%10==12)
Time=Time+8871;
else if(Time%100==30)
Time=Time+100-29;
else
Time=Time+1;
if(month==13)
month=1;
}
if(de==2)
{
printf(" <<<<<<炵苀奀潔ㄩ%d>>>>>>\n",Time);
printf(" 梛瘍ㄩ");//?蚚誧岆菴珨棒腎翻ㄛ躇鎢峈梛瘍腔綴鞠弇ㄛ?斛剕載蜊躇鎢
fflush(stdin);
scanf("%d",&account);
printf(" 躇鎢ㄩ");
fflush(stdin);
scanf("%c",&password[i]);
while(password[i]!=\n)
{
i++;
scanf("%c",&password[i]);
}
while(login(head2,headUserstate,account,password)==0)
{
i=0;
printf(" 梛瘍ㄩ");
scanf("%d",&account);
printf(" 躇鎢ㄩ");
fflush(stdin);
scanf("%c",&password[i]);
while(password[i]!=\n)
{
i++;
scanf("%c",&password[i]);
}
}
printf("********************************************************************************\n");
printf(" 紱釬 1:脤戙芞抎陓洘;\n 2:芞抎質堐;\n 3:陓洘脤戙奪燴;\n 4:芞抎劃?ㄗ躺奪燴埜繭衄蜆?癹);\n 0:豖堤腎翹\n");
printf("********************************************************************************\n");
scanf("%d",&choice);
prompt(choice);
while(choice!=0)
{
switch(choice)
{
case 1:
search(head);
break;
case 2:
printf(" 1 質抎ㄛ 2 遜抎ㄛ0 殿隙奻珨撰");
scanf("%d",&choice2);
while(choice2!=0)
{
if(choice2==1)
{
borrowbook(headUncomplete,headUserstate,headrate,account,Time);
}
else if(choice2==2)
{
returnbook(headUserstate,headUncomplete,headComplete,account,Time);
}
else if(choice2!=0)
printf("準楊懷?ㄐ?笭陔恁寁紱釬");
printf(" 1 質抎ㄛ 2 遜抎ㄛ0 殿隙奻珨撰");
scanf("%d",&choice2);
}
break;
case 3:
printf("紱釬ㄩ 1˙脤戙蚚誧陓洘ㄛ2ㄩ黨蜊梛瘍腔躇鎢,3:脤艘質堐薹 0:殿隙奻珨撰");
scanf("%d",&choice2);
while(choice2!=0)
{
if(choice2==1)
{
printf("\n ********脤戙蚚誧陓洘********\n");
lookusers(headUserstate,headUncomplete,headComplete,account);
}
else if(choice2==2)
{
printf("\n ********黨蜊躇鎢********\n");
changepassword(head2,account,password);
}
else if(choice==3)
{
printf("\n ********脤艘質堐薹********\n");
Borrowingrate(headrate);
}
printf("紱釬ㄩ 1˙脤戙蚚誧陓洘ㄛ2ㄩ黨蜊梛瘍腔躇鎢,3:脤艘質堐薹,0:殿隙奻珨撰");
scanf("%d",&choice2);
}
break;
case 4:
if(account/100000000==1)
{
addbook(head,headrate,Time);
updateInformation(head);
}
else
printf(" !!!!!蠟羶衄蜆?癹!!!!!\n");
break;
}
printf("\n 紱釬:1:脤戙芞抎陓洘;\n 2:芞抎質堐;\n 3:陓洘脤戙奪燴;\n 4:芞抎劃?ㄗ躺奪燴埜繭衄蜆?癹);\n 0:豖堤腎翹");
scanf("%d",&choice);
prompt(choice);
}
check(headUncomplete,headUserstate,Time);
updatefiles(headComplete,headUncomplete,headUserstate,headrate);
de=1;
system("pause");
system("cls");
}
}
timefile=fopen("time.txt","w");
if(timefile==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
fprintf(timefile,"%d",Time);
fclose(timefile);
}
struct Information *read()
{
FILE *fileptr;
struct Information *head,*crruent,*temp;
head=crruent=NULL;
fileptr=fopen("information.txt","r");
if(fileptr==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
{
while(!feof(fileptr))
{
temp=(struct Information *)malloc(sizeof(struct Information));
fscanf(fileptr,"%d%s%s%s%s%d%f\n",&(temp->number),temp->name,temp->writer,temp->press,temp->kinds,&(temp->time),&(temp->price));
if(head==NULL)
head=temp;
else
crruent->next=temp;
crruent=temp;
}
crruent->next=NULL;
fclose(fileptr);
return head;
}
}
struct Users *read2()
{
FILE *fileptr;
struct Users *head,*crruent,*temp;
head=crruent=NULL;
fileptr=fopen("Users.txt","r");
if(fileptr==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
{
while(!feof(fileptr))
{
temp=(struct Users *)malloc(sizeof(struct Users));
fscanf(fileptr,"%d%s\n",&(temp->account),temp->password);
if(head==NULL)
head=temp;
else
crruent->next2=temp;
crruent=temp;
}
crruent->next2=NULL;
fclose(fileptr);
return head;
}
}
struct CompleteRecords *readcomplete()
{
FILE *fileptr;
struct CompleteRecords *head,*crruent,*temp;
head=crruent=NULL;
fileptr=fopen("CompleteRecord.txt","r");
if(fileptr==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
{
while(!feof(fileptr))
{
temp=(struct CompleteRecords *)malloc(sizeof(struct CompleteRecords));
fscanf(fileptr,"%d%d%d%d\n",&(temp->booknumber),&(temp->userID),&(temp->borrowtime),&(temp->returntime));
if(head==NULL)
head=temp;
else
crruent->Completenext=temp;
crruent=temp;
}
crruent->Completenext=NULL;
fclose(fileptr);
return head;
}
}
struct UncompleteRecords *readuncomplete()
{
FILE *fileptr;
struct UncompleteRecords *head,*crruent,*temp;
head=crruent=NULL;
fileptr=fopen("UncompleteRecord.txt","r");
if(fileptr==NULL)
printf("恅璃湖羲囮啖ㄐ\(zhòng)n");
else
{
while(!feof(fileptr))
{
temp=(struct UncompleteRecords *)malloc(sizeof(struct UncompleteRecords));
fscanf(fileptr,"%d%d%d%d%d\n",&(temp->bookID),&(temp->user),&(temp->time),&(temp->reserve),&
鏈接地址:http://appdesigncorp.com/p-7885439.html