#include<iostream>
#include<string>
using namespace std;
typedef struct book
{
int ISBN;
string name;
float price;
}Book;
typedef struct Node
{
Book data;
struct Node *next;
}LNode;
void creatList(LNode *&L)
{
L=new LNode;
L->next=NULL;
return;
}
void inputList(LNode *&L,int n)
{
int i=0;
LNode *cp;
cp=L;
for(i;i<n;i++)
{
LNode *p;
p=new LNode;
cout<<"请输入第"<<i+1<<"本图书的编号:";
cin>>p->data.ISBN;
cout<<"请输入第"<<i+1<<"本图书的名称:";
cin>>p->data.name;
cout<<"请输入第"<<i+1<<"本图书的定价:";
cin>>p->data.price;
cout<<endl;
p->next=NULL;
cp->next=p;
cp=p;
}
cout<<"输入成功!"<<endl;
return;
}
void outputList(LNode *&L)
{
LNode *cp;
int i=1;
cp=L->next;
for(cp;cp!=NULL;cp=cp->next)
{
cout<<"第"<<i<<"本图书的编号为:"<<cp->data.ISBN<<endl;
cout<<"第"<<i<<"本图书的名称为:"<<cp->data.name<<endl;
cout<<"第"<<i<<"本图书的定价为:"<<cp->data.price<<endl;
cout<<endl;
i++;
}
cout<<endl;
return;
}
void findISBN(LNode *L,int ISBN)
{
LNode *cp;
cp=L->next;
for(cp;cp!=NULL;cp=cp->next)
{
if(cp->data.ISBN==ISBN)
{
cout<<"该图书的名称为:"<<cp->data.name<<endl;
cout<<"该图书的定价为:"<<cp->data.price<<endl;
break;
}
}
if(cp->data.ISBN!=ISBN)
cout<<"该编号的图书不存在."<<endl;
return;
}
void findName(LNode *L,string name)
{
LNode *cp;
cp=L->next;
for(cp;cp!=NULL;cp=cp->next)
{
if(cp->data.name==name)
{
cout<<"该图书的编号为:"<<cp->data.ISBN<<endl;
cout<<"该图书的定价为:"<<cp->data.price<<endl;
break;
}
}
if(cp->data.name!=name)
cout<<"该名称的图书不存在."<<endl;
return;
}
void findPrice(LNode *L,float price)
{
LNode *cp;
cp=L->next;
for(cp;cp!=NULL;cp=cp->next)
{
if(cp->data.price==price)
{
cout<<"该图书的编号为:"<<cp->data.ISBN<<endl;
cout<<"该图书的名称为:"<<cp->data.name<<endl;
break;
}
}
if(cp->data.price!=price)
cout<<"该定价的图书不存在."<<endl;
return;
}
bool insertList(LNode *&L,int ISBN,string name,float price,int i)
{
LNode *cp;
cp=L;
int j=0;
while(cp && (j<i-1))
{
cp=cp->next;
j++;
}
if(!cp || j>i-1)
return false;
LNode *s;
s=new LNode;
s->data.ISBN=ISBN;
s->data.name=name;
s->data.price=price;
s->next=cp->next;
cp->next=s;
return true;
}
bool cancelList(LNode *&L,int i)
{
LNode *cp;
int j=0;
cp=L;
while((cp->next)&&(j<i-1))
{
cp=cp->next;
++j;
}
if(!(cp->next)||j>i-1)
return false;
LNode *q;
q=cp->next;
cp->next=q->next;
delete q;
return true;
}
void modifyList(LNode *&L,int i)
{
LNode *cp;
cp=L->next;
int ISBN;
string name;
float price;
int j=1;
for(j;j<i;j++)
{
cp=cp->next;
}
int k;
cout<<"操作:1.修改图书编号 2.修改图书名称 3.修改图书定价"<<endl;
cout<<"输入你要进行的操作:";
cin>>k;
switch(k)
{
case 1:
cout<<"输入你要修改的编号:";
cin>>ISBN;
cp->data.ISBN=ISBN;
cout<<endl;
break;
case 2:
cout<<"输入你要修改的名称:";
cin>>name;
cp->data.name=name;
cout<<endl;
break;
case 3:
cout<<"输入你要修改的定价:";
cin>>price;
cp->data.price=price;
cout<<endl;
break;
}
return;
}
int lengthList(LNode *L)
{
int i=0;
while(L!=NULL)
{
i++;
L=L->next;
}
return i-1;
}
//void sortISBN(LNode *&L) 根据图书的编号对图书进行排序
//{
// LNode *cp;
// LNode *pre;
// LNode *pr;
// cp=L->next;
// cp->next=NULL;
// cp=pr;
// while(cp!=NULL)
// {
// pr=cp->next;
// pre=L;
// while(pre->next!=NULL && pre->next->data.ISBN > cp->data.ISBN)
// {
// pre=pre->next;
// }
// cp->next=pre->next;
// pre->next=cp;
// cp=pr;
// }
// return;
//}
//void sortPrice(LNode *&L) 根据图书的定价对图书进行排序
//{
// LNode *cp;
// LNode *pre;
// LNode *pr;
// cp=L->next;
// cp->next=NULL;
// cp=pr;
// while(cp!=NULL)
// {
// pr=cp->next;
// pre=L;
// while(pre->next!=NULL && pre->next->data.price > cp->data.price)
// {
// pre=pre->next;
// }
// cp->next=pre->next;
// pre->next=cp;
// cp=pr;
// }
// return;
//}
int main()
{
LNode *L;
while(1)
{
cout<<"可执行的操作:"<<endl;
cout<<"**************************************************"<<endl;
cout<<"***1.创建图书存储空间 2.图书信息进行输入***"<<endl;
cout<<"***3.图书信息进行展示 4.根据编号查找图书***"<<endl;
cout<<"***5.根据名称查找图书 6.根据定价查找图书***"<<endl;
cout<<"***7.插入图书信息于空间 8.删除相关图书信息***"<<endl;
cout<<"***9.修改相关图书的信息 10.求空间在图书数量**"<<endl;
cout<<"***11.根据编号来排列图书 12.根据定价来排列图书"<<endl;
cout<<"***13.停止操作 ***"<<endl;
int ch;
cout<<"输入你的选择:";
cin>>ch;
int ISBN;
string name;
float price;
int i;
int k;
int n;
switch(ch)
{
case 1:
creatList(L);
cout<<"图书存储空间创建成功!"<<endl;
continue;
case 2:
cout<<"添加到空间中图书的个数为:";
cin>>n;
cout<<"开始添加:"<<endl;
inputList(L,n);
cout<<"添加成功!"<<endl;
continue;
case 3:
cout<<"各个图书的信息如下:"<<endl;
outputList(L);
continue;
case 4:
cout<<"输入你需要查找图书的编号:";
cin>>ISBN;
findISBN(L,ISBN);
continue;
case 5:
cout<<"输入你需要查找图书的名称:";
cin>>name;
findName(L,name);
continue;
case 6:
cout<<"输入你需要查找图书的定价:";
cin>>price;
findPrice(L,price);
continue;
case 7:
cout<<"输入你要添加图书的位置:";
cin>>i;
cout<<"输入你要添加图书的编码:";
cin>>ISBN;
cout<<"输入你要添加图书的名称:";
cin>>name;
cout<<"输入你要添加图书的定价:";
cin>>price;
insertList(L,ISBN,name,price,i);
cout<<"添加成功!"<<endl;
continue;
case 8:
cout<<"输入你要删除图书的位置:";
cin>>i;
cancelList(L,i);
cout<<"删除成功!"<<endl;
continue;
case 9:
cout<<"输入你要修改图书信息的位置:";
cin>>i;
modifyList(L,i);
cout<<"修改成功!"<<endl;
continue;
case 10:
k=lengthList(L);
cout<<"存储空间中图书的数量为:"<<k<<"本!"<<endl;
continue;
case 11:
cout<<"根据编号来对图书进行排列整理."<<endl;
sortISBN(L);
cout<<"根据编号重新排列整理完成!"<<endl;
continue;
case 12:
cout<<"根据定价来对图书进行排列整理."<<endl;
sortPrice(L);
cout<<"根据定价重新排列整理完成!"<<endl;
continue;
case 13:
cout<<"操作停止!"<<endl;
break;
}
}
return 0;
}
该代码采用的是C++进行编译。首先吧图书想象成一个线性表,每本图书(包括ISBN,书名,定价)作为线性表中的一个元素。定义不同的函数对图书信息管理系统实现查找,删除,修改,排序和计数等功能。本代码建立的线性表是单链表,用单链表来进行相关的操作。