大佬教程收集整理的这篇文章主要介绍了基于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语言实现图书管理信息系统设计所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。