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