您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“C++圖書管理系統程序的示例代碼”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C++圖書管理系統程序的示例代碼”這篇文章吧。
具體內容如下
c++綜合實驗,功能基本都實現了,但是代碼寫的有些繁瑣,還有很大的優化空間,僅供參考。
實驗目的:
1、能夠綜合運用面向對象程序設計方法,設計實現一個相對完整信息管理應用程序。
2、能夠適當進行題目分析、實驗設計、核心代碼描述、實驗結果分析等。
實驗:設計并編寫一個C++風格應用程序,模擬一個圖書管理系統應用程序,支持系統用戶的圖書借閱、圖書管理、用戶管理等功能。圖書借閱管理主要包括圖書借閱、圖書歸還、借閱信息查看等功能。圖書管理主要包括圖書的增加、刪除、修改、查看、統計等功能。用戶管理主要包括用戶注冊、登錄、修改密碼、修改個人信息、設置用戶類型等功能。
1、定義圖書管理系統中的Book書目類(還可以定義User用戶類、Log圖書借還日志類等)。
2、合理應用類的繼承性進行館藏資源的繼承性定義,可分為書、碟片、電子資源等(或將系統用戶分為讀者、圖書管理員、系統管理員)。
3、根據不同類型用戶,登錄系統顯示不同的用戶功能菜單,實現不同的操作處理,如學生與教師所借閱書的數量和天數均不相同(或考慮圖書館中多種館藏資源支持的用戶操作有所區別)。
4、增加異常處理,在借閱圖書時,已到所能借閱圖書數量的最大數量給予提示;歸還圖書時,圖書已超期需要繳納罰款。
5、通過重載運算符“<<”和“>>”方便圖書信息、讀者信息錄入等操作,并實現將館藏圖書信息、借閱記錄等保存到磁盤,形成圖書借還日志文件。
6、擴展實驗:可嘗試使用MFC可視化界面提高用戶操作方便性和友好性。
#include<iostream> #include<cstring> #include<ctime> #include<fstream>//文件輸入輸出 #include<iomanip>//控制輸入輸出格式 #pragma warning(disable:4996)//消除strcpy不安全的錯誤提示 #define kouling2 "654321" using namespace std; class tt{//系統當前時間 public: int year; int month; int day; int hours; int minutes; int seconds; tt() {} }; tt system_time()//獲取當前時間 { tt pp; time_t nowtime; struct tm* p; time(&nowtime); p = localtime(&nowtime); pp.year = p->tm_year + 1900; pp.month = p->tm_mon + 1; pp.day = p->tm_mday; pp.hours = p->tm_hour; pp.minutes = p->tm_min; pp.seconds = p->tm_sec; return pp; } class Log; class Book {//書目類 protected: char leixing[50];//書的類型,分為紙質圖書,碟片,電子書 int no;//編號 char name[50];//書名 char author[50];//作者 char press[50];//出版社 char price[50];//價格 int state;//圖書是否在架,1為在架,0為借出 public: Book(){} friend Log; void set_name(char a[])//設置書名 { strcpy(name, a); } void set_author(char a[])//設置作者 { strcpy(author, a); } void set_press(char a[])//設置出版社 { strcpy(press, a); } void set_price(char a[])//設置價格 { strcpy(price, a); } void set_no(int a)//設置編號 { no = a; } void set_state(int a)//設置圖書狀態 { state = a; } char *get_name()//獲取書名 { return name; } char *get_author()//獲取作者 { return author; } char* get_press()//獲取出版社 { return press; } char* get_price()//獲取價格 { return price; } int get_no()//獲取編號 { return no; } int get_state()//獲取圖書狀態 { return state; } int chongfu_no(int no1)//判斷編號是否重復,返回1為重復,0為不重復 { char leixing[100][50];//圖書類型 int x[100];//圖書編號 char c[100][50];//圖書書名 char d[100][50];//圖書作者 char e[100][50];//圖書出版社 char f[100][20];//價格 int yy[100];//狀態 int i; fstream in; in.open("Book.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷是否到文件末尾 { break; } in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> yy[i];//讀入圖書信息 if (no1 == x[i])//編號已存在 { cout << "增加圖書失敗,該編號已存在!" << endl; return 1; } } in.close(); return 0; } }; class User {//用戶類 protected: char name[20];//用戶名 char password[20];//密碼 public: User(){} friend Log; void set_name(char a[])//設置用戶名 { strcpy(name, a); } void set_password(char a[])//設置密碼 { strcpy(password, a); } int chongfu_name(char a[])//檢查用戶名是否已存在,返回1為已存在 { int i; int num = 0;//已注冊的用戶量 char d[100][50];//已注冊的用戶類型 char e[100][50];//已注冊的用戶名 char f[100][50];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷是否到文件末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); for (i = 0;i<num; i++) { if (strcmp(a, e[i]) == 0)//用戶名已存在 return 1; } return 0; } void change_information(char a[],int n)//修改用戶名,n為1是改用戶名,2是改密碼 { int i; int num = 0;//已注冊的用戶量 char d[100][20];//已注冊的用戶類型 char e[100][20];//已注冊的用戶名 char f[100][20];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++)//獲取已注冊的用戶信息 { if (in.eof())//判斷是否到文件末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; if (strcmp(e[i], name) == 0)//找到要修改的用戶 { if (n == 1) { memset(name, '\0', sizeof(name));//清空數組 strcpy(name, a); memset(e[i], '\0', sizeof(e[i]));//清空數組 strcpy(e[i], a); } if (n == 2) { memset(password, '\0', sizeof(password));//清空數組 strcpy(password, a); memset(f[i], '\0', sizeof(f[i]));//清空數組 strcpy(f[i], a); } } num++; } in.close(); fstream out; out.open("User.text", ios::out|ios::trunc); for (i = 0;i<num; i++)//將修改后的用戶信息寫入文件 { if(strcmp(d[i],"讀者"))//讀者 out << setiosflags(ios::left) << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl; else//圖書管理員或系統管理員 out << setiosflags(ios::left) << setw(14) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl; } out.close(); cout << "修改成功!" << endl; } int denglu(const char p[])//用戶登錄,返回1為登陸成功,0為登陸失敗 { int i; int num = 0;//已注冊的用戶量 char d[100][20];//已注冊的用戶類型 char e[100][20];//已注冊的用戶名 char f[100][20];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++)//獲取已注冊的用戶信息 { if (in.eof())//判斷文件是否到末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); int flag = 0;//0為登錄失敗,1為登錄成功 char a[20];//登錄用戶名 char b[20];//登錄密碼 cout << "請輸入用戶名:" << endl; cin >> a; cout << "請輸入密碼:" << endl; cin >> b; for (i = 0; i < num; i++) { if (strcmp(p,d[i])==0&&strcmp(a, e[i]) == 0 && strcmp(b, f[i]) == 0)//登錄成功 { flag = 1; break; } } if (flag == 1)//登錄成功 { cout << "您好!尊敬的"<<p << e[i] << endl; strcpy(name, a); strcpy(password, b); return 1; } if(flag==0)//登錄失敗 { cout << "登錄失敗,用戶名或密碼錯誤" << endl; return 0; } } }; class Reader : public User {//讀者類 public: Reader():User() { } void zhuce()//注冊讀者 { int i; int num = 0;//已注冊的用戶量 char d[100][50];//已注冊的用戶類型 char e[100][50];//已注冊的用戶名 char f[100][50];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷是否到文件末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); char a[20];//所要注冊的用戶名 cout << "請輸入用戶名:" << endl; int flag = 1;//0為用戶名已注冊,1為未注冊 for (;;)//輸入用戶名 { char aa[20];//暫時存儲所要注冊的用戶名 cin >> aa; for (i = 0; i < num; i++)//判斷用戶名是否已注冊 { if (strcmp(e[i], aa) == 0)//用戶名已被注冊 { cout << "該用戶名已存在,請重新輸入:" << endl; flag = 0; break; } else { flag = 1; } } if (flag == 1)//用戶名未被注冊 { strcpy(a, aa); break; } } for (;;) { char b[20];//密碼 char c[20];//第二次輸入的密碼 cout << "請設置密碼:" << endl; cin >> b; cout << "請再次輸入密碼:" << endl; cin >> c; if (strcmp(b, c) == 0)//兩次密碼輸入一致 { cout << "注冊成功!" << endl; set_name(a); set_password(b); fstream out; out.open("User.text", ios::app); out <<setiosflags(ios::left)<<setw(18)<< "讀者" <<setw(20)<< a <<setw(20)<< b << endl;//將用戶信息寫入文件 out.close(); break; } else { cout << "兩次密碼不一致,請重新輸入" << endl; } } } }; class Librarian :public User {//圖書管理員類 public: void zhuce()//注冊圖書管理員 { int i; int num = 0;//已注冊的用戶量 char d[100][10];//已注冊的用戶類型 char e[100][20];//已注冊的用戶名 char f[100][20];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷文件是否到末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); char a[20];//所要注冊的用戶名 cout << "請輸入用戶名:" << endl; int flag = 1;//0為用戶名已注冊,1為未注冊 for (;;)//輸入用戶名 { char aa[20];//暫時存儲所要注冊的用戶名 cin >> aa; for (i = 0; i < num; i++)//判斷用戶名是否已注冊 { if (strcmp(e[i], aa) == 0) { cout << "該用戶名已存在,請重新輸入:" << endl; flag = 0; break; } else { flag = 1; } } if (flag == 1) { strcpy(a, aa); break; } } for (;;) { char b[20];//密碼 char c[20];//第二次輸入的密碼 cout << "請設置密碼:" << endl; cin >> b; cout << "請再次輸入密碼:" << endl; cin >> c; if (strcmp(b, c) == 0) { cout << "注冊成功!" << endl; set_name(a); set_password(b); fstream out; out.open("User.text", ios::app); out << setiosflags(ios::left) << setw(14) << "圖書管理員" << setw(20) << a << setw(20) << b << endl; out.close(); break; } else { cout << "兩次密碼不一致,請重新輸入" << endl; } } } void add_book(int no1, char name1[], char author1[], char press1[], char price1[],int y)//增加圖書 { fstream out; out.open("Book.text", ios::app); if (y == 1)//紙質圖書 out << "紙質圖書 "; if (y == 2)//碟片 out << "碟片 "; if (y == 3)//電子書 out << "電子書 "; out << setiosflags(ios::left) << setw(15) << no1 << setw(20) << name1 << setw(20) << author1 << setw(20) << press1 << setw(20) << price1 <<setw(5)<<1 <<endl;//最后一個左對齊能否去掉 out.close(); cout << "增加圖書成功!" << endl; } void delete_book(int n)//刪除圖書信息 { int i; int num = 0; char leixing[100][50];//圖書類型 int x[100];//圖書編號 char c[100][50];//圖書書名 char d[100][50];//圖書作者 char e[100][50];//圖書出版社 char f[100][20];//價格 int y[100];//狀態 int flag=0;//1為存在該書,0為不存在 fstream in; in.open("Book.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷文件是否到末尾 { num--;// break; } in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i]; num++;// } in.close(); fstream out; out.open("Book.text", ios::out); for (i = 0; i < num; i++)//將刪除圖書后的的圖書信息寫入文件 { if (x[i] != n) out << setiosflags(ios::left) << setw(20) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl;//最后一個左對齊能否去掉 else flag = 1; } out.close(); if(flag==1) cout << "刪除成功!" << endl; if (flag == 0) cout << "刪除失敗,未查找到該書!" << endl; } void change_book(int n)//修改圖書信息 { int i; int num = 0; char leixing[100][50];//圖書類型 int x[100];//圖書編號 char c[100][50];//圖書書名 char d[100][50];//圖書作者 char e[100][50];//圖書出版社 char f[100][20];//價格 int y[100];//狀態 fstream in; in.open("Book.text", ios::in); for (i = 0;; i++) { if (in.eof()) { num--;// break; } in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i]; num++;// } in.close(); for (i = 0; i < num; i++) { if (n == x[i])//找到要修改的圖書 { memset(leixing[i], '\0', sizeof(leixing[i])); x[i] = 0; memset(c[i], '\0', sizeof(c[i])); memset(d[i], '\0', sizeof(d[i])); memset(e[i], '\0', sizeof(e[i])); memset(f[i], '\0', sizeof(f[i])); y[i] = 0; cout << "請輸入修改后的圖書類型:" << endl; cin >> leixing[i]; cout << "請輸入修改后的圖書編號:" << endl; cin >> x[i]; cout << "請輸入修改后的圖書書名:" << endl; cin >> c[i]; cout << "請輸入修改后的圖書作者:" << endl; cin >> d[i]; cout << "請輸入修改后的圖書出版社:" << endl; cin >> e[i]; cout << "請輸入修改后的圖書價格:" << endl; cin >> f[i]; cout << "請輸入修改后的圖書狀態:(1為在架,0為已借出)" << endl; cin >> y[i]; cout << "修改成功!" << endl; break; } } if (i == num)//未查找到圖書 cout << "抱歉,未查到此書!" << endl; fstream out; out.open("Book.text", ios::out); for (i = 0; i < num; i++)//將修改后的圖書信息寫入文件 { out << setiosflags(ios::left) << setw(20) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i]; out<< setw(20) << e[i]<< setw(20) << f[i] << setw(5) << y[i] << endl; } out.close(); } void see_all()//查看所有用戶的借閱信息 { int i; int num = 0; char a[100][20];//圖書類型 char b[100][20];//編號 char c[100][20];//書名 char d[100][20];//作者 char e[100][20];//出版社 char f[100][20];//價格 char people[100][20];//借書人 tt p;//借書時間 fstream out2; out2.open("Log.text", ios::in); for (i = 0;; i++) { if (out2.eof())//判斷是否到文件末尾 { num--; break; } out2 >> a[i] >> b[i] >> c[i] >> d[i] >> e[i] >> f[i]; out2 >> people[i]; out2 >> p.year >> p.month >> p.day >> p.hours >> p.minutes >> p.seconds; num++; } out2.close(); cout << "以下為所有用戶借閱信息:" << endl; for (i = 0; i < num; i++) { cout << a[i] << " " << b[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " " <<"借閱人:"<<people[i]<<" " << p.year << "年" << p.month << "月" << p.day << "日" << p.hours << ":" << p.minutes << endl; } } }; class System_Admin:public User{//系統管理員類 public: void zhuce()//注冊系統管理員 { int i; int num = 0;//已注冊的用戶量 char d[100][10];//已注冊的用戶類型 char e[100][20];//已注冊的用戶名 char f[100][20];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof()) { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); char a[20];//所要注冊的用戶名 cout << "請輸入用戶名:" << endl; int flag = 1;//0為用戶名已注冊,1為未注冊 for (;;)//輸入用戶名 { char aa[20];//暫時存儲所要注冊的用戶名 cin >> aa; for (i = 0; i < num; i++)//判斷用戶名是否已注冊 { if (strcmp(e[i], aa) == 0) { cout << "該用戶名已存在,請重新輸入:" << endl; flag = 0; break; } else { flag = 1; } } if (flag == 1) { strcpy(a, aa); break; } } for (;;) { char b[20];//密碼 char c[20];//第二次輸入的密碼 cout << "請設置密碼:" << endl; cin >> b; cout << "請再次輸入密碼:" << endl; cin >> c; if (strcmp(b, c) == 0) { cout << "注冊成功!" << endl; set_name(a); set_password(b); fstream out; out.open("User.text", ios::app); out << setiosflags(ios::left) << setw(14) << "系統管理員" << setw(20) << a << setw(20) << b << endl; out.close(); break; } else { cout << "兩次密碼不一致,請重新輸入" << endl; } } } void add_User(char name[],char password[],int y)//增加用戶 { if (chongfu_name(name) == 1)//用戶名已注冊 cout << "增加用戶失敗,該用戶名已存在!" << endl; if (chongfu_name(name) == 0)//用戶名未注冊 { fstream out; out.open("User.text", ios::app); if (y == 1) out << setiosflags(ios::left) << setw(18) << "讀者" << setw(20) << name << setw(20) << password << endl; if (y == 2) out << setiosflags(ios::left) << setw(14) << "圖書管理員" << setw(20) << name << setw(20) << password << endl; out.close(); cout << "增加成功!" << endl; } } void delete_user(char name[])//刪除用戶 { int i; int num = 0;//已注冊的用戶量 char d[100][50];//已注冊的用戶類型 char e[100][50];//已注冊的用戶名 char f[100][50];//已注冊的密碼 int del;//要刪除的用戶的序號 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷是否到文件末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); for (i = 0;i<num; i++) { if (strcmp(name, e[i]) == 0)//找到該用戶 { del = i;//記錄i break; } } if (i == num)//未查找到該用戶名 { cout << "未查找到該用戶!" << endl; return; } fstream out; out.open("User.text", ios::out); for (i = 0;i<num; i++)//將刪除后的全部用戶信息寫入文件 { if(i!=del) out << setiosflags(ios::left) << setw(20) << d[i]<< setw(20) << e[i] << setw(20) << f[i] << endl; } out.close(); cout << "刪除成功!" << endl; } void change_user(char name[],int y)//修改用戶信息,y=1為用戶類型,y=2為用戶名,y=3為用戶密碼 { int i; int num = 0;//已注冊的用戶量 char d[100][50];//已注冊的用戶類型 char e[100][50];//已注冊的用戶名 char f[100][50];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof())//判斷文件是否到末尾 { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); if (y == 1)//修改用戶類型 { for (i = 0;i<num; i++) { if (strcmp(name, e[i]) == 0)//找到該用戶 { if (strcmp(d[i], "讀者") == 0)//該用戶為讀者 { memset(d[i], '\0', sizeof(d[i]));//清空用戶類型數組 strcpy(d[i], "圖書管理員"); break; } else//該用戶為圖書管理員 { memset(d[i], '\0', sizeof(d[i]));//清空用戶類型數組 strcpy(d[i], "讀者"); break; } } } if (i == num) { cout << "未查找到該用戶!" << endl; return; } } if (y == 2)//修改用戶名 { char name2[50];//修改后的用戶名 for (;;) { char name1[50];//暫時存儲修改后的用戶名 cout << "請輸入修改后的用戶名:" << endl; cin >> name1; if (chongfu_name(name1) == 1)//用戶名已存在 cout << "該用戶名已存在,請重新輸入" << endl; else { strcpy(name2, name1); break; } } for (i = 0;; i++) { if (strcmp(name, e[i]) == 0)//找到要修改的用戶 { memset(e[i], '\0', sizeof(e[i]));//清空用戶名 strcpy(e[i], name2); break; } } } if (y == 3)//修改密碼 { char password2[50]; cout << "請輸入修改后的密碼:" << endl; cin >> password2; for (i = 0;; i++) { if (strcmp(name, e[i]) == 0) { memset(f[i], '\0', sizeof(f[i])); strcpy(f[i], password2); break; } } } fstream out; out.open("User.text", ios::out); for (i = 0;i<num; i++) { out << setiosflags(ios::left) << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl; } out.close(); cout << "修改成功!" << endl; } void see_user()//查看所有用戶信息 { int i; int num = 0;//已注冊的用戶量 char d[100][50];//已注冊的用戶類型 char e[100][50];//已注冊的用戶名 char f[100][50];//已注冊的密碼 fstream in; in.open("User.text", ios::in); for (i = 0;; i++) { if (in.eof()) { num--; break; } in >> d[i]; in >> e[i]; in >> f[i]; num++; } in.close(); cout << "——————————用戶信息——————————" << endl; for (i = 0; i < num; i++) { cout <<"用戶類型:"<<d[i]<<" 用戶名:" << e[i]<<" 用戶密碼:" << f[i] << endl; } } }; class Log {//借還日志類 private: int lend_date;//借書日期 int return_date;//還書日期 public: Log(){} void see(User yonghu)//查看本人借閱信息 { int i; int num=0; char a[100][20];//圖書類型 char b[100][20];//編號 char c[100][20];//書名 char d[100][20];//作者 char e[100][20];//出版社 char f[100][20];//價格 char people[100][20];//借書人 tt p;//借書時間 fstream in; in.open("Log.text", ios::in); for (i = 0;; i++) { if (in.eof()) { num--; break; } in >> a[i] >> b[i] >> c[i] >> d[i] >> e[i] >> f[i]; in >> people[i]; in >> p.year >> p.month >> p.day >> p.hours >> p.minutes >> p.seconds; num++; } in.close(); int flag=0;//0為沒有借書,1為有借書 cout << "以下為您的借閱信息:" << endl; for (i = 0; i < num; i++) { if (strcmp(people[i],yonghu.name) == 0)//檢索到借閱人 { cout << a[i] << " " << b[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " " << p.year << "年" << p.month << "月" << p.day << "日" << p.hours << ":" << p.minutes << endl; flag = 1; } } if (flag==0) cout << " 無" << endl; } void lend_book(User yonghu)//借閱圖書 { int i; char a[50];//書名 char b[50];//作者 int num = 0;//書的數目 int x[100];//在架的圖書編號 char leixing[100][50];//圖書類型 char c[100][50];//在架的圖書書名 char d[100][50];//在架的圖書作者 char e[100][50];//在架的圖書出版社 char f[100][20];//價格 int y[100];//狀態 cout << "請輸入您要借閱的圖書書名:" << endl; cin >> a; cout << "請輸入您要借閱的圖書作者:" << endl; cin >> b; fstream in; in.open("Book.text", ios::in); for (i = 0;; i++)//找要借閱的書 { if (in.eof()) { num--; break; } in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i]; num++; } in.close(); cout << "查詢到以下圖書:" << endl; int flag = 0;//0為未查到書,1為查到書 for (i = 0; i < num; i++) { if (strcmp(a, c[i]) == 0 && strcmp(b, d[i]) == 0) { cout << " " << leixing[i] << " 編號:" << x[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " "; if (y[i] == 1) cout << "在架可借" << endl; if (y[i] == 0) cout << "已借出" << endl; flag = 1; } } if (flag == 0)//未檢索到書 { cout << " 無" << endl; cout << "未查詢到此書!" << endl; } if (flag == 1)//檢索到書 { int flag2=1;//0借閱失敗,1為借閱成功 int bianhao; cout << "請輸入您要借閱的圖書編號:" << endl; cin >> bianhao; for (i = 0; i < num; i++) { if (bianhao == x[i]&&y[i]==1)//找到書且書可借 { y[i]=0; break; } if (bianhao == x[i] && y[i] == 0)//找到書且書已借出 { cout << "無法借閱,該書已被借出!" << endl; flag2 = 0; break; } } if (i == num)//未檢索到圖書 { flag2 = 0; cout << "未查詢到該圖書!" << endl; } if(flag2==1)//借閱成功 { fstream out; out.open("Book.text", ios::out); for (i = 0; i < num; i++) out << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl; out.close(); tt p; p = system_time();//p存儲了當前系統時間 fstream out2; out2.open("Log.text", ios::app); for (i = 0; i < num; i++) { if (bianhao == x[i]) { out2 << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i]; out2 << yonghu.name << " "; out2 << p.year << " " << p.month << " " << p.day << " " << p.hours << " " << p.minutes << " " << p.seconds << endl; break; } } out2.close(); cout << "借閱成功!" << endl; } } } void return_book(int n,User yonghu)//n:1為讀者,2為圖書管理員,3為系統管理員 { int i; int num = 0;//圖書數量 int x[100];//圖書編號 char leixing[100][50];//圖書類型 char c[100][50];//圖書書名 char d[100][50];//圖書作者 char e[100][50];//圖書出版社 char f[100][20];//價格 int y[100];//狀態 fstream in; in.open("Book.text", ios::in); for (i = 0;; i++)//找要還的書 { if (in.eof()) { num--;// break; } in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i]; num++;// } in.close(); see(yonghu);//輸出該用戶借閱圖書信息 int bianhao; cout << "請輸入您要返還圖書的編號:" << endl; cin >> bianhao; for (i = 0; i < num; i++)//改變圖書狀態 { if (bianhao == x[i])//找到圖書 { y[i] = 1;//改變圖書狀態為在架可借 break; } } if (i == num)//未查詢到圖書 { cout << "未查詢到該圖書!" << endl; } else//查詢到圖書 { fstream out; out.open("Book.text", ios::out); for (i = 0; i < num; i++)//更新book文件 { out << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i]; out << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl; } out.close(); //更改Log.text int x2[100];//已借閱的的圖書編號 char leixing2[100][50];//已借閱圖書的圖書類型 char c2[100][50];//已借閱圖書的圖書書名 char d2[100][50];//已借閱圖書的圖書作者 char e2[100][50];//已借閱圖書的圖書出版社 char f2[100][50];//已借閱圖書的價格 char person[50];//借書者用戶名 tt time1[100];//借書時間 tt time2 = system_time();//還書時間 int log_num = 0; fstream in2; in2.open("Log.text", ios::in); for (i = 0;; i++) { if (in2.eof()) { log_num--; break; } in2 >> leixing2[i] >> x2[i] >> c2[i] >> d2[i] >> e2[i] >> f2[i] >> person; in2>> time1[i].year >> time1[i].month >> time1[i].day >> time1[i].hours >> time1[i].minutes >> time1[i].seconds; log_num++;// } in2.close(); int del;//還的書的序號 for (i = 0; i < log_num; i++) { if (bianhao == x2[i]) { del = i; break; } } fstream out2; out2.open("Log.text", ios::out); for (i = 0; i < log_num; i++)//向文件輸出新的Log { if (i == del) continue; out2 << setiosflags(ios::left) << setw(15) << leixing2[i] << setw(15) << x2[i]; out2<< setw(20) << c2[i] << setw(20) << d2[i] << setw(20) << e2[i] << setw(20) << f2[i]; out2 << yonghu.name << " "; out2 << time1[i].year << " " << time1[i].month << " " << time1[i].day << " "; out2<< time1[i].hours << " " << time1[i].minutes << " " << time1[i].seconds << endl; } out2.close(); //判斷是否超出還書時間 int deadline; if (n == 1)//讀者 deadline = 14;//讀者借書期限為14天 if (n == 2 || n == 3)//圖書管理員或系統管理員 deadline = 21;//管理員借書期限為21天 if (time2.year - time1[del].year > 0 || time2.month - time1[del].month > 0 || time2.day - time1[del].day > deadline) { cout << "您已超出圖書歸還日期,請到辦公室繳納罰款" << endl; } else cout << "還書成功!" << endl; } } }; int main() { char kouling1[50] = "123456"; cout << "——————圖書管理系統——————" << endl; int i,j; Book shu[100];//圖書 Reader duzhe[100];//讀者 Librarian tushu[100];//圖書管理員 System_Admin xitong[100];//系統管理員 Log rizhi[100];//借還書日志 int flag;//0為沒有用戶登錄,1為已有用戶登錄 for (i = 0;; i++) { if(i!=0) cout << "————主界面————" << endl; cout << "1.注冊" << endl; cout << "2.登錄" << endl; cout << "3.退出" << endl; int n;//1為注冊,2為登錄,3為退出系統 cin >> n; if (n == 1)//注冊 { cout << "請選擇您要注冊的用戶類型" << endl; cout << "1.讀者" << endl; cout << "2.圖書管理員" << endl; cout << "3.系統管理員" << endl; cout << "4.返回上一層菜單" << endl; int m;//1為注冊讀者,2為注冊圖書管理員,3為注冊系統管理員 cin >> m; if (m == 1) { duzhe[i].zhuce();//注冊讀者 } if (m == 2) { for (;;) { char kl[20];//圖書管理員口令 cout << "請輸入圖書管理員口令:" << endl; cin >> kl;//接收口令 if (strcmp(kl,kouling1) == 0) { tushu[i].zhuce();//注冊圖書管理員 break; } else { cout << "口令錯誤,請輸入正確口令!" << endl; } } } if (m == 3) { for (;;) { char k2[20];//系統管理員口令 cout << "請輸入系統管理員口令:" << endl; cin >> k2;//接收口令 if (strcmp(k2, kouling2) == 0) { xitong[i].zhuce();//注冊系統管理員 break; } else { cout << "口令錯誤,請輸入正確口令!" << endl; } } } if (m == 4) { continue; } } if (n == 2)//登錄界面 { cout << "請選擇您要登錄的用戶類型" << endl; cout << "1.讀者" << endl; cout << "2.圖書管理員" << endl; cout << "3.系統管理員" << endl; cout << "4.返回上一層菜單" << endl; int m; cin >> m; if (m == 1) { flag=duzhe[i].denglu("讀者"); } if (m == 2) { flag=tushu[i].denglu("圖書管理員"); } if (m == 3) { flag=xitong[i].denglu("系統管理員"); } if (m == 4) continue; if (flag == 1)//登錄成功 { if (m == 1)//讀者登錄 { for (;;) { int x; cout << "————讀者界面————" << endl; cout << "1.修改用戶名" << endl; cout << "2.修改密碼" << endl; cout << "3.借閱圖書" << endl; cout << "4.還書" << endl; cout << "5.本人借閱信息查看" << endl; cout << "6.退出賬號" << endl; cin >> x; if (x == 1) { char after_name[20];//改后的用戶名 cout << "請輸入新的用戶名:" << endl; cin >> after_name; duzhe[i].change_information(after_name,1); } if (x == 2) { char after_password[20];//改后的密碼 cout << "請輸入新的密碼" << endl; cin >> after_password; duzhe[i].change_information(after_password,2); } if (x == 3) { rizhi[i].lend_book(duzhe[i]); } if (x == 4) { rizhi[i].return_book(1,duzhe[i]); } if (x == 5) rizhi[i].see(duzhe[i]); if (x == 6) break; } } if (m == 2)//登錄的為圖書管理員 { for (;;) { int x; cout << "————圖書管理員界面————" << endl; cout << "1.修改用戶名" << endl; cout << "2.修改密碼" << endl; cout << "3.借閱圖書" << endl; cout << "4.還書" << endl; cout << "5.本人借閱信息查看" << endl; cout << "6.增加圖書" << endl; cout << "7.修改圖書信息" << endl; cout << "8.刪除圖書" << endl; cout << "9.查看用戶借閱信息" << endl; cout << "10.退出賬號" << endl; cin >> x; if (x == 1) { char after_name[20];//改后的用戶名 cout << "請輸入新的用戶名:" << endl; cin >> after_name; tushu[i].change_information(after_name, 1); } if (x == 2) { char after_password[20];//改后的密碼 cout << "請輸入新的密碼" << endl; cin >> after_password; tushu[i].change_information(after_password, 2); } if (x == 3) { rizhi[i].lend_book(tushu[i]); } if (x == 4) { rizhi[i].return_book(2, tushu[i]); } if (x == 5) rizhi[i].see(tushu[i]); if (x == 6) { int y;//1為紙質圖書,2為碟片,3為電子資源 int no1;//編號 char name1[20];//書名 char author1[20];//作者 char press1[20];//出版社 char price1[10];//價格 cout << "請輸入您要增加的圖書類型:" << endl; cout << "1.紙質圖書" << endl; cout << "2.碟片" << endl; cout << "3.電子資源" << endl; cin >> y; cout << "請輸入圖書編號:" << endl; cin >> no1; if (shu[i].chongfu_no(no1) == 1) continue; cout << "請輸入書名:" << endl; cin >> name1; cout << "請輸入作者:" << endl; cin >> author1; cout << "請輸入出版社:" << endl; cin >> press1; cout << "請輸入圖書價格" << endl; cin >> price1; if (y == 1) tushu[i].add_book(no1, name1, author1, press1, price1, 1); if (y == 2) tushu[i].add_book(no1, name1, author1, press1, price1, 2); if (y == 3) tushu[i].add_book(no1, name1, author1, press1, price1, 3); } if (x == 7) { int y; cout << "請輸入您要修改圖書的編號:" << endl; cin >> y; tushu[i].change_book(y); } if (x == 8) { int y; cout << "請輸入您要刪除圖書的編號:" << endl; cin >> y; tushu[i].delete_book(y); } if (x == 9) { tushu[i].see_all(); } if (x == 10) break; } } if (m == 3)//登錄的為系統管理員 { for (;;) { int x; cout << "————系統管理員界面————" << endl; cout << "1.修改用戶名" << endl; cout << "2.修改密碼" << endl; cout << "3.借閱圖書" << endl; cout << "4.還書" << endl; cout << "5.本人借閱信息查看" << endl; cout << "6.修改圖書管理員口令" << endl; cout << "7.增加用戶" << endl; cout << "8.刪除用戶" << endl; cout << "9.修改用戶信息" << endl; cout << "10.查看用戶信息" << endl; cout << "11.退出賬號" << endl; cin >> x; if (x == 1) { char after_name[20];//改后的用戶名 cout << "請輸入新的用戶名:" << endl; cin >> after_name; xitong[i].change_information(after_name, 1); } if (x == 2) { char after_password[20];//改后的密碼 cout << "請輸入新的密碼" << endl; cin >> after_password; xitong[i].change_information(after_password, 2); } if (x == 3) { rizhi[i].lend_book(xitong[i]); } if (x == 4) { rizhi[i].return_book(3,xitong[i]); } if (x == 5) { rizhi[i].see(xitong[i]); } if (x == 6) { char kouling3[50]; cout << "請輸入修改后的圖書管理員口令:" << endl; cin >> kouling3; memset(kouling1, '\0', sizeof(kouling1)); strcmp(kouling1, kouling3); } if (x == 7) { int y;//1為讀者,2為圖書管理員 char name[50]; char password[50]; cout << "請輸入您要增加的用戶類型:" << endl; cout << "1.讀者" << endl; cout << "2.圖書管理員" << endl; cin >> y; cout << "請輸入用戶名:" << endl; cin >> name; cout << "請輸入密碼:" << endl; cin >> password; xitong[i].add_User(name,password,y); } if (x == 8) { char name[50]; cout << "請輸入您要刪除用戶的用戶名:" << endl; cin >> name; xitong[i].delete_user(name); } if (x == 9) { char name[50]; cout << "請輸入您要修改用戶的用戶名:" << endl; cin >> name; int y; cout << "請輸入您要修改用戶的哪個信息:" << endl; cout << "1.用戶類型" << endl; cout << "2.用戶名" << endl; cout << "3.用戶密碼" << endl; cin >> y; xitong[i].change_user(name,y); } if (x == 10) { xitong[i].see_user(); } if (x == 11) { break; } } } } } if (n == 3) return 0; } return 0; }
注冊成功后用戶信息會寫入文件中,這樣關閉程序后用戶信息不會丟失
用戶信息
三個text文件分別保存書籍信息(Book)、借閱信息(Log)、用戶信息(User)
書籍信息
借閱信息
以上是“C++圖書管理系統程序的示例代碼”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。