




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高級語言程序設計課程設計學院計算機工程班級計算1113姓名李慧學號成績指導老師楊建富2012年06月29日計算 2011級高級語言程序設計課程設計大綱一、設計目的:通過課程設計,學會把相關的理論知識和實際應用相結合,鍛煉了獨立實踐的 能力;學會了查閱與設計相關資料的能力。二、設計內容:設計題目:學生使用 C 語言設計程序,產生如下界面,0-6 對應不同功能,若不用漢字, 可用拼音或英文表示。* TOC o 1-5 h z *1-輸入 2-加密 3- 解密 4- 顯示 5 統(tǒng)計 6 統(tǒng)計全部 0- 退出*請選擇(0-6):0退出系統(tǒng)。輸入信息,并寫入文本文件。對給定的文件進行加密。對給定的文件進
2、行解密。顯示文本文件的內容。5統(tǒng)計某單詞在文件中出現(xiàn)的次數(shù)。*6. 統(tǒng)計在文件中各單詞出現(xiàn)的次數(shù)(可選)。三、設計思想:主要思想為由總到分,由上到下的逐級分配任務的思想。通過主函數(shù)調用各個 被調用的函數(shù),再由被調用函數(shù)通過多個循環(huán)嵌套的使用實現(xiàn)各自的功能,最終 達到程序的要求。主函數(shù)中:先使用了 switch 選擇結構來調用不同命令下所對應的被調用函 數(shù),其中包括:輸入函數(shù)input(),加密函數(shù)jiami(),解密函數(shù)jiemi(),顯示函數(shù) showO,統(tǒng)計函數(shù)count()。在每個被調用函數(shù)中還多次調用了用來判斷是否要繼 續(xù)的函數(shù)judge(),以達到循環(huán)的目的。在主函數(shù)中還多次使用清屏
3、命令system(“cls”以及刷新全部流的命令flushall(),使調用函數(shù)后,界面保持清潔, 提高了程序的易讀性。2輸入函數(shù)中:while(c=getchar()!=EOF)的使用能提示使用者結束的命令,并 且通過fputc(c,fp)把一個字符c寫到由文件指針fp指定的磁盤文件上。3加密函數(shù)中:先定義兩個指針,將輸入的文件內容通過fputc(c+1,fp1);進行 加密并保存到fpl所指定的文件上。保存成功后,使用remove(fname);語句刪除 掉原文件,并使用rename(jiami.txt,fname);語句將加密后的文件名改為已被刪 除的原文件名。解密函數(shù)中:考慮到解密時的
4、安全性問題,在進入解密系統(tǒng)時,需先輸入進 入解密系統(tǒng)的密碼,因此在程序的主函數(shù)外先對解密系統(tǒng)密碼進行初始值化,然 后在進入解密系統(tǒng)時輸入該密碼就可進入。由于加密時是對每個文件內容都加上 了 1,所以解密時只需再減 1 即可。顯示函數(shù)中:while(!feof(fp)語句用來判斷是否到了文件的末尾,可以用來 保證文件的內容都被顯示出來。統(tǒng)計函數(shù)中:先定義一個字符串數(shù)組,將文件中的內容存到數(shù)組中,再使用 tolower 函數(shù)統(tǒng)一將數(shù)組所有字符轉化為小寫字母,將用戶輸入的字符也轉化為 小寫字母,用strcmp來比較輸入的字符是否與文件中的字符相等,若相等,則 變量jishu加1,最后可以統(tǒng)計出所查單
5、詞在文件中的數(shù)目。l=strlen(word);語句 表示用戶輸入字符的長度。7高級統(tǒng)計函數(shù)中:通過調用tol()自定義函數(shù)來判斷文件中的字符是否是小寫 字母,若是的話,則將文件中的字符賦值給二維字符串數(shù)組cpy,而二維字符串數(shù)組則通過兩個for循環(huán)嵌套來與自身進行比較,并且通過變量a的自增與自減來實現(xiàn)將重復被統(tǒng)計過的單詞減去被多統(tǒng)計的次數(shù),算出正確的單詞個數(shù)。四、實驗小結:過多的嵌套級別可能會使程序難以理解,應避免使用超過3個級別的縮 進。把程序寫成小函數(shù)的集合,有助于程序編寫、調試、維護和修改的方便。在相關性不是很大的語句之間可以使用空行隔開,有利于區(qū)分各個語句的 具體作用,在修改程序時起
6、到一定的作用,提高了程序的可讀性。在switch語句中未加getchO;使得界面不會停留,直接跳回主菜單界面。在輸入文件時,語句scanf(%s,fname);中的s誤寫成c,導致輸入錯誤。6在對文件操作時需要注意關閉文件的操作,假如沒有關閉,將會使在運行 程序之時,不能對文件進行刪除或者重命名的操作。導致一些未知錯誤。要及時使用清屏函數(shù)清除鍵盤緩沖區(qū)的文件及數(shù)據(jù)流,否則會導致不必要 的錯誤。8在編寫解密程序時,要注意使用兩個while進行嵌套,使得在判斷是否輸 入密碼正確后,再判斷解密的文件及是否繼續(xù)解密其他文件。9.通過這次的課程設計,我明白了,不管多么復雜的程序,其實都是有許許 多多的小
7、集合體組成的,只要肯花時間,肯認真,在編寫程序的實踐中,終將會 將一系列的問題解決,從而達到目的,提高自己的能力,實踐是檢驗真理的唯一 標準!附錄:程序清單#include/ 文件名字符串數(shù)組大小 / 解密碼字符串數(shù)組大小 / 單詞字符串數(shù)組的大小 / 數(shù)組大小#include #include #include #include #define N 30 / 文件名字符串數(shù)組大小 / 解密碼字符串數(shù)組大小 / 單詞字符串數(shù)組的大小 / 數(shù)組大小void menu(void); void input(void); void jiami(void); void jiemi(void); void
8、 show(void);void count1(void);void count2(void);/ void menu(void); void input(void); void jiami(void); void jiemi(void); void show(void);void count1(void);void count2(void);/ 輸入數(shù)據(jù)的函數(shù)/ 對輸入數(shù)據(jù)加密的函數(shù)/ 對已加密內容進行解密的函數(shù)/ 顯示內容的函數(shù)/ 統(tǒng)計要查找的單詞出現(xiàn)次數(shù)的函數(shù)int judge(void);char code=2011810063;/ 判斷是否要繼續(xù)的函數(shù)/ 設置進入解密系統(tǒng)所需的密碼i
9、nt judge(void);char code=2011810063;/ 判斷是否要繼續(xù)的函數(shù)/ 設置進入解密系統(tǒng)所需的密碼main()int num;while(1)menu(); flushall(); scanf(%d, &num); switch(num)case 0: printf(n); exit(0);case 1: system(cls); input(); break;case 2: system(cls); jiami(); break;case 3: system(cls); jiemi(); break;case 4: system(cls); show(); bre
10、ak;case 5: system(cls); count1(); break;case 6:system(cls); count2(); break;default:printf(nt 輸入錯誤,請按規(guī)范重新輸入!);break;case 6:system(cls); count2(); break;default:printf(nt 輸入錯誤,請按規(guī)范重新輸入!);break; getch(); flushall(); system(cls);void menu(void)/ 等待數(shù)據(jù)輸入,使界面停留printf(nnnnt*printf(t* *n);printf(t* 1-輸入 2-加
11、密 3-解密 4-顯示 5-統(tǒng)計 6-統(tǒng)計全部 0-退出 *n);printf(t*n);printf(t*printf(t*printf(nnt 0.退出系統(tǒng)。n);printf(t 1.輸入信息,并寫入文本文件。n); printf(t 2. 對給定的文件進行加密。 n); printf(t 3. 對給定的文件進行解密。 n); printf(t 4. 顯示文本文件的內容。 n);printf(t 5統(tǒng)計某單詞在文件中出現(xiàn)的次數(shù)。 n); printf(t 6. 統(tǒng)計在文件中各單詞出現(xiàn)的次數(shù)。 n);printf(nt 請選擇(0-6):);void input(void)int n=1;
12、FILE *fp; char c, fnameN;while(n)printf(n請輸入文件名:n); scanf(%s,fname);if (fp=fopen(fname,w) = NULL)prin tf(文件打不開!n); exit(0);elsepri ntf(”請輸入文件內容:(若結束請按ctrl+z)n); flushall();while(c=getchar()!=EOF) / 輸入文件的內容,以ctrl+z 結束 fputc(c,fp);fclose(fp);pri ntf(文檔輸入并保存成功!n);printf(n若繼續(xù)創(chuàng)建文檔,請輸Y或y.);flushall();n=ju
13、dge();/ 退出解密系統(tǒng)void jiami(void)int n=1;FILE *fp,*fp1;char c,fnameM;while(n)printf(n請輸入要加密的文件名稱:n);scanf(%s,fname);if (fp=fopen(fname,r) = NULL)printf(n無法打開文件!n若重新輸入,請輸Y或y.); flushall();n=judge();if (fp1=fopen(jiami.txt,w)=NULL)prin tf(無法打開文件!n ”);exit(0);while(c=fgetc(fp)!=EOF)/ 按 ctrl+z 結束/ 加密/ 加密fp
14、utc(c+1,fp1); putchar(c+1);fclose(fp1);fclose(fp);remove(fname);/ 刪除被加密的原文件rename(jiami.txt,fname);/ 加密后的文件名更改為原文件名printf(n文檔加密并保存成功!n);printf(nn 是否繼續(xù)加密?若繼續(xù)請按 Y 或 y.n);n=judge();flushall();void jiemi(void)int n=1;FILE *fp,*fp1;char c, fnameM,code1M;while(n)printf(n 請輸入進入解密系統(tǒng)所需密碼:);scanf(%s,code1);if
15、(strcmp(code1,code)=0)/比較字符串大小是否相等while(n)printf(n 請輸入要解密的文件名:);scanf(%s,fname);if (fp=fopen(fname,r) = NULL)printf(n文件打不開n);exit(0);if (fp1=fopen(jiemi.txt,w)=NULL)prin tf(無法打開文件!n ”);exit(0);while(c=fgetc(fp)!=EOF)/ 解密/ / 解密/ 刪除被解密的原文件/ 解密后的文件名更改為原文件名fclose(fp1);fclose(fp);remove(fname);rename(jie
16、mi.txt,fname);printf(n是否繼續(xù)解密?若繼續(xù)請按Y或y.); n=judge();elseprintf(n 輸入密碼有誤!請重新輸入.n);flushall();void show(void)int n=1;FILE *fp;char fnameM;while(n)printf(n 請輸入要顯示的文件名稱:);scanf(%s,fname);if (fp=fopen(fname,r)=NULL)printf(n文件打不開,若要繼續(xù)輸入請按Y或y.);n=judge();elseprintf(n%s 的內容是:nn,fname);while(!feof(fp)/ 判斷是否是文
17、件末尾putchar(fgetc(fp);/ 顯示文件內容printf(n);fclose (fp);pri ntf(喏要繼續(xù)顯示文件,請按Y或y.); n=judge();void count1(void)char fnameM,wordH;char cpyE,nwordM;int n=1,i=0,j;int a=0,jishu=0,l;FILE *fp;while(n)printf(n 請輸入要查找單詞的文件名稱:); scanf(%s,fname);if (fp=fopen(fname,r)=NULL)printf(n文件打不開,若要繼續(xù)輸入請按Y或y.); n=judge();else
18、elsewhile(!feof(fp) cpyi+=fgetc(fp);printf(n 鍵入要統(tǒng)計個數(shù)的單詞:); scanf(%s,word);l=strlen(word);for(j=0;jl;j+) wordj=tolower(wordj);for(j=0;ji;j+)if(isalpha(cpyj)cpyj=tolower(cpyj); nworda+=cpyj;else if(a!=0)/將文件的內容存入字符串數(shù)組/使要統(tǒng)計的單詞均由小寫字母拼成的/當字符不是字母時結束/將字符串數(shù)組中的單詞換成小寫字母nworda=0;/nworda=0;/保證字符串結束后能形成單詞if(strc
19、mp(word,nword)=0)+jishu;/計算所要統(tǒng)計的單詞的數(shù)目a=0;fclose(fp);printf(n 文檔中有$ 的單詞數(shù)為:dn,word,jishu);jishu=0;i=0;printf(n若繼續(xù)統(tǒng)計單詞個數(shù)請按Y或y.);n=judge();void count2(void)char fname1M,cpyEN,c;int i=0,j,k,count=0,a=0;int m100=0,n=1;FILE *fp;while(n)prin tf(nt請輸入要查找單詞的文件名稱:);flushall();scanf(%s,fname1);if (fp=fopen(fnam
20、e1,r)=NULL)pri ntf(nt文件打不開,若要繼續(xù)輸入請按Y或y.);n=judge(); continue;elsewhile(c=fgetc(fp)!=EOF)if(!tol(c)cpycounti+=c;elsecpycounti+=0;count+;i=0;for(j=0;jcount;j+)for(k=0;kk) a-;break;else if(strcmp(cpyj,cpyk)=0)ma+;a+;a=0;printf(n);for(j=0;jcount;j+)for(k=0;kk)a-;break;else if(strcmp(cpyj,cpyk)=0&j=k)%dn
21、,cpyj,ma);printf(t文件中的字符-7s的個數(shù)是%dn,cpyj,ma);a+;flushall();prin tf(nt若繼續(xù)打開其他文件請按Y或y.);n=judge();int judge(void)char x;flushall();scanf(%c,&x);if(x=Y|x=y)return 1;elsereturn 0;int tol(char c)if(c=A&cv=Z) c=c+32;if(c=a&cv=z) return 0;elsereturn 1;程序運行結果:1.主菜單界面(1)退出系統(tǒng)時的界面匸-D;Mitroso ft Visual t + - Com
22、ma nMSD &v9&E inDebugirl .&k&* i-4ii z.lj密 h毎密 4亍 &-諒計 -纟肚一二部 wiR *亠.亠乂、亠.亠乂、J訶件 紡貝半弋A魚.乂 系肯卜寶A送一0 12 3 4 5 6-VO 件 的的 丈:現(xiàn)壩 審密岀岀 ytr.蒔吞I.I訝 A,;-山也4 F1#進貧.;:0cm 7 he y Lu cuitl iiiuie(2)錯誤輸入時的界面(2)錯誤輸入時的界面* 1 一輸八2加密3-解密4一顯示5-統(tǒng)計5-統(tǒng)計全部0-退岀*件 的的 文:現(xiàn)現(xiàn) 畫密。岀岀 文加彗中詞 入紅仃內苫 磊進的文各 并4AUL在中 :文文文詞件 統(tǒng)息的的本晏 奚信疋迄又其在
23、岀入給給一不菲 退顯統(tǒng)統(tǒng) 0 12 3 4 5 6輸入錯誤,請按規(guī)范重新輸入?輸入文件內容的界面D:Microso-ft Visual u+ 4-CommoDev9&-BinDebugl請輸入文件名;1 - txt青嫡入文件內容=若結束請按ctrl+Ecan you can a can as a canner can can a can雯檔輸入并保存成加若繼續(xù)創(chuàng)建文檔,請輸Y或卯-文件加密時的界面D:Microscft Visual c4- +CcnnmonMGDev98BinDeb g 1.e-xe青輸入要加密的文件名稱,L txtibo + EpU*dljO*l)*db0*bt* bfdbDDfs tdbo t dbo tbtdbofl文檔加密并保存成功?是否繼續(xù)加密?若繼續(xù)請按丫或,文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年金融環(huán)境變化與公司戰(zhàn)略試題及答案
- 復習小技巧的多樣應用2025年計算機二級VB考試試題及答案
- 國際貿易法的主要內容試題及答案指引
- 上海民辦日日學校2025屆七下數(shù)學期末質量跟蹤監(jiān)視試題含解析
- 數(shù)據(jù)交換與共享機制試題及答案
- 建設高效工作團隊的計劃思路
- 數(shù)據(jù)安全與風險管理試題及答案
- 著眼于未來職業(yè)發(fā)展的策略計劃
- 實施教師的績效激勵機制計劃
- 黑龍江省齊齊哈爾市第二十一中學2025年八年級數(shù)學第二學期期末復習檢測模擬試題含解析
- 兒童畫鏟雪車課件
- 水務集團面試試題及答案
- 骨質疏松護理個案分享
- 驛站場地安全管理制度
- 2024輔導員考試大綱與試題及答案
- 安全施工方案監(jiān)理審查意見
- 2025山東能源集團中級人才庫選拔易考易錯模擬試題(共500題)試卷后附參考答案
- 二次供水水箱清洗消毒制度
- 鍋爐試運行方案
- 2024-2030全球商用車電驅橋行業(yè)調研及趨勢分析報告
- 《腎癌的診斷與治療》課件
評論
0/150
提交評論