创建一个图书信息管理的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作(c++)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

题目:

创建一个书本信息的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作。

一、创建顺序表

typedef struct
{
	char no[20];
	char name[50];
	float price;
 } book;
typedef struct {
	book *elem; //存储空间的基地址
	int length; //当前长度
} SqList;

二、顺序表的初始化+输入

Status InitList(SqList &L) { //算法2.1 顺序表的初始化
	//构造一个空的顺序表L
	
	L.elem = new book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
	if (!L.elem)
		exit(OVERFLOW); //存储分配失败退出
	L.length = 0; //空表长度为0
//	int i,n;
//	cout<<"请输入n的值:"<<endl;
//	cin>>n;
///	cout<<"请输入他们的值:"<<endl;
//	cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; //也可在开辟空间里创建输入 
///	for(int i;i<n;i++)
//	{
//		cin>>L.elem[i].name>>L.elem[i].no>>L.elem[i].price ;
//		L.length++;
//	}
	return OK;
}
void show(SqList &L)//输入信息 
{
L.length = 0; //空表长度为0
	int i,n;
	cout<<"请输入n的值:"<<endl;
	cin>>n;
	cout<<"请输入他们的值:"<<endl;
	cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; 
	for(int i;i<n;i++)
	{
		cin>>L.elem[i].no>>L.elem[i].name>>L.elem[i].price ;
		L.length++;
	}
}

三、顺序表的取值

Status GetElem(SqList L, int i, book &e) {//算法2.2 顺序表的取值
if(i<1||i>L.length ) return ERROR;
e=L.elem[i-1] ;
cout<<e.no<<"  "<<e.name<<"  "<<e.price<<endl;
return OK;
	//TODO
}

四、顺序表的查找

int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
	//顺序表的查找 
	for(int i=0;i<L.length ;i++)
	if(!strcmp(L.elem[i].no,e.no))//这里按书号cha no[10],来查找; 
	//重点,重点,重点。需要用#include<string.h>,strcmp比较两个字符串是否相等,相等则为0;
	//如果按照float,int  price(非数组)来查找,直接 int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
	//顺序表的查找 
//	for(int i=0;i<L.length ;i++)
	//if(L.elem[i].price==e.price))即可; 
     return i+1;
return 0;
}

五、顺序表的插入

Status ListInsert(SqList &L, int i, book e) { //算法2.4 顺序表的插入
	//在顺序表L中第i个位置之前插入新的元素e
	//i值的合法范围是1<=i<=L.length+1
	if((i<1)||(i>L.length +1)) return ERROR;
	if(L.length ==MAXSIZE)return ERROR;
	for(int j=L.length -1;j>=i-1;j--)
	L.elem[j+1]=L.elem [j];
	L.elem[i-1]=e;
	++L.length ;
	return OK;
}

六、顺序表的删除

Status ListDelete(SqList &L, int i) { //算法2.5 顺序表的删除
	//在顺序表L中删除第i个元素,并用e返回其值
	//i值的合法范围是1<=i<=L.length

	//TODO
	
	if((i<1)||(i>L.length ))return ERROR;
	for(int j=i;j<=L.length -1;j++)
	L.elem[j-1]=L.elem [j];
	--L.length ;
	return OK;
	
}

七、顺序表的输出

void VisitList(SqList L)//输出所有元素 
{ 
	int i;
	for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<"  "<<L.elem[i].name<<"  "<<L.elem[i].price<<endl;
	cout<<endl;
}

全部代码:

#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
#include <string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型

#define MAXSIZE 100			//顺序表可能达到的最大长度
typedef struct
{
	char no[20];
	char name[50];
	float price;
 } book;
typedef struct {
	book *elem; //存储空间的基地址
	int length; //当前长度
} SqList;

Status InitList(SqList &L) { //算法2.1 顺序表的初始化
	//构造一个空的顺序表L
	
	L.elem = new book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
	if (!L.elem)
		exit(OVERFLOW); //存储分配失败退出
	L.length = 0; //空表长度为0
//	int i,n;
//	cout<<"请输入n的值:"<<endl;
//	cin>>n;
///	cout<<"请输入他们的值:"<<endl;
//	cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; //也可在开辟空间里创建输入 
///	for(int i;i<n;i++)
//	{
//		cin>>L.elem[i].name>>L.elem[i].no>>L.elem[i].price ;
//		L.length++;
//	}
	return OK;
}
void show(SqList &L)//输入信息 
{
L.length = 0; //空表长度为0
	int i,n;
	cout<<"请输入n的值(数据的个数):"<<endl;
	cin>>n;
	cout<<"请输入他们的值:"<<endl;
	cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; 
	for(int i;i<n;i++)
	{
		cin>>L.elem[i].no>>L.elem[i].name>>L.elem[i].price ;
		L.length++;
	}
}
Status GetElem(SqList L, int i, book &e) {//算法2.2 顺序表的取值
if(i<1||i>L.length ) return ERROR;
e=L.elem[i-1] ;
cout<<e.no<<"  "<<e.name<<"  "<<e.price<<endl;
return OK;
	//TODO
}
int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
	//顺序表的查找 
	for(int i=0;i<L.length ;i++)
	if(!strcmp(L.elem[i].no,e.no))//这里按书号cha no[10],来查找; 
	//重点,重点,重点。需要用#include<string.h>,strcmp比较两个字符串是否相等,相等则为0;
	//如果按照float,int  price(非数组)来查找,直接 int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
	//顺序表的查找 
//	for(int i=0;i<L.length ;i++)
	//if(L.elem[i].price==e.price))即可; 
     return i+1;
return 0;
}
Status ListInsert(SqList &L, int i, book e) { //算法2.4 顺序表的插入
	//在顺序表L中第i个位置之前插入新的元素e
	//i值的合法范围是1<=i<=L.length+1
	if((i<1)||(i>L.length +1)) return ERROR;
	if(L.length ==MAXSIZE)return ERROR;
	for(int j=L.length -1;j>=i-1;j--)
	L.elem[j+1]=L.elem [j];
	L.elem[i-1]=e;
	++L.length ;
	return OK;
}
Status ListDelete(SqList &L, int i) { //算法2.5 顺序表的删除
	//在顺序表L中删除第i个元素,并用e返回其值
	//i值的合法范围是1<=i<=L.length

	//TODO
	
	if((i<1)||(i>L.length ))return ERROR;
	for(int j=i;j<=L.length -1;j++)
	L.elem[j-1]=L.elem [j];
	--L.length ;
	return OK;
	
}
void VisitList(SqList L)//输出所有元素 
{ 
	int i;
	for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<"  "<<L.elem[i].name<<"  "<<L.elem[i].price<<endl;
	cout<<endl;
}
int main()
{
	SqList S;
	book e;
	InitList(S)	;//建空表 
	show(S);//输入 
cout<<"输出Book的全部数据:"<<endl;
VisitList(S);//输出 
cout<<"取值,取值第一个数据的值"<<endl; 
GetElem(S,1,e);
cout<<"查找,这里按照书号char no[]来查找:"<<endl;
cin>>e.no;//关键需要给 LocateElem(S,e)中给; 
if(LocateElem(S,e)==0)
cout<<"没有找到e.no的数据"<<endl;
else
cout<<"找到e.no了,位置在"<<LocateElem(S,e)<<endl;
cout<<"在第二个位置中插入书号,书名,价格" <<endl;
cin>>e.no>>e.name>>e.price;
ListInsert(S,2,e);
cout<<"插入后的结果为"<<endl;
VisitList(S);//输出
cout<<"删除第二个数据后,结果为"<<endl;
ListDelete(S,2);
VisitList(S);//输出 
cout<<"输出数据长度为:";
cout<<S.length;
}


结果:


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了创建一个书本信息的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酷酷滴Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值