C++实现图书管理系统(文件操作与类)
本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下
(1)定义图书类;
(2)图书信息包括:书名name,价格price,库存num;
(3)可以查询、增加、删除、修改功能;
(4)使用文件保存及读取图书数据;
#includeusing namespace std; #include #define filename "booklist.txt" #include #include
#include class Book //创建Book类,存放图书信息 { public: Book(string na=" ", int p=0, int n=0) { name = na; num = n; price = p; } void Show() { cout << "书名:" << std::left << setw(20) << name << std::right << setw(6) << "\t价格:" << price << "\t数量:" << num << endl; } void Set() { cout << "请输入书名:"; cin >> name; cout << "请输入价格:"; cin >> price; cout << "请输入数量:"; cin >> num; } void Addnum() { int n; cout << "请输入归还的数量:"; cin >> n; num += n; } void Borrownum() { int n; cout << "请输入借出的数量:"; cin >> n; num -= n; } public: string name; int price; int num; }; void menu() { cout << "--------------------------------------欢迎进入图书管理系统--------------------------------------" << endl; cout << endl << "0 - 退出系统;" << "1 - 显示库存;" << "2 - 查询图书;" << "3 - 借阅图书;" << "4 - 归还图书;" << "5 - 增加图书;" << "6 - 删除图书;" << endl; } class Booklist //创建BookList类,数据成员有Book还有图书数量 { public: void save() //新建图书的话保存数据,用app方式打开文件 { ofstream fout(filename, ios::app); list ::iterator it = BList.begin(); for (int i = 0; i < num-1; i++) //偏移迭代器,指向新加入的Book并写入文件 { it++; } for (; it != BList.end(); it++) { fout << (*it).name << " " << (*it).price << " " << (*it).num << "\n"; } fout.close(); } void resave() { ofstream fout(filename, ios::out); //重新写入数据,因为删除了某个元素 if (fout.is_open()) { for (list ::iterator it = BList.begin(); it != BList.end(); it++) { fout << (*it).name << " " << (*it).price << " " << (*it).num << "\n"; } } fout.close(); } void Show() { for (list ::iterator it = BList.begin(); it != BList.end(); it++) { (*it).Show(); } } void adddata() //添加数据 { Book B; B.Set(); BList.push_back(B); num++; } void start() //程序一开始读取文件里的数据 { string na; int n; int p; ifstream fin(filename, ios::in); if (fin.is_open()) { while (fin >> na >> p >> n) { Book B(na, p, n); BList.push_back(B); num++; } } fin.close(); } void increase() { cout << "请输入书名:" << endl; string n; cin >> n; for (list ::iterator it = BList.begin(); it != BList.end(); it++) { if ((*it).name == n) (*it).Addnum(); } resave(); } void decrease() { cout << "请输入书名:" << endl; string n; cin >> n; for (list ::iterator it = BList.begin(); it != BList.end(); it++) { if ((*it).name == n) (*it).Borrownum(); } resave(); } void FindBook() { string name; cin >> name; for (list ::iterator it = BList.begin(); it != BList.end(); it++) //遍历整个list,所以符合关键字的都会被找到 { int index = (*it).name.find(name); //如果没找到返回值是一个很大的数 if (index < (*it).name.length()) (*it).Show(); } } void DeleteBook() { string name; cout << "请输入书名:"; cin >> name; int i = 0; for (list ::iterator it = BList.begin(); it != BList.end();it++) { if ((*it).name == name) break; ++i; } list ::iterator it = BList.begin(); advance(it, i); BList.erase(it); --num; resave(); } public: list BList; int num = 0; }; int main() { Booklist B1; B1.start(); while (1) { menu(); int key; cout << "请输入要进行的操作:"; cin >> key; switch (key) { case 0: return 0; break; case 1: B1.Show(); break; case 2: B1.FindBook(); break; case 3: B1.decrease(); break; case 4: B1.increase(); break; case 5: { B1.adddata(); B1.save(); break; } case 6: B1.DeleteBook(); break; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?