采用线性表中的顺序储存方式,实现对书籍的增加,删除,查找,展示等基础功能。
基本知识点:顺序表的初始化,顺序表的查找,顺序表的插入以及顺序表的删除。
#include <iostream>
#define MAXSIZE 1000//顺序表的最大空间
#define OK 1
#define ERROR 0
#define OVERFLOW -2//返回值的状态
using namespace std;
typedef struct//这里定义了书籍的属性:编号,书名,价格
{
int num;
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
void Initlist(SqList &L)//顺序表的初始化
{
int n;
cout<<"需要创建几本书籍"<<endl;
cin>>n;
L.elem=new Book[MAXSIZE];
L.length=n;
}
void Getbook(SqList &L)//对书籍的输入函数
{
int i;
for(i=1;i<=L.length;i++)
{
cout<<"请输入第"<<i<<"本书编号"<<endl;
cin>>L.elem[i-1].num;
cout<<"请输入第"<<i<<"本书名称"<<endl;
cin>>L.elem[i-1].name;
cout<<"请输入第"<<i<<"本书价格"<<endl;
cin>>L.elem[i-1].price;
}
cout<<"创建成功"<<endl;
}
void display(SqList &L)//打印书籍信息函数
{
int i;
for(i=0;i<L.length;i++)
cout<<"编号:"<<L.elem[i].num<<" 书名:"<<L.elem[i].name<<" 单价:"<<L.elem[i].price<<endl;
}
void LocateElem(SqList L)//查找函数
{
int i,e;
cout<<"请输入你所要查找书的编号"<<endl;
cin>>e;
for(i=0;i<=L.length-1;i++)
{
if(L.elem[i].num==e)
{
cout<<"查找成功"<<endl;break;
}
else
continue;
}
}
int InsertList(SqList &L)//插入函数
{
int i,j;
Book e;
cout<<"请输入你想要插入的位置"<<endl;
cin>>i;
cout<<"请输入所添加书籍的编号"<<endl;
cin>>e.num;
cout<<"请输入所添加书籍的名称"<<endl;
cin>>e.name;
cout<<"请输入所添加书籍的价格"<<endl;
cin>>e.price;
if((i<1)||i>L.length+1)return ERROR;//对所输入i的合法性判断
if(L.length==MAXSIZE)return ERROR;
for(j=L.length-1;j>=i-1;--j)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
int ListDelete(SqList &L)//删除函数
{
int i,j;
cout<<"请输入你想要删除第几本书籍"<<endl;
cin>>i;
if((i<1)||i>L.length+1)return ERROR;
for(j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
return OK;
}
int main()
{
SqList L;int i,j;
for(j=1;;j++)
{
cout<<"------------------------简单图书管理系统------------------------"<<endl;
cout<<"1:创建书架---2:查找书籍---3:插入书籍---4:删除书籍---5:查看书籍---6:退出"<<endl;
cin>>i;
switch (i) {
case 1: Initlist(L);Getbook(L);display(L);break;
case 2: LocateElem(L);display(L);break;
case 3: InsertList(L);display(L);break;
case 4: ListDelete(L);display(L);break;
case 5: display(L);break;
case 6: exit(OVERFLOW);
default: cout<<"错误指令"<<endl;break;
}
}
}
优缺点:代码比较简单易懂但是对于大量数据时耗费空间和时间较长,没有链式结构方便,后续将进行优化采用链式结构。
请期待后期......