<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C++實現小型圖書管理系統的具體程式碼,供大家參考,具體內容如下
因為課程設計的原因,需要實現一個小型圖書管理系統
問題描述:
設計一個系統,對圖書資訊進行管理,資訊描述:有關該系統基本資訊的描述,如:圖書名稱、圖書編號、單價、作者、存在狀態、借書人姓名、性別、學號等。
基本功能:
1、新進圖書基本資訊的輸入。
2、圖書基本資訊的查詢。
3、對撤消圖書資訊的刪除。
4、為借書人辦理註冊。
5、辦理借書手續(非註冊會員不能借書)。
6、辦理還書手續。
7、統計圖書庫存、已借出圖書數量。
需要建立三個文字檔案:record.txt book.txt reader.txt
operating.h的標頭檔案:
#include <iostream> #include <fstream> #include <string> #include <time.h> #include<sstream> #include<vector> #include <iomanip> using namespace std; int all_stock = 0; int out_stock = 0; int times=0; void outData(vector<string> res,int n) // n為txt中 每行資料個數 { for(int i=0;i<res.size();i+=n){ for(int j=0;j<n;j++) cout<<setw(12)<<res[i+j]<<" "; cout<<endl; } } void BookEntry() { double price; string bookname,writer; fstream out; out.open("book.txt",ios::app); if(!out) { cerr<<"開啟檔案失敗!"<<endl; } time_t tt = time(NULL);//這句返回的只是一個時間cuo cout<<"請輸入書籍名稱"<<endl; cin>>bookname; cout<<"請輸入書籍作者"<<endl; cin>>writer; cout<<"請輸入書籍價格"<<endl; while(! (cin>>price) || price <= 0 ) { cin.clear(); cin.ignore(100,'n'); cout<<"請輸入正確的價格"<<endl; } out<<tt<<" "<<bookname<<" "<<writer<<" "<<price<<" "<<"0"<<"n"; out.close(); } void BookMes() { fstream in; string line; //用於存放分割後的字串 vector<string> res; string temp; //暫存字串 in.open("book.txt",ios::in); if(!in) { cerr<<"開啟檔案失敗!"<<endl; } all_stock = 0; while(getline(in,line)) { all_stock++; //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 while(input>>temp) { res.push_back(temp); } } // 0 書籍編號 1 書籍名稱 2作者 3價格 4書籍狀態 //輸出res cout<<endl<<setw(12)<<"書籍編號"<<" "<<setw(12)<<"書籍名稱"<<" "<<setw(12)<<"作者"<<" "<<setw(12)<<"價格"<<" "<<setw(12)<<"在館0,不在1"<<"n"; outData(res,5); in.close(); } void DelBook() { string del_book; string line; vector<string>res; string temp; bool flag=false; fstream in; in.open("book.txt",ios::in); if(!in) { cerr<<"開啟錯誤檔案"<<endl; } cout<<"請輸入需要刪除的圖書ID"<<endl; cin>>del_book; while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 times=0; while(input>>temp) { if(del_book == temp && times==0) { for(int i=0;i<3;i++) //因為一共五個 第一個temp已經是del_book 所以這裡取得是四個 { input>>temp; } input>>temp; if(temp != "0") { cout<<"書籍狀態不對"; in.close(); return ; } flag=true; cout<<"n找到了喔,應該刪除成功了n"; continue; } res.push_back(temp); times++; } } //outData(res,5); in.close(); if(!flag) { cout<<"n錯誤的書籍IDn"; return ; } fstream out; out.open("book.txt",ios::out); if(!out) { cerr<<"開啟檔案失敗!"<<endl; } for(int j=0;j<res.size();j+=5) { line = res[j] + " " + res[j+1] + " " + res[j+2] + " " + res[j+3] + " " + res[j+4] + "n"; out<<line; } out.close(); } void ReaderEntry() { string readername,sex_str; int sex; fstream out; out.open("reader.txt",ios::app); if(!out) { cerr<<"開啟檔案失敗!"<<endl; } time_t readerid = time(NULL);//這句返回的只是一個時間cuo cout<<"請輸入讀者姓名"<<endl; cin>>readername; do { cout<<"請輸入讀者性別:0為女,1為男"<<endl; while(! (cin>>sex) ) { cin.clear(); cin.ignore(100,'n'); cout<<"請輸入正確的0或1"<<endl; } }while(sex != 0 && sex!=1); if(sex == 1) { sex_str = "男"; }else if (sex == 0){ sex_str = "女"; }else{ out.close(); return ; } out<<readerid<<" "<<readername<<" "<<sex_str<<"n"; out.close(); } /*讀者資訊*/ void ReaderMes() { fstream in; string line; //用於存放分割後的字串 vector<string> res; string temp; //暫存字串 in.open("reader.txt",ios::in); if(!in) { cerr<<"開啟檔案失敗!"<<endl; } while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 while(input>>temp) res.push_back(temp); } // 0讀者學號 1讀者姓名 2讀者性別 //輸出res cout<<endl<<setw(12)<<"讀者編號"<<" "<<setw(12)<<"讀者"<<" "<<setw(12)<<"性別"<<"n"; outData(res,3); in.close(); } /* 借閱書籍 */ void BorrowBook() { string book[5]; string readerid; string readername; string line; vector<string>res; //取書籍狀況,並且更新 string temp; bool flag_book = false; //用於判斷書籍是否存在 讀者是否存在 bool flag_reader = false; /* 取book的圖書情況,並判斷是否在館*/ fstream in; in.open("book.txt",ios::in); if(!in) { cerr<<"開啟錯誤檔案"<<endl; } cout<<"請輸入需要借的圖書ID"<<endl; cin>>book[0]; while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 times=0; while(input>>temp) { if(book[0] == temp && times ==0) { res.push_back(temp); for(int i=0;i<3;i++) //從書籍名稱開始取,一直取到價錢 { input>>temp; //讀取了書籍編號,要及時寫入res,以後要寫進文字 book[1+i]=temp; res.push_back(temp); } input>>temp; //取書籍狀態,如果0在館 如果1不在館 if(temp == "0") { book[4]="1"; temp="1"; res.push_back(temp); flag_book=true; }else{ cout<<"n書籍不在館n"; in.close(); return ; } continue; //繼續取 } res.push_back(temp); times++; } } in.close(); if(!flag_book) { cout<<"錯誤的書籍ID"<<endl; return ; } in.open("reader.txt",ios::in); if(!in) { cerr<<"開啟錯誤檔案"<<endl; } cout<<"n請輸入讀者IDn"; cin>>readerid; while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 times=0; while(input>>temp) { if(readerid == temp && times==0) { input>>temp; readername=temp; flag_reader=true; break; } times++; } } if(!flag_reader) { cout<<"錯誤的讀者ID"<<endl; in.close(); return ; } in.close(); fstream out; out.open("record.txt",ios::app); if(!out) { cerr<<"開啟錯誤檔案"<<endl; } line = book[0] + " " + book[1] + " " + readername + 'n'; out<<line; cout<<"n辦理借書成功n"; out.close(); out.open("book.txt",ios::out); if(!out) { cerr<<"開啟檔案失敗!"<<endl; } for(int j=0;j<res.size();j+=5) { line = res[j] + " " + res[j+1] + " " + res[j+2] + " " + res[j+3] + " " + res[j+4] + "n"; out<<line; } out.close(); } void BorrowMes() { fstream in; string line; //用於存放分割後的字串 vector<string> res; string temp; //暫存字串 in.open("record.txt",ios::in); if(!in) { cerr<<"開啟檔案失敗!"<<endl; } out_stock=0; while(getline(in,line)) { out_stock++; //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 while(input>>temp) res.push_back(temp); } // 0書籍編號 1書籍名稱 2讀者姓名 //輸出res cout<<endl<<setw(12)<<"書籍編號"<<" "<<setw(12)<<"書籍名稱"<<" "<<setw(12)<<"讀者"<<"n"; outData(res,3); in.close(); } void RtnBook() { string rtn_book; string line; vector<string>res; string temp; bool flag=false; fstream in; in.open("record.txt",ios::in); //先開啟record 檢視是否有借這本書 if(!in) { cerr<<"開啟錯誤檔案"<<endl; } cout<<"請輸入需要歸還的書籍ID"<<endl; cin>> rtn_book; while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 times=0; while(input>>temp) { if(rtn_book == temp && times==0) //如果有的話 { flag=true; for(int i=0;i<2;i++) //因為一共三個 第一個temp已經是del_book 所以這裡取得是兩個 { input>>temp;// 將刪除的東西不輸出到向量中 } continue; } res.push_back(temp); times++; } } //outData(res,3); in.close(); if(!flag) { cout<<"該圖書不存在或者沒有被外借"<<endl; return ; } fstream out; out.open("record.txt",ios::out); //record已經刪除成功 if(!out) { cerr<<"開啟檔案失敗!"<<endl; } for(int j=0;j<res.size();j+=3) { line = res[j] + " " + res[j+1] + " " + res[j+2] + "n"; out<<line; } out.close(); vector<string>res_book; in.open("book.txt",ios::in); //開始取 被修改的書籍 if(!in) { cerr<<"開啟錯誤檔案"<<endl; } while(getline(in,line)) { //cout<<line<<endl; //將字串讀到input中 stringstream input(line); //將line切割 通過input存入temp,然後存入res中 times=0; while(input>>temp) { if(rtn_book == temp && times==0) { res_book.push_back(temp); for(int i=0;i<3;i++) //因為一共五個 第一個temp已經是rtn_book 所以這裡取得是四個 { input>>temp; res_book.push_back(temp); } input>>temp;//最後一個取得是書籍狀態,需要修改書籍狀態 temp = "0"; res_book.push_back(temp); continue; } res_book.push_back(temp); times++; } } //outData(res,5); in.close(); out.open("book.txt",ios::out); //再存入文字中; if(!out) { cerr<<"開啟檔案失敗!"<<endl; } for(int j=0;j<res_book.size();j+=5) { line = res_book[j] + " " + res_book[j+1] + " " + res_book[j+2] + " " + res_book[j+3] + " " + res_book[j+4] + "n"; out<<line; } out.close(); cout<<"n找到了喔,應該還書成功了n"; } void CountBook() { cout<<"n圖書館書籍情況"; BookMes(); cout<<"圖書館一共有:"<<all_stock<<" 本書nnn"; cout<<"n圖書館書籍外借情況"; BorrowMes(); cout<<"圖書館目前外借:"<<out_stock<<" 本書nn"; cout<<"nn圖書館當前在館書籍還有:"<<all_stock - out_stock<<" 本書n"; }
main.cpp的主函數
#include "operating.h" int main() { int order; do { order = -1; cout<<"n"; cout<<"----------------------------------------------------------n"; cout<<"| 1. 圖書資訊錄入 2. 圖書資訊查詢 3. 圖書資訊刪除 |n"; cout<<"| 4. 讀者辦理註冊 5. 讀者資訊查詢 6. 辦理借書手續 |n"; cout<<"| 7. 辦理還書手續 8 已借出圖書 9.統計圖書庫存 |n"; cout<<"| 按 "0"退出 |n"; cout<<"----------------------------------------------------------n"; cout<<" 請輸入相應序號進行相應操作:"; cin>>order; cin.clear();//清除緩衝區中後面的字元 cin.ignore(100,'n'); switch(order) { case 1: BookEntry(); break; case 2: BookMes(); break; case 3: DelBook(); break; case 4: ReaderEntry(); break; case 5: ReaderMes(); break; case 6: BorrowBook(); break; case 7: RtnBook(); break; case 8: BorrowMes(); break; case 9: CountBook(); break; case 0: break; default: cout<<"錯誤的命令列"<<endl; break; } }while(order != 0); system("pause"); return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45