课程设计要求:
编制图书信息管理系统,实现如下功能:插入图书(-i)、查找图书(-f)、删除图书(-d)、显示图书(-s)。
要求:
1. 图书信息包括:书名、作者、出版年份、出版社;
2. 显示图书时按照出版年份由近到远显示;
3. 查找图书和删除图书的输入为完整书名或是部分书名;
4. 插入图书的命令代码-i;查找图书的命令代码-f;删除图书的命令代码-d;显示图书的命令代码为-s;
5. 使用容器类和库算法完成编制。
思路:图书信息可以用结构体来存储,一本书就是一个结构体变量,然后用容器嵌套结构体来存储很多本图书,显示的图示年份由近及远这是个典型的排序算法,再本程序中使用排序算法,总体来说其实就是对图书的增删改查,还是很简单的,可以创建一个booker类来作为管理图书的管理远。
图书管理员有查找图书、插入图书、删除图书、显示图书的权利,可以作为类的成员函数,参数为操作的图书容器类,和要操作的相应图书。
类的具体的代码如下:
class booker
{
public:
void Insert_book(vector<initbook>&books,string book_name,string writer,date Date,string publisher);
void search_book(string book_name,vector<initbook>&booklist);
void editor_book(string book_name, vector<initbook>& booklist);
void delete_book(string book_name, vector<initbook>&booklist2);
void show_book();
int getdata() { return book_nummber; }
void print_All_books(vector<initbook>&book);
protected:
private:
int book_nummber = 0;
};
相应的函数实现如下:
void booker::Insert_book(vector<initbook>&books,string book_name, string writer, date Date, string publisher)
{
initbook* s = new initbook;
s->bookName = book_name;
s->Writer = writer;
s->Date = Date;
s->publisher = publisher;
books.push_back(*s);
}
void booker::delete_book(string book_name,vector<initbook>&booklist2)
{
for (vector<initbook>::iterator id=booklist2.begin();id<booklist2.end();id++)
{
if ((*id).bookName == book_name)
{
booklist2.erase(id);
break;//删除以后id已失效要及时跳出循环
}
}
}
void booker::search_book(string book_name,vector<initbook>&booklist)
{
for (vector<initbook>::iterator id = booklist.begin(); id < booklist.end(); id++)
{
if ((*id).bookName == book_name)
{
cout << "已成功找到图书:" << endl;
cout << (*id).bookName << endl;
cout << (*id).Writer << endl;
cout << (*id).Date.day << "-" << (*id).Date.month << "-" << (*id).Date.day << endl;
cout << (*id).publisher << endl;
break;//找到后直接跳出for
}
}
}
void booker::editor_book(string book_name, vector<initbook>& booklist)
{
string writer;
string publisher;
for (vector<initbook>::iterator id = booklist.begin(); id < booklist.end(); id++)
{
if ((*id).bookName == book_name)
{
cout << "请输入新的作者名" << endl;
cin >> writer;
cout << "请输入新的出版商" << endl;
cin >> publisher;
(*id).Writer = writer;
(*id).publisher = publisher;
}
}
}
void booker::print_All_books(vector<initbook>&book)
{
int min;
for (int i = 0; i < book.size() - 1; i++)
{
min = i;
for (int j = i + 1; j < book.size(); j++)
{
if (book[j].Date.year < book[min].Date.year||(book[j].Date.year==book[min].Date.year&&book[j].Date.month<book[min].Date.month))
{
min = j;
}
}
if (i != min)
{
initbook temp = book[i];
book[i] = book[min];
book[min] = temp;
}
}
for (vector<initbook>::iterator id = book.begin(); id < book.end(); id++)
{
cout <<"书籍名称:"<< (*id).bookName << endl;
cout << "书籍作者:"<<(*id).Writer << endl;
cout <<"出版日期:"<< (*id).Date.day << "-" << (*id).Date.month << "-" << (*id).Date.day << endl;
cout << "出版社:"<<(*id).publisher << endl;
}
}
主函数:注意这里面的get_data,等是相应的对书籍的操作,为了让switch语句看起来比较整洁简单所以用了函数,参数为booker类和图书容器,在函数中调用booker类的方法对图书进行操作。这部分很简单的,就自己实现把~
int main()
{
booker liberian;
vector<initbook>booklist;
while (1)
{
menu();
cout << "请输入你要的操作:" << endl;
char a;
cin >> a;
switch (a)
{
case 'i':
get_data(&liberian,booklist);
break;
case 'f':
search_data(&liberian, booklist);
break;
case 'd':
delete_data(&liberian, booklist);
break;
case 's':
show_data(&liberian, booklist);
break;
case 'k':
editor_book(&liberian, booklist);
break;
case 'l':
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
}
}
return 0;
}