⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 个人图书管理系统.cpp

📁 简单的图书管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*指定查询*/
void book_search()       //本模块比较简单,单纯的显示信息和执行函数
{
 void adm_servelist();
 void id_search();
 void bn_search();
 char input;
 FILE *fp;
 int inp;
 if ((fp=fopen("book.dat","rb"))==NULL)
 {
  system("cls"); 
  printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n");
  printf("\n\t<按任意键返回管理菜单>\n\t");
  input=getchar();
  input=getchar();
  adm_servelist();
 }
 else      
 {
  do
  {
   system("cls");
   printf("\n\n\n\t1.按图书编号查询\n");
   printf("\n\t2.按图书名查询\n");
   printf("\n\t3.回到主菜单\n");
   printf("\n\n\t请选择查询类别:");
   scanf("%d",&inp);
   if (inp!=1&&inp!=2&&inp!=3&&inp!=4)
   {
    printf("\n\n\t没有这项服务~\n\t按任意键重新选择~");
    input=getchar();
    input=getchar();
   }
  }
  while (inp!=1&&inp!=2&&inp!=3&&inp!=4);
  fclose(fp);

  switch (inp)
  {
  case 1: id_search();  break;
  case 2: bn_search();  break;
  case 3: adm_servelist(); break;
  }
 }
}
/*按图书名查询*/
void bn_search()     //按作者图书查询
{        
 void book_search();    //执行修改和删除时先必须找到要修改和删除的结构体数组下标
 void change(int x);    //将该值传给修改删除函数
 void del(int x);    
 FILE *fp;
 struct bookinf books[100],bookw[100];
 char input,name[10];
 int i=0,w,j,inp,k=0,n=0;

 fp=fopen("book.dat","rb");

 while (!feof(fp))
 {
  fread(&books[i],sizeof(struct bookinf),1,fp);
  i=i+1;
 }

 fclose(fp);
 system("cls");

 printf("\n\n\n\t请输入您想查询的作者名:");
 scanf("%s",name);
  for (j=0;j<=i-2;j++)
  {
   w=strcmp(books[j].bname,name);
    if(w==0)
    {
     bookw[k]=books[j];
     k=k+1;
     
    }   
    else if (k==0&&j==(i-2))
    { 
     system("cls");
     printf("\n\n\n\t对不起,没有找到该记录~\n\t按任意键返回\n\t");
     input=getchar();
     input=getchar();
     book_search();
    }
  }

 do
 {
  system("cls");
  printf("\n\n\t>>>>一共找到%d条符合要求的记录<<<<\n",k);
  printf("\n\t编号:   %d\n",bookw[n].num);
  printf("\n\t书名:   %s\n",bookw[n].bname);
  printf("\n\t作者名:   %s\n",bookw[n].wname);
  printf("\n\t分类号:   %s\n",bookw[n].clanum);
  printf("\n\t出版单位:   %s\n",bookw[n].pubcom);
  printf("\n\t出版时间:   %s\n",bookw[n].pubtime);
  printf("\n\t价格:   %f\n",bookw[n].price);

  printf("\n\n\t1.上一页    2.下一页    3.修改    4.删除    5.回目录\n");
  printf("\n\t请输入选项:");
  scanf("%d",&inp);
  switch (inp)
  {
   case 1:
   {
    if (n==0)
    { 
     printf("\n\t已到达首页\n\t按任意键重新选择");
     input=getchar();
     input=getchar();
    }
    else
    {
     n=n-1;
    }
    break;
   }
   case 2:
   {
    if (n==k-1)
    {
     printf("\n\t已到达最末页\n\t按任意键重新选择");
     input=getchar();
     input=getchar();

    }
    else
    {
     n=n+1;
    }
    break;
   }
   case 3: 
    {
     for (j=0;j<=i-2;j++)
      if (bookw[n].num==books[j].num)
      {
       change(j);  
       break;
      }
    }
   case 4: 
    {
     for (j=0;j<=i-2;j++)
      if (bookw[n].num==books[j].num)
      { 
       del(j); 
       break;
      }
    }
   case 5: book_search(); break;
   default :
    {
     printf("\n\t对不起,没有这项服务!\n\t按任意键重新选择!");
     input=getchar();
     input=getchar();
    }

  }
 }
 while(inp!=5);
}
/*按图书编号查询*/     
void id_search()     //执行修改删除时也需要传递一个数组下标
{
 void book_search();
 void change(int x);
 void del(int y);

 int id,i=0,j,sum=0,inp;
 FILE *fp;
 struct bookinf book_sear[100];
 char input;
 
 fp=fopen("book.dat","rb");
 do
 {
  fread(&book_sear[i],sizeof(struct bookinf),1,fp);
  i=i+1;
 }
 while (!feof(fp));
 fclose(fp);

  
  system("cls");
  printf("\n\n\n\t请输入您想查询的图书编号:");
  scanf("%d",&id);
 do 
 {
  for (j=0;j<i-1;j++)
   if(id==book_sear[j].num)
   {
    system ("cls");
    printf("\n\n\t编号:   %d\n",book_sear[j].num);
    printf("\n\t书名:   %s\n",book_sear[j].bname);
    printf("\n\t作者名:   %s\n",book_sear[j].wname);
    printf("\n\t分类号:   %s\n",book_sear[j].clanum);
    printf("\n\t出版单位:   %s\n",book_sear[j].pubcom);
    printf("\n\t出版时间:   %s\n",book_sear[j].pubtime);
    printf("\n\t价格:   %f\n",book_sear[j].price);
    break;
   }
   else if (j==(i-2)&&id!=book_sear[j].num)
   {
    system("cls");
    printf("\n\n\n\t对不起,没有找到该记录~\n\t按任意键返回\n\t");
    input=getchar();
    input=getchar();
    book_search();
   }

  printf("\n\n\t1.修改\t2.删除\t3.回目录\n");
  printf("\n\t请选择:");
  scanf("%d",&inp);
  switch (inp)
  {
  case 1: change(j);  break;
  case 2: del(j);   break;
  case 3: book_search(); break;
  default:
   {
    printf("\n\t对不起~没有这项服务~\n");
    printf("\t按任意键重新选择\n\t");
    input=getchar();
    input=getchar();
   }
  }
 }
 while(inp!=1&&inp!=2&&inp!=3);
}

/*图书查询后修改*/
void change(int x)
{
 int inp,i=0,j;
 void book_search();

 FILE *fp,*fp1;
 char input;
 struct bookinf books,book_taxis[100];
do
 {      //避免用户按错而导致的错误修改
  system("cls");
  printf("\n\n\n\t警告:一旦修改就无法回复!您确定要修改该记录吗?\n");
  printf("\n\t1.是的\t2.不是\n");
  printf("\n\t请输入:");
  scanf("%d",&inp);
  if (inp!=1&&inp!=2)
  {
   printf("\n\t对不起~没有这项服务~\n");
   printf("\t按任意键重新选择\n\t");
   input=getchar();
   input=getchar();
  }
 }
 while (inp!=1&&inp!=2);

 if (inp==2)
  book_search();
 if (inp==1)    //输入新的图书信息
 {
   system("cls");
   printf("\n\n\n\t---请输入图书信息---\n\n");
   printf("\t图书编号:");
   scanf("%d",&books.num);
   printf("\n\t书名:");
   scanf("%s",books.bname);
   printf("\n\t作者名:");
   scanf("%s",books.wname);
   printf("\n\t分类号:");
   scanf("%s",books.clanum);
   printf("\n\t出版单位:");
   scanf("%s",books.pubcom);
   printf("\n\t出版时间:");
   scanf("%s",books.pubtime);
   printf("\n\t价格:");
   scanf("%f",&books.price);
   if ((fp1=fopen("book.dat","rb"))!=NULL)    //判断新输入的图书信息编号是否使用过
   { 
    do
    {
     fread(&book_taxis[i],sizeof(struct bookinf),1,fp1);  //读取文件中的信息存到结构体
     i=i+1;
    } 
    while(!feof(fp1));
    fclose(fp1);
    for (j=0;j<x;j++)
     if (books.num==book_taxis[j].num) //判断该编号之前的编号是否和新输入的编号相同
     {
      system("cls");
      printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
      printf("\t按任意键返回管理菜单~");
       printf("0");
      input=getchar();
      input=getchar();
      book_search();   //相同即返回
      break;
     }
     for (j=x+1;j<i-2;j++)     //判断该编号之后的编号是否和新输入的编号相同
     if (books.num==book_taxis[j].num)
     {
      system("cls");
      printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
      printf("1");
      printf("\t按任意键返回管理菜单~");
      input=getchar();
      input=getchar();
      book_search(); //相同即返回
     break;
     }
     
   }
   
   book_taxis[x]=books;    //都不相同的话将新修改的信息写到要修改的那条信息中去
   fp=fopen("book.dat","wb");
   for (j=0;j<i-1;j++)       //循环写入已经修改好的结构体数据
   fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
   fclose(fp);
   printf("\n\n\t信息修改完成!按任意键返回");
   input=getchar();
   input=getchar();
   book_search();   //返回
 }
}
/*图书查询后删除*/
void del(int y)
{
 char input;
 FILE *fp;
 int inp,i=0,j;
 struct bookinf book_taxis[100];
 void book_search();
 void adm_servelist();
 do    //确保用户避免误删除
 {
  system("cls");
  printf("\n\n\n\t警告:一旦删除就无法回复!您确定要删除该记录吗?\n");
  printf("\n\t1.是的\t2.不是\n");
  printf("\n\t请输入:");
  scanf("%d",&inp);
  if (inp!=1&&inp!=2)
  {
   printf("\n\t对不起~没有这项服务~\n");
   printf("\t按任意键重新选择\n\t");
   input=getchar();
   input=getchar();
  }
 }
 while (inp!=1&&inp!=2);

 if (inp==2)
  book_search();
 
 if (inp==1)     //读取文件中所有数据
 {
   if ((fp=fopen("book.dat","rb"))!=NULL) 
   {
    do
    {
     fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
     i=i+1;
    }
    while(!feof(fp));
    fclose(fp);
   }
  if (i>2)    //如果数据条数大于1
   {
    fp=fopen("book.dat","wb");  // 分2次写入,把要删除的不写入
     for (j=0;j<y;j++)
      fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
     fclose(fp);
     fp=fopen("book.dat","ab");
     for (j=y+1;j<i-1;j++)
      fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
     fclose(fp);
   }  
   else     //小于2的话就删除图书信息文件
   { 
    remove("book.dat");
   }
  printf("\n\n\t记录已删除!\n\n\t按任意键返回\n\t");
  input=getchar();
  input=getchar();
  adm_servelist();    //返回
 }
}
/*主函数*/
void main()
{ 
 index();   //主页面
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -