數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——圖書管理信息系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  圖書管理信息系統(tǒng)</b></p><p>  一、 課程設(shè)計(jì)題目:圖書管理信息系統(tǒng)</p><p><b>  二、課程設(shè)計(jì)內(nèi)容:</b></p><p>  實(shí)現(xiàn)圖書管理信息系統(tǒng)的設(shè)計(jì)。這是一個(gè)數(shù)據(jù)結(jié)構(gòu)的綜合使用,涉及的知識(shí)比較全面,特別是對(duì)文件的使用更為全面。</p><

2、;p>  進(jìn)入系統(tǒng)后,操作員可進(jìn)行系統(tǒng)維護(hù)、讀者管理、圖書管理、圖書流通、退出系統(tǒng)等操作。</p><p>  系統(tǒng)維護(hù):有“初始化”和“讀盤”兩個(gè)重要操作。第一次開始運(yùn)行時(shí),必須選擇“初始化”,使有關(guān)文件指針、計(jì)數(shù)器等初始化為0;而在以后的每次操作開始時(shí),選擇“讀盤”,將保存過(guò)的相關(guān)圖書信息磁盤文件讀入,以便進(jìn)行各類操作。</p><p>  讀者管理:可實(shí)現(xiàn)讀者信息的追加一項(xiàng)輸入

3、。需要輸入讀者號(hào)、讀者名、可借書數(shù)。 輸入“y”可連續(xù)輸入信息,若輸入“n”則結(jié)束輸入,退出讀者管理。</p><p>  圖書管理:有“圖書信息輸入”和“圖書信息查詢”兩個(gè)重要操作。若選“圖書信息輸入”,就進(jìn)入相關(guān)子模塊,在輸入信息的同時(shí)建立相應(yīng)的索引及索引文件和索引鏈頭文件,輸入書號(hào)、書名、作者名、出版社、分類號(hào)、藏書量等信息,根據(jù)提示輸入“y”實(shí)現(xiàn)連續(xù)輸入,若輸入“n”則結(jié)束輸入,退出圖書管理;有了圖書信息

4、數(shù)據(jù)之后,就可以進(jìn)行圖書信息的查詢以及圖書借閱等操作了。若選“圖書信息查詢”,可根據(jù)提示按書號(hào)、書名、作者、出版社等進(jìn)行查詢,系統(tǒng)會(huì)將查詢結(jié)果輸出。</p><p>  圖書流通:有“借書處理”和“還書處理”兩個(gè)重要操作。當(dāng)選擇“借書處理”,系統(tǒng)接受輸入信息后,首先查詢讀者文件。若沒(méi)查到,顯示“非法讀者!”,若查到,則再檢查該讀者書是否已借滿,如果未借滿,則繼續(xù)檢查圖書文件;否則顯示“書已借滿!”。檢查圖書文件如

5、發(fā)現(xiàn)書號(hào)不存在或書已借出,都會(huì)提示讀者“非法書號(hào)!”或“書已借出”,否則,進(jìn)行借出處理,修改借閱文件、讀者文件以及圖書主文件的相關(guān)數(shù)據(jù)項(xiàng),并顯示“借書成功!”。當(dāng)選擇“還書處理”,系統(tǒng)在接受輸入信息之后,首先用書號(hào)查詢借還書文件,若找到,則填入還書日期,然后再用書號(hào)查詢圖書主文件,修改借出數(shù),用讀者號(hào)查找讀者文件,修改讀者的借書數(shù),而后顯示“還書成功!”,否則顯示“非法書號(hào)!”并返回主控菜單。</p><p> 

6、 退出系統(tǒng):當(dāng)需要的操作完成后,選擇該項(xiàng),系統(tǒng)會(huì)自動(dòng)將當(dāng)前圖書數(shù)據(jù)及相關(guān)的信息寫入磁盤文件。待下次運(yùn)行系統(tǒng)時(shí),首先讀入文件,再進(jìn)行各種操作。</p><p><b>  三、算法設(shè)計(jì):</b></p><p>  對(duì)于主關(guān)鍵字的查找,采取折半查找的算法,對(duì)于次關(guān)鍵字的查找,采取順序查找的算法。</p><p>  存儲(chǔ)用到了靜態(tài)鏈表和文件操作。

7、</p><p>  四、程序正確性驗(yàn)證(指邊界測(cè)試數(shù)據(jù),即程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果):</p><p> ?。?)當(dāng)輸入相同的讀者信息時(shí):</p><p>  (2)當(dāng)輸入相同的圖書信息時(shí):</p><p> ?。?)當(dāng)借書時(shí)輸入無(wú)效的讀者號(hào)時(shí):</p><p> 

8、?。?)當(dāng)借書時(shí)輸入無(wú)效的書號(hào)時(shí):</p><p>  (5)當(dāng)還書時(shí)輸入錯(cuò)誤的書號(hào)時(shí):</p><p>  五、課程設(shè)計(jì)過(guò)程中出現(xiàn)的主要問(wèn)題、原因及解決方法:</p><p>  出現(xiàn)的主要問(wèn)題是:當(dāng)連續(xù)輸入三個(gè)字符串時(shí),第二個(gè)字符串不能傳入變量中;</p><p>  原因:第一個(gè)字符數(shù)組的長(zhǎng)度定義的有問(wèn)題。</p><

9、;p>  解決方法:讓三個(gè)字符串分開輸入,將第一個(gè)字符數(shù)組的長(zhǎng)度加1。</p><p>  出現(xiàn)的問(wèn)題還有,就是對(duì)scanf和prinf的用法不熟。</p><p>  課程設(shè)計(jì)的主要收獲:</p><p>  通過(guò)這次課程設(shè)計(jì),我對(duì)學(xué)過(guò)的知識(shí)進(jìn)行了綜合,一些理解的不夠深刻的問(wèn)題,能得以解決。從碰到問(wèn)題,在網(wǎng)上找資料,從圖書館借相關(guān)書籍看,請(qǐng)同學(xué)和老師幫忙,到

10、真正解決問(wèn)題,我經(jīng)歷了,從痛苦到喜悅的全過(guò)程。</p><p>  這次課程設(shè)計(jì)給我更多的,我想還是那份編程的經(jīng)驗(yàn)與其過(guò)程中的酸甜苦辣。</p><p>  同時(shí)很感謝幫助過(guò)我的同學(xué),更感謝胡老師的悉心教導(dǎo)。</p><p>  對(duì)今后課程設(shè)計(jì)的建議:</p><p>  希望老師在驗(yàn)收時(shí),不要盲目的相信學(xué)生,也不要懷疑學(xué)生,僅此而已。<

11、;/p><p><b>  源代碼</b></p><p>  /*borrow.c*//*(1)借書處理算法*/</p><p>  void BorrowBook(BookDbaseFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf)</p><p&

12、gt;  {char dzh[4],sh[5],jyrq[8];char a[5];int i,j,k=0,jls=0;</p><p>  cout<<"輸入讀者號(hào):";cin>>dzh;</p><p>  for(i=1;i<=rf.len;i++) //查找讀者文件</p><p>  if(st

13、rcmp(dzh,rf.ReadRec[i].rno)==0)</p><p>  { k=i;break;}</p><p><b>  if(k==0)</b></p><p>  {printf("非法讀者!\n");return;}</p><p>  if(rf.ReadRec

14、[k].bn2>=rf.ReadRec[k].bn1)</p><p>  { printf("書已借滿!\n");return;}</p><p>  cout<<"輸入書號(hào):";cin>>sh;</p><p>  strcpy(a,sh);</p><p>

15、  j=BinSearch(bif,sh); //查找圖書文件</p><p><b>  if(j==0)</b></p><p>  { printf("非法書號(hào)!\n");</p><p>  return;}</p><p>  if(bf.BookDbase[j].borrownum

16、>=bf.BookDbase[j].storenum)</p><p>  {printf("圖書已借出\n");</p><p>  return;}</p><p>  cout<<"輸入借書日期:"; cin>>jyrq;</p><p>  jls

17、=++bbf.len; //借還書文件記錄數(shù)加1</p><p>  strcpy(bbf.Bbook[jls].rno,dzh); //借還書文件追加一條記錄,記錄相關(guān)內(nèi)容</p><p>  strcpy(bbf.Bbook[jls].bno,a); strcpy(bbf.Bbook[jls].date1,jyrq);</p><p>  rf

18、.ReadRec[k].bn2++;</p><p>  cout<<"該讀者現(xiàn)在已借書數(shù):"<<rf.ReadRec[k].bn2<<endl;</p><p>  bf.BookDbase[j].borrownum++;</p><p>  cout<<"該圖書被借出次數(shù):"

19、<<bf.BookDbase[j].borrownum<<endl;</p><p>  printf("借書成功!\n");</p><p><b>  }</b></p><p>  /*(2)還書處理算法*/</p><p>  void BackBook(BookDba

20、seFile &bf,BnoIdxFile bif,BbookFile &bbf,ReadFile &rf)</p><p>  {char dzh[8],sh[4],hsrq[8];</p><p>  int i,j,k=0,m=0;</p><p>  cout<<"輸入讀者號(hào):"; scanf(&q

21、uot;%s",dzh);</p><p>  for(i=1;i<=rf.len;i++) //查找讀者文件</p><p>  if(strcmp(dzh,rf.ReadRec[i].rno)==0)</p><p>  { k=i;break;}</p><p>  if(k==0){printf("

22、;非法讀者!\n");return;}</p><p>  cout<<"輸入書號(hào):";scanf("%s",sh);</p><p>  for(i=1;i<=bbf.len;i++) //查詢借還書文件</p><p>  if(strcmp(sh,bbf.Bbook[i].bno)==

23、0)</p><p>  {m=i;break;}</p><p>  if(m==0){printf("書號(hào)有誤,不是該讀者所借的書的書號(hào)!\n");return;}</p><p>  j=BinSearch(bif,sh); //查找圖書文件</p><p>  if(j==0){printf(&quo

24、t;非法書號(hào)!\n");return;}</p><p>  cout<<"輸入還書日期:"; scanf("%s",hsrq);</p><p>  rf.ReadRec[k].bn2--; //修改借書數(shù)</p><p>  bf.BookDbase[j].borrownum--;

25、 //修改借出數(shù)</p><p>  strcpy(bbf.Bbook[m].date2,hsrq); //填入還書日期printf("還書成功!\n"); }</p><p>  /*createfile.c輸入圖書記錄建立相關(guān)文件*/</p><p>  /*(1)追加一條圖書主數(shù)據(jù)庫(kù)記錄*/</p><p>

26、;  void AppeDBaseRec(BookDbaseFile &df)</p><p>  {int i;i=++df.len; //圖書主數(shù)據(jù)庫(kù)長(zhǎng)度加1</p><p>  printf("書號(hào) 書 名 作者名 出版社 分類 藏書量\n");</p><p>  scanf("%s%s"

27、;,df.BookDbase[i].bno,df.BookDbase[i].bname);</p><p>  scanf("%s%s",df.BookDbase[i].author,df.BookDbase[i].press);</p><p>  scanf("%s %d",df.BookDbase[i].sortno,&df.BookD

28、base[i].storenum);</p><p>  df.BookDbase[i].borrownum=0; //借出數(shù)置0</p><p>  for(int j=1;j<i;j++)</p><p>  {if(strcmp(df.BookDbase[i].bno,df.BookDbase[i].bno)==0)</p><

29、;p>  {cout<<"已有相同的書號(hào),請(qǐng)重新輸入!"<<endl;</p><p>  df.len--;break;}</p><p><b>  }}</b></p><p>  /*(2)修改書號(hào)索引表*/</p><p>  void ChangeBn

30、oIdxF(BookDbaseFile &df,BnoIdxFile &bif)</p><p>  {int i,j,k;char sh[5];</p><p>  i=df.len; //圖書主文件的當(dāng)前長(zhǎng)度,也就是要處理的當(dāng)前記錄號(hào)</p><p>  strcpy(sh,df.BookDbase[i].bno); //取記錄中書

31、號(hào)送至變量sh中</p><p>  j=bif.len; k=1;</p><p>  while(j>=1)</p><p>  {if(strcmp(sh,bif.BnoIdx[j].bno)>0)</p><p>  {k=j+1;break;}j--;}</p><p>  if(bif.

32、len>0) //有序表的插入</p><p>  for(j=bif.len;j>=k;j--)</p><p>  bif.BnoIdx[j+1]=bif.BnoIdx[j]; //記錄后移</p><p>  strcpy(bif.BnoIdx[k].bno,sh);bif.BnoIdx[k].RecNo=i;</p>&l

33、t;p>  bif.len++; //表長(zhǎng)加1</p><p><b>  }</b></p><p>  /*(3)修改書名索引以及書名鏈頭索引表*/</p><p>  void ChangeLinkHeadF1(BookDbaseFile &df,LHFile1 &lhf1)</p><p&

34、gt;  {int i,j,k,m;char sm[20];</p><p>  i=df.len; //圖書主文件的當(dāng)前長(zhǎng)度,也就是要處理的當(dāng)前記錄號(hào)</p><p>  strcpy(sm,df.BookDbase[i].bname); //取記錄中書名送至變量sm中</p><p><b>  j=1;k=0;</b></p

35、><p>  while(j<=lhf1.len1)</p><p>  {if(strcmp(sm,lhf1.LHFrec1[j].bname)==0)</p><p>  { k=j;break;}j++;}</p><p><b>  if(k!=0)</b></p><p>  {

36、df.BookDbase[i].namenext=lhf1.LHFrec1[k].lhead;</p><p>  lhf1.LHFrec1[k].lhead=i; //i為主文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf1.LHFrec1[k].RecNum++;}</p><p>  else {m=++lhf1.len1; //索引關(guān)

37、鍵字個(gè)數(shù)加1</p><p>  df.BookDbase[i].namenext=0; //用頭插法建立鏈表,指針置空</p><p>  lhf1.LHFrec1[m].lhead=i; //i為主文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf1.LHFrec1[m].RecNum=1; //計(jì)數(shù)器置1</p><p>

38、  strcpy(lhf1.LHFrec1[m].bname,sm);}}</p><p>  /*(4)修改作者索引以及作者鏈頭索引表*/</p><p>  void ChangeLinkHeadF2(BookDbaseFile &df,LHFile2 &lhf2)</p><p>  {int i,j,k,m;char zz[8];<

39、/p><p>  i=df.len; //圖書主文件的當(dāng)前長(zhǎng)度,也就是要處理的當(dāng)前記錄號(hào)</p><p>  strcpy(zz,df.BookDbase[i].author);//取記錄中作者送至變量zz中</p><p><b>  j=1;k=0;</b></p><p>  while(j<=lhf2.len

40、2)</p><p>  { if(strcmp(zz,lhf2.LHFrec2[j].author)==0)</p><p>  {k=j; break;}j++;}</p><p><b>  if(k!=0)</b></p><p>  {df.BookDbase[i].authnext=lh

41、f2.LHFrec2[k].lhead;</p><p>  lhf2.LHFrec2[k].lhead=i; //i為文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf2.LHFrec2[k].RecNum++;}</p><p>  else{m=++lhf2.len2; //索引關(guān)鍵字個(gè)數(shù)加1</p><p>  df

42、.BookDbase[i].authnext=0; //用頭插法建立鏈表,指針置空 </p><p>  lhf2.LHFrec2[m].lhead=i; //i為主文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf2.LHFrec2[m].RecNum=1; //計(jì)數(shù)器置1</p><p>  strcpy(lhf2.LHFrec2[m].

43、author,zz);}}</p><p>  /*(5)修改出版社索引以及出版社鏈頭索引表。*/</p><p>  void ChangeLinkHeadF3(BookDbaseFile &df,LHFile3 &lhf3)</p><p>  {int i,j,k,m;char cbs[10];</p><p>  

44、i=df.len; //圖書主文件的當(dāng)前長(zhǎng)度,也就是要處理的當(dāng)前記錄號(hào)</p><p>  strcpy(cbs,df.BookDbase[i].press); //取記錄中書名送至變量sm中</p><p><b>  j=1;k=0;</b></p><p>  while(j<=lhf3.len3)</p><

45、;p>  { if(strcmp(cbs,lhf3.LHFrec3[j].press)==0)</p><p>  {k=j;break;}j++;}</p><p><b>  if(k!=0)</b></p><p>  {df.BookDbase[i].prenext=lhf3.LHFrec3[k].lhead;

46、</p><p>  lhf3.LHFrec3[k].lhead=i; //i為主文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf3.LHFrec3[k].RecNum++;}</p><p>  else{m=++lhf3.len3; //索引關(guān)鍵字個(gè)數(shù)加1</p><p>  df.BookDbase[i].pre

47、next=0; //用頭插法建立鏈表,指針置空</p><p>  lhf3.LHFrec3[m].lhead=i; //i為主文件的當(dāng)前記錄號(hào)(假定為指針)</p><p>  lhf3.LHFrec3[m].RecNum=1; //計(jì)數(shù)器置1</p><p>  strcpy(lhf3.LHFrec3[m].press,cbs);}}</p

48、><p>  /*(6)建立圖書多重表主索引及相關(guān)索引鏈頭文件。*/</p><p>  void CreateBook(BookDbaseFile &bf,BnoIdxFile &bif,LHFile1 &f1,LHFile2 &f2,LHFile3 &f3)</p><p>  { char yn='y';

49、</p><p>  while(yn=='y'||yn=='Y')</p><p>  { AppeDBaseRec(bf); //輸入記錄</p><p>  ChangeBnoIdxF(bf,bif); //修改書號(hào)索引文件</p><p>  ChangeLinkHeadF1(bf,f1);&l

50、t;/p><p>  ChangeLinkHeadF2(bf,f2);</p><p>  ChangeLinkHeadF3(bf,f3);</p><p>  cout<<"繼續(xù)輸入嗎? y/n :";</p><p>  cin>>yn; } }</p><p>  /*r

51、eader.c 讀者管理子系統(tǒng)*/</p><p>  void ReaderManage(ReadFile &rf)</p><p>  { int i;char yn='y';i=++rf.len;</p><p>  while(yn=='y'||yn=='Y')</p><p

52、>  {printf("輸入讀者號(hào) 讀者名 可借圖書數(shù)\n");</p><p>  scanf("%s %s",rf.ReadRec[i].rno,rf.ReadRec[i].name);</p><p>  scanf("%d",&rf.ReadRec[i].bn1);</p><p

53、>  rf.ReadRec[i].bn2=0; //將已借書數(shù)置0</p><p>  for(int j=1;j<i;j++)if(strcmp(rf.ReadRec[i].rno,rf.ReadRec[j].rno)==0&&strcmp(rf.ReadRec[i].name,rf.ReadRec[j].name)==0)</p><p> 

54、 {cout<<"已有該讀者的信息,請(qǐng)重新輸入!"<<endl;</p><p>  i=rf.len-1; break;}</p><p>  cout<<"繼續(xù)輸入嗎?y/n:";cin>>yn; i++;</p><p>  }rf.len=i-1;}<

55、/p><p>  /*readfile.c 讀入盤中各類文件*/</p><p>  void readfile(BookDbaseFile &bf,BnoIdxFile &bif,LHFile1 &f1,LHFile2 &f2,LHFile3 &f3,ReadFile &rf,BbookFile &bbf)</p>&l

56、t;p>  {FILE *fpout;int i;//讀圖書文件</p><p>  fpout=fopen("book","rb");</p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file book.txt!\n&quo

57、t;); exit(0);}i=1;</p><p>  while(!feof(fpout))</p><p>  {fread(&bf.BookDbase[i],sizeof(BookRecType),1,fpout);i++;if(feof(fpout))break;}</p><p>  bf.len=i-1;</p>&

58、lt;p>  fclose(fpout);//讀書號(hào)索引文件</p><p>  fpout=fopen("bidx","rb");</p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file bidx.txt!\n")

59、; exit(0);}i=1;</p><p>  while(!feof(fpout))</p><p>  {fread(&bif.BnoIdx[i],sizeof(BidxRecType),1,fpout);i++;if(feof(fpout))break;}</p><p>  bif.len=i-1;fclose(fpout);

60、//讀書名索引鏈頭文件</p><p>  fpout=fopen("nidx","rb");</p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file nidx.txt!\n"); exit(0);}i=1;</p

61、><p>  while(!feof(fpout))</p><p>  {fread(&f1.LHFrec1[i],sizeof(BNRecType),1,fpout);i++;}f1.len1=i-1;fclose(fpout);</p><p><b>  //讀作者索引文件</b></p><p> 

62、 fpout=fopen("aidx","rb");</p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file aidx.txt!\n"); exit(0);}i=1;</p><p>  while(!feof(fpou

63、t))</p><p>  {fread(&f2.LHFrec2[i],sizeof(BARecType),1,fpout);i++;}</p><p>  f2.len2=i-1;fclose(fpout);//讀出版社索引鏈頭文件</p><p>  fpout=fopen("pidx","rb");<

64、;/p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file pidx.txt!\n"); exit(0);}i=1;</p><p>  while(!feof(fpout))</p><p>  {fread(&f3.LHFrec3[

65、i],sizeof(BPRecType),1,fpout);i++;}</p><p>  f3.len3=i-1;fclose(fpout);//讀讀者文件</p><p>  fpout=fopen("read","rb");</p><p>  if(fpout==NULL)</p><p>

66、;  { printf("Cannot open this file read.txt!\n"); exit(0);}i=1;</p><p>  while(!feof(fpout))</p><p>  {fread(&rf.ReadRec[i],sizeof(RRecType),1,fpout);i++;}</p><p> 

67、 rf.len=i-1;fclose(fpout);//讀借還書文件</p><p>  fpout=fopen("bbff","rb");</p><p>  if(fpout==NULL)</p><p>  { printf("Cannot open this file bbff.txt!\n"

68、); exit(0);}i=1;</p><p>  while(!feof(fpout))</p><p>  {fread(&bbf.Bbook[i],sizeof(BbookRecType),1,fpout);i++;}</p><p>  bbf.len=i-1;fclose(fpout);}</p><p>  /

69、/search.c</p><p>  /*(1)書號(hào)查詢算法.用二分法查找實(shí)現(xiàn)書號(hào)查詢算法如下*/</p><p>  int BinSearch(BnoIdxFile bif,char key[])</p><p>  {int low,high,mid;low=1;high=bif.len;</p><p>  while(low

70、<=high){mid=(low+high)/2;</p><p>  if(strcmp(key,bif.BnoIdx[mid].bno)==0)return bif.BnoIdx[mid].RecNo;</p><p>  else if(strcmp(key,bif.BnoIdx[mid].bno)<0)high=mid-1;</p><p>

71、;  else low=mid+1;}</p><p>  return 0;}//BinSearch</p><p>  /*(2)按書名查詢算法*/</p><p>  int BnameFind(LHFile1 lhf1,char key[])</p><p>  {int i,k=0;for(i=1;i<=lhf1.len1;

72、i++)</p><p>  {if(strcmp(key,lhf1.LHFrec1[i].bname)==0)</p><p>  {k=lhf1.LHFrec1[i].lhead;break;}</p><p>  }return k;}</p><p>  /*(3)按作者查詢算法*/</p><p>  i

73、nt BauthFind(LHFile2 lhf2,char key[])</p><p>  {int i,k=0; for(i=1;i<=lhf2.len2;i++)</p><p>  {if(strcmp(key,lhf2.LHFrec2[i].author)==0){</p><p>  k=lhf2.LHFrec2[i].lhead;bre

74、ak;}}</p><p>  return k;}</p><p>  /*(4)按出版社查詢算法*/</p><p>  int BnameFind(LHFile3 lhf3,char key[])</p><p>  {int i,k=0; for(i=1;i<=lhf3.len3;i++)</p><

75、p>  {if(strcmp(key,lhf3.LHFrec3[i].press)==0)</p><p>  {k=lhf3.LHFrec3[i].lhead;break;}}return k;}</p><p>  /*(5)輸出一條圖書主數(shù)據(jù)庫(kù)記錄*/</p><p>  void ShowRec(BookDbaseFile df,int i)&l

76、t;/p><p>  {printf("書號(hào) 書 名 作者名 出版社 分類號(hào)\n");</p><p>  printf("==============================================\n");</p><p>  printf("%-6s%10s",df.

77、BookDbase[i].bno,df.BookDbase[i].bname);</p><p>  printf("%8s%8s",df.BookDbase[i].author,df.BookDbase[i].press);</p><p>  printf("%-6s\n",df.BookDbase[i].sortno);</p>

78、<p>  printf("==============================================\n");</p><p>  cout<<endl;}</p><p>  /*(6)圖書查詢控制程序*/</p><p>  void SearchBook(BookDbaseFile df,BnoId

79、xFile bif,LHFile1 f1,LHFile2 f2,LHFile3 f3)</p><p>  {char sh[5],sm[20],zz[8],cbs[10];int i,k,choose=1;</p><p>  while(choose>=1&&choose<=5)</p><p>  {printf("

80、 圖書查詢子系統(tǒng)\n");</p><p>  printf("---------------------\n");</p><p>  printf("1.書 號(hào) 2.書 名\n");</p><p>  printf("3.作 者 4. 出版社\n");</p><p&

81、gt;  printf("5.退出\n");</p><p>  printf("---------------------\n");</p><p>  printf("請(qǐng)用戶選擇: \n");</p><p>  scanf("%d",&choose);</p>

82、<p>  switch(choose)</p><p>  {case 1:printf("輸入書號(hào):\n");scanf("%s",sh);</p><p>  k=BinSearch(bif,sh); //調(diào)用書號(hào)查詢算法</p><p><b>  if(k==0)</b><

83、;/p><p>  {printf("沒(méi)有要查找的圖書,請(qǐng)檢查是否輸入有錯(cuò)\n");break;}</p><p>  ShowRec(df,k); //輸出查找的圖書記錄</p><p><b>  break;</b></p><p>  case 2:printf("輸入書名:\n&

84、quot;);scanf("%s",sm);</p><p>  k=BnameFind(f1,sm);//調(diào)用書名查詢算法</p><p><b>  if(k==0)</b></p><p>  {printf("沒(méi)有要查找的圖書,請(qǐng)檢查是否輸入有錯(cuò)\n");break;}</p>

85、<p>  for(i=k;i;i=df.BookDbase[i].namenext)</p><p>  ShowRec(df,i); //輸出一條圖書記錄break;</p><p>  case 3:printf("輸入作者名:\n");scanf("%s",zz);</p><p>  k=Bau

86、thFind(f2,zz); //調(diào)用作者查詢算法</p><p><b>  if(k==0)</b></p><p>  {printf("沒(méi)有要查找的圖書,請(qǐng)檢查是否輸入有錯(cuò)\n");break;}</p><p>  for(i=k;i;i=df.BookDbase[i].authnext)</p>

87、<p>  ShowRec(df,i); ////輸出一條圖書記錄break;</p><p>  case 4: printf("輸入出版社:\n");scanf("%s",cbs);</p><p>  k=BnameFind(f3,cbs); //調(diào)用作者查詢算法</p><p><b&g

88、t;  if(k==0)</b></p><p>  {printf("沒(méi)有要查找的圖書,請(qǐng)檢查是否輸入有錯(cuò)\n");break;}</p><p>  for(i=k;i;i=df.BookDbase[i].prenext)</p><p>  ShowRec(df,i); ////輸出一條圖書記錄break;</

89、p><p>  case 5:return;}}}</p><p>  //type.h//(1)主數(shù)據(jù)庫(kù)文件</p><p>  typedef struct{</p><p>  char bno[5]; //書號(hào)</p><p>  char bname[21]; //書名</p><p&g

90、t;  int namenext; //書名指針鏈,為了處理方便,僅將數(shù)據(jù)庫(kù)記錄號(hào)看為記錄的地址指針</p><p>  char author[9]; //作者</p><p>  int authnext; //作者鏈指針(用記錄號(hào))</p><p>  char press[11]; //出版社</p><p>  int

91、 prenext; //出版社鏈指針(用記錄號(hào))</p><p>  char sortno[4]; //分類號(hào)</p><p>  int storenum; //藏書量</p><p>  int borrownum; //借出數(shù)</p><p>  }BookRecType; //數(shù)據(jù)庫(kù)記錄類型&l

92、t;/p><p>  typedef struct{ BookRecType BookDbase[BookSize]; int len; //文件當(dāng)前長(zhǎng)度</p><p>  }BookDbaseFile; //定義圖書數(shù)據(jù)庫(kù)文件類型</p><p>  //(2)書號(hào)索引文件</p><p>  typedef struct{&

93、lt;/p><p>  char bno[5]; //書號(hào)</p><p>  int RecNo; //記錄指針</p><p>  }BidxRecType; //索引文件記錄類型</p><p>  typedef struct{BidxRecType BnoIdx[BookSize];int len; //當(dāng)前記錄個(gè)數(shù)&l

94、t;/p><p>  }BnoIdxFile; //書號(hào)索引文件類型</p><p>  //(3)書名鏈頭索引文件</p><p>  typedef struct{</p><p>  char bname[21]; //書名</p><p>  int lhead; //鏈頭指針</p>&l

95、t;p>  int RecNum; //長(zhǎng)度</p><p>  }BNRecType; //書名鏈頭文件記錄類型</p><p>  typedef struct{BNRecType LHFrec1[BLHnum];int len1; //鏈頭文件當(dāng)前長(zhǎng)度</p><p>  }LHFile1; //書名鏈頭文件類型</p>

96、<p>  //(4)作者鏈頭索引文件</p><p>  typedef struct{</p><p>  char author[9]; //作者</p><p>  int lhead; //鏈頭指針</p><p>  int RecNum; //長(zhǎng)度</p><p>  }BARec

97、Type; //作者鏈頭文件記錄類型</p><p>  typedef struct{BARecType LHFrec2[BLHnum];int len2;</p><p>  }LHFile2; //作者鏈頭文件類型</p><p>  //(5)出版社鏈頭索引文件</p><p>  typedef struct{<

98、;/p><p>  char press[11]; //出版社</p><p>  int lhead; //鏈頭指針</p><p>  int RecNum; //長(zhǎng)度</p><p>  }BPRecType; //出版社鏈頭文件記錄類型</p><p>  typedef str

99、uct{BPRecType LHFrec3[BLHnum];int len3;</p><p>  }LHFile3; //出版社鏈頭文件類型</p><p><b>  //(6)讀者文件</b></p><p>  typedef struct{</p><p>  char rno[4];

100、 //讀者號(hào)</p><p>  char name[8]; //讀者名</p><p>  int bn1; //可借書數(shù)</p><p>  int bn2; //已借書數(shù)</p><p>  }RRecType; //讀者文件記錄類型</p><p>  typ

101、edef struct{RRecType ReadRec[RRnum]; int len; //當(dāng)前讀者數(shù)</p><p>  }ReadFile; //讀者文件類型</p><p>  //(7)借還書文件</p><p>  typedef struct{</p><p>  char rno[4]; //讀者號(hào)<

102、/p><p>  char bno[5]; //書號(hào)</p><p>  char date1[9]; //借書日期</p><p>  char date2[9]; //還書日期</p><p>  }BbookRecType; //借還書文件類型</p><p>  typedef struct{

103、BbookRecType Bbook[BookSize];int len; //當(dāng)前借書數(shù)</p><p>  }BbookFile; //借還書文件類型</p><p>  /*writefile.c 各類文件寫盤*/</p><p>  void writefile(BookDbaseFile bf,BnoIdxFile bif,LHFile1

104、f1,LHFile2 f2,LHFile3 f3,ReadFile rf,BbookFile bbf)</p><p>  {FILE *fpin;int i;//寫圖書主文件</p><p>  fpin=fopen("book","wb");</p><p>  if(fpin==NULL)</p>&

105、lt;p>  { printf("Cannot open this file book.txt!\n"); exit(0);}</p><p>  for(i=1;i<=bf.len;i++)</p><p>  fwrite(&bf.BookDbase[i],sizeof(BookRecType),1,fpin);</p>

106、<p>  fclose(fpin);/寫圖書索引文件</p><p>  fpin=fopen("bidx","wb");</p><p>  if(fpin==NULL)</p><p>  { printf("Cannot open this file bidx.txt!\n");

107、exit(0);}</p><p>  for(i=1;i<=bif.len;i++)</p><p>  fwrite(&bif.BnoIdx[i],sizeof(BidxRecType),1,fpin);</p><p>  fclose(fpin);//寫書名索引鏈頭文件</p><p>  fpin=fopen(&quo

108、t;nidx","wb");</p><p>  if(fpin==NULL){ printf("Cannot open this file nidx.txt!\n"); exit(0);}</p><p>  for(i=1;i<=f1.len1;i++)fwrite(&f1.LHFrec1[i],sizeo

109、f(BNRecType),1,fpin);</p><p>  fclose(fpin); //寫作者索引鏈頭文件</p><p>  fpin=fopen("aidx","wb");</p><p>  if(fpin==NULL){ printf("Cannot open this file aidx.txt

110、!\n"); exit(0);}</p><p>  for(i=1;i<=f2.len2;i++)fwrite(&f2.LHFrec2[i],sizeof(BARecType),1,fpin);</p><p>  fclose(fpin);//寫出版社索引鏈頭文件</p><p>  fpin=fopen("pidx&qu

111、ot;,"wb");</p><p>  if(fpin==NULL){ printf("Cannot open this file pidx.txt!\n"); exit(0);}</p><p>  for(i=1;i<=f3.len3;i++)fwrite(&f3.LHFrec3[i],sizeof(BPRecType)

112、,1,fpin);</p><p>  fclose(fpin);//寫讀者文件</p><p>  fpin=fopen("read","wb");</p><p>  if(fpin==NULL){ printf("Cannot open this file read.txt!\n"); exi

113、t(0);</p><p>  for(i=1;i<=rf.len;i++)fwrite(&rf.ReadRec[i],sizeof(RRecType),1,fpin);</p><p>  fclose(fpin);//寫借還書文件</p><p>  fpin=fopen("bbff","wb");&l

114、t;/p><p>  if(fpin==NULL){ printf("Cannot open this file bbff.txt!\n"); exit(0);}</p><p>  for(i=1;i<=bbf.len;i++)fwrite(&bbf.Bbook[i],sizeof(BbookRecType),1,fpin);</p>

115、<p>  fclose(fpin);}</p><p>  #define BookSize 100 //假定圖書文件的最大可能記錄數(shù)</p><p>  #define BLHnum 50 //索引鏈頭文件中的記錄數(shù)</p><p>  #define RRnum 50 //讀者的最大可能數(shù)</p><p

116、>  #include <iostream></p><p>  using namespace std;</p><p>  #include <stdio.h> //包含標(biāo)準(zhǔn)系統(tǒng)輸入輸出頭文件</p><p>  #include <string.h> //包含字符串處理頭文件</p><

117、;p>  #include "type.h" //包含已定義各文件類型</p><p>  #include "createfile.c" //包含建立各種文件算法</p><p>  #include "search.c" //包含各種查詢算法</p><p>  #incl

118、ude "reader.c" //包含讀者管理算法</p><p>  #include "borrow.c" //包含借還書處理算法</p><p>  #include "writefile.c" //包含寫各種文件算法</p><p>  #include "readfil

119、e.c" //包含讀各類文件算法</p><p>  void main()</p><p>  {int j,m,k=1;char xz;BookDbaseFile bf;BnoIdxFile bif;LHFile1 f1; LHFile2 f2;LHFile3 f3;ReadFile rf;BbookFile bbf;</p><

120、p>  while(k<=5)</p><p>  { printf("圖書管理系統(tǒng)\n");</p><p>  printf("==============\n");</p><p>  printf("1.系統(tǒng)維護(hù)\n");</p><p>  printf(&

121、quot;2.讀者管理\n");</p><p>  printf("3.圖書管理\n");</p><p>  printf("4.圖書流通\n");</p><p>  printf("5.退出系統(tǒng)\n");</p><p>  printf("=======

122、=====\n");</p><p>  printf("請(qǐng)選擇1-5:\n");</p><p>  scanf("%d",&k);</p><p><b>  switch(k)</b></p><p>  {case 1:printf("系統(tǒng)維護(hù)

123、\n");</p><p>  printf("---------\n");</p><p>  printf("1.初始化\n");</p><p>  printf("2.讀盤\n");</p><p>  printf("3.返回\n");<

124、/p><p>  printf("---------\n");</p><p>  printf("請(qǐng)選擇:\n");</p><p>  scanf("%d",&m);</p><p><b>  switch(m)</b></p><

125、p>  {case 1:cout<<"初始化只能做一次,需慎重!初始化嗎?y/n:"<<endl;</p><p><b>  cin>>xz;</b></p><p>  if(xz=='y'||xz=='Y')</p><p>  {bf.len

126、=bif.len=f1.len1=f2.len2=0;</p><p>  f3.len3=rf.len=bbf.len=0;}break;</p><p>  case 2:readfile(bf,bif,f1,f2,f3,rf,bbf);break;</p><p>  case 3:break;}break;</p><p>

127、;  case 2:ReaderManage(rf);break;</p><p>  case 3:printf("圖書管理子系統(tǒng)\n");</p><p>  printf("---------------\n");</p><p>  printf("1.圖書信息輸入\n");</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論