数据结构线性表实例-----------图书信息管理系统

#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,书名,定价)作为线性表中的一个元素。定义不同的函数对图书信息管理系统实现查找,删除,修改,排序和计数等功能。本代码建立的线性表是单链表,用单链表来进行相关的操作。

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜雨时’

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值