图书馆借书还书(链表)

//链表实现图书的借书还书
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 10
typedef struct {
	char id[20];
	char name[20];
	char price[10];
}Book;

typedef struct Node{
	Book data;
	struct Node *next;
}BorrRetu;

//尾插法创建
BorrRetu *creatList(Book *lib){
	BorrRetu *head,*r,*p;
	int i=0,n=Max;
	head=(BorrRetu *)malloc(sizeof(BorrRetu));
	r=head;

	while(i<n){
		p=(BorrRetu *)malloc(sizeof(BorrRetu));
		p->data=lib[i];			//将已有的数据赋值给p的数据域
		r->next=p;
		r=p;
		i++;
	}
	r->next=NULL;
	return head;
}

//输出
void Print(BorrRetu *L){
	BorrRetu *p=L->next;
	printf("编号\t    书名\t    价格\n");
	while(p){
		printf(" %s\t",p->data.id);
		printf(" 《%s》\t  ",p->data.name);
		printf("\t%s\n",p->data.price);
		p=p->next;
	}
	printf("\n");
}

//借书(删除)
int Borrow(BorrRetu *L){
	BorrRetu *p=L,*q;
	char x[20];
	int j=0,n=Max;
	printf("输入要借书的编号:\n");
	scanf("%s",&x);
	while(j<n){
		if(strcmp(p->next->data.id,x)==0){		//嘿嘿,老是删除后面一个,这样就解决了,我的x是char类型的,改变不了,所以就这样了
			q=p->next;
			p->next=q->next;
			free(q);
			break;
		}            
		p=p->next;
		j++;
	}
	return 1;
}

//还书(插入)
int Return(BorrRetu *L,Book *lib){
	BorrRetu *p=L,*t;
	int x,i=1;
	printf("输入还书的编号:\n");
	scanf("%d",&x);
	while(i<x){
		p=p->next;
		i++;
	}
	t->data=lib[x-1];			//前面输出的数据是链表的数据,lib里的数据是没有变动的,我要还书就直接拉lib的数据赋值给临时变量插入就行了
	t->next=p->next;
	p->next=t;

	return 1;
}
int main(){
     BorrRetu *L;
	 Book lib[Max]={
        {"1","放学后","20.66"},
        {"2","秘密","12.34"},
        {"3","名侦探的守则","15.6"},
        {"4","单恋","22.33"},
        {"5","白夜行","31.94"},
        {"6","幻夜","23.12"},
        {"7","流星之拌","30.99"},
        {"8","嫌疑人X的献身","19.69"},
        {"9","解忧杂货店","21.86"},
        {"10","新参者","14.77"}
    };
    L=creatList(lib);
	Print(L);
	Borrow(L);
	Print(L);
	Return(L,lib);
	Print(L);
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值