数据结构基于线性表链式存储的图书信息管理系统
#include<stdio.h>//standard input output
#include<string.h>//
#include<malloc.h> //
#include<stdlib.h>//standard libary
#define MAXSIZE 10000//图书表可能达到的最大长度
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct //图书信息定义
{
char no[20];//图书ISBN
char name[50];//图书名字
float price;//图书价格
}Book;
typedef struct
{
Book *elem;//存储空间的基地址
int length;//图书表中当前图书个数
}SqList,*SqList_L;//图书表的顺序存储结构类型为SqList
Status InitList_Sq(SqList *L);
/*
typedef struct LNode
{
Book data;//结点的数据域
struct LNode *next;//结点的指针域
}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型
*/
Status InitList_Sq(SqList *L)//构造一个空的顺序表
{
L->elem=(Book * )malloc(MAXSIZE * sizeof(Book));//为顺序表分配一个大小为MAXSIZE的数组空间
if(!L->elem) exit(OVERFLOW);//存储失败
L->length=0;//空表长度为零
return OK;
}
Status PrintList_Sq(SqList *L)
{
int i=0 ;
printf("%d\n",L->length); //书本总数
for(;i<L->length;i++) //顺序输出每本书的信息
{
printf("%s %s %.2f\n", L->elem[i].no,L->elem[i].name,L->elem[i].price);//每本书信息
// printf("%.2f\n",L.elem[i].price);//保留两位小数
}
return OK; //OK=1,返回真
}
Status CreationList_Sq(SqList *L,char *no,char *name,float price)
{
// char * strcpy(char * strDest,const char * strSrc);
Book B; //定义B为Book
strcpy(B.no,no); //复制书号
strcpy(B.name,name);
B.price=price;
L->elem[L->length]=B; //l的elem数组存储书的信息
L->length++; //每存好一本书,书总量自加1,l.length=l.length+1.单目运算
return OK; //OK=1,返回真
}
Status Input(SqList *L)
{
int i;
for(i=0;i<3;i++)
{
//scanf("%s %s %f",&(L->elem[i].no),&(L->elem[i].name),&(L->elem[i].price));
// scanf("%s",&(L->elem[i].no));
// scanf("%s",&(L->elem[i].name));
// scanf("%f",&(L->elem[i].price));
scanf("%s",L->elem[i].no);
//printf("%s",L->elem[i].no);
scanf("%s",L->elem[i].name);
scanf("%f",&L->elem[i].price);
L->length++;
}
return OK;
}
/*
2.按图书价格降序排列
*/
float SortList_Sq1(SqList *L)
{
Book *b=L->elem,t;//从顺序表第一个元素开始匹配
float maxPrice=b->price;
int i=1;
while(i<=L->length)
{
if(b->price<(b+1)->price)
{
maxPrice=(b+1)->price;
strcpy(t.name,b->name);
strcpy(t.no,b->no);
t.price=b->price;
//
strcpy(b->name,(b+1)->name);
strcpy(b->no,(b+1)->no);
b->price=(b+1)->price;
//
strcpy((b+1)->name,t.name);
strcpy((b+1)->no,t.no);
(b+1)->price=t.price;
// b->name=(b+1)->name;
// b->price=(b+1)>price;
// b->no=(b+1)->no;
// b=*(b+1);
// *(b+1)=*t;
}
b++;
i++;
}
return maxPrice;
}
/*
2.按图书价格降序排列
*/
Status SortList_Sq(SqList *L)
{
//Book *b=L->elem,t;//从顺序表第一个元素开始匹配
//float maxPrice=b->price;
int i;
for(i=0;i<L->length-1;i++)
{
int j;
for(j=i+1;j<L->length;j++)
{
if(L->elem[j].price>L->elem[i].price)//如果后续元素的价格大于当前元素进行交换
{
Book t; //辅助存储空间
strcpy(t.name,L->elem[i].name); //将当前元素存入辅助空间
strcpy(t.no,L->elem[i].no);
t.price=L->elem[i].price;
strcpy(L->elem[i].name,L->elem[j].name);//将后继元素的值赋给当前元素
strcpy(L->elem[i].no,L->elem[j].no);
L->elem[i].price=L->elem[j].price;
strcpy(L->elem[j].name,t.name);//将辅助空间存储的当前元素的值赋给后继元素
strcpy(L->elem[j].no,t.no);
L->elem[j].price=t.price;
}
}
}
return OK;
}
/*
3.修改图书价格
*/
Status UpdateList_Sq(SqList *L)
{
int i,j;
float averagePrice=0.0,sumPrice=0.0;
for(i=0;i<L->length;i++)
{
sumPrice += L->elem[i].price;
}
averagePrice=sumPrice/L->length;
for(j=0;j<L->length;j++)
{
if(L->elem[j].price<averagePrice)
{
L->elem[j].price=L->elem[j].price*1.2;
}
else if(L->elem[j].price>=averagePrice)
{
L->elem[j].price=L->elem[j].price*1.1;
}
}
return OK;
}
/*
4.获取最贵图书
*/
Status GetElem1(SqList *L,Book *e,float *a)
{
float maxPrice=0.0;
int i;
if(L->length>0)
{
maxPrice=L->elem[0].price;
}
for(i=1;i<L->length;i++)
{
if(L->elem[i].price>maxPrice)
{
maxPrice=L->elem[i].price;
//e=&(L->elem[i]);
strcpy(e->name,L->elem[i].name);
strcpy(e->no,L->elem[i].no);
e->price=L->elem[i].price;
a=&maxPrice;
}
}
return OK;
}
/*
4.获取最贵图书
*/
float GetElem(SqList L,Book *e)
{
float maxPrice=0.0,tt=100;
int i;
if(L.length>0)
{
maxPrice=L.elem[0].price;//假设第一本书为最贵图书
strcpy(e->name,L.elem[0].name);//将第一本书信息保存
strcpy(e->no,L.elem[0].no);
e->price=L.elem[0].price;
}
for(i=1;i<L.length;i++)
{
if(L.elem[i].price>maxPrice)//
{
maxPrice=L.elem[i].price;
strcpy(e->name,L.elem[i].name);
strcpy(e->no,L.elem[i].no);
e->price=L.elem[i].price;
}
}
return maxPrice;
}
/*
5.新图书入库
*/
Status InsertList(SqList *L,int i,Book e)
{
//判断位置是否合法
if(i<1||i>(L->length+1))
{
return ERROR;
}
if(L->length==MAXSIZE)//判断空间是否已满
{
return ERROR;
}
int j;
for(j=L->length-1;j>=i-1;j--)
{
strcpy(L->elem[j+1].no,L->elem[j].no);
strcpy(L->elem[j+1].name,L->elem[j].name);
L->elem[j+1].price=L->elem[j].price;
}
strcpy(L->elem[i].no,e.no);
strcpy(L->elem[i].name,e.name);
L->elem[i].price=e.price;
++L->length;
return OK;
}
/*
6.旧图书出库
*/
Status DeleteList(SqList *L,int i)
{
if(i<1||i>(L->length))//位置不合法
{
return ERROR;
}
int j;
for(j=i;j<=L->length;j++)//被删除之后元素前移
{
strcpy(L->elem[j-1].no,L->elem[j].no);
strcpy(L->elem[j-1].name,L->elem[j].name);
L->elem[j-1].price=L->elem[j].price;
}
--L->length;
return OK;
}
void Swap(float *x,float *y)
{
float t;
//t=*x;
*x=100;
*y=105;
}
typedef struct
{
Book *elem1;//存储空间的基地址
Book elem2;//存储空间的基地址
int elem;
//int length;//图书表中当前图书个数
}_SqList,*_SqList_L;//图书表的顺序存储结构类型为SqList
int test(_SqList *L)
{
//L->elem=(int * )malloc(MAXSIZE * sizeof(int));//为顺序表分配一个大小为MAXSIZE的数组空间
//if(!L->elem) exit(OVERFLOW);//存储失败
//L->length=0;//空表长度为零
//L=(_SqList*)(malloc(0));
//L=malloc(50);
L->elem=100;
//printf("%d",L->elem);
printf("%d",sizeof(*L));
return OK;
}
int main()
{
char no[20],name[50];
float price;
int i,*j;
SqList *L,_L,u;
//L=&L;
j=&i;
printf("%d,%d,%d,%d",sizeof(L),sizeof(_L),sizeof(u),j);
// _SqList *_L;
// SqList Q;
// printf("%ld\n",&L);
// printf("%ld\n",sizeof(Q));
// printf("%ld\n",sizeof(L));
// printf("%ld\n",sizeof(i));
// printf("%ld\n",sizeof(_L));
// printf("%ld\n",sizeof(_SqList));
// test(_L);
// scanf("%d",&i);
// printf("%d",i);
//L=(SqList *)malloc(MAXSIZE*sizeof(SqList));
//printf("%ld\n",sizeof(Book));
//(&*L)->elem=(Book * )malloc(MAXSIZE * sizeof(Book)); //定义L为SqList
// InitList_Sq(L); //初始化L
/*
while(scanf("%s %s %f",no,name,&price)!=EOF)
{
if(!strcmp(no,"0")&&!strcmp(name,"0")&&price==0.0)
break;
CreationList_Sq(&L,no,name,price);
}
*/
// Input(L);
// PrintList_Sq(&_L);
//float maxPrice=SortList_Sq(&L);
// printf("%.2f\n",maxPrice);
// PrintList_Sq(&L);
// UpdateList_Sq(&L);
// PrintList_Sq(&L);
//
// Book e;
// float a=34.5,b=80;
// /*
// GetElem(L,&e);
// printf("最贵图书是:\n") ;
// printf("%s %s %.2f",e.no,e.name,e.price);
// */
//
// strcpy(e.no,"9787302265436");
// strcpy(e.name,"计算机导论实验指导");
// e.price=18.00;
//
// InsertList(&L,2,e);
// PrintList_Sq(&L);
// DeleteList(&L,2);
// PrintList_Sq(&L);
return 0;
}