版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書管理信息系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--圖書管理系統(tǒng)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)---圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--圖書管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---圖書管理信息系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-圖書管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--圖書管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告——圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--學(xué)院圖書管理系統(tǒng)
- 課程設(shè)計(jì)---圖書管理信息系統(tǒng)的分析與設(shè)計(jì)
- 圖書管理信息系統(tǒng)數(shù)據(jù)庫(kù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)實(shí)驗(yàn)報(bào)告
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)報(bào)告---圖書管借還管理信息系統(tǒng)數(shù)據(jù)庫(kù)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---- 圖書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 管理信息系統(tǒng)課程設(shè)計(jì)---圖書館管理信息系統(tǒng)
評(píng)論
0/150
提交評(píng)論