学了一年的C++,第一次做课程设计,可能略显粗糙,但也算把要求的功能都实现了。这段代码中还存在着很多不足,以后再改吧。 至于这段程序么,注释都说了~呵呵 /********************************************* ** Copyright (c) 2008 yel_hb ** All rights reserved ** 文件名:bookmanage.h ** 当前版本号v1.1 ** 创建时间 2008年12月12日 ** 修改时间 2008年12月13日 ** 完成时间 2008年12月14日 **********************************************/ #include <iostream> #include <string> using namespace std; class Book_inform { public: ///默认构造函数,初始化// Book_inform::Book_inform(string name = "null", string author = "null", string publish = "null", string ISBN = "", double price = 0, int psorder = 0, int ptorder = 0, string date = "0000-00-00", string bclass = "null"): book_name(name),book_author(author),book_publish(publish), book_ISBN(ISBN),book_price(price),press_order(psorder), print_order(ptorder),press_date(date),book_class(bclass){} 类成员函数/ void inforamtionAdd(); //添加图书信息 void msgShow(); //显示图书信息 friend void init_inform(); //友元函数,可以引用私有数据成员 friend void save_information(); //保存数据 string ISBN(); string author(); string publish(); string name(); string boclass(); bool operator < (Book_inform &t_book); //使用泛型算法中sort函数对类对象进行排序必须重载此操作符 private: string book_name; //书名 string book_author; //作者 string book_publish; //出版社 string book_ISBN; //ISBN编号 double book_price; //单价 int press_order; //版次 int print_order; //印次 string press_date; //出版时间 string book_class; //分类(1、计算机 2、文学 3、外语 4、其它) }; /********************************************* ** Copyright (c) 2008 yel_hb ** All rights reserved ** 文件名:图书登记管理程序.cpp ** 当前版本号v1.1 ** 创建时间 2008年12月12日 ** 修改时间 2008年12月13日 ** 完成时间 2008年12月14日 **********************************************/ //---------使用命名空间,包含头文件:“bookmanage”该文件包含类声明------------------// #include <iostream> #include <string> #include "bookmanage.h" #include <vector> #include <fstream> #include <algorithm> using namespace std; //-------------------------------------类成员函数定义--------------------------------// vector<Book_inform> bookManage; void Book_inform::inforamtionAdd() 信息录入 { bool isTrue = false; cout<<"请输入图书名称:"; cin>>book_name; cout<<"/n请输入作者:"; cin>>book_author; cout<<"/n请输入出版社:"; cin>>book_publish; cout<<"/n请输入ISBN(0-0-0-0):"; while( !isTrue) { cin>>book_ISBN; if(book_ISBN[8] == '/0') { cout<<"您输入的ISBN号有误,请重新输入"; } else { isTrue = true; break; } } cout<<"/n请输入单价:"; cin>>book_price; cout<<"/n请输入版次:"; cin>>press_order; cout<<"/n请输入印次:"; cin>>print_order; cout<<"/n请输入出版日期:(YY-MM)"; isTrue = false; while( !isTrue) { cin>>press_date; if(press_date[4] == '-' && press_date[7] =='/0') { isTrue = true; } else { cout<<"您输入的不是有效时间!请重新输入:"; } } cout<<"/n请输入图书分类:"; cin>>book_class; cout<<endl; } void Book_inform::msgShow() //输出信息 { cout<<"-----------------------------------------------"<<endl; cout<<"图书名称:"<<book_name <<"/n作者:"<<book_author <<"/n分类:"<<book_class<<endl; cout<<"ISBN:"<<book_ISBN <<"/n版次:"<<press_order <<"/n印次:"<<print_order<<endl; cout<<"出版时间:"<<press_date <<"/n出版社:"<<book_publish <<"/n单价:"<<book_price<<"/n/n/n"; } //用成员函数返回私有数据成员的值,使私有数据成员能被普通函数使用 string Book_inform::ISBN() { return book_ISBN; } string Book_inform::author() { return book_author; } string Book_inform::publish() { return book_publish; } string Book_inform::name() { return book_name; } string Book_inform::boclass() { return book_class; } bool Book_inform::operator < (Book_inform &t_book) //使用泛型算法中sort函数对类对象进行排序必须重载此操作符 { //若直接使用数据成员,则须将其定义为友元函数 return ISBN() < t_book.ISBN(); } //----------------------------------------函数部分--------------------------------------// /********************** *函数名:start_msg *功能:起始输出提示信息 **********************/ void start_msg() { cout<<"▁▂▃▄▆▇---图书登记管理v1.0---▇▆▅▄▃▂▁"<<endl; cout<<"************************************************"<<endl; cout<<"** 1、导入图书信息 **"<<endl; cout<<"** 2、添加图书信息 **"<<endl; cout<<"** 3、查询(图书、作者、出版社、分类、ISBN) **"<<endl; cout<<"** 4、删除图书信息 **"<<endl; cout<<"** 5、导出图书信息 **"<<endl; cout<<"** 6、显示所有信息 **"<<endl; cout<<"** 7、按顺序显示所有信息(ISBN排序) **"<<endl; cout<<"** 0、退出程序 **"<<endl; cout<<"************************************************"<<endl; cout<<"**Copyright (c) 2008 yel_hb All rights reserved*"<<endl; cout<<"************************************************"<<endl; cout<<"请选择:"; } /******************** *函数名:init_inform *功能:导入信息 *注:文件中书名、作者名等中间不能加入空格,可用下划线代替 ********************/ void init_inform() { ifstream ifs; ifs.open("book.txt"); if(!ifs) { cerr<<"文件加载失败!请确认文件是否存在(文件名:book.txt)!/n/n"<<endl; //判断文件是否存在 }else{ while(ifs && !ifs.eof()) { Book_inform inbook; ifs>>inbook.book_name; ifs>>inbook.book_author; ifs>>inbook.book_publish; ifs>>inbook.book_ISBN; ifs>>inbook.book_price; ifs>>inbook.press_order; ifs>>inbook.print_order; ifs>>inbook.press_date; ifs>>inbook.book_class; bookManage.push_back(inbook); } cout<<"信息已成功导入!"<<endl; ifs.close(); } } /********************************** *函数名:add_information *功能:添加信息 *说明:暂时无法验证所有信息的有效性 **********************************/ void add_information() { Book_inform bookmg; bool tocontinue = true; while(tocontinue) { bookmg.inforamtionAdd(); cout<<"是否继续?(Y/N)"; string add_infor = ""; char get_inform = 't'; bool isExist = false; while(get_inform != 'y' && get_inform != 'Y' && get_inform != 'n' && get_inform != 'N' ) { cin>>add_infor; get_inform = add_infor[0]; if(get_inform == 'Y' || get_inform == 'y') { tocontinue = true; } else if(get_inform == 'N' || get_inform == 'n' ) { tocontinue = false; } else { cout<<"您的输入有误,请重新输入!:"; } } for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if (bookmg.ISBN() == bpt->ISBN()) { isExist = true; } } if (isExist == true) { cout<<"您输入的信息已存在,请重新输入!/n"; tocontinue = true; } else { bookManage.push_back(bookmg); //在容器最后添加对象,只能用push_hack函数 } } } /************************ *函数名:query_information *功能:查询信息(按作者、按ISBN、按出版社、按书名、按分类) ************************/ void selectByAuthor() { string temp_author = ""; bool isExist = false; cout<<"请输入作者名字:"; cin>>temp_author; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_author == bpt->author()) { isExist = true; } }//判断作者是否存在 if(isExist == false) { cout<<"您输入的作者不存在,请重新确认!/n"<<endl; } else { cout<<"作者:"<<temp_author<<"的著作有:"<<endl; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_author == bpt->author()) { cout<<bpt->name()<<"/t/t"<<bpt->author()<<endl; } } } } void selectByISBN() { string temp_ISBN = ""; bool isExist = false; cout<<"请输入ISBN:"; cin>>temp_ISBN; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_ISBN == bpt->ISBN()) { cout<<"该图书信息如下:"<<endl; bpt->msgShow(); isExist = true; } } if(isExist == false) { cout<<"您输入的ISBN不存在,请重新确认!/n"<<endl; } } void selectByName() { string temp_name = ""; bool isExist = false; cout<<"请输入图书名称:"; cin>>temp_name; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_name == bpt->name()) { cout<<"该图书信息如下:"<<endl; bpt->msgShow(); isExist = true; } } if(isExist == false) { cout<<"您输入的图书不存在,请重新确认!/n"<<endl; } } void selectByPublish() { string temp_publish = ""; bool isExist = false; cout<<"请输入出版社名字:"; cin>>temp_publish; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_publish == bpt->publish()) { isExist = true; } }//判断出版社是否存在 if(isExist == false) { cout<<"您输入的出版社不存在,请重新确认!/n"<<endl; } else { cout<<temp_publish<<"的出版物有:"<<endl; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_publish == bpt->publish()) { cout<<bpt->name()<<"/t/t"<<bpt->author()<<endl; } } } } void selectByClass() { string temp_class = ""; bool isExist = false; cout<<"请输入分类名称:"; cin>>temp_class; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_class == bpt->boclass()) { isExist = true; } }//判断分类是否存在 if(isExist == false) { cout<<"您输入的分类不存在,请重新确认!/n"<<endl; } else { cout<<temp_class<<"类的图书有:"<<endl; for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { if(temp_class == bpt->boclass()) { cout<<bpt->name()<<"/t/t"<<bpt->author()<<endl; } } } } void query_information() { void msg_select(); string select_qs = ""; int select = 1; int trans_infor(string); while(select != 0) { msg_select(); cin>>select_qs; select = trans_infor(select_qs); switch(select) { case 1:selectByAuthor(); continue; case 2:selectByPublish(); continue; case 3:selectByISBN(); continue; case 4:selectByName(); continue; case 5:selectByClass(); continue; case 0: break; default: cout<<"您的输入有误,请重新选择:"; } } } /************************ *函数名:delet_information *功能:删除图书信息 ************************/ void delet_information() { string temp_ISBN = ""; bool isExist = false; //判断欲删除的图书信息是否存在 cout<<"/n请输入图书ISBN(输入000清空所有(慎用!)):"; cin>>temp_ISBN; if(temp_ISBN == "000") { cout<<"/n您确定要清空所有数据?此操作将删除所有数据,并不可复原!(Y/N):"; string i_sure = ""; cin>>i_sure; char sureOrNot = i_sure[0]; if(sureOrNot == 'Y' || sureOrNot == 'y') { bookManage.clear(); cout<<"/n数据已清空!/n"; } else { cout<<"/n任务已取消!/n"<<endl; } isExist = true; } else { vector<Book_inform>::iterator bpt = bookManage.begin(); for( ; bpt != bookManage.end(); ++bpt) { if(bpt->ISBN() == temp_ISBN) { if(bpt == bookManage.end()-1) { bookManage.erase(bpt); bpt--; }else { bookManage.erase(bpt); } isExist = true; cout<<"该信息已被删除!/n"<<endl; } else { isExist = false; } } } if(isExist == false) { cout<<"您输入的ISBN不存在,请再次确认"<<endl; } } /************************ *函数名:save_information *功能:导出信息 ************************/ void save_information() { ofstream ofs; if(!bookManage.empty()) { ofs.open("book_save.txt"); for(vector<Book_inform>::iterator bpt = bookManage.begin(); bpt != bookManage.end(); ++bpt) { ofs<<"名称: "<<bpt->book_name<<endl; ofs<<"作 者: "<<bpt->book_author<<endl; ofs<<"出版社:"<<bpt->book_publish<<endl; ofs<<"ISBN: "<<bpt->book_ISBN<<endl; ofs<<"价格: "<<bpt->book_price<<endl; ofs<<"版次: "<<bpt->press_order<<endl; ofs<<"印次: "<<bpt->print_order<<endl; ofs<<"出版日期:"<<bpt->press_date<<endl; ofs<<"图书分类:"<<bpt->book_class<<endl; ofs<<"--------------------------------------------"<<endl; } ofs.close(); cout<<"信息已成功导出,保存文件名为book_save.txt"<<endl; } else { cout<<"/n没有可导出的信息!/n/n/n"; } } /************************ *函数名:sort_information *功能:排序 ************************/ void sort_information() { void show_msg(vector<Book_inform> bookmanage); sort(bookManage.begin(),bookManage.end()); //实用STL排序算法(sort)其中重载操作符“<”比较对象为ISBN号 cout<<"------------排序方式:按ISBN号升序-------------"<<endl; show_msg(bookManage); } /***************************** *函数名:show_msg *功能:信息显示 *paramer:vector<Book_inform> *****************************/ void show_msg(vector<Book_inform> bookmanage) { bool isExist = bookmanage.empty(); if(!isExist) { vector<Book_inform>::iterator book_pt = bookmanage.begin(); for(; book_pt != bookmanage.end(); book_pt++) { book_pt->msgShow(); } } else { cout<<"/n没有任何记录!"<<endl; } } /************************************************** *函数名:trans_inform *paramer: string 用于接收输入 *功能:将输入转换成整形数值,防止因用书在选择时因输入错误而出错 **************************************************/ int trans_infor(string inf) { int a = inf[0]-48; return a; } //------------------------------提示信息----------------------------// //出错信息(功能选择出错) void err_msg_selfuc() { cout<<"您的选择有误,请重新输入或按“0”退出!"<<endl; } //显示查询选项 void msg_select() { cout<<"/n~~~~~~~~~查询方式~~~~~~~~~~"<<endl; cout<<" 1、显示作者所有著作 "<<endl; cout<<" 2、显示出版社所有出版物 "<<endl; cout<<" 3、显示图书信息,按ISBN "<<endl; cout<<" 4、显示图书信息,按书名 "<<endl; cout<<" 5、显示图书分类信息 "<<endl; cout<<" 0、返回上一层 "<<endl; cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"请选择:"; } //主函数 int main() { string select_s = ""; //功能选项 int select = 1; while(select != 0) { start_msg(); cin>>select_s; select = trans_infor(select_s); switch(select) { case 1:init_inform(); //导入图书信息 continue; case 2:add_information(); //添加图书信息 continue; case 3:query_information(); //查询图书信息 continue; case 4:delet_information(); //删除图书信息 continue; case 5:save_information(); //导出所有信息 continue; case 6:show_msg(bookManage); //显示信息 continue; case 7:sort_information(); //显示排序后的信息 continue; case 0: break; default: err_msg_selfuc(); } } return 0; }