版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、中 國 地 質(zhì) 大 學(xué)本科生課程論文封面課程名稱 C語言課程設(shè)計 教師姓名 本科生姓名 本科生學(xué)號 本科生專業(yè) 所在院系 日期: 課程設(shè)計評語對課程論文的評語:平時成績:課程論文成績:總 成 績:評閱人簽名:注:1、無評閱人簽名成績無效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;3、如有平時成績,必須在上面評分表中標(biāo)出,并計算入總成績。目 錄課程設(shè)計評語2目 錄31課程論文題目42程序設(shè)計思路43功能模塊圖54數(shù)據(jù)結(jié)構(gòu)設(shè)計55算法設(shè)計56程序代碼167程序運(yùn)行結(jié)果218編程中遇到的困難及解決方法249總結(jié)心得及良好建議2410致謝241課程論文題目一種簡單的英文詞典排版系統(tǒng)的實(shí)現(xiàn):【要求】(
2、1)能輸入和現(xiàn)實(shí)打入的單詞;(2)能分辨出單詞;(3)對重復(fù)的單詞和已經(jīng)輸入的單詞能自動排除;(4)能按AZ的順序排版;(5)能將運(yùn)行結(jié)果以文本形式儲存;(6)具有添加新單詞重新排版的能力。提示(1)需求分析:運(yùn)行結(jié)果以文本形式儲存,因而要提供文件的輸入輸出操作;通過查找操作檢查重復(fù)單詞;提供排序操作現(xiàn)實(shí)按AZ的順序排版;提供插入操作添加新單詞并重新排版。另外通過鍵盤式菜單實(shí)現(xiàn)功能選擇。(2)總體設(shè)計:整個系統(tǒng)被設(shè)計為單詞錄入模塊,文件存儲模塊和單詞瀏覽模塊。其中單詞錄入模塊要完成輸入單詞,檢查是否重復(fù),排序操作。文件存儲模塊把存放單詞的數(shù)組中的數(shù)據(jù)寫入文件。單詞瀏覽模塊完成英文詞典的輸出,即
3、文件的輸出操作。(3)數(shù)據(jù)結(jié)構(gòu)采用指針數(shù)組或二維數(shù)組。以【Enter】鍵或者空格鍵作為單詞輸入結(jié)束標(biāo)志,對重復(fù)的單詞自動排除可選用查找方法,數(shù)據(jù)結(jié)構(gòu)可采用指針和數(shù)組。2程序設(shè)計思路在英文詞典排版當(dāng)中,人工統(tǒng)計的速度很慢,且容易出現(xiàn)差錯。本英文詞典排版系統(tǒng)的自動化加速了排版工作,提高工作效率本程序主要采用對零散的單詞進(jìn)行自動讀取,然后按單詞首字母順序講單詞保存到文檔,這樣的結(jié)構(gòu)化非常便于程序后續(xù)的排版工作。排版具體過程涉及到自動排除重復(fù)單詞與添加新單詞并重新排版等問題,將于正問中詳細(xì)介紹。本程序?qū)崿F(xiàn)了所有設(shè)計要求。整個系統(tǒng)被設(shè)計為單詞錄入模塊、文件存儲模塊和單詞瀏覽模塊。其中單詞錄入模塊要完成輸
4、入單詞、檢查是否重復(fù)、排序操作。文件存儲模塊把存放單詞的數(shù)組中的數(shù)據(jù)寫入文件。單詞瀏覽模塊完成英文詞典的輸出,即文件的輸出操作。一種簡單的英文詞典排版系統(tǒng)3功能模塊圖單詞排序單詞瀏覽單詞錄入4數(shù)據(jù)結(jié)構(gòu)設(shè)計數(shù)據(jù)結(jié)構(gòu)采用指針數(shù)組或二維數(shù)組:char* dictionaryN;或char dictionaryN20。其中N是宏定義#define N 256(表示單詞個數(shù))。(1)單詞錄入模塊輸入一個單詞,存放在一個臨時字符數(shù)組中,以空格或回車表示單詞的結(jié)束(這也是默認(rèn)操作),然后換行輸出剛剛輸入的單詞。采用插入排序算法的思想把該單詞插入單詞數(shù)組中,不同的是如果兩個單詞相同則不插入。(2)文件存儲模塊
5、 采用fwrite或fprintf把單詞數(shù)組輸入到文件中。(3)單詞瀏覽模塊采用fread或fscanf把單詞從文件中讀出,然后輸出。5算法設(shè)計(1)主函數(shù)【流程圖】顯示一系列的功能選項(xiàng) 根據(jù)n的值調(diào)用各功能模塊函數(shù)輸入n,判斷n是否是19NY【程序】#include stdio.h #include stdlib.h #include string.h #include ctype.h #define ROWS 256 #define COLS 32 static FILE *fp; static char aROWSCOLS; char get_option(void); int b(in
6、t count); void c(char *pt, int count); int check(char arr, int count); void storage(char *pt, int count);intn;/*n全局變量*/charwordN20;void menu()/*主界面*/int n,w;/*變量n保存選擇菜單數(shù)字,w判斷輸入的數(shù)字是否在功能菜單對應(yīng)數(shù)字范圍內(nèi)*/doputs(tt*MENU*nn);puts(tttWelcome to djs program!nn);puts(tttt 1.Add new word.);puts(tttt 2.Browse all t
7、he words.);puts(tttt 3.Search the word.);puts(tttt 4.Sort the words.);puts(tttt 5.Order by A-z.);puts(tttt 6.Exit!);puts(nntt*n);printf(Choice your number(1-6): bb);scanf(%d,&n);if(n6)/*對選擇的數(shù)字作判斷*/w=1;getchar();else w=0;while(w=1);switch(n)case 1:add();break;/*追加模塊*/case 2:browse();break;/*瀏覽模塊*/cas
8、e 3:search();break;/*查找模塊*/case 4:sort();break;/*分類模塊*/case 5:order();break;/*排序模塊*/case 6:exit(0);/*退出*/void main() /*主函數(shù)*/ menu();(2)公共函數(shù)【程序】int load()/*加載函數(shù)*/int i,count; int start; char *ptROWS; char ch, len; char input;if(fp=fopen(words.txt,a+)=NULL)/*以輸出打開方式,在此前的記錄被覆蓋*/printf(nCannot open file
9、!n);return NULL;for(i=0;!feof(fp);i+)fscanf(fp,%s,&wordi);fclose(fp);return i+1;/*返回記錄個數(shù)*/void save(int n)/*保存函數(shù),保存n個記錄*/FILE *fp;int i;if(fp=fopen(words.txt,a+)=NULL)/*以輸出打開方式,在此前的記錄被覆蓋*/printf(nCannot open file!n);exit(0);for(i=0;in;i+)fprintf(fp,%s,&wordi);fclose(fp);(3)各功能模塊設(shè)計1)分類模塊【程序】void sort
10、()int i,j,k;char c20;if(n=load()=0)printf(nCannot open file!n);exit(0);for(i=0;in;i+)for(j=0;j0)strcmp(c,wordj);strcmp(wordj,wordj+1);strcmp(wordj+1,c);save(n);printf(Successful!_.n);printf(nNow? 1.browse all 2.back);scanf(%d,&k);if(k=1)browse();else if(k=2)menu();2)排序模塊【流程圖】 返回主菜單 保 存 用選擇法排序【程序】voi
11、d order() /*排序模塊*/int aN,i,j,t;struct words;n=load();for(i=0;iN;i+)for(i=0;iN-1;i+)for(j=i+i;jaj)t=ai;ai=aj;aj=t;for(j=0;jN;j+)printf(%3d,ai);3)修改模塊【流程圖】顯示所有記錄,讓用戶看哪個要修改輸入要修改的單詞是否找到此單詞記錄YN顯示找到的單詞,調(diào)用修改函數(shù)提示沒有找到詢問用戶是否繼續(xù)修改Y返回主菜單Y【程序】void modify(int a) /*修改模塊*/char c20;printf(Enter the new word:);scanf(%
12、s,c);strcpy(worda,c);save(n);4)刪除模塊【流程圖】顯示所有記錄,讓用戶看哪個需要刪除輸入需要刪除的單詞是否找到此單詞記錄YN提示沒有找到顯示找到的記錄 調(diào) 用 刪 除 函 數(shù)返回主菜單詢問用戶是否繼續(xù)刪除YN【程序】void del(int a) /*刪除模塊*/int x,i,y;printf(Are you sure to delete this word?nt1).sure 2).no and back menu bb);scanf(%d,&x); /*輸入要修改的單詞*/if(x=1)for(i=a;in-1;i+) /*查找要修改的單詞*/strcpy(
13、wordi,wordi+1);save(n-1);printf(Successful!_.nNow? 1).one more 2).back menu);scanf(%d,&y);if(y=1)search();else if(x=2)menu();else if(x=2)menu();5)追加模塊詢問用戶是否繼續(xù)追加單詞保存追加的單詞輸入用戶要追加的的單詞調(diào)用加載函數(shù)n=load();并計算可以記錄個數(shù)n【流程圖】返回主菜單YN【程序】void add() /*追加模塊*/int i,x,w1,w2,w;char c20;if(n=load()=0)exit(0);elseputs(Ente
14、r the new word!n);scanf(%s,c); /*輸入要追加的單詞*/for(i=0;in;i+)if(strcmp(wordi,c)=0)break;if(in)w=1;doprintf(The word has already exit!n);printf(nnWhat do you want to do?nt1).enter one more 2).back menu bb);scanf(%d,&x);if(x2)w1=1;elsew1=0;while(w1=1);elsew2=1;strcpy(wordi,c);save(n+1);printf(Successful!_
15、.Now choose what you will do next?nt1).add another 2).back menu bb);doscanf(%d,&x);if(x2)w2=1;elsew2=0;while(w2=1);switch(x)case 1:add();break;case 2:menu();break;6)瀏覽(全部)模塊返回主菜單回到分類模塊用戶進(jìn)行選項(xiàng)顯示所有單詞記錄【流程圖】【程序】void browse() /*瀏覽(全部)模塊*/int i,w;if(n=load()=0) /*加載記錄*/printf(nCannot open file!n);exit(0);
16、for(i=0;in-1;i+)printf(%s/n,wordi);puts(Successful!_.Now 1.back menu 2.sort);scanf(%d,&w);if(w=1)menu();else if(w=2)sort();7)查找模塊是否找到該單詞記錄輸入需要查找的單詞【流程圖】YN返回主菜單讓用戶選擇1).查找另一個2).返回詢問用戶是否繼續(xù)查找提示沒有找到顯示找到的記錄YN【程序】void search() /*查找模塊*/int i,x,y;char vs20;if(n=load()=0) /*加載記錄*/printf(nCannot open file!n);e
17、xit(0);printf(Enter the word what you want to search!);scanf(%s,vs); /*輸入要查找的單詞*/for(i=0;in;i+) /*查找要修改的單詞*/if(strcmp(wordi,vs)=0)printf(Successful!_.nThe word is:%sn,wordi);/*找到需要修改的單詞*/printf(What would you like to do with the word?nt1).modify 2).delrte 3).nothing bb);scanf(%d,&y);if(y=1)modify(i)
18、;elsedel(i);if(i=n)printf(HOHO!Sorry.Not found);printf(Now.1).one more 2).back 3).exit);scanf(%d,&x);switch(x) case 1:search();break;case 2:menu();break;case 3:exit(0); 6程序代碼#include stdio.h #include stdlib.h #include string.h #include ctype.h #define ROWS 256 #define COLS 32 (靜態(tài))static FILE *fp;/作用
19、域僅限于本文件(靜態(tài))static char aROWSCOLS; char get_option(void);/選擇 int b(int count); void c(char *pt, int count); /排序int check(char arr, int count); void storage(char *pt, int count); 主菜單函數(shù)int main(void) int i,count; int start; char *ptROWS; char ch, len; char input; if(fp=fopen(words.txt,a+)=NULL) fputs(不
20、能打開或建立文件!n,stderr); exit(1); fseek(fp,0L,SEEK_END); start=(int)ftell(fp)/32; count=start; rewind(fp); if(fread(a,32*sizeof(char),start,fp)=0) i=0; puts(開始創(chuàng)建詞庫);puts(請輸入單詞(每行一個);puts(在新行輸入END結(jié)束輸入:); while(iROWS&scanf(%s, ai)=1) fflush(stdin); if(strncmp(ai,END,3)=0) count+=i; break; if(check(ai, i) c
21、ontinue; i+; puts(tt*歡迎使用字典排版系統(tǒng)*nn);puts( MENU );puts(您要做些什么?); puts(a. 顯示已有的單詞 b. 添加新單詞); puts(c. 對已有的單詞進(jìn)行排序 d. 退出); puts(nntt*n);while(input=get_option()!=d) if(input=a) puts(已有的單詞:); for(i=0;icount;i+) printf( ); puts(ai); if(input=b) puts(開始創(chuàng)建詞庫);puts(請輸入新的單詞(每行一個);puts(在新行輸入END結(jié)束輸入: ); count=b(
22、count); if(input=c) puts(對單詞進(jìn)行排序:); c(pt, count); for(i=0;icount;i+) printf( ); puts(pti); puts(還要做些什么?); storage(pt,count); fclose(fp); puts(謝謝使用,再見!); return 0; char get_option(void)/選擇函數(shù) char ch; while(ch=getchar()d) while(ch=getchar()!=n) ; puts(請輸入a,b,c或者d.); fflush(stdin); return ch; int b(int
23、 count) int i; i=count; while(iROWS&scanf(%s, ai)=1) fflush(stdin);/刷新標(biāo)準(zhǔn)輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄 if(check(ai, i) continue; if(strncmp(ai,END,3)=0) count=i; break; i+; return count; void c(char *pt, int count) /對字典按首字母排序,排序后的字典存儲在pt中 int i,j; char *temp; /把字典復(fù)制一份到pt中for(i=0;iROWS;i+) pti=ai; /冒泡法排序for(i=0;
24、icount;i+)for(j=i+1;j0)/比較字符串 temp=pti; pti=ptj; ptj=temp; int check(char arr, int count) int i; int flag=0; for(i=0;istrlen(arr);i+) if(isalpha(arri)=0) printf(%s不是一個單詞.n,arr); flag=1; break; for(i=0;icount;i+) if(strncmp(ai,acount,strlen(acount)+1)=0) puts(重復(fù)的單詞!); flag=1; return flag; void storage(c
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)業(yè)空間的項(xiàng)目評估與投資機(jī)會考核試卷
- 農(nóng)藥制造的生產(chǎn)線改造與智能化升級考核試卷
- 內(nèi)陸?zhàn)B殖食品安全與產(chǎn)品質(zhì)量管理考核試卷
- 初等教育的幼教資源與環(huán)境考核試卷
- 服飾產(chǎn)業(yè)鏈創(chuàng)新與智能化發(fā)展考核試卷
- 建筑物拆除工程與現(xiàn)代物流和城市運(yùn)輸?shù)膮f(xié)調(diào)發(fā)展考核試卷
- Sebaleic-acid-生命科學(xué)試劑-MCE
- Saikochromone-A-生命科學(xué)試劑-MCE
- 時尚攝影策劃
- 10 項(xiàng)目一 第10講 捆鈔
- 1π到100π表比較全
- 商業(yè)發(fā)票Commercial Invoice模板2
- 鋼副框鋁合金門窗施工方案
- 高中常用不規(guī)則動詞表(含音標(biāo))
- 初中知識結(jié)構(gòu)圖
- 中醫(yī)醫(yī)療技術(shù)操作規(guī)范
- ASTM_A29/A29M熱鍛及冷加工碳素鋼和合金鋼棒
- 培訓(xùn)機(jī)構(gòu)全日制全托生管理制度
- 一次性使用衛(wèi)生用品衛(wèi)生標(biāo)準(zhǔn)GB15979-2002
- 餐飲店勞動合同
- 民航氣象常用縮略語及符號含義
評論
0/150
提交評論