C++实现小型图书管理系统
本文实例为大家分享了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错误的书籍ID\n"; 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请输入读者ID\n"; 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<<" 本书\n\n\n"; cout<<"\n图书馆书籍外借情况"; BorrowMes(); cout<<"图书馆目前外借:"<<out_stock<<" 本书\n\n"; cout<<"\n\n图书馆当前在馆书籍还有:"<<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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)