/* 实现的功能 * @ 1. 录入图书的信息 * @ 2. 给定图书的编号,显示该图书的详细信息 * @ 3. 给定作者的姓名,可以显示该作者所有的书 * @ 4. 给定出版社,可以显示该出版社出版的图书 * @ 5. 给定图书的编号,可以删除该图书的信息 * @ 6. 可以提供一些统计图书信息的功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Book { int book_id; //图书编号 char book_name[20]; //树名 char name[20]; //作者姓名 char press[20]; //出版社 struct _Book *next; }book; book *head = NULL; //为了方便,本人采用全局变量的形式,但不安全,需要改进 int length; //链表的长度 //录入图书的信息 void create() { book *p1,*p2; length = 0; p1 = (book *)malloc(sizeof(book)); p1->book_id = -1; if(head == NULL) { head = p1; } printf("请输入需录入图书的编号、名字、作者姓名、出版社:\n"); while(1) //当图书的编号为0时,代表录入完成 { p2 = (book *)malloc(sizeof(book)); scanf("%d %s %s %s",&p2->book_id,p2->book_name,p2->name,p2->press); fflush(stdin); //每次清空缓冲区,以便本次输入对下次输入造成影响 if(p2->book_id == 0) { printf("图书信息录入完成!\n"); break; } length ++; p1->next = p2; p2->next = NULL; p1 = p1->next; } return ; } //显示图书信息 void display() { book *p1 = head->next; printf("所有的图书信息如下:\n"); while(p1 != NULL) { printf("%d %s %s %s %s\n",p1->book_id,p1->book_name,p1->name,p1->press); p1 = p1->next; } return ; } //查找 void search() { int num,x,flag1 = 0,flag2 = 0; char name[20],press[20]; book *p = head->next; printf("1、根据图书编号进行查找:\n"); printf("2、根据作者姓名进行查找:\n"); printf("3、根据出版社进行查找:\n"); printf("请选择查找的功能:"); scanf("%d",&x); switch(x) { case 1: { printf("请输入待查找的图书编号:"); scanf("%d",&num); while(p != NULL) { if(p->book_id == num) { printf("编号为%d的图书信息如下:\n"); printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); return ; } p = p->next; } if(p == NULL) { printf("该图书馆没有该图书的编号!\n"); } } break; case 2: { printf("请输入待查找的图书的作者姓名:"); gets(name); while(p != NULL) { if(strcmp(p->name,name) == 0) { flag1++; printf("作者为%s的图书信息如下:\n"); printf("%d %s %s%是\n",p->book_id,p->book_name,p->name,p->press); } p = p->next; } if(flag1 == 0) { printf("该图书馆没有该作者的图书!\n"); } } case 3: { printf("请输入待查找图书的出版社:"); gets(press); while(p != NULL) { if(strcmp(p->press,press) == 0) { flag2++; printf("出版社为%s的图书如下:\n"); printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); } p = p->next; } if(flag2 == 0) { printf("该图书馆没有该出版社的图书!\n"); } } default: { printf("选择有误!\n"); } break; } return ; } //按编号进行删除 void Delete() { int num; book *p,*q; q = head; p = head->next; printf("请输入待删除的图书编号:"); scanf("%d",&num); while(p != NULL) { if(p->book_id == num) { q->next = p->next; free(p); length--; printf("删除成功!\n"); return ; } p = p->next; q = q->next; } if(p == NULL) { printf("该图书馆没有该编号的图书!\n"); return ; } } //选择的菜单 void menu() { printf("-----------------------------------------\n"); printf("|\t\t图书馆管理系统\t\t|\n"); printf("|\t\t0. 退出系统\t\t|\n"); printf("|\t\t1. 录入图书信息\t\t|\n"); printf("|\t\t2. 显示图书信息\t\t|\n"); printf("|\t\t3. 查询图书信息\t\t|\n"); printf("|\t\t4. 删除图书信息\t\t|\n"); printf("-----------------------------------------\n"); } int main(void) { int a; menu(); while(1) { printf("请输入你选择的功能:"); scanf("%d",&a); switch(a) { case 0: return ; case 1: { create(); menu(); } break; case 2: { if(head != NULL) { display(); menu(); } else { printf("该图书馆没有录入图书,请先录入!\n"); menu(); } } break; case 3: { if(head != NULL) { search(); menu(); } else { printf("该图书馆没有录入图书,请先录入!\n"); menu(); } } break; case 4: { if(head != NULL) { Delete(); menu(); } else { printf("该图书馆没有录入图书,请先录入!\n"); menu(); } } break; default: { printf("选择有误!\n"); menu(); } break; } } return 0; }
时间: 2024-10-29 12:53:36