代码可以运行,但是delet函数有bug,输入要删除的书名,用book[j]=book[j+1]后,还是能查询到书籍,我觉得是因为在main函数里面定义了指针book而不是数组book,如果是数组的话就不会出现这种问题。那么如何实现删除功能呢?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void input(struct Book *book); //录入书籍
void inquire(struct Book *book, int book_num); //查询书籍名称
void print(struct Book *book); //打印书籍
void menu(int *flag); //目录
struct Time
{
int year;
int month;
int day;
};
struct Book
{
char name[200];
struct Time time;
char chubanshe[200];
};
void input(struct Book *Book) //录入书籍
{
printf("请输入书名:");
scanf("%s",Book->name);
printf("请输入年月日:");
//scanf("%d%d%d", &book[i].time.year, &book[i].time.month, &book[i].time.day);
scanf("%d%d%d",&((*Book).time.year),&(Book->time.month),&(Book->time.day));
printf("请输入出版社:");
scanf("%s",Book->chubanshe);
printf("\n======书籍录入成功======\n\n");
}
void inquire(struct Book *book, int book_num) //查询书籍名称
{
char name[200];
int i,flag = 0;
printf("\n请输入书籍名称:\n\n");
scanf("%s",name);
for(i = 0;i < book_num; i++)
{
if(strcmp(book[i].name, name) == 0)
{
printf("这是第%d本书\n",i + 1);
print(&book[i]);
flag = 1;
break;
}
}
if(flag == 0)
{
printf("\n===请重新输入书籍名称===\n\n");
inquire(book,book_num);
}
}
delet(struct Book *book,int book_num)
{ char name[50];
int flag=0;
printf("请输入书名:");
scanf("%s",name);
printf("\n");
for(int i=0;i<book_num;i++)
{
if(strcmp(book[i].name, name) == 0)
{
flag=1;
printf("删除成功!!!\n");
book_num--;
for(int j=i;j<book_num-1;j++)
book[j]=book[j+1];//j+1!!! j最大等于book_num-2此时+1即为book_num-1
}
}
if(flag==0)
printf("=====查无此书!!!=====\n");
}
void print(struct Book *book) //输出查询到的书籍
{
printf("\n======书籍查询成功======\n\n");
printf("书 名:%s\n",book -> name);
printf("日 期:%d-%d-%d\n", book -> time.year, book -> time.month, book -> time.day);
printf("出版社:%s\n\n",book -> chubanshe);
}
void menu(int *flag) //目录
{
int mode;
printf("请选择模式:\n");
printf("1.输入1录入书籍;\n");
printf("2.输入2查询书籍;\n");
printf("3.输入3删除书籍;\n"); //未做
printf("4.输入4退出系统;\n");
scanf("%d",flag);
}
int main(void)
{
struct Book *book = NULL;//指针实现
int book_num = 0;
int flag;
while(1)
{
menu(&flag);
switch(flag)
{
case 1:
{
book_num++;
printf("这是第%d本书\n",book_num);
book = (struct Book *)realloc(book,(book_num + 1) * sizeof(struct Book *));//!!!
input(&book[book_num - 1]); break;
}
case 2: inquire(book,book_num); break;
case 3: delet(book,book_num); break;
case 4: free(book);exit(1);
default:printf("\n请重新输入\n\n");break;
}
}
return 0;
}