簡(jiǎn)單的英文詞典排版系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁
簡(jiǎn)單的英文詞典排版系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁
簡(jiǎn)單的英文詞典排版系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁
簡(jiǎn)單的英文詞典排版系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁
簡(jiǎn)單的英文詞典排版系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)2/14實(shí)驗(yàn)?zāi)夸浶枨蠓治觥?整體設(shè)計(jì)————————————2詳細(xì)設(shè)計(jì)————————————4調(diào)試與測(cè)試———————————6用戶手冊(cè)————————————6總結(jié)——————————————6附錄——————————————9一需求分析1目的我們所做的程序課題是一個(gè)“簡(jiǎn)單的英文詞典排版系統(tǒng)”。該課題目的在于鍛煉我們的自主動(dòng)手和創(chuàng)新、創(chuàng)造能力,同時(shí)通過自己看書學(xué)習(xí)文件的輸入輸出等功能的實(shí)現(xiàn),提升我們的自學(xué)能力。并通過自己思考程序的算法和函數(shù)的組建過程來提升我們的邏輯思維能力,最后是利用自我程序測(cè)試和改進(jìn)來增加我們對(duì)編程的進(jìn)一步了解,和提升編程的能力。其大背景是要為同學(xué)提供了一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來,鍛煉同學(xué)的分析解決實(shí)際問題的能力。提高學(xué)生適應(yīng)實(shí)際,實(shí)踐編程的能力。2預(yù)期達(dá)到功能(1) 能輸入和顯示所打的單詞。(2) 能分辨出單詞。(3) 對(duì)重復(fù)的單詞和已經(jīng)輸入的單詞能自動(dòng)排除。(4) 能按A-Z的順序排版。(5) 能將運(yùn)行結(jié)果以文本形式存儲(chǔ)。(6) 具有添加新單詞并重新排版的能力。(7)實(shí)現(xiàn)以上功能的選擇操作3需解決問題主要解決單詞輸入到文件和從文件輸出以及最后文件保存的問題,但是我們對(duì)C++的學(xué)習(xí)仍不完全,這就要求我們提前把課本上的“文件與流”這一章節(jié)的相關(guān)內(nèi)容進(jìn)行自學(xué)并應(yīng)用于其中。其次我們要解決如何實(shí)現(xiàn)查找單詞、分辨單詞、添加單詞以及對(duì)單詞進(jìn)行排序的系列問題,這要求我們能對(duì)已學(xué)習(xí)的內(nèi)容充分掌握并熟練應(yīng)用。詞庫文件建立并選擇功能詞庫文件建立并選擇功能添加單詞單詞排序搜索單詞顯示單詞文本形式存儲(chǔ)并退出1程序設(shè)計(jì)功能模塊圖2程序流程示意圖1)字符排序交換dic[j]和dic[j+1]flag=1交換dic[j]和dic[j+1]flag=1j++結(jié)束Flag=0循環(huán)控制變量jture開始Flag=1循環(huán)控制變量iI<r-1&&flag=1>?falsefalsej<r-i-1?dic[j]>dic[j+1]?tureturefalse 2)檢查模塊輸出輸出”noword”輸出”r=word”結(jié)束false輸出dic[r]r++r=0?true開始r=0循環(huán)控制變量rdic[r]!=EOF?truefalse三詳細(xì)設(shè)計(jì)1函數(shù)功能voidwrite(intr)將單詞寫入文件的函數(shù)intread()讀取文件函數(shù)voidzhucaidan()主菜單函數(shù)intpaixu()排序函數(shù)voidjiancha()檢查單詞模塊voidcharu(char*d)插入單詞模塊voidfind(char*s)查找單詞模塊voidxuanze()選擇菜單模塊2參數(shù)說明dic[N][20]N為100,即但單詞庫課輸入100個(gè)單詞,每個(gè)單詞長(zhǎng)度不得大于19*p為指向Data文件的指針flag,temp在不同的函數(shù)模塊中用于不同情況下的結(jié)果判斷與后續(xù)的程序執(zhí)行s[20],d[20],f[20]char類型的數(shù)組s、d和f用于臨時(shí)的單詞輸入放置t[20]char類型的數(shù)組t是用于臨時(shí)放置從文件中讀取的單詞way是用于switch語句中功能選項(xiàng)的選擇i,j,c等是普通的int變量函數(shù)調(diào)用voidxuanze()選擇菜單調(diào)用的函數(shù):jiancha()檢查函數(shù)、find(d)查找函數(shù)、charu(d)插函數(shù)以及zhucaidan()主菜單函數(shù)voidfind(char*s)查找單詞模塊調(diào)用的函數(shù):strcpy復(fù)制函數(shù)、strcmp比較大小函數(shù)、write(r)寫入文件函數(shù)voidcharu(char*d)插入單詞模塊調(diào)用的函數(shù):read()讀取函數(shù)、strcmp比較函數(shù)、strcpy復(fù)制函數(shù)、write(r)寫入文件函數(shù)、paixu()排序函數(shù)、voidjiancha()檢查單詞模塊調(diào)用的函數(shù):write(r)寫入文件函數(shù)intpaixu()排序函數(shù)調(diào)用的函數(shù):read()讀取函數(shù)、strcmp比較大小函數(shù)、strcpy復(fù)制函數(shù)、write(r)寫入文件函數(shù)intread()讀取文件函數(shù)調(diào)用的函數(shù):write(r)寫入文件函數(shù)main()主函數(shù)調(diào)用的函數(shù):jiancha()檢查函數(shù)、paixu()排序函數(shù)、xuanze()菜單選擇函數(shù)4算法實(shí)現(xiàn)插入模塊voidcharu(char*d)單詞存在情況:先輸入單詞放置于*d指向的d[20]臨時(shí)數(shù)組中,再利用for循環(huán)和strcmp比較函數(shù)看輸入的單詞是否已經(jīng)存在,存在flag=1,不存在將單詞保存break跳出for循環(huán)從新輸入單詞,flag仍等于0;單詞不存在情況:若flag=0,利用strcpy復(fù)制函數(shù)將新輸入的單詞復(fù)制到單詞庫已存在單詞的后面,單詞個(gè)數(shù)r增加1;繼續(xù)輸入:利用while語句,只要繼續(xù)輸入的字符不為0(即輸入的為單詞,用戶不返回主菜單),就可以執(zhí)行while語句繼續(xù)重復(fù)上述的檢查單詞和保存單詞的步驟;返回主菜單:若輸入的字符為0(即用戶要返回主菜單),while語句無法執(zhí)行,經(jīng)過從新排序后,利用return返回調(diào)用函數(shù),即voidxuanze()菜單選擇函數(shù),可從新選擇功能。查找單詞模塊voidfind(char*s)文件讀?。豪脀hile循環(huán)先將文件中以保存的單詞讀取到臨時(shí)的數(shù)組t[20]中,再從t數(shù)組中復(fù)制到到dic[r]數(shù)組中,最開始r為0,后r++;查找單詞:利用strcmp比較函數(shù)查找是否有與臨時(shí)存放在s[20]數(shù)組中單詞相同的以保存單詞;若strcmp的值為0(即用戶要查找的單詞存在),則c=r,c即為用戶要查找的單詞的序號(hào),此時(shí)flag=1,若flag不為1,輸出查找單詞不存在;繼續(xù)查找:方法同繼續(xù)插入單詞是一樣的,利用輸入的字符不為則執(zhí)行以上查找步驟,若輸入的字符為0,則不執(zhí)行查找步驟并return,返回到調(diào)用函數(shù)即voidxuanze()菜單選擇函數(shù)中,從新選擇功能。四調(diào)試與測(cè)試我們反復(fù)輸入從a到z的26個(gè)單詞,用很長(zhǎng)的單詞和很短的單詞來測(cè)試文件的保存能力。曾遇到的問題:1單詞的顯示擠在一起,之后我們?cè)谳敵鰌rintf中加入:“\t”來解決單詞顯示的美觀問題;2輸入的單詞仍無法保存在文件中,我們?cè)诓檎液洼斎氲饶K添加write()讀取函數(shù)后,使得單詞真正的保存在文件中;3開始并未建立文件,因此使程序無法運(yùn)行,后詢問老師問題得以解決;4一開始使用else語句來實(shí)現(xiàn)功能模塊的選擇無法運(yùn)行,后改為使用switch語句問題得以解決;5在進(jìn)行字符串的復(fù)制時(shí)開始并未使用字符串函數(shù),而是自行設(shè)計(jì)了函數(shù)來進(jìn)行字符串的復(fù)制及比較,發(fā)現(xiàn)無法成功,咨詢其他同學(xué)后討論可以利用現(xiàn)成的字符串函數(shù)來解決該問題;6在查找和插入單詞的返回主菜單的算法上開始使用的是goto語句,但會(huì)跳錯(cuò)程序,因此討論后改用return語句,直接返回主菜單的方法。以上問題每次調(diào)試均要?jiǎng)h除文件中以保存的單詞,從新輸入a到z的26個(gè)單詞,從新運(yùn)行。五用戶手冊(cè)進(jìn)入主菜單后,輸入“1”后開始輸入單詞。輸入完畢可按“0”返回主菜單。在主菜單頁面輸入“2”后可以查找單詞,輸入單詞按回車開始查找,查找完畢按“0”返回主菜單。在主菜單頁面輸入“3”后可以結(jié)束操作,同時(shí)在文件中保存已輸入的單詞。4.在主菜單頁面輸入“4”后可以檢查所有單詞,按“0”返回主菜單。六總結(jié)開始無單詞界面和主菜單:選擇way1(輸入單詞)并輸入單詞apple:選擇way2(查找單詞)界面:選擇way3(結(jié)束程序并保存):選擇way4(先檢查所有單詞):選擇0返回主菜單:重新打開程序:優(yōu)點(diǎn):程序所要求的功能基本存在且均可以正常執(zhí)行。缺點(diǎn):界面不夠美觀,某些算法效率仍不夠高。參考文獻(xiàn):C++程序設(shè)計(jì)(第二版)C語言初級(jí)教程附錄#include<stdio.h>#include<string.h>#defineN100chardic[N][20];FILE*p;/*file結(jié)構(gòu)輸入讀取*//*寫入文件*/voidwrite(intr){inti;p=fopen("Data.txt","w");//以寫方式打開文件for(i=0;i<r;i++) {fprintf(p,"%s\n",dic[i]);//輸入數(shù)組內(nèi)容,輸入到p指向的data文件里}fclose(p);//關(guān)閉文件}/*讀取文件*/intread(){intr=0;p=fopen("Data.txt","r");//r打開讀取文件while(fscanf(p,"%s",dic[r])!=EOF)//只要讀取的dic內(nèi)容不為結(jié)束,繼續(xù)增加讀??;讀取出來{ r++;}fclose(p);//關(guān)閉datawrite(r);//再從新寫入returnr;//輸入了r個(gè)單詞}/*主菜單*/voidzhucaidan(){printf("\n\n");printf("____________way=1:shuruwords______________________\n");printf("_____________way=2:chazhaowords_______________________\n");printf("________________way=3:end___________________________\n");printf("__________________way=4:jianchasuoyou_________________\n");printf("pleasexuanzaway=");}/*字符排序*/intpaixu(){inti,j,flag=1,r;chars[20];r=read(); /*類似于冒泡排序*/for(i=0;i<r-1&&flag==1;i++)//外層掃描一遍{flag=0;for(j=0;j<r-i-1;j++){if(strcmp(dic[j],dic[j+1])>0)//比較字符串的大小,即單詞的長(zhǎng)短排序;前面的若長(zhǎng)于后面的則交換{flag=1;strcpy(s,dic[j]);strcpy(dic[j],dic[j+1]);strcpy(dic[j+1],s);//通過復(fù)制交換}}}write(r);//拍完序再從新寫入return0;}/*檢查模塊————————————小塊————模塊函數(shù)*/voidjiancha(){ //檢查模塊在程序的開始,先對(duì)文件讀取,然后printf輸出顯示已經(jīng)保存的單詞intr=0;p=fopen("Data.txt","r");while(fscanf(p,"%s",dic[r])!=EOF){printf("%s\t",dic[r]);r++;}fclose(p);//————————————————————————————————————write(r);//檢查完再從新寫入if(r==0)printf("thereisnowordinData.txt\n");//即文件中尚沒有保存了單詞else{printf("\n\nthereare%dwordsinData.txt!\n",r);//文件中保存了r個(gè)單詞}}/*插入單詞———————————————————模塊函數(shù)case1———后面插入模塊會(huì)先輸入一個(gè)單詞,同時(shí)將其與以保存單詞作比較———*/voidcharu(char*d)//flag=0即為輸入的單詞未被保存到文件中。flag=1即輸入的單詞已經(jīng)存在于文件里{inti;charf[20];intr=read();intflag=0;//先對(duì)已經(jīng)保存的單詞做檢查,看剛插入的單詞是否已經(jīng)存在for(i=0;i<r;i++){if(strcmp(d,dic[i])==0)//通過字符串的比較,找到存在的情況{printf("theword%shasalreadycunzai\n",d);flag=1;//單詞存在flag=1break;}}if(flag==0)//之前保存的0到r-1的單詞里都沒有剛輸入的單詞的情況{printf("theword%sischenggongbaocun\n",d);//則單詞保存strcpy(dic[r],d);//將d指向的后輸入的單詞復(fù)制到dic[r]中r++;}printf("\n\njixuzengjiadanci,pleaseshuruaword;backtomainmenu,shuru0:\n");while(scanf("%s",f)&&!(f[0]=='0'&&f[1]==0))//輸入一個(gè)內(nèi)容到f當(dāng)中,只要不是0就一直可以檢查輸入{flag=0;//先假設(shè)輸入到f數(shù)組的單詞不已經(jīng)存在于文件中for(i=0;i<r;i++){if(strcmp(f,dic[i])==0)//從0到r-1單詞已經(jīng)存在,能夠找到與其相同的{printf("theword%shasalreadycunzai\n",d);//存在的情況flag=1;break;}}if(flag==0)//單詞不存在,并且保存{printf("theword%sissuccessfulbaocun\n",f);strcpy(dic[r],f);//將f復(fù)制到r上r++;}printf("\n\ncontinuezengjiadanci,pleaseshuruaword;backtomainmenu,shuru0:\n");}write(r);paixu();//從新排下序 write(r);return;//輸入的f數(shù)組為0后跳出while循環(huán),返回調(diào)用函數(shù)的xuanze函數(shù)}//————————————————————————————————————————/*查找已錄入單詞—————————————模塊函數(shù)case2———————————*/voidfind(char*s){chart[20];intflag=0;charf[20];intr=0,c,i;inttemp;p=fopen("Data.txt","r");while(fscanf(p,"%s",t)!=EOF)//將已經(jīng)排好順序的單詞一個(gè)個(gè)讀取出來{strcpy(dic[r],t);//將t復(fù)制到dic;r一開始賦值為0,將t挨個(gè)付給dic的0到r-1r++;temp=strcmp(s,t);//比較s與t串的大小,然后返回0左右的值;后查找模塊輸入一個(gè)單詞并由s指向他,將其與t中的單詞作比較if(temp==0)//若兩個(gè)單詞相同{c=r;flag=1;}}write(r);//從新再將單詞寫入文件中if(flag)//flag=1{printf("%s'snumberis%d!\n",s,c);//s指向的要查找的某個(gè)單詞是第c個(gè);}else{printf("cannotfind%s!\n",s);//沒有在存儲(chǔ)的文件中找到單詞}printf("\n\njixuezengjiadanci,pleaseshuruaword;backtomainmenu,shuru0:\n");while(scanf("%s",f)&&!(f[0]=='0'&&f[1]==0))//再次輸入單詞只要其不為0即可從新開始查找{flag=0;for(i=0;i<r;i++){if(strcmp(f,dic[i])==0){flag=1;c=i+1;break;}}if(flag){printf("%s'snumberis%d!\n",f,c);}else{printf("cannotfind%s!\n",f);}printf("\n\njixushurudanci,pleaseshuruaword;backtomainmenu,shuru0:\n");}return;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論