您好,登錄后才能下訂單哦!
DOS界面的圖書管理系統(tǒng),具體內(nèi)容如下
程序分為兩塊:管理員操作(收錄圖書、刪除圖書等)和會(huì)員操作(注冊(cè)、借書、還書等);
1、管理員操作界面
2、會(huì)員操作界面
global.h頭文件:(程序中只使用了一個(gè)編寫的頭文件,在這里存放了所有的接口函數(shù)以及需要使用到的頭文件,還有結(jié)構(gòu)體的定義)
#include "iostream" #include "string" #include "fstream" #include "conio.h" //getch(); #include "algorithm" //sort(); using namespace std; #define Max_BookNum 10240 //最大存書數(shù)目 #define Max_MemberNum 10240 //最大會(huì)員數(shù)目 typedef enum{//圖書借閱狀態(tài) Borrowed=1, //已被借閱 available=0 //當(dāng)前可借 }Book_Status; typedef struct{//圖書信息 char name[20]; //書名 char author[20]; //作者 string isbn; //圖書編號(hào) string price; //價(jià)格 string pub; //出版社 string pubtime; //出版時(shí)間 string addtime; //收錄日期 string Class; //分類號(hào) Book_Status Book_sta; //借閱狀態(tài),初始化為可借 }Book_Message; typedef struct{//借閱人信息 string name; //姓名 string sex; //性別 string number; //學(xué)號(hào) char login[20]; //登錄號(hào) 以A1001開始 char code[20]; //登錄密碼 Book_Message Borrow_Book[10]; //最大可借書本數(shù)目:10本 int BorBook_Cnt; //借書數(shù)量 }Member_Message; void Show_WelMenu(); //Welcome菜單 void Book_InfoInput(); //圖書信息錄入 void Book_InfoShow(Book_Message *Book_Info); //輸出圖書信息 void Book_Search(); //搜索書本 0,按書名;1,按作者 void Book_Delete(); //刪除圖書信息 void Book_InfoChange(); //修改圖書信息 void Book_Sort(); //圖書排序 void Book_RecordSave(); //圖書信息保存 int Book_RecordLoad(); //讀檔 void Admin_Login(); //管理員登錄 void Member_WelMenu(); //會(huì)員菜單界面 void Book_WelMenu(); //管理員菜單界面 void Member_Login(); //會(huì)員登錄 void Member_Reg(); //會(huì)員注冊(cè) void Member_Bor(); //借書手續(xù) void Member_Ret(); //還書 void Member_Search(); //會(huì)員資料查詢 0,按姓名;1,按學(xué)號(hào) void Member_Delete(); //會(huì)員資料注銷 void Member_RecordSave();//會(huì)員信息保存 int Member_RecordLoad();//會(huì)員信息讀檔 void Member_InfoChange(); //void Member_BookMsgSave(); //int Member_BookMsgLoad(); void Member_MsgShow(Member_Message *Member_Msg);//信息顯示 void Member_CodeAdjust();//會(huì)員修改密碼
主程序:main.c文件:
#include "global.h" int Book_Record=0; int Member_Record=0; Book_Message Book_List[Max_BookNum]; //圖書登記表 Member_Message Member_List[Max_MemberNum]; //會(huì)員登記表 int main() { char key[2]; while(1){ Show_WelMenu(); int cmd; cin>>cmd; if(!cmd) Admin_Login(); //進(jìn)入管理員登錄界面 else Member_Login(); //進(jìn)入會(huì)員登錄界面 cout<<"\t\t\t\t是否退出圖書管理系統(tǒng)?\ty/n\n"; cin>>key; if(strcmp(key,"y")==0) break; } cout<<"系統(tǒng)即將退出"<<endl; getch(); return 0; }
以下分別是各個(gè)功能模塊的函數(shù)實(shí)現(xiàn):
1、輸出界面(選擇登錄界面)
void Show_WelMenu() { system("cls"); cout<<"\t\t\t\t歡迎使用圖書管理系統(tǒng)"<<endl<<endl; cout<<"\t\t\t\t0:管理員登錄"<<endl; cout<<"\t\t\t\t1:會(huì)員登錄"<<endl; }
2、管理員登錄程序(這里選擇了固定密碼登錄,Init_Code就是初始密碼。當(dāng)然也可以自行修改密碼)
void Admin_Login() { short count=0; char code[20]; char Init_Code[10]="0"; cout<<"請(qǐng)輸入管理員密碼:"<<endl; while(1){ cin>>code; if(strcmp(code,Init_Code)==0){ break; } else{ cout<<"密碼錯(cuò)誤請(qǐng)重新輸入"<<endl; count++; if(count>3){ cout<<"密碼錯(cuò)誤超過(guò)三次,程序即將退出"<<endl; break; } } } Book_WelMenu(); //enter Admin Menu }
3、會(huì)員登錄程序(使用賬戶密碼登錄,若無(wú)賬號(hào),可自行注冊(cè))
void Member_Login() { Book_Record = 0; Member_Record = 0; Book_Record = Book_RecordLoad(); Member_Record = Member_RecordLoad(); //從文件讀入當(dāng)前注冊(cè)表 char code[20],login[20],Req[2]; bool Login_Sta = false; while(1){ //登錄程序,登錄成功后退出 if(Login_Sta) break; if((Member_Record==0)){ cout << "\t\t\t\t用戶庫(kù)為空,請(qǐng)先注冊(cè)" << endl; cout << "\t\t\t\t按任意鍵注冊(cè)"; getch(); system("cls"); Member_Reg(); } else{ cout << "\t\t\t\t請(qǐng)輸入會(huì)員登錄號(hào):" << endl; cin>>login; for(Mem_Point=0; Mem_Point<Member_Record; Mem_Point++){ if((strcmp(login,Member_List[Mem_Point].login) == 0)){ cout << "\t\t\t\t請(qǐng)輸入密碼:" << endl; cin >> code; while(strcmp(code, Member_List[Mem_Point].code) != 0){ cout << "密碼錯(cuò)誤,請(qǐng)重新輸入" << endl; cin >> code; } Login_Sta = true; cout << "\t\t\t\t登錄成功,按任意鍵繼續(xù)"; break; } } if(Mem_Point >= Member_Record){ cout << "\t\t\t該用戶未注冊(cè),不能使用圖書管理系統(tǒng)" << endl; cout << "\t\t\t\t是否現(xiàn)在注冊(cè)(Y/N)" << endl; cin >> Req; if((strcmp(Req,"y") == 0) || (strcmp(Req,"Y") == 0)) Member_Reg(); } } } getch(); system("cls"); Member_WelMenu(); getch(); }
4、文件操作(讀入與寫入,這里只貼出會(huì)員信息部分的文件操作,圖書收錄的文件操作類似)
/*導(dǎo)出會(huì)員注冊(cè)表到文件*/ void Member_RecordSave() { ofstream outfile; outfile.open("E:\\Course\\002\\Member_Info.txt",ios::ate|ios::out); //若有文件,先清空,再寫入 for(int i=0;i<Member_Record;i++){ outfile << Member_List[i].name <<" " << Member_List[i].sex <<" " << Member_List[i].number <<" " << Member_List[i].login <<" " << Member_List[i].code << endl; } outfile.close(); } /*從文件導(dǎo)入會(huì)員注冊(cè)表*/ int Member_RecordLoad() { int Member_FileLoad=0; ifstream infile; infile.open("E:\\Course\\002\\Member_Info.txt",ios::in); string n,s,num; char l[20],c[20]; while(1){ infile >> n >> s >> num >> l >> c; //從文件導(dǎo)入信息,并注冊(cè)會(huì)員信息 Member_Add(n,s,num,l,c); if(infile.eof() != 0)break; Member_FileLoad++; } infile.close(); return Member_FileLoad; }
5、會(huì)員注冊(cè)程序(先掃描注冊(cè)表,若已被注冊(cè)返回失敗。注冊(cè)就是在文件中添加會(huì)員信息)
//內(nèi)部函數(shù) void Member_Add(string n,string s,string num,char* l,char* c) { Member_List[Member_Record].name = n; Member_List[Member_Record].sex =s; Member_List[Member_Record].number =num; strcpy(Member_List[Member_Record].login,(const char*)l); strcpy(Member_List[Member_Record].code,(const char*)c); Member_Record++; } /*會(huì)員注冊(cè)程序*/ void Member_Reg() { string n,s,num; char l[20],c[20],choice[2]; cout << "\t\t\t\t會(huì)員注冊(cè)" << endl; cout << "\t\t請(qǐng)以此輸入 姓名、性別、學(xué)號(hào)、登錄號(hào)、密碼" << endl; cin >> n >> s >> num >> l >> c; for(int i=0; i<Member_Record; i++){ if(strcmp(Member_List[i].login,l) == 0){ cout << "\t\t\t\t該登錄號(hào)已存在,注冊(cè)失敗" << endl; getch(); system("cls"); return; } } Member_Add(n,s,num,l,c); cout << "\t\t\t\t注冊(cè)成功" << endl; cout << "\t\t\t\t是否存入文件\ty/n?" << endl;; cin >> choice; if((strcmp(choice,"y")==0) || (strcmp(choice,"Y") == 0)) Member_RecordSave(); getch(); system("cls"); //clear screan }
6、會(huì)員注銷和密碼修改
/*會(huì)員資料注銷*/ void Member_Delete() { bool key=false; char Del_Name[20],cmd[2]; cout<<"請(qǐng)輸入要注銷的會(huì)員登錄號(hào)"<<endl; cin>>Del_Name; for(int i=0;i<Member_Record;i++){ if(strcmp(Member_List[i].login,Del_Name)==0){ //found key=true; Member_MsgShow(&Member_List[i]); cout<<"是否需要?jiǎng)h除該會(huì)員,y/n?"<<endl; cin>>cmd; if((strcmp(cmd,"y")==0)||(strcmp(cmd,"Y")==0)){ //ensure delete while(i<=Member_Record-1){ Member_List[i]=Member_List[i+1]; i++; } Member_Record--; Member_RecordSave(); cout<<"會(huì)員 "<<Del_Name<<" 已注銷"<<endl; break; } } } if(!key) cout<<"沒(méi)有找到該會(huì)員"<<endl; } void Member_CodeAdjust() { char TempCode[20],choice[2],Temp[20]; strcpy(Temp,Member_List[Mem_Point].code); while(1){ cout<<"請(qǐng)輸入原來(lái)的密碼:"; cin>>TempCode; if(strcmp(Temp,TempCode)==0){ cout<<"請(qǐng)輸入新的密碼:"; cin>>TempCode; cout<<"請(qǐng)?jiān)俅屋斎胄碌拿艽a:"; strcpy(Member_List[Mem_Point].code,TempCode); cin>>TempCode; if(strcmp(Member_List[Mem_Point].code,TempCode)==0){ cout<<"\t\t\t\t修改密碼成功,新密碼為"<<Member_List[Mem_Point].code<<endl; //test Member_RecordSave(); break; } else{ cout<<"兩次輸入的密碼不一致,修改失?。?<<endl; cout<<"\t\t\t\t輸入Y繼續(xù),輸入N放棄修改"<<endl; cin>>choice; if((strcmp(choice,"n")==0)||(strcmp(choice,"N")==0)) return ; continue; } } cout<<"密碼錯(cuò)誤,請(qǐng)按任意鍵重新輸入!"<<endl; getch(); } }
管理員操作的大部分程序和會(huì)員操作是類似的,這里只貼一個(gè)圖書排序的操作
7、圖書排序
/* 內(nèi)部函數(shù),供圖書排序功能調(diào)用*/ bool cmp( Book_Message a, Book_Message b ){ if(strcmp( a.author, b.author ) == 0) return strcmp( a.name, b.name ) < 0; return strcmp( a.author , b.author ) < 0; } /* * @brief 圖書排序,根據(jù)作者姓名升序排序,若作者相同,則按書名升序排序 * @param None * @retval None */ void Book_Sort() { sort( Book_List, Book_List+Book_Record, cmp ); cout << "排序已完成" << endl; cout << "所有圖書信息如下" << endl; cout << "書名\t作者\(yùn)t價(jià)格\t出版社\t出版時(shí)間\t分類號(hào) 編號(hào) 收錄日期 是否可借" << endl; for(int i=0; i<Book_Record; i++){ Book_InfoShow( &Book_List[i] ); } getch(); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。