C链表-图书管理系统

时间:2025-03-07 09:16:36
#include<> #include<> #include<> #define LEN 100 //图书信息链表 struct Book{ int Book_number; char Book_name[LEN+1]; char Author_name[LEN+1]; char Book_type[LEN+1]; char Publishing_unit[LEN+1]; char Publishing_time[LEN+1]; float price; struct Book *next_book; }; //学生信息链表 struct Student_information{ char name[LEN+1]; char *ID_number[LEN+1]; char *Book_lending_time[LEN+1]; char *Book_name[LEN+1]; struct Student_information *next_student; }; //函数声明 void book_add(struct Book *p); struct Book *book_search(struct Book*head); void book_modification(struct Book*head); void book_delete(struct Book*head); void book_lending(struct Book*head,struct Student_information*m,struct Student_information *head1); void book_return(struct Student_information *head1); struct Student_information *book_student_search(struct Student_information*head1); void printer(struct Book *a); void printer_student(struct Student_information *a); //主函数 操作菜单 int main(void) { struct Book *head=NULL; struct Book *tail=NULL; struct Book *p=NULL; head=(struct Book*)malloc(sizeof(struct Book)); head->next_book=NULL; tail=head; struct Student_information *head1=NULL; struct Student_information *tail1=NULL; struct Student_information *m=NULL; head1=(struct Student_information*)malloc(sizeof(struct Student_information)); head1->next_student=NULL; tail1=head1; printf("------欢迎使用图书借阅管理系统------\n"); printf("----请通过键盘输入数字选择相关操作--\n"); printf("-------------1添加新书--------------\n"); printf("-------------2查询图书信息----------\n"); printf("-------------3修改图书信息----------\n"); printf("-------------4删除图书信息----------\n"); printf("-------------5借阅图书--------------\n"); printf("-------------6归还图书--------------\n"); printf("-------------7查询学生借阅信息------\n"); printf("-------------8退出系统--------------\n"); char x;//操作选项 while(1){ printf("请输入数字:"); scanf("%c",&x); switch(x){ case'1': p=(struct Book *)malloc(sizeof(struct Book)); p->next_book=NULL; tail->next_book=p; tail=p; book_add(p); break; case'2': book_search(head); break; case'3': book_modification(head); break; case'4': book_delete(head); break; case'5': m=(struct Student_information*)malloc(sizeof(struct Student_information)); m->next_student=NULL; tail1->next_student=m; tail1=m; book_lending(head,m,head1); break; case'6': book_return(head1); break; case'7': book_student_search(head1); break; case'8': return 0; } } return 0; } //打印图书信息函数 void printer_book(struct Book *a){ printf("%d\n",a->Book_number); printf("%s\n",a->Book_name); printf("%s\n",a->Author_name); printf("%s\n",a->Book_type); printf("%s\n",a->Publishing_unit); printf("%s\n",a->Publishing_time); printf("%.2f\n",a->price); } //打印学生借阅图书信息函数 void printer_student(struct Student_information *a){ int i; printf("%s\n",a->name); for(i=0;i<LEN;i++){ printf("%s\n",a->Book_lending_time[i]); printf("%s\n",a->Book_name[i]); } } //1添加新书函数 void book_add(struct Book *p) { printf("1添加新书\n"); printf("请输入图书编号:"); scanf("%d",&p->Book_number); printf("请输入书名:"); scanf("%s",&p->Book_name); printf("请输入作者名:"); scanf("%s",&p->Author_name); printf("请输入书的种类(学科/杂志/小说/传记):"); scanf("%s",&p->Book_type); printf("请输入图书出版社名称:"); scanf("%s",&p->Publishing_unit); printf("请输入图书出版时间:"); scanf("%s",&p->Publishing_time); printf("请输入图书价格:"); scanf("%f",&p->price); getchar(); printf("添加成功\n"); } //2查询图书信息函数 struct Book *book_search(struct Book*head) { struct Book *p; char book_name[LEN+1]; int book_number; int z; printf("2查询图书信息\n"); printf("------1按书名查询--------\n"); printf("------2按图书编号查询----\n"); printf("请输入相应数字:"); scanf("%d",&z); switch(z){ case 1: printf("请输入书名:"); scanf("%s",book_name); getchar(); for (p=head;p!=NULL;p=p->next_book){ if(strcmp(p->Book_name,book_name)==0){ printer_book(p); break; } } if(p==NULL) printf("暂无此书\n"); break; case 2: printf("请输入图书编号:"); scanf("%d",&book_number); getchar(); for (p=head;p!=NULL;p=p->next_book){ if(book_number==p->Book_number){ printer_book(p); break; } } if(p==NULL) printf("暂无此书\n"); break; } return NULL; } //3修改图书信息函数 void book_modification(struct Book *head){ struct Book *p; char book_name[LEN+1]; printf("3修改图书信息\n"); printf("请输入书名:"); scanf("%s",book_name); getchar(); for (p=head;p!=NULL;p=p->next_book) if(strcmp(p->Book_name,book_name)==0){ printf("------1修改图书编号--------\n"); printf("------2修改书名------------\n"); printf("------3修改作者名----------\n"); printf("------4修改书的种类--------\n"); printf("------5修改图书出版社名称--\n"); printf("------6修改出版时间--------\n"); printf("------7修改图书价格--------\n"); printf("------8完成修改------------\n"); while(1){ printf("请输入相应数字:"); char y; scanf("%c",&y); switch(y) { case'1': printf("请输入新的图书编号:"); scanf("%d",&p->Book_number); getchar(); printf("修改图书编号成功\n"); break; case'2': printf("请输入新的书名:"); scanf("%s",&p->Book_name); getchar(); printf("修改书名成功\n"); break; case'3': printf("请输入新的作者名:"); scanf("%s",&p->Author_name); getchar(); printf("修改作者名成功\n"); break; case'4': printf("请输入新的书的种类(学科/杂志/小说/传记):"); scanf("%s",&p->Book_type); getchar(); printf("修改书的种类成功\n"); break; case'5': printf("请输入新的图书出版社名称:"); scanf("%s",&p->Publishing_unit); getchar(); printf("修改图书出版社名称成功\n"); break; case'6': printf("请输入新的图书出版时间:"); scanf("%s",&p->Publishing_time); getchar(); printf("修改图书出版时间成功\n"); break; case'7': printf("请输入新的图书价格:"); scanf("%f",&p->price); getchar(); printf("修改图书价格成功\n"); break; case'8': getchar(); return; } } } if(p==NULL) printf("暂无此书\n"); } //4删除图书信息函数 void book_delete(struct Book *head){ char book_name[LEN+1]; struct Book *p,*q; printf("4删除图书信息\n"); printf("请输入书名:"); scanf("%s",book_name); getchar(); for(p=head,q=NULL; p!=NULL&&strcmp(p->Book_name,book_name)!=0; q=p,p=p->next_book); if(p==NULL) printf("暂无此书\n"); if(q==NULL) head=head->next_book; else q->next_book=p->next_book; free(p); printf("已成功删除该图书\n"); return; } //5借阅图书函数 void book_lending(struct Book *head,struct Student_information *m,struct Student_information *head1){ struct Book *p; struct Student_information *n; char book_name[LEN+1]; char name[LEN+1]; printf("5借阅图书\n"); printf("请输入借阅书名:"); scanf("%s",book_name); getchar(); for (p=head;p!=NULL;p=p->next_book){ if(strcmp(p->Book_name,book_name)==0){ printf("请输入借阅人姓名:"); scanf("%s",name); for(n=head1;n!=NULL;n=n->next_student){ if(strcmp(n->name,name)==0){ static int i=1; n->Book_name[i]=(char*)malloc(100*sizeof(char)); n->ID_number[i]=(char*)malloc(100*sizeof(int)); n->Book_lending_time[i]=(char*)malloc(100*sizeof(char)); strcpy(n->Book_name[i],book_name); printf("请输入借阅时间:"); scanf("%s",n->Book_lending_time[i]); getchar(); i++; printf("借阅成功,请于借书之日起两周内归还\n"); break; } } if(n==NULL){ m->Book_name[0]=(char*)malloc(100*sizeof(char)); m->ID_number[0]=(char*)malloc(100*sizeof(int)); m->Book_lending_time[0]=(char*)malloc(100*sizeof(char)); strcpy(m->Book_name[0],book_name); strcpy(m->name,name); printf("请输入学号:"); scanf("%s",m->ID_number[0]); getchar(); printf("请输入借阅时间:"); scanf("%s",m->Book_lending_time[0]); getchar(); printf("借阅成功,请于借书之日起两周内归还\n"); break; } break; } } if(p==NULL) printf("暂无该书"); } //6归还图书函数 void book_return(struct Student_information *head1){ struct Student_information *m; char student_name[LEN+1]; char book_name[LEN+1]; int i; printf("6归还图书\n"); printf("请输入学生姓名:"); scanf("%s",student_name); getchar(); for (m=head1;m!=NULL;m=m->next_student){ if(strcmp(m->name,student_name)==0){ printf("请输入归还书名:"); scanf("%s",book_name); getchar(); for(i=0;i<LEN;i++){ if(strcmp(m->Book_name[i],book_name)==0){ strcpy(m->Book_name[i]," "); strcpy(m->Book_lending_time[i]," "); strcpy(m->ID_number[i]," "); break; } } } } if(m==NULL) printf("无借书记录"); printf("归还图书成功\n"); } //7查询学生借阅信息函数 struct Student_information *book_student_search(struct Student_information*head1) { struct Student_information *m; char student_name[LEN+1]; printf("7查询学生借阅图书信息\n"); printf("请输入姓名:"); scanf("%s",student_name); getchar(); for (m=head1;m!=NULL;m=m->next_student){ if(strcmp(m->name,student_name)==0){ printer_student(m); break; } } if(m==NULL) printf("无借书记录\n"); return NULL; }``