c語言課程設計-電子英漢詞典(含源碼).doc
《c語言課程設計-電子英漢詞典(含源碼).doc》由會員分享,可在線閱讀,更多相關《c語言課程設計-電子英漢詞典(含源碼).doc(16頁珍藏版)》請在裝配圖網上搜索。
C語言課程設計 軟件學院 指導老師: 學號: 姓名:一、實驗題目及要求題目:電子英漢詞典設計要求 : 1.用圖形用戶界面實現(xiàn) 2.能夠編輯詞典庫中的信息3.能夠實現(xiàn)英譯漢,漢譯英。(要考慮一詞多義)二、實驗過程 主要思想 : 1 建立詞典庫(相關文件的處理) 2 設計詞典圖形用戶界面 3 查找單詞及詞典的重復使用(實現(xiàn)一詞多義) 主要過程 1.詞典庫的建立:文件的建立,寫入和調出參考老師給的FILE.C 文件 FILE.C大致內容 FILE *fp/*建立文件指針*/ fp=fopen(d:list.txt,wb+);/*在指定路徑建立文本文件*/ for(i=0;iSIZE;i+) /*將結構體中的內容 if(fwrite(&stui,sizeof(struct student),1,fp)!=1) 寫進指定文件中并進 printf(file write error!); 行判斷是否寫入*/ exit(0); fread(&stu_temp,sizeof(struct student),1,fp); /*將文件中的指定內容調出*/ 單詞庫存儲在指定路徑的指定文件中方便后文的查詢和調出 單詞庫的建立利用結構體可以包含一詞多義,并將漢譯英和英譯漢的詞典庫分 開以便實現(xiàn)英漢互譯(在中文dos環(huán)境下運行)圖例:(未在中文dos環(huán)境下運行)2. 設計詞典圖形用戶界面 參考文件Graph.c 進行圖形驅動 void init() int gdriver, gmode, i, j; gdriver = DETECT; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, ); 圖例(未設置鼠標前) 上網查找相關資料調用鼠標鼠標繪制函數(shù) 設置鼠標指針位置函數(shù) 設置函數(shù)得到鼠標左右鍵點擊的不同狀態(tài) (設置鼠標后運行結果全屏無法截圖) 在圖形界面下設計用戶界面并使用該鼠標設置相關區(qū)域的鼠標鍵點擊后得到不同的結果,進入英譯漢或漢譯英界面 3. 查找單詞及詞典的重復使用(考慮一詞多義) 利用文件指針和函數(shù)fseek ,fread 對結構體內的單詞名稱查找和該相關 釋義的調用同時考慮英漢互譯 設置查找不到單詞的頁面和利用while語句使實現(xiàn)詞典是否需要重復使用 功能 圖例:三、實驗結果及心得 根據題目描述基本達到題目要求。 在實驗過程中對照老師給予的幫助程序和相關軟件不斷構思得到大致的框架,不斷 的調試不斷的查詢函數(shù)用法的同時加深對c語言的認識,也許只是簡單的一句話也許只 是簡單的一個功能也是需要一個一個經過深思熟慮的代碼敲打出來。 此次試驗中了解圖形用戶界面,相關文件的存儲和調用,鼠標的調用及使用等等平常沒有接觸到的c語言的知識。深深感受到c語言博大精深,將為以后的軟件方面知識的學習打下深刻的基礎。四、代碼(dictionary)#include #include #include #include #include #include #include #include #include #define SIZE 2 /*設置詞典的詞匯量*/#define NO_PRESSED 0 /*為讀取鼠標的各個狀態(tài)*/#define LEFT_PRESSED 1#define RIGHT_PRESSED 2void DrawMouse(float x,float y);int setMousePos(int x,int y);int mouseStatus(int* x,int* y);void init();void box(int startx,int starty,int high,int width) ;struct word char name10; /*存儲英譯中詞典單詞名*/ char exp320; /*存儲英譯中詞典單詞釋義*/ char namm10; /*存儲中譯英詞典單詞名*/ char exx320; /*存儲英譯中詞典單詞釋義*/; /*創(chuàng)建存放單詞及其釋義的結構體*/char buf20*20*4; /*設置緩存區(qū)*/main() char *f=Chinese-English Translation(中譯英),English-Chinese Translation(英譯中); int key,y,x; char u; int t=0,r; int o1SIZE; int o2SIZE; /*o1,o2數(shù)組用來儲存單詞的釋義數(shù)目*/ char seek10; /*存儲查詢功能時用戶輸入的單詞*/ int last_x,last_y; int x1,y1; int x0,y0; int m=0; struct word stuSIZE,stu_eg; /*為讀取文件中內容設定的相關結構 體變量*/ FILE *fp; /*定義文件指針*/ int i,j;fp=fopen(c:list.txt,wb+); if(fp=NULL) printf(cannot open this filen); exit(0); /*創(chuàng)建或打開特定路徑的文件*/ for(i=0;iSIZE;i+) puts(English word:); scanf(%s,&stui.name); /*添加英譯中詞典中單詞名*/ u=y; /*字符變量u存儲用戶輸入的鍵盤值 查詢用戶是否需要添加釋義*/ j=0; /*變量j的數(shù)值能控制每個單詞釋義在 三個之內*/ while(u=y&j=2) o1i=j; /*int類型數(shù)組o1記載每個單詞擁有的 釋義數(shù)*/ printf(Chinese explanation %d :,j+1); y=wherey(); scanf(%s,stui.expj); gettext(1,1,60,14,buf); if(j2) printf(nanother explaination ? (nor y)n) ; getchar(); scanf(%c,&u); clrscr(); puttext(1,1,60,14,buf); gotoxy(1,y+2); j+; clrscr(); /*添加英譯中詞典中單詞*/ /*利用循環(huán)語句添加單詞釋義實現(xiàn)一次 多義功能 */ for(i=0;iSIZE;i+) puts(中文單詞:); scanf(%s,&stui.namm); u=y; j=0; while(u=y&j=2) o2i=j; printf(英文釋義 %d :,j+1); y=wherey(); scanf(%s,stui.exxj); gettext(1,1,60,14,buf); if(j2) printf(n增加釋義 ? (nor y)n) ; getchar(); scanf(%c,&u); clrscr(); puttext(1,1,60,14,buf); gotoxy(1,y+2); j+; /*相關解釋同上文英譯漢詞典中注釋*/ /*添加中譯英詞典中單詞*/ clrscr(); for(i=0;i170&x1210 & y1170&x1260 & y1290) m=2; break; if(x1470 |y1290); /*設定鼠標在界面內一定區(qū)域進行相關點 擊后實現(xiàn)的功能*/ restorecrtmode(); /*設計詞典的界面*/ while(u=y) /*利用u=y使詞典能重復使用*/ while(1) textbackground(3); textcolor(15); if(m=1) t=0; clrscr(); box(15,10,10,65); gotoxy(27,7); printf(English-Chinese Translation); gotoxy(31,12); rewind(fp); printf(enter the word:); gotoxy(31+strlen(enter the word:),12);/ *設計英譯漢詞典查找功能 時的頁面*/ scanf(%s,seek); for(i=0;iSIZE;i+) if(strcmp(stui.name,seek)=0) t=1; break; /*利用字符串strcmp函數(shù)實現(xiàn)查 找對比功能*/ if(t=1) /*如果找到相同單詞名令t=1,判 斷是否執(zhí)行下個步驟*/ fseek(fp,i*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(31,15); for(j=0;j=o1i;j+) if(j=0) printf(the explanation is :(%d) %s,j+1,stu_eg.expj); else gotoxy(31+strlen(the explanation is :),15+j); printf(%d) %s,j+1,stu_eg.expj); /*如果t=1,找到該單詞在文件中存儲的位置后,利用 循環(huán)結構,fseek和fread語句將其所有釋義調出, 循環(huán)的判斷次數(shù)取決o1數(shù)組內相對應的數(shù)字*/ for(i=0;iSIZE;i+) for(r=0;r=o2i;r+) if(strcmp(stui.exxr,seek)=0) t=2; break; /*如果找到相同單詞釋義令t=2,判 斷是否執(zhí)行下個步驟*/ if(t=2) break; if(t=2) rewind(fp); fseek(fp,(i)*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(31,15); printf(the explanation is :(1) %s,stu_eg.namm); /*如果t=2在漢譯英詞典庫中找到相關 釋義并將其單詞名調出*/ if(t=0) gotoxy(31,15); printf(sorry,dont find it); /*詞典庫中沒有此單詞則輸出 sorry,dont find it*/ getchar(); scanf(%c,&u) clrscr(); /*停頓使用戶看清結果*/ gotoxy(22,10); printf(Do you want use is again ?(n or y); gotoxy(35,14); printf(enter:); gotoxy(35+strlen(enter:),14); /*設計沒有查到單詞的界面*/ scanf(%c,&u); break; /*對u進行賦值來判定用戶是 否需要重新使用詞典*/ if(m=2) t=0; clrscr(); gotoxy(38,7); printf(漢譯英); box(20,10,10,60); gotoxy(35,12); rewind(fp); printf(輸入單詞:); gotoxy(35+strlen(輸入單詞:),12); scanf(%s,seek); for(i=0;iSIZE;i+) if(strcmp(stui.namm,seek)=0) t=1; break; if(t=1) fseek(fp,i*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(35,15); for(j=0;j=o2i;j+) if(j=0) printf(釋義:(%d) %s,j+1,stu_eg.exxj); else gotoxy(35+strlen(釋義:),15+j); printf(%d) %s,j+1,stu_eg.exxj); for(i=0;iSIZE;i+) for(r=0;r=o2i;r+) if(strcmp(stui.expr,seek)=0) t=2; break; if(t=2) break; if(t=2) rewind(fp); fseek(fp,(i)*sizeof(struct word),0); fread(&stu_eg,sizeof(struct word),1,fp); gotoxy(35,15); printf(釋義:(1) %s,stu_eg.name); if(t=0) gotoxy(35,15); printf(對不起,沒有這個單詞); getchar(); scanf(%c,&u); clrscr(); gotoxy(27,10); printf(重新查詢?(n or y); gotoxy(35,14); printf(輸入:); gotoxy(35+strlen(輸入:),14); scanf(%c,&u); break; /*相關注釋參考上文英譯中詞典*/ int mouseStatus(int* x,int* y) /*定義兩個寄存器變量,分別存儲入口參數(shù)和出口參數(shù)*/ union REGS inregs,outregs; int status; status=NO_PRESSED; /*入口參數(shù)AH3,讀取鼠標位置及其按鈕狀態(tài)*/ inregs.x.ax=3; int86(0x33,&inregs,&outregs); /*CX表示水平位置,DX表示垂直位置*/ *x=outregs.x.cx; *y=outregs.x.dx; /*BX表示按鍵狀態(tài)*/ if(outregs.x.bx&1) status=LEFT_PRESSED; else if(outregs.x.bx&2) status=RIGHT_PRESSED; return (status);/*設置鼠標指針位置函數(shù)*/int setMousePos(int x,int y) union REGS inregs,outregs; /*入口參數(shù)AH4,設置鼠標指針位置*/ inregs.x.ax=4; inregs.x.cx=x; inregs.x.dx=y; int86(0x33,&inregs,&outregs);/*繪制鼠標函數(shù)*/void DrawMouse(float x,float y) line(x,y,x+5,y+10); line(x,y,x+10,y+5); line(x+5,y+10,x+10,y+5); line(x+7,y+8,x+12,y+13); line(x+8,y+7,x+13,y+12); line(x+14,y+12,x+13,y+13); /*利用line函數(shù)一條一條繪制鼠標形狀*/void init() /*進行相關圖形驅動*/ int gdriver, gmode, i, j; gdriver = DETECT; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, ); void box(int startx,int starty,int high,int width) /*框框的建立*/ int i; gotoxy(startx,starty); putch(0xda); for (i=startx+1;i width;i+) putch(0xc4); putch(0xbf); for(i=starty+1;i high+starty;i+) gotoxy(startx,i); putch(0xb3); gotoxy(width,i); putch(0xb3); gotoxy(startx,starty+high-1); putch(0xc0); gotoxy(startx+1,starty+high-1); for(i=startx+1;i width;i+) putch(0xc4); putch(0xd9); return;- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 語言 課程設計 電子 英漢詞典 源碼
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.szxfmmzy.com/p-6588380.html