- 1. *
1、问题描述 定义图书类,属性有:书名、出版社、ISBN号、作者、库存量、价格等信息和相关的对属性做操作的行为。 主要完成对图书的销售、统计和图书的简单管理。 2、功能要求 (1)销售功能。购买书籍时,输入相应的ISBN号,并在书库中查找该书的相关信息。如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购买。 (2)图书简单管理功能。 添加功能:主要完成图书信息的添加,要求ISBN号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。 查询功能:可按书名、ISBN号、作者、出版社进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”。 修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。 删除功能:主要完成图书信息的删除。输入要删除的ISBN号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。 (3)统计功能。 输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进行统计,输出统计信息时,要按从大到小进行排序。 (7)图书存盘:将当前程序中的图书信息存入文件中。 (8)读出信息:从文件中将图书信息读入程序。
用C++编写图书管理系统?要求头文件和.cpp文件分开
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 白色一大坨 2020-04-14 20:19关注
代码先贴这,你测试一下:
#include <string> #include <iostream> #include <fstream> using namespace std; #define N 300//最多保存数 class book//图书类 { public: string name;//书名 string pub;//出版社 string ISBN; string author;//作者 int count; float price; void input(string n, string p, string i, string a, int c, float pr )//输入信息到图书类 { name = n; pub = p; ISBN = i; author = a; count = c; price = pr; } void show()//显示信息 { cout<< "书名:" << name << " 出版社:" << pub << " ISBN号:" << ISBN << " 作者:" << author << " 库存:" << count << " 价格:" << price << endl; } void input(ifstream & is)//从文件读取类成员变量 { is >> name >> pub >> ISBN >> author >> count >> price; } void output(ofstream & os)//存书籍类成员变量到文件 { os << name << " " << pub << " " << ISBN << " " << author << " " << count << " " << price << endl; } }; class bookmanage//图书管理类 { book m_book[N]; int m_count; public: bookmanage(){ m_count = 0; }//构造函数 int bookexist(string ISBN) { int ret = -1; for (int i = 0; i < m_count; i++) { if (ISBN == m_book[i].ISBN)//找到相同号 { ret = i; break; } } return ret; } void insert(string n, string p, string i, string a, int c, float pr)//添加 { m_book[m_count].input(n, p, i, a, c, pr); m_count++; } void del(int index) { for (int i = index; i < m_count; i++) { m_book[i] = m_book[i+1]; } m_count--; } void modify(int index, string n, string p, string i, string a, int c, float pr)//修改 { m_book[index].input(n, p, i, a, c, pr); } bool searchname(string name)//根据书名查找 { bool ret = false; for (int i = 0; i < m_count; i++) { if (name == m_book[i].name) { m_book[i].show(); ret = true; } } return ret; } bool searchpub(string pub)//根据作==出版社查找 { bool ret = false; for (int i = 0; i < m_count; i++) { if (pub == m_book[i].pub) { m_book[i].show(); ret = true; } } return ret; } bool searchISBN(string ISBN)//根据ISBN查找 { bool ret = false; for (int i = 0; i < m_count; i++) { if (ISBN == m_book[i].ISBN) { m_book[i].show(); ret = true; } } return ret; } bool searchauthor(string author)//根据作者查找 { bool ret = false; for (int i = 0; i < m_count; i++) { if (author == m_book[i].author) { m_book[i].show(); ret = true; } } return ret; } bool sortprice() { if(m_count==0) return false; int i,j; book t; for (i=0;i<m_count-1;i++) { for (j=0;j<m_count-i-1;j++) { if (m_book[j].price<m_book[j+1].price) { t=m_book[j]; m_book[j] = m_book[j+1]; m_book[j+1] = t; } } } for (int i = 0; i < m_count; i++) { m_book[i].show(); } return true; } bool sortcount() { if(m_count==0) return false; int i,j; book t; for (i=0;i<m_count-1;i++) { for (j=0;j<m_count-i-1;j++) { if (m_book[j].count<m_book[j+1].count) { t=m_book[j]; m_book[j] = m_book[j+1]; m_book[j+1] = t; } } } for (int i = 0; i < m_count; i++) { m_book[i].show(); } return true; } bool sortauthor() { if(m_count==0) return false; int i,j; book t; for (i=0;i<m_count-1;i++) { for (j=0;j<m_count-i-1;j++) { if (m_book[j].author<m_book[j+1].author) { t=m_book[j]; m_book[j] = m_book[j+1]; m_book[j+1] = t; } } } for (int i = 0; i < m_count; i++) { m_book[i].show(); } return true; } bool sortpub() { if(m_count==0) return false; int i,j; book t; for (i=0;i<m_count-1;i++) { for (j=0;j<m_count-i-1;j++) { if (m_book[j].pub<m_book[j+1].pub) { t=m_book[j]; m_book[j] = m_book[j+1]; m_book[j+1] = t; } } } for (int i = 0; i < m_count; i++) { m_book[i].show(); } return true; } bool show()//显示全部图书 { if(m_count==0) return false; for (int i = 0; i < m_count; i++) { m_book[i].show(); } return true; } bool buybook(int index, int c)//购书 { if(m_book[index].count<c) return false; m_book[index].count -= c; return true; } void save(string filename)//存全部图书到文件 { ofstream write(filename.c_str(), ios::out); write << m_count << endl; for (int i = 0; i < m_count; i++) { m_book[i].output(write); } write.close(); } void load(string filename)//从文件读取全部图书信息 { ifstream read(filename.c_str(), ios::in); if (read.peek() == EOF) { read.close(); return; } read >> m_count; for (int i = 0; i < m_count; i++) { m_book[i].input(read); } read.close(); } }; void searcbook(bookmanage manage) { string name;//书名 string pub;//出版社 string ISBN; string author;//作者 char n; int k = 1; while (k == 1) { system("cls"); cout << "图书管理" << endl; cout<< "1 根据书名查找" << endl << "2 根据ISBN查找" << endl << "3 根据作者查找" << endl << "4 根据出版社查找" << endl << "0 返回" << endl << "选择:"; cin >> n; switch (n) { case 1: cout << "输入书名:"; cin >> name; if(!manage.searchname(name)) cout << "该标题不存在!"<<endl; system("pause"); break; case 2: cout << "输入出版社:"; cin >> pub; if(!manage.searchname(pub)) cout << "该标题不存在!"<<endl; system("pause"); break;; case 3: cout << "输入ISBN:"; cin >> ISBN; if(!manage.searchname(ISBN)) cout << "该标题不存在!"<<endl; system("pause"); break; case 4: cout << "输入作者:"; cin >> author; if(!manage.searchname(author)) cout << "该标题不存在!"<<endl; system("pause"); break; case 0: k = 0; break; default: cout<<"选择错误,请重新输入"<<endl; break; } } } void bookmemu(bookmanage &manage) { string name;//书名 string pub;//出版社 string ISBN; string author;//作者 int count; float price; char n; int index; int k = 1; while (k == 1) { system("cls"); cout << "图书管理" << endl; cout<< "1 图书基本信息录入" << endl << "2 图书基本信息显示" << endl << "3 图书基本信息删除" << endl << "4 图书基本信息修改" << endl << "5 图书基本信息查询" << endl << "0 返回" << endl << "选择:"; cin >> n; switch (n) { case 1: cout << "请输入ISBN:"; cin >> ISBN; index = manage.bookexist(ISBN); if (index == -1) { cout << "请输入出版社:"; cin >> pub; cout << "请输入ISBN:"; cin >> ISBN; cout << "请输入作者:"; cin >> author; cout << "请输入库存量:"; cin >> count; cout << "请输入买入价格:"; cin >> price; manage.insert(name, pub, ISBN, author, count, price); } else cout << "该编号已存在" << endl; system("pause"); break; case 2: manage.show(); system("pause"); break;; case 3: cout << "请输入ISBN:"; cin >> ISBN; index = manage.bookexist(ISBN); if (index != -1) manage.del(index); else cout << "该编号不存在" << endl; system("pause"); break; case 4: cout << "请输入ISBN:"; cin >> ISBN; index = manage.bookexist(ISBN); if (index != -1) { cout << "请输入出版社:"; cin >> pub; cout << "请输入ISBN:"; cin >> ISBN; cout << "请输入作者:"; cin >> author; cout << "请输入库存量:"; cin >> count; cout << "请输入买入价格:"; cin >> price; manage.modify(index, name, pub, ISBN, author, count, price); } else cout << "该编号不存在" << endl; system("pause"); break; case 5: searcbook(manage); system("pause"); break; case 0: k = 0; break; default: cout<<"选择错误,请重新输入"<<endl; break; } } } void statistics(bookmanage manage) { char n; int k = 1; while (k == 1) { system("cls"); cout << "图书统计" << endl; cout<< "1 根据价格统计" << endl << "2 根据库存统计" << endl << "3 根据作者统计" << endl << "4 根据出版社统计" << endl << "0 返回" << endl << "选择:"; cin >> n; switch (n) { case 1: if(!manage.sortprice()) cout << "未录入图书!"<<endl; system("pause"); break; case 2: if(!manage.sortcount()) cout << "未录入图书!"<<endl; system("pause"); break;; case 3: if(!manage.sortauthor()) cout << "未录入图书!"<<endl; system("pause"); break; case 4: if(!manage.sortpub()) cout << "未录入图书!"<<endl; system("pause"); break; case 0: k = 0; break; default: cout<<"选择错误,请重新输入"<<endl; break; } } } int main() { bookmanage manage; manage.load("book.txt"); string name;//书名 string pub;//出版社 string ISBN; string author;//作者 int count; int n; int index; int k = 1; while (k == 1) { system("cls"); cout << "图书管理系统" << endl; cout<< "1 管理图书" << endl << "2 销售图书" << endl << "3 统计图书" << endl << "0 退出系统" << endl << "选择:"; cin >> n; switch (n) { case 1: bookmemu(manage); system("pause"); break; case 2: cout << "请输入ISBN:"; cin >> ISBN; index = manage.bookexist(ISBN); if (index != -1) { cout << "请输入购买数量:"; cin >> count; if(manage.buybook(index, count)) cout << "购买成功" << endl; else cout << "库存不足" << endl; } else cout << "该编号不存在" << endl; system("pause"); break; case 3: statistics(manage); break; case 0: k = 0; break; default: cout<<"选择错误,请重新输入"<<endl; break; } } manage.save("book.txt"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 4无用