//链表实现图书的借书还书
#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;
}
图书馆借书还书(链表)
最新推荐文章于 2022-01-06 22:31:26 发布