C链表-图书管理系统
#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;
}``