




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
一.試驗?zāi)康挠酶呒壵Z言編寫和調(diào)試一種簡樸的文獻系統(tǒng),模擬文獻管理的工作過程。從而對多種文獻操作命令的實質(zhì)內(nèi)容和執(zhí)行過程有比較深入的理解。二、試驗規(guī)定規(guī)定設(shè)計一種n個顧客的文獻系統(tǒng),每次顧客可保留m個文獻,顧客在一次運行中只能打開一種文獻,對文獻必須設(shè)置保護措施,且至少有Create、delete、open、close、read、write等命令。程序采用二級文獻目錄(即設(shè)置主目錄[MFD])和顧客文獻目錄(UFD)。此外,為打開文獻設(shè)置了運行文獻目錄(AFD)。在執(zhí)行讀寫命令時,需改讀寫指針。因系統(tǒng)小,文獻目錄的檢索使用了簡樸的線性搜索。文獻保護簡樸使用了三位保護碼:容許讀寫執(zhí)行、對應(yīng)位為1,對應(yīng)位為0,則表達不容許讀寫、執(zhí)行。程序中使用的重要設(shè)計構(gòu)造如下:主文獻目錄和顧客文獻目錄(MFD、UFD)、打開文獻目錄(AFD)(即運行文獻目錄)MDF顧客名文獻目錄指針UFD文獻名保護碼文獻長度AFD打開文獻名打開保護碼讀寫指針文獻系統(tǒng)算法的流程圖如下:#include<stdio.h>#include<string.h>#defineN10#defineL10#defineS6structmfd_type{ charuname[20]; intuaddr;};structufd_type{ charfname[20]; charfattr[10]; intrecordl; intaddrf;};structuof_type{ charfname[20]; charfattr[10]; intrecordl; charfstatue;//1:建立0:打開 intreadp; intwritep;};intfdph[N*L];//寄存文獻在磁盤上的第一種空間編號intfdpt[N*L];//寄存文獻在磁盤上的最末一種空間編號intdisk[400];//寄存磁盤空閑塊號intdiskt,diskh;//空閑塊的尾、首指針最末structmfd_typemfd[N];structufd_typeufd[N*L];structuof_typeuof[N*S];inttemp,mi,ni,uno,ucounter;voidcreate(charcfname[20],intcrecordl,charcfattr[10]){ intcltemp1=uno*L,cltemp2=(uno+1)*L,frd;while((cltemp1<cltemp2)&&(strcmp(ufd[cltemp1].fname,cfname)!=0)) cltemp1++; if(strcmp(ufd[cltemp1].fname,cfname)!=0) { cltemp1=uno*L; while((cltemp1<cltemp2)&&(strcmp(ufd[cltemp1].fname,"")!=0))cltemp1++; if(strcmp(ufd[cltemp1].fname,"")==0) { frd=cltemp1; cltemp1=uno*S; cltemp2=(uno+1)*S; while((cltemp1<cltemp2)&&(strcmp(uof[cltemp1].fname,"")!=0))cltemp1++; if(strcmp(uof[cltemp1].fname,"")==0) { if(disk[diskh]!=-1) { strcpy(uof[cltemp1].fname,cfname); strcpy(uof[cltemp1].fattr,cfattr); uof[cltemp1].recordl=crecordl; uof[cltemp1].fstatue=1; uof[cltemp1].readp=disk[diskh]; uof[cltemp1].writep=disk[diskh]; fdph[frd]=disk[diskh]; fdpt[frd]=disk[diskh]; strcpy(ufd[frd].fname,cfname); strcpy(ufd[frd].fattr,cfattr); ufd[frd].recordl=crecordl; ufd[frd].addrf=disk[diskh]; diskh=disk[diskh]; printf("%s\n","文獻建立成功!"); } elseprintf("%s\n","磁盤沒有空間,不能建文獻!"); } elseprintf("%s\n","沒有空的登記攔1,不能建文獻"); } elseprintf("%s\n","沒有空的登記攔2,不能建文獻"); } elseprintf("%s\n","同名文獻不能建立!");};voidopen(charpfname[20],charooptype[10]){ intcltemp1=uno*L,cltemp2=(uno+1)*L; intcltemp3=uno*S,cltemp4=(uno+1)*S;while((cltemp1<cltemp2)&&(strcmp(ufd[cltemp1].fname,pfname)!=0))cltemp1++; if(strcmp(ufd[cltemp1].fname,pfname)==0) { while((cltemp3<cltemp4)&&(strcmp(uof[cltemp3].fname,pfname)!=0))cltemp3++; if(strcmp(uof[cltemp3].fname,pfname)==0)//有文獻 { if(uof[cltemp3].fstatue==0)printf("%s\n","文獻已打開!"); elseprintf("%s\n","此文獻正在建立,不能打開!"); } else//無文獻 { if(strcmp(ufd[cltemp1].fattr,ooptype)!=0)printf("%s\n","操作不合法,不能打開!"); else { cltemp3=uno*S; while((cltemp3<cltemp4)&&(strcmp(uof[cltemp3].fname,"")!=0))cltemp3++; if(strcmp(uof[cltemp3].fname,"")) printf("%s\n","在已開表中沒有空攔,不能打開文獻!"); else { strcpy(uof[cltemp3].fname,pfname); uof[cltemp3].recordl=ufd[cltemp1].recordl; strcpy(uof[cltemp3].fattr,ufd[cltemp1].fattr); uof[cltemp3].readp=ufd[cltemp1].addrf; uof[cltemp3].writep=ufd[cltemp1].addrf; uof[cltemp3].fstatue=0; printf("%s\n","打開文獻成功!"); } } } } else printf("%s\n","此文獻已不存在,不能打開!");};voidwrite(charwfname[20],intwrecordno){ intcltemp1=uno*L,cltemp2=(uno+1)*L; intcltemp3=uno*S,cltemp4=(uno+1)*S;while((cltemp3<cltemp4)&&(strcmp(uof[cltemp3].fname,wfname)!=0))cltemp3++; if(strcmp(uof[cltemp3].fname,wfname))printf("文獻沒有建立或打開,不能寫");//在已開文獻中沒有次文獻,不能寫 else//文獻建立或打開 { if(uof[cltemp3].fstatue)//建立 { printf("%s%d%s","寫第",uof[cltemp3].writep,"塊空間!"); if(disk[diskt]==-1) printf("%s\n","沒有空閑塊不能寫!"); else { uof[cltemp3].writep=disk[diskt]; diskt=disk[diskt]; printf("%s\n","寫文獻成功!"); } } else//打開 { if(strcmp(uof[cltemp3].fattr,"r")==0) printf("%s\n","操作不合法,不能寫!"); else { if(disk[diskt]==-1) printf("%s\n","沒有空閑塊不能寫!"); else { printf("%s%d%s\n","寫第",uof[cltemp3].writep,"塊空間!"); uof[cltemp3].writep=disk[uof[cltemp3].writep]; printf("%s\n","寫文獻成功!"); } } } }};voidread(charrfname[20],intrreadl){ intcltemp1=uno*S,cltemp2=(uno+1)*S,frd;while((cltemp1<cltemp2)&&(strcmp(uof[cltemp1].fname,rfname)!=0))cltemp1++; if(strcmp(uof[cltemp1].fname,rfname)==0) { printf("%s%d%s\n","第",uof[cltemp1].readp,"塊讀"); frd=fdph[uno*L]; while((cltemp2!=disk[frd])&&(disk[frd]!=-1))frd=disk[frd]; uof[cltemp1].readp=disk[frd]; printf("%s\n","文獻讀成功"); } elseprintf("%s\n","文獻未打開不能讀");};voidclose(charcofname[20]){ intcltemp1=uno*S,cltemp2=(uno+1)*S;while((cltemp1<cltemp2)&&(strcmp(uof[cltemp1].fname,cofname)!=0))cltemp1++; if(strcmp(uof[cltemp1].fname,cofname)==0) { printf("uof[cltemp1].fname=%s,cofname%s\n",uof[cltemp1].fname,cofname); cltemp2=uof[cltemp1].fstatue; printf("uof[cltemp1].fstatue=%d\n",cltemp2); switch(cltemp2) { case1:printf("%s\n","寫文獻結(jié)束符。");//置文獻結(jié)束狀態(tài) case0:strcpy(uof[cltemp1].fname,""); printf("%s\n","關(guān)閉文獻成功");break; default:printf("%s\n","文獻已關(guān)閉"); } } else printf("%s\n","文獻不存在!");};voiddeletef(chardfname[20]){ intcltemp1=uno*L,cltemp2=(uno+1)*L; intcltemp3=uno*S,cltemp4=(uno+1)*S;while((cltemp1<cltemp2)&&(strcmp(ufd[cltemp1].fname,dfname)!=0))cltemp1++; if(strcmp(ufd[cltemp1].fname,dfname)==0) { while((cltemp3<cltemp4)&&(strcmp(uof[cltemp3].fname,dfname)!=0))cltemp3++; if(strcmp(uof[cltemp3].fname,dfname)==0)strcpy(uof[cltemp1].fname,""); disk[diskt]=fdpt[cltemp1]; strcpy(ufd[cltemp1].fname,""); printf("%s\n","此文獻撤銷成功!"); } else printf("%s\n","此文獻已撤銷!");};voidlist(){ inttemp,temp1,fcounter=0,fucounter=0; printf("文獻名文獻屬性記錄長度文獻首地址\n"); for(temp=0;temp<ucounter;temp++) { fucounter=0; printf("顧客名為%s的顧客擁有的文獻:\n",mfd[temp].uname); for(temp1=temp*L;temp1<(temp+1)*L;temp1++) { if(strcmp(ufd[temp1].fname,"")>0) { printf("%s%s%d%d\n",ufd[temp1].fname,ufd[temp1].fattr,ufd[temp1].recordl,ufd[temp1].addrf); fucounter++; fcounter++; } } printf("該顧客文獻總數(shù):%d\n",fucounter); } printf("系統(tǒng)擁有文獻總數(shù):%d\n",fcounter);};intmain(){ intmmi,temp,temp1; charfname[20],cfattr[10],ooptype[10],chtemp[10]; intrecordl,rreadl; intchlen; charmun[20],inst[10],insts[10],instta[8][10]; strcpy(instta[0],"create"); strcpy(instta[1],"open"); strcpy(instta[2],"write"); strcpy(instta[3],"read"); strcpy(instta[4],"close"); strcpy(instta[5],"deletef"); strcpy(instta[6],"list"); strcpy(instta[7],"end"); printf("\n"); for(temp=0;temp<N;temp++) { strcpy(mfd[temp].uname,""); mfd[temp].uaddr=0; }for(temp=0;temp<N*L;temp++){ strcpy(ufd[temp].fname,""); strcpy(ufd[temp].fattr,""); ufd[temp].addrf=0; ufd[temp].recordl=0;} for(temp=0;temp<N*S;temp++) { strcpy(uof[temp].fname,""); strcpy(uof[temp].fattr,""); uof[temp].fstatue=0; uof[temp].readp=0; uof[temp].recordl=0; uof[temp].writep=0; } printf("請輸入顧客總數(shù):"); scanf("%d",&ucounter); printf("請輸入文獻目錄表(顧客名和顧客首地址),輸入e/E0為結(jié)束。\n"); for(temp=0;temp<ucounter;temp++) { scanf("%s%d",chtemp,&(mfd[temp].uaddr)); if(((chtemp,"e")==0)||(strcmp(chtemp,"E")==0))break; strcpy(mfd[temp].uname,chtemp); } ucounter=temp; printf("輸入文獻目錄表結(jié)束。\n"); for(temp1=0;temp1<ucounter;temp1++) { printf("請輸入第%d個顧客的目錄表。\n",temp1+1); printf("請輸入顧客目錄表(文獻名文獻屬性(r/w)文獻記錄長度文獻首地址,輸入e/Ee00為結(jié)束。\n"); for(temp=temp1*L;temp<(temp1+1)*L;temp++) { scanf("%s%s%d%d",chtemp,ufd[temp].fattr,&(ufd[temp].recordl),&(ufd[temp].addrf)); if((strcmp(chtemp,"e")==0)||(chtemp,"E")==0)break; strcpy(ufd[temp].fname,chtemp);// printf("%s,%s,%d,%d\n",ufd[temp].fname,ufd[temp].fattr,ufd[temp].recordl,ufd[temp].addrf); } } printf("顧客目錄表輸入結(jié)束。"); for(temp1=0;temp1<ucounter;temp1++) { printf("請輸入第%d個顧客的已開文獻表。\n",temp1+1); printf("%s\n","請輸入顧客已開文獻表,e/Ee0000為結(jié)束。\n文獻名文獻屬性(r/w)文獻記錄長度文獻狀態(tài)(0/1),文獻讀文獻寫\n"); for(temp=temp1*S;temp<(temp1+1)*S;temp++) { scanf("%s%s%d%d%d%d",chtemp,uof[temp].fattr,&(uof[temp].recordl),&(uof[temp].fstatue),&(uof[temp].readp),&(uof[temp].writep)); if((strcmp(chtemp,"e")==0)||(strcmp(chtemp,"E")==0))break; strcpy(uof[temp].fname,chtemp); // printf("%s,%s,%d,%d,%d,%d\n",uof[temp].fname,uof[temp].fattr,uof[temp].recordl,uof[temp].fstatue,uof[temp].readp,uof[temp].writep); } } printf("%s\n","輸入顧客已開文獻表結(jié)束。"); diskh=0; diskt=399; while(1) { printf("%s\n","請輸入顧客名"); scanf("%s",mun); uno=0; while((uno<ucounter)&&(strcmp(mfd[uno].uname,mun)!=0))uno++;// printf("uno=%d\n",uno); if(uno!=ucounter) { printf("%s\n","請輸入命令:"); scanf("%s",inst);// printf("%s\n",inst);// printf("!\n"); mi=0; chlen=strlen(inst); while((inst[mi]!='(')&&(mi<chlen)){insts[mi]=inst[mi];mi++;} insts[mi]='\0';// printf("!!\n");// printf("%s\n",insts); mmi=0; while((mmi<=7)&&(strcmp(instta[mmi],insts)!=0))mmi++;// printf("%d\n",mmi); switch(mmi) { case0:ni=0;mi++; while(inst[mi]!=',') {fname[ni]=inst[mi];mi++;ni++;}; mi++; fname[ni]='\0'; ni=0; recordl=0; while(inst[mi]!=',') {recordl=recordl*10+(inst[mi]-48);mi++;ni++;} mi++;ni=0; while(inst[mi]!=')') {cfattr[ni]=inst[mi];mi++;ni++;} mi++;cfattr[ni]='\0'; printf("%s,%d,%s\n",fname,recordl,cfattr); create(fname,recordl,cfattr);break; case1:ni=0;mi++; while(inst[mi]!=',') {fname[ni]=inst[mi];mi++;ni++;}; mi++; fname[ni]='\0'; ni=0; while(inst[mi]!=')') {ooptype[ni]=ins
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運城護理職業(yè)學(xué)院《計算機基礎(chǔ)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年過熱蒸汽干燥設(shè)備項目發(fā)展計劃
- 武漢體育學(xué)院體育科技學(xué)院《軟件測試基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- Unit2Reading1教學(xué)設(shè)計2024-2025學(xué)年滬教牛津版六年級英語上冊
- 城市環(huán)境衛(wèi)生管理服務(wù)項目效益評估報告
- 2021年電力工程電纜支架橋架施工作業(yè)指導(dǎo)書
- 2024新能源光伏電站運維管理標(biāo)準
- 2025年度綠色建筑項目催告函房屋買賣合同實施細則
- 汕頭2024年下半年廣東汕頭市金平區(qū)區(qū)屬學(xué)校招聘69人筆試歷年參考題庫附帶答案詳解
- 2025年度能源消耗優(yōu)化咨詢項目合同范本
- 濰坊2025年山東濰坊市產(chǎn)業(yè)技術(shù)研究院招聘7人筆試歷年參考題庫附帶答案詳解
- 小學(xué)五年級體育教案全冊(人教版)
- 《教育向美而生-》讀書分享課件
- 2024年 江蘇鳳凰新華書店集團有限公司招聘筆試參考題庫含答案解析
- 20以內(nèi)加減法口算題(10000道)(A4直接打印-每頁100題)
- 安全評價工作程序框圖流程圖
- 臨床血液學(xué)檢驗第5講骨髓活檢及細胞生物學(xué)實驗技術(shù)
- 空間生產(chǎn)理論
- 網(wǎng)絡(luò)營銷教案完整版講義
- 《固體物理學(xué)》全冊完整教學(xué)課件
- ATOS阿托斯葉片泵PFE-31PFE-41PFE-51選型資料樣本
評論
0/150
提交評論