数据结构基于线性表链式存储的图书信息管理系统

数据结构基于线性表链式存储的图书信息管理系统

#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;  
}
  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值