程序笔记   发布时间:2022-06-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了基于C语言实现图书管理信息系统设计大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了图书管理信息系统的设计与实现,供大家参,具体内容如下

#include<stdio.h>
#include<String.h>

#define BookSize 100
#define BLHum 50
#define BLHnum 50
#define RRnum 50

/*主数据库文件*/
typedef struct {
 int bno;
 char bname[21];
 int namenext;
 char author[9];
 int authnext;
 char press[11];
 int prenext;
 char sortno[4];
 int storenum;
 int borrownum;
}BookRecType;
typedef struct {
 BookRecType BookDbase[BookSize];
 int len;
}BookDbasefile;


/*书号索引文件*/
typedef struct {
 int bno;
 int RecNo;
}BIDxRecType;
typedef struct {
 BIDxRecType BnoIDx[BookSize];
 int len;
}BnoIDxfile;


/*书名链头索引文件*/
typedef struct {
 char bname[21];
 int lhead;
 int RecNum;
}BNRecType;
typedef struct {
 BNRecType LHFrecl[BLHum];
 int len1;
}LHfile1;


/*作者链头索引文件*/
typedef struct {
 char author[9];
 int lhead;
 int RecNum;
}barecType;
typedef struct {
 barecType LHFreC2[BLHnum];
 int len2;
}LHfile2;


/*出版社链头索引问件*/
typedef struct {
 char press[11];
 int lhead;
 int RecNum;
}BPRecType;
typedef struct {
 BPRecType LHFrec3[BLHnum];
 int len3;
}LHfile3;


/*读者文件*/
typedef struct {
 int rno;
 char name[8];
 int bn1;
 int bn2;
}RRecType;
typedef struct {
 RRecType ReadRec[RRnum];
 int len;
}Readfile;


/*借还书文件*/
typedef struct {
 int rno;
 int bno;
 char date1[9];
 char date2[9];
}BbookRecType;
typedef struct {
 BbookRecType Bbook[BookSize];
 int len;
}Bbookfile;


/*追加一条图书记录建立相关文件*/
BookDbasefile AppeDBaseRec(BookDbasefile df)
{
 int i;
 printf("书号 书名 作者名 出版社 分类 藏书量\n");
 scanf("%d%s",df.bookDbase[i].bno,df.bookDbase[i].bName);
 scanf("%s%s",df.bookDbase[i].author,df.bookDbase[i].press);
 scanf("%s %d",df.bookDbase[i].sortno,&df.bookDbase[i].storenum);
 df.bookDbase[i].borrownum = 0;
 return df;
}

/*修改书号索引表的设计*/
BnoIDxfile ChangeBnoIDxF(BookDbasefile df,BnoIDxfile bif)
{
 int i,j,k = 1;
 i = df.len;
 j = bif.len;
 while (j >= 1)
 {
  if (df.bookDbase[i].bno>bif.bnoIDx[j].bno)
  {
   k = j + 1;
   break;
  }
  j--;
 }
 if (bif.len>0)
  for (j = bif.len; j >= k; j--)
   bif.bnoIDx[j + 1] = bif.bnoIDx[j];
 bif.bnoIDx[k].bno = df.bookDbase[i].bno;
 bif.bnoIDx[k].RecNo = i;
 bif.len++;
 return bif;
}


/*修改书名索引以及书名链头索引的设计*/
LHfile1 ChangelinkheadF1(BookDbasefile *df,LHfile1 lhf1)
{
 int i,k,m;
 char sm[21];
 i = df->len;
 strcpy(sm,df->BookDbase[i].bName);
 j = 1;
 k = 0;
 while (j <= lhf1.len1)
 {
  if (strcmp(sm,lhf1.LHFrecl[j].bName) == 0)
  {
   k = j;
   break;
  }
  j++;
 }
 if (k != 0)
 {
  df->BookDbase[i].namenext = lhf1.LHFrecl[k].lhead;
  lhf1.LHFrecl[k].lhead = i;
  lhf1.LHFrecl[k].RecNum++;
 }
 else
 {
  m = ++lhf1.len1;
  df->BookDbase[i].namenext = 0;
  lhf1.LHFrecl[m].lhead = i;
  lhf1.LHFrecl[m].RecNum = 1;
  strcpy(lhf1.LHFrecl[m].bname,sm);
 }
 return lhf1;
}


/*修改作者索引以及作者链头索引表的设计*/
LHfile2 ChangelinkheadF2(BookDbasefile *df,LHfile2 lhf2)
{
 int i,m;
 char zz[9];
 i = df->len;
 strcpy(zz,df->BookDbase[i].author);
 j = 1;
 k = 0;
 while (j <= lhf2.len2)
 {
  if (strcmp(zz,lhf2.LHFreC2[j].author) == 0)
  {
   k = j;
   break;
  }
  j++;
 }
 if (k != 0)
 {
  df->BookDbase[i].authnext = lhf2.LHFreC2[k].lhead;
  lhf2.LHFreC2[k].lhead = i;
  lhf2.LHFreC2[k].RecNum = 1;
  strcpy(lhf2.LHFreC2[R_974_11845@].author,zz);
 }
 return lhf2;
}


/*修改出版社的索引以及出版社链头索引表的设计*/
LHfile3 ChangelinkheadF3(BookDbasefile *df,LHfile3 lhf3)
{
 int i,m;
 char cbs[11];
 i = df->len;
 strcpy(cbs,df->BookDbase[i].press);
 j = 1;
 k = 0;
 while (j <= lhf3.len3)
 {
  if (strcmp(cbs,lhf3.LHFrec3[j].press) == 0)
  {
   k = j;
   break;
  }
  j++;
 }
 if (k != 0)
 {
  df->BookDbase[i].prenext = lhf3.LHFrec3[k].lhead;
  lhf3.LHFrec3[k].lhead = i;
  lhf3.LHFrec3[k].RecNum++;
 }
 else
 {
  m = ++lhf3.len3;
  df->BookDbase[i].prenext = 0;
  lhf3.LHFrec3[m].lhead = i;
  lhf3.LHFrec3[m].RecNum = i;
  strcpy(lhf3.LHFrec3[m].press,cbs);
 }
 return lhf3;
}


/*用二分查找实现书号查询算法*/
int BinSearch(BnoIDxfile bif,int key)
{
 int low,high,mID;
 low = 1;
 high = bif.len;
 while (low <= high)
 {
  mID = (low + high) / 2;
  if (key == bif.bnoIDx[mID].bno)
   return bif.bnoIDx[mID].RecNo;
  else
   if (key<bif.bnoIDx[mID].bno)
    high = mID - 1;
   else
    low = mID + 1;
 }
 return 0;
}


/*按书名查询算法的设计*/
int BnameFind(LHfile1 lhf1,char keY[])
{
 int i,k = 0;
 for (i = 1; i<=lhf1.len1;i++)
 {
  if (strcmp(key,lhf1.LHFrecl[1].bName) == 0)
  {
   k = lhf1.LHFrecl[i].lhead;
   break;
  }
 }
 return k;
}


/*按作者查询算法的设计*/
int BauthFind(LHfile2 lhf2,k = 0;
 for (i = 1; i <= lhf2.len2; i++)
 {
  if (strcmp(key,lhf2.LHFreC2[i].author) == 0)
  {
   k = lhf2.LHFreC2[i].lhead;
   break;
  }
 }
 return k;
}

/*按出版社查询算法的设计*/
int BnameFind(LHfile3 lhf3,k = 0;
 for (i = 1; i <= lhf3.len3; i++)
 {
  if (strcmp(key,lhf3.LHFrec3[i].press) == 0)
  {
   k = lhf3.LHFrec3[i].lhead;
   break;
  }
 }
 return k;
}

/*输出一条图书主数据库记录的设计*/
voID ShowRec(BookDbasefile df,int i)
{
 printf("书号 书名 作者名 出版社 分类号 可借数\n");
 printf("==============================================\n");
 printf("%d%12s",df.bookDbase[i].bName);
 printf("%8s%12s",df.bookDbase[i].press);
 printf("%6s",df.bookDbase[i].sortno);
 printf("%4d\n",df.bookDbase[i].storenum - df.bookDbase[i].borROWNUM);
 printf("==============================================\n");
}

/*图书查询控制程序设计*/
voID SearchBook(BookDbasefile df,BnoIDxfile bif,LHfile1 f1,LHfile2 f2,LHfile3 f3)
{
 char sm[21],zz[9],cbs[11];
 int i,choose = 1;
 int sh;
 while (choose >= 1 && choose <= 5)
 {
  printf("图书查询子系统\n");
  printf("------------------\n");
  printf("1.书 号  2.书 名\n");
  printf("3.作 者  4.出版社\n");
  printf("5.退 出 查 询");
  printf("------------------\n");
  printf(" 请 用 户 选 择:");
  scanf("%d",&choosE);
  switch (choosE)
  {
  case 1:
   printf("输入学号:");
   scanf("%d",&sh);
   k = BinSearch(bif,sh);
   if (k == 0) {
    printf("没有要检查的图书,请检查是否输入有错\n");
    break;
   }
   ShowRec(df,k);
   break;

  case 2:
   printf("输入书名:");
   scanf("%",&sm);
   k = BnameFind(f1,sm);
   if (k == 0) {
    printf("没有要检查的图书,请检查是否输入有错\n");
    break;
   }
   for (i = k; i; i = df.bookDbase[i].namenext)
    ShowRec(df,i);
   break;

  case 3:
   printf("输入作者名:");
   scanf("%s",&zz);
   k = BauthFind(f2,zz);
   if (k == 0) {
    printf("没有要检查的图书,请检查是否输入有错\n");
    break;
   }
   for (i = k; i; i = df.bookDbase[i].authnext)
    ShowRec(df,i);
   break;

  case 4:
   printf("输入出版社:");
   scanf("%s",&cbs);
   k = BnameFind(f3,cbs);
   if (k == 0) {
    printf("没有要检查的图书,请检查是否输入有错\n");
    break;
   }
   for (i = k; i; i = df.bookDbase[i].prenext)
    ShowRec(df,k);
   break;

  case 5:
   return;
  }
 }
}


/*借还书处理算法*/
voID BorrowBook(BookDbasefile *bf,Bbookfile *bbf,Readfile *rf)
{
 char jyrq[9];
 int sh,dzh;
 int i,k = 0;
 printf("输入读者号 书号 借阅日期\n");
 scanf("%d%d%s",&dzh,&sh,jyrq);
 for (i = 1; i <= rf->len; i++)
 {
  if (dzh == rf->ReadRec[i].rno)
  {
   k = i;
   break;
  }
 }
 if (k == 0)
 {
  printf("非法读者!\n");
  return;
 }
 if (rf->ReadRec[k].bn2 >= rf->ReadRec[k].bn1)
 {
  printf("书已借满!\n");
  return;
 }
 j = BinSearch(bif,sh);
 if (j == 0)
 {
  printf("非法书号!");
   return;
 }
 if (bf->BookDbase[j].borrownum >= bf->BookDbase[j].storenum)
 {
  printf("图书已借出\n");
  return;
 }
 i = ++bbf->len;
 bbf->Bbook[i].rno = dzh;
 bbf->Bbook[i].bno = sh;
 strcpy(bbf->Bbook[i].date1,jyrq);
 rf->ReadRec[k].bn2++;
 bf->BookDbase[j].borrownum++;
 printf("借书成功!\n");
}

/*还书处理算法的设计*/
voID BACkBook(BookDbasefile *bf,Readfile *rf)
{
 char hsrq[8];
 int sh,k = 0,m = 0;
 printf("读者号 书号 还书日期\n");
 scanf("%d%d%s",hsrq);
 for (i = 1; i <= rf->len; i++)
 {
  if (dzh == rf->ReadRec[i].rno)
  {
   k = i;
   break;
  }
 }
 if (k == 0)
 {
  printf("非法读者!\n");
  return;
 }
 for (i = 1; i <= bbf->len; i++)
  if (sh == bbf->Bbook[i].bno)
  {
   m = i;
   break;
  }
 if (m == 0)
 {
  printf("非法书号!\n");
  return;
 }
 j = BinSearch(bif,sh);
 if (j == 0)
 {
  printf("非法书号!\n");
  return;
 }
 rf->ReadRec[k].bn2--;
 bf->BookDbase[j].borrownum--;
 strcpy(bbf->Bbook[m].date2,hsrq);
 printf("还书成功!\n");
}

/*读者管理子系统*/
Readfile ReadeRMANage(Readfile rf)
{
 int i;
 char yn = 'y';
 i = ++rf.len;
 while (yn == 'y' || yn == 'Y')
 {
  printf("输入读者号 读者名 可借图书数\n");
  scanf("%d %s",&rf.ReadRec[i].rno,rf.ReadRec[i].Name);
  scanf("%d",&rf.ReadRec[i].bn1);
  rf.ReadRec[i].bn2 = 0;
  printf("继续输入吗?y/n:");
  getchar();
  scanf("%c",&yn);
 }
 rf.len=i-1;
 return rf;
}

/*写各类文件*/
voID writefile(BookDbasefile bf,LHfile3 f3,Readfile rf,Bbookfile bbf)
{
 file *fp;
 int i;
 //图书主文件 
 fp = fopen("book","wb");
 for (i = 1; i <= bf.len; i++)
  fwrite(&bf.bookDbase[i],sizeof(BookRecTypE),1,fp);
 fclose(fp);
 //图书索引文件 
 fp = fopen("bIDx","wb");
 for (i = 1; i <= bif.len; i++)
  fwrite(&bif.bnoIDx[i],sizeof(BIDxRecTypE),fp);
 fclose(fp);
 //书名索引链头文件 
 fp = fopen("nIDx","wb");
 for (i = 1; i <= f1.len1; i++)
  fwrite(&f1.LHFrecl[i],sizeof(BNRecTypE),fp);
 fclose(fp);
 //作者索引链头文件
 fp = fopen("aIDx","wb");
 for (i = 1; i <= f2.len2; i++)
  fwrite(&f2.LHFreC2[i],sizeof(barecTypE),fp);
 fclose(fp);
 //出版社索引链头文件
 fp = fopen("pIDx","wb");
 for (i = 1; i <= f3.len3; i++)
  fwrite(&f3.LHFrec3[i],sizeof(BPRecTypE),fp);
 fclose(fp);
 //读者文件
 fp = fopen("read","wb");
 for (i = 1; i <= rf.len; i++)
  fwrite(&rf.ReadRec[i],sizeof(RRecTypE),fp);
 fclose(fp);
 //借还书文件
 fp = fopen("bbff","wb");
 for (i = 1; i <= bbf.len; i++)
  fwrite(&bbf.bbook[i],sizeof(BbookRecTypE),fp);
 fclose(fp);
}


/*读各类文件*/
voID readfile(BookDbasefile *bf,BnoIDxfile *bif,LHfile1 *f1,LHfile2 *f2,LHfile3 *f3,Readfile *rf,Bbookfile *bbf)
{
 file *fp;
 int i;
 //读图书主文件
 fp = fopen("book","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&bf->BookDbase[i],fp);
  i++;
  if (feof(fp))break;
 }
 bf->len = i - 2;
 fclose(fp);
 //读书好索引文件
 fp = fopen("bIDx","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&bif->BnoIDx[i],fp);
  i++;
 }
 bif->len = i - 2;
 fclose(fp);
 //读书名索引文件
 fp = fopen("nIDx","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&f1->LHFrecl[i],fp);
  i++;
 }
 f1->len1 = i - 2;
 fclose(fp);
 //读作者索引文件
 fp = fopen("aIDx","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&f2->LHFreC2[i],fp);
  i++;
 }
 f2->len2 = i - 2;
 fclose(fp);
 //读出版社索引链头文件
 fp = fopen("pIDx","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&f3->LHFrec3[i],fp);
  i++;
 }
 f3->len3 = i - 2;
 fclose(fp);
 //读读者文件
 fp = fopen("read","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&rf->ReadRec[i],fp);
  i++;
 }
 rf->len = i - 2;
 fclose(fp);
 //读借还书文件
 fp = fopen("bbff","rb");
 i = 1;
 while (!feof(fp))
 {
  fread(&bbf->Bbook[i],fp);
  i++;
 }
 bbf->len = i - 2;
 fclose(fp);
}

/*主控菜单*/
int main(voID)
{
 int j,m,k = 1;
 char xz = 'n';
 BookDbasefile bf;
 BnoIDxfile bif;
 LHfile1 f1;
 LHfile2 f2;
 LHfile3 f3;
 Readfile rf;
 Bbookfile bbf;
 while (k <= 5)
 {
  printf("图书管理系统\n");
  printf("============\n");
  printf(" 1.系统维护 \n");
  printf(" 2.读者管理 \n");
  printf(" 3.图书管理 \n");
  printf(" 4.图书流通 \n");
  printf(" 5.退出系统 \n");
  printf("============\n");
  printf(" 请选择1-5:");
  scanf("%d",&k);
  switch (k)
  {
   case 1:
    printf("系统维护\n");
    printf("--------\n");
    printf("1.初始化\n");
    printf("2. 读 盘\n");
    printf("--------\n");
    printf("请选择:\n");
    scanf("%d",&m);
    switch (m)
    {
    case 1:
     printf("初始化只能做一次,需慎重!初始化吗?y/n:");
     getchar();
     scanf("%c",&xz);
     if ( xz == 'y' || xz == 'Y')
     {
      bf.len = bif.len = f1.len1 = f2.len2 = 0;
      f3.len3 = rf.len = bbf.len = 0;
     }
     break;

    case 2:
     readfile(&bf,&bif,&f1,&f2,&f3,&rf,&bbf);
     break;
    }
    break;

   case 2:
    ReadeRMANage(rf);
    break;

   case 3:
    printf("图书管理子系统\n");
    printf("--------------\n");
    printf("1.图书信息输入\n");
    printf("2.图书信息查询\n");
    printf("--------------\n");
    printf(" 请 选 择 :");
    scanf("%d",&j);
    if (j == 1)
    {
     char yn = 'y';
     int k = 1;
     while (yn = 'y' || yn == 'Y')
     {
      bf = AppeDBaseRec(bf);
      bif = ChangeBnoIDxF(bf,bif);
      f1 = ChangelinkheadF1(&bf,f1);
      f2 = ChangelinkheadF2(&bf,f2);
      f3 = ChangelinkheadF3(&bf,f3);
      ShowRec(bf,k);
      k++;
      printf("继续输入吗?y/n:");
      getchar();
      scanf("%c",&yn);
     }
    }
    else
     SearchBook(bf,bif,f1,f2,f3);
    break;

   case 4:
     printf("图书流通子系统\n");
     printf("--------------\n");
     printf(" 1. 借书处理 \n");
     printf(" 2. 还书处理 \n");
     printf("--------------\n");
     printf(" 请 选 择 : \n");
     scanf("%d",&j);
     if (j == 1)
      BorrowBook(&bf,&bbf,&rf);
     else if (j == 2)
      BACkBook(&bf,&rf);
     break;

    case 5:
     printf("系统正在写盘,请稍后......\n");
     writefile(bf,f3,rf,bbf);
     printf("再见!\n");
     return 0;
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:

  • C语言实现简单学生成绩管理系统
  • C语言利用结构体数组实现学生成绩管理系统
  • C语言学生成绩管理系统设计
  • C语言学生成绩管理系统小设计
  • C语言学生成绩管理系统课程设计
  • C语言编写学生成绩管理系统
  • C语言实现简单学生管理系统
  • 学生成绩管理系统C语言代码实现
  • @L_404_8@
  • C语言图书管理系统简洁版

大佬总结

以上是大佬教程为你收集整理的基于C语言实现图书管理信息系统设计全部内容,希望文章能够帮你解决基于C语言实现图书管理信息系统设计所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。