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

📄 个人图书管理系统.cpp

📁 简单的图书管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
#include"string.h"
/*图书相关信息*/
struct bookinf    //定义图书相关信息结构体
{ 
 int num;
 char bname[20];
 char wname[10];
 char clanum[14];
 char pubcom[10];
 char pubtime[10];
 float price;
};
/*首页*/
void index()   //首页打印设置
{ void adm_servelist();
 char input;
 printf("\n\n\t\t\t*****************************\n");
 printf("\t\t\t PERSONNAL个人图书管理系统\n");
 printf("\t\t\t*****************************\n\n\n");
 printf(" ------------------------------------------------------------------------------\n");
 printf("\t<按任意键进入>\n\t");
 input=getchar();   //让用户输入一个字符后再进行下一步(以后在本程序中用得很多)
 system("cls");  //清屏
 adm_servelist();
}
/*关于界面*/
void about()
{
 void adm_servelist();
 char input;    //关于界面的打印设置
 system("cls");
 printf("\n\n\t\t0610003028-赵成伟 个人图书管理系统作业\n");
 printf("\n\n\t\t\t\t欢迎使用帮助\n");
 printf("本系统功能强大\n\n");
 printf("\t  实现了:\n");
 printf("\t\t1 图书信息录入\n");
 printf("\t\t2 图书信息查询\n");
 printf("\t\t3 图书信息修改\n");
 printf("\t\t4 图书信息删除\n");
 printf("\t\t5 图书信息排序\n");
 printf("\n\t按任意键返回登陆界面!");
 input=getchar();
 input=getchar();
 adm_servelist();   //任意键返回登陆界面
}

/*离开界面*/
void byebye()   //离开界面
{
 char input;
 system("cls");
 printf("\n\n\t________________________________________________________________");
 printf("\n\n\n\t\t*感谢您的使用*\n\n\t\t");
 printf("按任意键退出本系统\n\t\t");
 input=getchar();
 input=getchar();
 printf("\n\t\t");
 exit(0);   //exit()函数跳出整个程序
}

/*删除所有相关信息*/
void delall()   //管理员选项中的初始化函数
{
 //void adm_servelist();
 void adm_servelist();
 int inp;
 char input;
 do     //如果输入的不是界面提供的选项值,则重复显示输入界面
 {
  system("cls");
  printf("\n\n\t----------!!警告!!----------\n");
  printf("\n\t一旦选择了全部初始化将清除全部数据!\n");
  printf("\n\t初始化完毕后返回登陆界面\n");
  printf("\n\n\t你确定要初始化吗: 1: Yes 2: No ");
  printf("\n\t请输入服务选项:");
  scanf("%d",&inp);
 
  switch (inp)
  {
  case 1:   //如果输入为1则删除book.dat文件
   remove("book.dat");
   printf("\n\n\t初始化完毕!\n\t所有数据全部清空!\n\t按任意键返回登陆界面!");
   input=getchar();
   input=getchar();
   adm_servelist();  //并返回登陆界面
   break;
  case 2:    //选2则返回管理员登陆界面
   adm_servelist();
   break;
  default:   //否则打印如下字样并重复循环
   printf("\n\n\t对不起~没有这项服务!\n\t按任意键重新选择\n\t");
   input=getchar();
   input=getchar();
   break;
  }
 }
 while (inp!=1&&inp!=2);
}
/*管理员服务选项*/
void adm_servelist()
{
 void book_add();
 void book_view();
 void taxis();
 void book_search();
 void pwchange();
 void delall();

 int in;
 char input;
 do     //和以前一样用do{}while; 语句来保证用户的输入信息能够被系统接受
 { 
  system("cls");
  printf("\n\n\n\t--欢迎使用PERSONNAL图书管理系统--");
  printf("\n\n\t1.新增图书\n");
  printf("\t2.图书信息浏览\n");
  printf("\t3.查询指定图书\n");
  printf("\t4.图书按编号排序\n");
  printf("\t5.图书信息初始化\n");
  printf("\t6.关于本系统\n");
  printf("\t7.退出系统\n");
  printf("\n\t请选择服务种类:");
  scanf("%d",&in);
  if (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7)
  { 
   printf("\n\t没有这项服务~\n");
   printf("\t按任意键重新选择");
   input=getchar();
   input=getchar();
  }
 }
 while (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7);
 
 
 switch (in)
 {
 case 1: book_add();  break;   //选择不同服务的时候进行不同的函数块
 case 2: book_view(); break;
 case 3: book_search(); break;
 case 4: taxis();  break;
 case 5: delall();  break;
  case 6: about();  break;
 case 7: exit(0);  break;
 }
}
/*新增图书*/
void book_add()
{
 void adm_servelist();
 void book_add();
 
 int i=0,j;
 int inp;
 FILE *fp;
 char input;
 struct bookinf books;
 struct bookinf book_taxis[100];
 
  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 ((fp=fopen("book.dat","rb"))!=NULL)   //对输入的图书信息中的编号进行判断
  {
   do
   {
    fread(&book_taxis[i],sizeof(struct bookinf),1,fp);  
    i=i+1;
   }
   while(!feof(fp));
   fclose(fp);
   
   for (j=0;j<=i;j++)
    if (books.num==book_taxis[j].num)   //如果新输入的图书编号已经使用过了
    {           //显示以下信息并跳出本函数
     system("cls");
     printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
     printf("\t按任意键返回管理菜单~");
     input=getchar();
     input=getchar();
     adm_servelist();
     break;
    }
  }
if ((fp=fopen("book.dat","rb"))==NULL)    //如果没有使用过该编号则进行写入操作
 {
  fp=fopen("book.dat","wb");     //创建写入文件流
 }
 else
 {
  fclose(fp);
  fp=fopen("book.dat","ab");
 }

 fwrite(&books,sizeof(struct bookinf),1,fp);   //写入信息
 fclose(fp);

 printf("\n\n\n\t信息输入完毕~按任意键继续\n");
 input=getchar();
 input=getchar();
 
 do      //要求用户选择是否继续输入新的信息
 { 
  system("cls");
  printf("\n\n\n\t1.继续输入\n");
  printf("\t2.返回管理菜单\n");
  printf("\n\t请选择服务类别:");
  scanf("%d",&inp);
  if (inp!=1&&inp!=2)
  { 
   printf("\n\t没有这项服务~\n");
   printf("\t按任意键重新选择");
   input=getchar();
   input=getchar();
  }
 }
 while (inp!=1&&inp!=2);

 switch(inp)
 {
 case 1: book_add();   break;   //选是的话则重复执行本函数
 case 2: adm_servelist(); break;
 }
}

/*对图书信息排序*/
void taxis()
{
 void adm_servelist();
 system("cls");
 int i=0,m,n;
 FILE *fp;
 char input;
 void adm_servelist();

 struct bookinf book_taxis[100],temp;
 if ((fp=fopen("book.dat","rb"))==NULL)   //判断图书信息文件是否存在
 { 
  printf("\n\n\n\t没有数据可读取!无法排序~\n");
  printf("\t按任意键回到管理菜单~");
  input=getchar();
  input=getchar();
  adm_servelist();
 }
 else    //存在即读取所有的信息存入结构体
 {
  rewind(fp);
  do
  {
   fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
   i=i+1;
  }
  while(!feof(fp));
  fclose(fp);
 }
 
 for (m=0;m<i-1-1;m++)    //起泡法排序
  for (n=0;n<i-1-1-m;n++)
   if (book_taxis[n].num>book_taxis[n+1].num)
   {
    temp=book_taxis[n];
    book_taxis[n]=book_taxis[n+1];
    book_taxis[n+1]=temp;
   }
   
 if ((fp=fopen("book.dat","wb"))==NULL)   //判断写入是否能成功
 { 
  printf("\n\n\n\t数据读取失败!请联系管理员~\n");
  printf("\t按任意键退出本系统~\n\t");
  input=getchar();
  input=getchar();
  exit(0);
 }
 else      //成功的话立刻写入排好顺序的信息
 {
 for (m=0;m<i-1;m++)
  fwrite(&book_taxis[m],sizeof(struct bookinf),1,fp);
 fclose(fp);
 }
 
 printf("\n\n\n\t排序完成!~\n\t按任意键返回管理选项菜单~\n\t");
 input=getchar();
 input=getchar();
 adm_servelist();
}

/*图书浏览*/
void book_view()
{
 void adm_servelist();
 void book_view();

 int inp,i=0,n=0;
 FILE *fp;
 char input;
 struct bookinf bookview[100];
 
 
 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
  {
   fread(&bookview[i],sizeof(struct bookinf),1,fp);
   i=i+1;
  }
  while (!feof(fp));
  fclose(fp);    
   
   do      //显示第一条记录
   { 
    system("cls");
    printf("\n\t--------共有%d条记录--------",i-1);
    printf("\n\n\t编号:   %d\n",bookview[n].num);
    printf("\n\t书名:   %s\n",bookview[n].bname);
    printf("\n\t作者名:   %s\n",bookview[n].wname);
    printf("\n\t分类号:   %s\n",bookview[n].clanum);
    printf("\n\t出版单位:   %s\n",bookview[n].pubcom);
    printf("\n\t出版时间:   %s\n",bookview[n].pubtime);
    printf("\n\t价格:   %f\n",bookview[n].price);

    printf("\n\n\t1.上一页\t2.下一页\t3.回目录\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==i-2)
      {
       printf("\n\t已到达最末页\n\t按任意键重新选择");
       input=getchar();
       input=getchar();
      }
      else
      {
       n=n+1;
      }
      break;
     }
    case 3: 
     {
      adm_servelist();
      break;
     }
    default:
     {
      printf("\n\t没有这项服务\n\t按任意键重新选择");
      input=getchar();
      input=getchar();
     }
    }
    
   }
   while (inp!=3);
 }
}

⌨️ 快捷键说明

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