//图书信息管理系统
//系统需求:用C++来实现一个图书信息管理系统,包括以下6个具体功能:
//1.查找:根据指定的ISBN或书名查找相应图书的有关信息,并返回该图书在表中的位置序号。
//2.插入:插入一种新的图书信息。
//3.删除:删除一种图书信息。
//4.修改:根据指定的ISBN,修改该图书的价格。
//5.排序:将图书按照价格由底到高进行排序。
//6.计数:统计图书表中的图书数量。
//7.显示所有图书的信息。
#include <iostream>
#include <fstream>//文件输入/输出头函数
#include <unistd.h>
#include<string>
#define MAX 10000 //限制图书表最大长度
using namespace std;
//设计图书信息管理系统菜单界面
void MeunInterface()
{
cout<<"********************************************"<<endl;
cout<<"***** 1、查找图书的信息 *****"<<endl;
cout<<"***** 2、插入新图书信息 *****"<<endl;
cout<<"***** 3、删除图书的信息 *****"<<endl;
cout<<"***** 4、修改图书的价格 *****"<<endl;
cout<<"***** 5、对图书进行排序 *****"<<endl;
cout<<"***** 6、统计图书的总量 *****"<<endl;
cout<<"***** 7、显示所有图书信息 *****"<<endl;
cout<<"***** 8、插入book.txt文件中的图书信息 *****"<<endl;
cout<<"***** 0、退出图书信息管理系统 *****"<<endl;
cout<<"********************************************"<<endl;
}
//图书信息定义
struct Book
{
string ISBN;//图书编号ISBN
string name;//图书名字
float price;//图书价格
};
//图书管理系统结构体
struct AddressBooks
{
struct Book BookArray[MAX];//图书管理系统中保存的图书数组
int Size;//图书管理系统中图书数量
Book *elem;//存储空间基地址
};
//判断是否存在查询的书名,存在返回在数组中的索引位置,不存在返回-1
int isExist1(AddressBooks * abs,string name)
{
for (int i = 0; i < abs->Size; i++) {
if (abs->BookArray[i].name == name)
{
return i;//找到返回图书在数组中的下标编号
}
}
return -1;//未找到返回-1
}
//判断是否存在查询的ISBN,存在返回在数组中的索引位置,不存在返回-1
int isExist2(AddressBooks * abs,string ISBN)
{
for(int i=0;i<abs->Size;i++)
{
if(abs->BookArray[i].ISBN==ISBN)
{
return i;//找到返回图书在数组中的下标编号
}
}
return -1;//未找到返回-1
}
//1.查找图书信息
void findBook(AddressBooks * abs) {
cout << "请输入您要查找的图书信息" << endl;
cout << "1---通过书名查找" << endl;
cout << "2---通过ISBN查找" << endl;
int i = 0;
cin>>i;
if (i == 1)
{
cout<<"请输入书名:"<<endl;
string name;
cin>>name;
int a = isExist1(abs, name); //定义一个常量a来判断图书是否存在
//判断指定的书名是否存在图书表中
if (a != -1)//找到图书,输出图书内容
{
cout << "ISBN:" << abs->BookArray[a].ISBN << "\t";
cout << "书名:" << abs->BookArray[a].name << "\t";
cout << "定价:" << abs->BookArray[a].price << endl;
} else//未找到图书
{
cout << "未找到图书信息" << endl;
}
}
else if(i==2)
{
cout<<"请输入ISBN:"<<endl;
string ISBN;
cin >> ISBN;
int b = isExist2(abs, ISBN); //定义一个常量b来判断图书ISBN是否存在
//判断指定的书名是否存在图书表中
if (b != -1)//找到图书,输出图书内容
{
cout << "ISBN:" << abs->BookArray[b].ISBN << "\t";
cout << "书名:" << abs->BookArray[b].name << "\t";
cout << "定价:" << abs->BookArray[b].price << endl;
}
else//未找到图书
{
cout << "未找到图书信息" << endl;
}
}
else
{
cout<<"输入有误,请重新输入"<<endl;
}
}
//2.插入新图书信息
void addBook(AddressBooks * abs)
{
//判断图书表是否满了
if(abs->Size == MAX)
{
cout<<"图书表已满,无法添加"<<endl;
return;
}
else
{
//输入添加的图书编号ISBN
string ISBN;
cout<<"请输入图书编号:"<<endl;
cin>>ISBN;
abs->BookArray[abs->Size].ISBN = ISBN;//从图书管理系统中保存图书的数组中添加图书编号
//输入添加的图书名字
string name;
cout<<"请输入图书名字:"<<endl;
cin>>name;
abs->BookArray[abs->Size].name = name;//从图书管理系统中保存图书的数组中添加图书名字
//输入图书价格
float price;
cout<<"请输入图书价格:"<<endl;
cin>>price;
abs->BookArray[abs->Size].price = price;//从图书管理系统中保存图书的数组中添加图书价格
//更新图书表中的图书数量
abs->Size++;
system("clear");//清屏操作
cout<<"添加成功"<<endl;
}
}
//3.删除图书的信息
void deleteBook(AddressBooks * abs)
{
cout<<"请输入您要删除的书名"<<endl;
string name;
cin>>name;
int a= isExist1(abs,name);//定义一个常量a来判断图书是否存在
if(a!=-1)//找到图书
{
for(int i=a;i<abs->Size;i++) //把图书所在的数组位置赋给i,i小于图书表的长度
{
abs->BookArray[i]=abs->BookArray[i+1];//被删除元素之后的元素前移(数据前移)
}
abs->Size--; //删除后表长-1
cout<<"删除成功"<<endl;
}
else
{
cout<<"未找到图书信息"<<endl;
}
}
//4.修改图书的价格:根据指定的ISBN,修改该图书的价格。
void modifyBook(AddressBooks * abs)
{
cout << "请输入您要修改的图书的ISBN" << endl;
string ISBN;
cin >> ISBN;
int a = isExist2(abs, ISBN); //定义一个常量a来判断图书ISBN是否存在
if(a!=-1)
{
//输入修改的图书价格
float price;
cout<<"请输入图书价格:"<<endl;
cin>>price;
abs->BookArray[a].price = price;//从图书管理系统中保存图书的数组中添加图书价格
cout<<"修改成功"<<endl;
}
else
{
cout<<"未找到图书信息"<<endl;
}
}
//5.对图书进行排序:将图书按照价格由底到高进行排序。
void orderBook(AddressBooks * abs)
{
for(int i=0;i<abs->Size;i++)
{
for (int j =i+1; j < abs->Size; ++j)
{
if (abs->BookArray[i].price > abs->BookArray[j].price)
{
Book temp;//定义一个空的图书结构体
temp = abs->BookArray[i];
abs->BookArray[i] = abs->BookArray[j];
abs->BookArray[j] = temp;
}
}
}
cout<<"排序成功"<<endl;
}
//6.统计图书的数量
int statBook(AddressBooks * abs)
{
cout<<"图书表中当前图书数量为:"<<abs->Size<<endl;
}
//7.显示所有图书信息
void showBook(AddressBooks *abs)
{
//判断图书表是否为空
if (abs->Size==0) //图书表为空
{
cout<<"当前图书表为空"<<endl;
}
else
{
for(int i=0;i<abs->Size;i++) //若图书表不为空就遍历图书管理系统中保存图书的数组
{
cout<<"ISBN:"<<abs->BookArray[i].ISBN<<"\t";
cout<<"书名:"<<abs->BookArray[i].name<<"\t";
cout<<"定价:"<<abs->BookArray[i].price<<endl;
}
}
}
int main()
{
AddressBooks abs;//创建图书信息结构体变量
abs.Size=0;//初始化图书表中的图书数量
int select=0;//创建一个用户选择输入的变量
while(true)
{
MeunInterface();//调用图书信息管理系统菜单界面函数
cin>>select;//用户输入要选择的菜单选项
switch(select)
{
case 1:// 1、查找图书的信息
findBook(&abs);
break;
case 2://2、插入新图书信息
addBook(&abs);
break;
case 3:// 3、删除图书的信息
deleteBook(&abs);
break;
case 4://4、修改图书的信息
modifyBook(&abs);
break;
case 5://5、对图书进行排序
orderBook(&abs);
break;
case 6:// 6、统计图书的总量
statBook(&abs);
break;
case 7://7.显示图书的信息
showBook(&abs);
break;
case 8://8.插入book.txt文件中的图书信息
{//图书表信息输入
int i = 0;
string head_1, head_2, head_3;
abs.elem = new Book[MAX];
if (!abs.elem)
{
cout<<"图书表容量已满,不能再添加新图书了"<<endl;
}
abs.Size = 0;
fstream file;//
file.open("/Users/liwanyu/Desktop/book/book.txt",ios::in);//ios::in文件以输出方式打开(文件数据输出到内存)
if (!file)
{
cout << "错误!未找到文件!" << endl;
}
file >> head_1 >> head_2 >> head_3;
while (!file.eof())//判断是否读到文件结尾
{
file >> abs.BookArray[i].ISBN >> abs.BookArray[i].name >> abs.BookArray[i].price;
i++;
}
cout << "输入 book.txt 信息完毕"<<endl;
abs.Size = i;
file.close();
}
break;
case 0://0.退出图书信息管理系统
system("clear");//清空菜单栏
//system("pause");//语句执行系统环境中的pause命令,冻结屏幕,用户按任意键结束
//mac系统没有system("pause");需要加头文件include<unistd.h>将system("pause")改成system("clear")
cout<<"欢迎下次使用"<<endl;
return 0;
break;
}
}
return 0;
}
MAC编程的C++图书管理系统----数据结构作业
于 2022-03-20 11:26:47 首次发布