C++实现图书管理系统(文件操作与类)

图书管理系统:

(1)定义图书类;

(2)图书信息包括:书名name,价格price,库存num;

(3)可以查询、增加、删除、修改功能;

(4)使用文件保存及读取图书数据;

#include<iostream>
using namespace std;
#include<fstream>
#define filename "booklist.txt"
#include<list>
#include<cstring>
#include<iomanip>

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<Book>::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<Book>::iterator it = BList.begin(); it != BList.end(); it++)
			{
				fout << (*it).name << ' ' << (*it).price << ' ' << (*it).num << '\n';
			}
		}
		fout.close();
	}
	void Show()
	{
		for (list<Book>::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<Book>::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<Book>::iterator it = BList.begin(); it != BList.end(); it++)
		{
			if ((*it).name == n)
				(*it).Borrownum();
		}
		resave();
	}
	void FindBook()
	{
		string name;
		cin >> name;
		for (list<Book>::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<Book>::iterator it = BList.begin(); it != BList.end();it++)
		{
			if ((*it).name == name)
				break;
			++i;
		}
		list<Book>::iterator it = BList.begin();
		advance(it, i);
		BList.erase(it);
		--num;
		resave();
	}
public:
	list<Book>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;
		}

	}
}

  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
具体功能要求 1、图书维护 (1)设置管理员账号和密码; (2)图书信息录入:图书编号、书名、作者名、分、图书数量; (3)图书信息更改; (4)图书信息删除; (5)图书信息查询:按图书编号查询、按书名查询、按作者名查询; (6)图书信息全部显示; (7)图书信息全部删除; (8)退出图书维护界面。 2、读者维护 (1)设置管理员账号和密码; (2)读者信息录入:读者姓名、学号; (3)读者信息更改; (4)读者信息删除; (5)读者信息查询:按读者编号查询、按读者姓名查询; (6)读者信息全部显示; (7)读者信息全部删除; (8)退出读者维护界面。 3、借书 (1)设置借书的范围(如5本); (2)图书数量随着借书的数量减少; (3)输入读者编号与图书编号后借书成功。 4、还书 (1)图书数量随着还书的数量增加; (2)输入读者编号与图书编号后还书成功。 5、添加功能 (1)添加一本图书的基本信息,包括书名、图书编号、作者名、别、图书数量。 (2)添加读者信息: 添加图书借阅的基本信息,包括书名、学号。 6、更改功能 对图书和读者的信息进行修改。 7、查找功能 (1)图书信息查找; (2)读者信息查找。 8、显示功能 (1)显示所有图书信息; (2)显示所有借阅信息。 9、删除功能 (1)删除图书的基本信息; (2)删除读者的基本信息; (3)删除图书借阅基本信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值