#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#define MAXSIZE 100
using namespace std;
char s0[20],s1[20],s2[20],s3[20],s4[30];
int num;
typedef struct //图书类型Book定义
{
char no[20]; //书号
char name[50]; //书名
char ban[50]; //出版社
float price; //价格
char zuo[30]; //作者
}Book;
typedef struct //顺序表结构定义
{
Book *elem;
int num;
}Sqlist;
Sqlist book;
struct AA //定义一个新的结构体AA
{
string ban;
int num ;
}A[100];
int Num = 0;
void CreatSqlist(Sqlist &book) //初始化顺序表
{
book.elem=new Book[MAXSIZE];
book.num=0;
}
void read() //将文件e:\\book.txt中的数据逐条读入顺序表book中
{
int i = 0;
ifstream inFile("e:\\book.txt");
inFile >> s0 >> s1 >> s2>>s3>>s4; //书号 书名 出版社 定价 作者
while(!inFile.eof()) {
inFile>>book.elem[i].no>>book.elem[i].name>>book.elem[i].ban>>book.elem[i].price>>book.elem[i].zuo;
i++;
}
num=i;
inFile.close(); //关闭文件
cout << "读取完毕!" << endl;
}
void write() //将文件e:\\book.txt中的数据逐条写入顺序表book中
{
int i;
ofstream outFile("e:\\book.txt");
outFile << s0 << "\t" << s1 << "\t" <<s2<<"\t"<< s3 <<"\t" <<s4<<endl; //书号 书名 出版社 定价 作者
for( i=0;i<num;i++)
{
outFile <<book.elem[i].no << "\t" << book.elem[i].name << "\t"<<book.elem[i].ban <<"\t"<< book.elem[i].price<<"\t"<<book.elem[i].zuo;
if(i!=num-1) outFile<<endl;
}
outFile.close(); //关闭文件
}
void Output() //输出图书信息
{
int i = 0;
read();
cout << "书号"<<setw(10)<<"书名"<<setw(10)<<"出版社"<<setw(10)<<"价格" << setw(10)<<"作者"<<'\n';
while(i<num)
{
cout<<book.elem[i].no<<setw(10)<<book.elem[i].name<<setw(10)<<book.elem[i].ban<<setw(10) << book.elem[i].price<<setw(10)<<book.elem[i].zuo<< endl;//
i++;
}
cout << endl << "信息显示完毕!" << endl;
}
void OutputN() //输出图书个数
{
read();
cout << "图书个数为:" << num << endl;
write();
}
void Add() //添加图书信息
{
int i;
read();
cout << "请输入书号:";
cin >> book.elem[num].no ;
cout<< "请输入书名:";
cin>> book.elem[num].name ;
cout<<"请输入出版社:";
cin>> book.elem[num].ban ;
cout << "请输入价格:";
cin >> book.elem[num].price ;
cout<<"请输入作者:";
cin>>book.elem[num].zuo;
++num;
write();
}
void xiugai() //修改图书信息
{
int i;
char bookno[20];
read();
cout<<"请输入要修改的图书信息的书号:";
cin>>bookno;
for(i=0;i<num;i++)
{
if(strcmp(book.elem[i].no,bookno)==0)
{
cout<<"请输入要修改的书名,出版社与价格,中间用空格分隔"<<endl;
cin>>book.elem [i].name >>book.elem[i].ban>>book.elem [i].price>>book.elem[i].zuo ; //输入修改后的书名,书号不修改
break; //修改结束,退出循环
}
}
if(i==num)
{
cout<<"不存在此书"<<endl;
}
write();
}
void shanno() //根据书号删除该图书信息
{
int i;
int j;
char bookno[20];
read();
cout<<"请输入需要删除的书号:";
cin>>bookno;
for(i=0;i<num;i++)
{
if(strcmp(book.elem[i].no,bookno)==0)
{
for(j=i+1;j<num;j++)
{
book.elem[j-1]=book.elem[j];
}
num--;
break;
}
}
write();
}
void shanname() //根据书名删除图书信息
{
int i,j;
char bookname[20];
read();
cout<<"请输入需要删除的书名:";
cin>>bookname;
for(i=0;i<num;i++)
{
if(strcmp(book.elem[i].name,bookname)==0)
{
for(j=i+1;j<num;j++)
{
book.elem[j-1]=book.elem[j];
}
num--;
break;
}
}
write();
}
void chano() //根据书号查找图书信息
{
int i;
char bookno[20];
read();
cout<<"请输入需要查找图书的书号:";
cin>>bookno;
for(i=0;i<num;i++)
{
if(strcmp(book.elem[i].no,bookno)==0)
{
cout<<"查找成功! 该图书的信息为:"<<endl;
cout<<book.elem[i].no<<" "<<book.elem[i].name<<" "<<book.elem[i].ban<<" "<<book.elem[i].price<<" "<<book.elem[i].zuo<<endl;
break;
}
}
if(i==num)
cout<<"查找失败!"<<endl;
}
void chaname() //根据书名查找信息
{
int i,n=0;
char bookname[20];
read();
cout<<"请输入需要查找图书的书名:";
cin>>bookname;
for(i=0;i<num;i++)
{
if(strcmp(book.elem[i].name,bookname)==0)
{
n++;
cout<<"查找成功! 该图书的信息为:"<<endl;
cout<<book.elem[i].no<<" "<<book.elem[i].name<<" "<<book.elem[i].ban<<" "<<book.elem[i].price<<" "<<book.elem[i].zuo<<endl;
}
}
if(n==0)
cout<<"查找失败!"<<endl;
}
void chanoer()
{
int i,j,k;
Book t;
read();
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
if(book.elem[i].no>book.elem[j].no)
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
}
write();
read();
cout<<"请输入你要查找的书号:";
cin>>k;
int left=0,right=num-1,m=0,n;
while(left<=right)
{
int mid=(left+right)/2;
string a=book.elem[mid].no;
int b=stoi(a);
if(b<k)
left=mid+1;
else if(b>k)
right=mid-1;
else
{
m=1;
n=mid;
break;
}
}
if(m==0)
cout<<"未查到该书的信息!"<<endl;
if(m==1)
{
cout<<"已查到该书,该图书图书信息为:"<<endl;
cout<<"书号 "<<book.elem[n].no<<endl;
cout<<"书名 "<<book.elem[n].name<<endl;
cout<<"出版社 "<<book.elem[n].ban<<endl;
cout<<"价格 "<<book.elem[n].price<<endl;
cout<<"作者 "<<book.elem[n].zuo<<endl;
}
}
void pricejiang() //根据价格降序排列
{
int i,j;
Book t;
read();
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
if(book.elem[i].price<book.elem[j].price)
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
}
write();
}
void pricesheng() //根据价格升序排列
{
int i,j;
Book t;
read();
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
if(book.elem[i].price>book.elem[j].price)
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
}
write();
}
void bpricejiang() //根据出版社依据价格降序排列
{
int i,n=0;
char bookban[20];
pricejiang();
cout<<"请输入需要查找图书的出版社:";
cin>>bookban;
for( i=0;i<num;i++)
{
if(strcmp(book.elem[i].ban,bookban)==0)
{
n++;
cout<<"该出版社第"<<n<<"本图书的信息:"<<endl;
cout<<book.elem[i].no<<" "<<book.elem[i].name<<" "<<book.elem[i].ban<<" "<<book.elem[i].price<<" "<<book.elem[i].zuo<<endl;
}
}
if(n==0)
{
cout<<"查找失败!"<<endl;
}
}
void chanamemo() //根据书名进行模糊查找
{
int i,j,n=0,m=0;
char name[20];
read();
cout<<"输入你想要查找的图书的名字的某些部分:";
cin>>name;
for(i=0;i<num;i++)
{
for(j=0;j<strlen(book.elem[i].name);j++)
if(name[0]==book.elem[i].name[j]&&name[1]==book.elem[i].name[j+1])
{
n++;
cout<<"第"<<n<<"个数据查找成功!该图书信息为:"<<endl; cout<<book.elem[i].no<<"\t"<<book.elem[i].name<<"\t"<<book.elem[i].ban<<"\t"<<book.elem[i].price<<"\t"<<book.elem[i].zuo<<endl<<endl;
break;
}
else if(name[0]==book.elem[i].name[j])
{
m++;
cout<<"第"<<m<<"个数据查找成功!该图书信息为:"<<endl; cout<<book.elem[i].no<<"\t"<<book.elem[i].name<<"\t"<<book.elem[i].ban<<"\t"<<book.elem[i].price<<"\t"<<book.elem[i].zuo<<endl<<endl;
break;
}
}
if(n==0&&m==0)
cout<<"查找失败!"<<endl;
}
void outban() //按照出版社、作者、价格进行降序排列
{
int i,j,n=0;
Book t;
read();
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
string a = book.elem[i].ban;
string b = book.elem[j].ban;
if(a!=b) //如果出版社不相同,执行以下操作
{
if(a<b)
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
else
{
string a = book.elem[i].zuo;
string b = book.elem[j].zuo;
if(a!=b) //如果出版社相同,作者不相同,执行以下操作
{
if(a<b)
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
else
{
float a = book.elem[i].price;
float b = book.elem[j].price;
if(a<b) //如果出版社相同,作者也相同,价格不同,执行以下操作
{
t=book.elem[i];
book.elem[i]=book.elem[j];
book.elem[j]=t;
}
}
}
}
}
write();
}
void tongji_ban() //根据出版社统计信息
{
int i,j,n=0,k=1;
read();
Num = 0;
for(int i=0;i<=99;i++)
A[i].num = 0;
for(int i=0;i<num;i++)
{
int biao = 0;
string ban = book.elem[i].ban;
for(int j=1;j<=Num;j++)
{
if(A[j].ban==ban)
{
biao = 1;
A[j].num++;
break;
}
}
if(biao==0)
{
Num++;
A[Num].num=1;
A[Num].ban = ban;
}
}
for(int i=1;i<=Num-1;i++)
for(int j=i+1;j<=Num;j++)
if(A[i].num<A[j].num)
{
AA t = A[i];
A[i] = A[j];
A[j] = t;
}
for(int i=1;i<=Num;i++)
{
cout<<"出版社: "<<A[i].ban<<"\t数目: "<<A[i].num<<endl<<endl;
}
}
void tongji_zuo() //根据作者统计信息
{
int i,j,n=0,k=1;
outban();
read();
Num = 0;
for(int i=0;i<=99;i++)
A[i].num = 0;
for(int i=0;i<num;i++)
{
int biao = 0;
string zuo = book.elem[i].zuo;
for(int j=1;j<=Num;j++)
{
if(A[j].ban==zuo)
{
biao = 1;
A[j].num++;
break;
}
}
if(biao==0)
{
Num++;
A[Num].num=1;
A[Num].ban = zuo;
}
}
for(int i=1;i<=Num-1;i++)
for(int j=i+1;j<=Num;j++)
if(A[i].num>A[j].num)
{
AA t = A[i];
A[i] = A[j];
A[j] = t;
}
for(int i=1;i<=Num;i++)
{
cout<<"作者: "<<A[i].ban<<"\t数目: "<<A[i].num<<endl<<endl;
}
}
int main()
{
int n,i;
CreatSqlist(book);
while(1) {
cout<< "************************************************************************" << endl;
cout << " | 欢迎进入图书管理系统~! |" << endl;
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.插入图书 |" << endl;
cout << " | 9.修改指定图书 |" << endl;
cout << " | 10.根据出版社按价格降序排列 |" << endl;
cout << " | 11.根据书名模糊查找 |" << endl;
cout << " | 12.根据出版社输出 |" << endl;
cout << " | 13.按出版社统计信息 |" << endl;
cout << " | 14.按作者统计信息 |" << endl;
cout << " | 15.根据书号进行二分查找 |" << endl;
cout << " | 0.退出系统 |" << endl;
cout << "***********************************************************************" << endl << endl;
cout<<"请输入执行的操作:";
cin >> n;
switch(n) {
case 1:chaname();break;
case 2:chano();break;
case 3:OutputN();break;
case 4:pricejiang();break;
case 5:shanname();break;
case 6:shanno();break;
case 7:Output();break;
case 8:Add();break;
case 9:xiugai();break;
case 10:bpricejiang();break;
case 11:chanamemo();break;
case 12:outban();break;
case 13:tongji_ban();break;
case 14:tongji_zuo();break;
case 15:chanoer();break;
case 0:cout << "欢迎再次使用~" << endl;
exit(0);
default:
cout << "请选择正确的操作!!!" << endl;
break;
}
}
return 0;
}
基于顺序表的图书管理系统
最新推荐文章于 2024-06-01 13:53:57 发布