- 问题描述
设计一图书信息管理系统,实现以下功能:系统以菜单方式工作,图书信息录入功能(图书信息用文件保存) ;图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、 价格等;图书信息浏览功能(输出所有图书信息);查询和排序功能:按书名查询(显示所有同名的书),按作者名查询(所有该作者的书); 图书信息的删除与修改。
- 基本要求
(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:图书类(图书信息)、日期类 、管理类(实现对图书信息的管理)。
(2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件);也可以使用标准输入输出进行(提交时需要提交TXT格式输入数据)。应包含 20 条以上记录,且有同姓名不同作者的书和同一作者的多部著作,包含数据信息即图书信息。在运行程序时自动载入,若文件不存则创建一个空文件。
(3)基本功能要求具有增、删、改、查。
三.需求分析
系统目的:本图书信息管理系统菜单方式工作,用户可以通过此管理系统对书籍进行管理,它具有(1)登录号、书名、作者名、分类号、出版单位、出版时间、 价格等图书信息的录入功能。(2)图书信息的浏览功能(3)对书籍的查询和排序功能,按书名查询与按作者名查询(4) 对图书信息的删除与修改。
用户需求:此系统采用文本文件重定向输入已保存数据为磁盘文件,输入值已按登录号整齐排列,用户可以在此基础上进行书籍信息的增删改查,可以按书籍价格增序与降序进行重新排列。可以在退出时保存数据方便下次使用,可通过主菜单方式按书名或作者名进行查询,便于准确找到图书。可通过菜单方式显示书籍信息,一目了然。已实现多条书籍信息对齐排列,使页面更加简洁明了。
功能需求:系统已实现对书籍信息的增删改查。
测试数据:数据已经过测试,测试结果(包括正确的输入及其输出结果和含有错误的输入及其输出结果)将会在下文中展示。
#include"iostream"
#include"windows.h"//与 system("cls");连用实现清屏操作
#include "fstream"//对文件进行操作所包含的头文件
#include"stdio.h"//使用Sleep(3000)需包含的头文件
#include "cstring"
#include"iomanip"
using namespace std;
#define long 11
class book
{public:
book *next;//构建链表
string book_Entry_number;//书籍登录号
string book_name;//书籍名称
string author_name;//作者姓名
string book_number;// 书籍分类号
string publish_address;//书籍出版单位
string publish_time;//书籍出版时间
string book_price;//书籍价格
string getbook_Entry_number()//get函数实现private数据在类外调用
{return book_Entry_number;}
string getbook_name()
{return book_name;}
string getauthor_name()
{return author_name;}
string getbook_number()
{return book_number;}
string getpublish_address()
{return publish_address;}
string getpublish_time()
{return publish_time;}
string getbook_price()
{return book_price;}
friend istream&operator>>(istream& in,book &p);//重载输入
friend ostream&operator<<(ostream& out,book &p);//重载输出
void m_book_Entry_number()//输入图书数据 book_Entry_number
{cin>>book_Entry_number;}
void m_book_name()// 输入图书数据book_name
{cin>>book_name;}
void m_author_name()// 输入图书数据author_name
{cin>>author_name;}
void m_book_number()// 输入图书数据book_number
{cin>>book_number;}
void m_publish_address()// 输入图书数据publish_address
{cin>>publish_address;}
void m_publish_time()// 输入图书数据publish_time
{cin>>publish_time;}
void m_book_price()// 输入图书数据book_price
{cin>>book_price;}
void Exchange_book(book *q);//进行图书信息交换
};
istream&operator>>(istream&in,book &p)//实现重载输入
{in>>p.book_Entry_number>>p.book_name>>p.author_name>>p.book_number>>p.publish_address>>p.publish_time>>p.book_price;
return in;
}
ostream&operator<<(ostream&out,book &p)//实现重载输出 (固定输出数据宽度为Long,左对齐,
{out<<setw(long)<<setiosflags(ios::left)<<p.book_Entry_number<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.book_name<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.author_name<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.book_number<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.publish_address<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.publish_time<<"\t\t";
out<<setw(long)<<setiosflags(ios::left)<<p.book_price<<endl;
return out;
}
class LibraryManager//图书馆管理类
{public:
LibraryManager();//图书管理类的构造函数
void Menu();//