C語言課程設(shè)計(jì)_第1頁(yè)
C語言課程設(shè)計(jì)_第2頁(yè)
C語言課程設(shè)計(jì)_第3頁(yè)
C語言課程設(shè)計(jì)_第4頁(yè)
C語言課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、高級(jí)語言程序設(shè)計(jì)課程設(shè)計(jì)學(xué)院計(jì)算機(jī)工程班級(jí)計(jì)算1113姓名李慧學(xué)號(hào)成績(jī)指導(dǎo)老師楊建富2012年06月29日計(jì)算 2011級(jí)高級(jí)語言程序設(shè)計(jì)課程設(shè)計(jì)大綱一、設(shè)計(jì)目的:通過課程設(shè)計(jì),學(xué)會(huì)把相關(guān)的理論知識(shí)和實(shí)際應(yīng)用相結(jié)合,鍛煉了獨(dú)立實(shí)踐的 能力;學(xué)會(huì)了查閱與設(shè)計(jì)相關(guān)資料的能力。二、設(shè)計(jì)內(nèi)容:設(shè)計(jì)題目:學(xué)生使用 C 語言設(shè)計(jì)程序,產(chǎn)生如下界面,0-6 對(duì)應(yīng)不同功能,若不用漢字, 可用拼音或英文表示。* TOC o 1-5 h z *1-輸入 2-加密 3- 解密 4- 顯示 5 統(tǒng)計(jì) 6 統(tǒng)計(jì)全部 0- 退出*請(qǐng)選擇(0-6):0退出系統(tǒng)。輸入信息,并寫入文本文件。對(duì)給定的文件進(jìn)行加密。對(duì)給定的文件進(jìn)

2、行解密。顯示文本文件的內(nèi)容。5統(tǒng)計(jì)某單詞在文件中出現(xiàn)的次數(shù)。*6. 統(tǒng)計(jì)在文件中各單詞出現(xiàn)的次數(shù)(可選)。三、設(shè)計(jì)思想:主要思想為由總到分,由上到下的逐級(jí)分配任務(wù)的思想。通過主函數(shù)調(diào)用各個(gè) 被調(diào)用的函數(shù),再由被調(diào)用函數(shù)通過多個(gè)循環(huán)嵌套的使用實(shí)現(xiàn)各自的功能,最終 達(dá)到程序的要求。主函數(shù)中:先使用了 switch 選擇結(jié)構(gòu)來調(diào)用不同命令下所對(duì)應(yīng)的被調(diào)用函 數(shù),其中包括:輸入函數(shù)input(),加密函數(shù)jiami(),解密函數(shù)jiemi(),顯示函數(shù) showO,統(tǒng)計(jì)函數(shù)count()。在每個(gè)被調(diào)用函數(shù)中還多次調(diào)用了用來判斷是否要繼 續(xù)的函數(shù)judge(),以達(dá)到循環(huán)的目的。在主函數(shù)中還多次使用清屏

3、命令system(“cls”以及刷新全部流的命令flushall(),使調(diào)用函數(shù)后,界面保持清潔, 提高了程序的易讀性。2輸入函數(shù)中:while(c=getchar()!=EOF)的使用能提示使用者結(jié)束的命令,并 且通過fputc(c,fp)把一個(gè)字符c寫到由文件指針fp指定的磁盤文件上。3加密函數(shù)中:先定義兩個(gè)指針,將輸入的文件內(nèi)容通過fputc(c+1,fp1);進(jìn)行 加密并保存到fpl所指定的文件上。保存成功后,使用remove(fname);語句刪除 掉原文件,并使用rename(jiami.txt,fname);語句將加密后的文件名改為已被刪 除的原文件名。解密函數(shù)中:考慮到解密時(shí)的

4、安全性問題,在進(jìn)入解密系統(tǒng)時(shí),需先輸入進(jìn) 入解密系統(tǒng)的密碼,因此在程序的主函數(shù)外先對(duì)解密系統(tǒng)密碼進(jìn)行初始值化,然 后在進(jìn)入解密系統(tǒng)時(shí)輸入該密碼就可進(jìn)入。由于加密時(shí)是對(duì)每個(gè)文件內(nèi)容都加上 了 1,所以解密時(shí)只需再減 1 即可。顯示函數(shù)中:while(!feof(fp)語句用來判斷是否到了文件的末尾,可以用來 保證文件的內(nèi)容都被顯示出來。統(tǒng)計(jì)函數(shù)中:先定義一個(gè)字符串?dāng)?shù)組,將文件中的內(nèi)容存到數(shù)組中,再使用 tolower 函數(shù)統(tǒng)一將數(shù)組所有字符轉(zhuǎn)化為小寫字母,將用戶輸入的字符也轉(zhuǎn)化為 小寫字母,用strcmp來比較輸入的字符是否與文件中的字符相等,若相等,則 變量jishu加1,最后可以統(tǒng)計(jì)出所查單

5、詞在文件中的數(shù)目。l=strlen(word);語句 表示用戶輸入字符的長(zhǎng)度。7高級(jí)統(tǒng)計(jì)函數(shù)中:通過調(diào)用tol()自定義函數(shù)來判斷文件中的字符是否是小寫 字母,若是的話,則將文件中的字符賦值給二維字符串?dāng)?shù)組cpy,而二維字符串?dāng)?shù)組則通過兩個(gè)for循環(huán)嵌套來與自身進(jìn)行比較,并且通過變量a的自增與自減來實(shí)現(xiàn)將重復(fù)被統(tǒng)計(jì)過的單詞減去被多統(tǒng)計(jì)的次數(shù),算出正確的單詞個(gè)數(shù)。四、實(shí)驗(yàn)小結(jié):過多的嵌套級(jí)別可能會(huì)使程序難以理解,應(yīng)避免使用超過3個(gè)級(jí)別的縮 進(jìn)。把程序?qū)懗尚『瘮?shù)的集合,有助于程序編寫、調(diào)試、維護(hù)和修改的方便。在相關(guān)性不是很大的語句之間可以使用空行隔開,有利于區(qū)分各個(gè)語句的 具體作用,在修改程序時(shí)起

6、到一定的作用,提高了程序的可讀性。在switch語句中未加getchO;使得界面不會(huì)停留,直接跳回主菜單界面。在輸入文件時(shí),語句scanf(%s,fname);中的s誤寫成c,導(dǎo)致輸入錯(cuò)誤。6在對(duì)文件操作時(shí)需要注意關(guān)閉文件的操作,假如沒有關(guān)閉,將會(huì)使在運(yùn)行 程序之時(shí),不能對(duì)文件進(jìn)行刪除或者重命名的操作。導(dǎo)致一些未知錯(cuò)誤。要及時(shí)使用清屏函數(shù)清除鍵盤緩沖區(qū)的文件及數(shù)據(jù)流,否則會(huì)導(dǎo)致不必要 的錯(cuò)誤。8在編寫解密程序時(shí),要注意使用兩個(gè)while進(jìn)行嵌套,使得在判斷是否輸 入密碼正確后,再判斷解密的文件及是否繼續(xù)解密其他文件。9.通過這次的課程設(shè)計(jì),我明白了,不管多么復(fù)雜的程序,其實(shí)都是有許許 多多的小

7、集合體組成的,只要肯花時(shí)間,肯認(rèn)真,在編寫程序的實(shí)踐中,終將會(huì) 將一系列的問題解決,從而達(dá)到目的,提高自己的能力,實(shí)踐是檢驗(yàn)真理的唯一 標(biāo)準(zhǔn)!附錄:程序清單#include/ 文件名字符串?dāng)?shù)組大小 / 解密碼字符串?dāng)?shù)組大小 / 單詞字符串?dāng)?shù)組的大小 / 數(shù)組大小#include #include #include #include #define N 30 / 文件名字符串?dāng)?shù)組大小 / 解密碼字符串?dāng)?shù)組大小 / 單詞字符串?dāng)?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ù)/ 對(duì)輸入數(shù)據(jù)加密的函數(shù)/ 對(duì)已加密內(nèi)容進(jìn)行解密的函數(shù)/ 顯示內(nèi)容的函數(shù)/ 統(tǒng)計(jì)要查找的單詞出現(xiàn)次數(shù)的函數(shù)int judge(void);char code=2011810063;/ 判斷是否要繼續(xù)的函數(shù)/ 設(shè)置進(jìn)入解密系統(tǒng)所需的密碼i

9、nt judge(void);char code=2011810063;/ 判斷是否要繼續(xù)的函數(shù)/ 設(shè)置進(jìn)入解密系統(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 輸入錯(cuò)誤,請(qǐng)按規(guī)范重新輸入!);break;case 6:system(cls); count2(); break;default:printf(nt 輸入錯(cuò)誤,請(qǐng)按規(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)計(jì) 6-統(tǒng)計(jì)全部 0-退出 *n);printf(t*n);printf(t*printf(t*printf(nnt 0.退出系統(tǒng)。n);printf(t 1.輸入信息,并寫入文本文件。n); printf(t 2. 對(duì)給定的文件進(jìn)行加密。 n); printf(t 3. 對(duì)給定的文件進(jìn)行解密。 n); printf(t 4. 顯示文本文件的內(nèi)容。 n);printf(t 5統(tǒng)計(jì)某單詞在文件中出現(xiàn)的次數(shù)。 n); printf(t 6. 統(tǒng)計(jì)在文件中各單詞出現(xiàn)的次數(shù)。 n);printf(nt 請(qǐng)選擇(0-6):);void input(void)int n=1;

12、FILE *fp; char c, fnameN;while(n)printf(n請(qǐng)輸入文件名:n); scanf(%s,fname);if (fp=fopen(fname,w) = NULL)prin tf(文件打不開!n); exit(0);elsepri ntf(”請(qǐng)輸入文件內(nèi)容:(若結(jié)束請(qǐng)按ctrl+z)n); flushall();while(c=getchar()!=EOF) / 輸入文件的內(nèi)容,以ctrl+z 結(jié)束 fputc(c,fp);fclose(fp);pri ntf(文檔輸入并保存成功!n);printf(n若繼續(xù)創(chuàng)建文檔,請(qǐ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請(qǐng)輸入要加密的文件名稱:n);scanf(%s,fname);if (fp=fopen(fname,r) = NULL)printf(n無法打開文件!n若重新輸入,請(qǐng)輸Y或y.); flushall();n=judge();if (fp1=fopen(jiami.txt,w)=NULL)prin tf(無法打開文件!n ”);exit(0);while(c=fgetc(fp)!=EOF)/ 按 ctrl+z 結(jié)束/ 加密/ 加密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ù)請(qǐng)按 Y 或 y.n);n=judge();flushall();void jiemi(void)int n=1;FILE *fp,*fp1;char c, fnameM,code1M;while(n)printf(n 請(qǐng)輸入進(jìn)入解密系統(tǒng)所需密碼:);scanf(%s,code1);if

15、(strcmp(code1,code)=0)/比較字符串大小是否相等while(n)printf(n 請(qǐng)輸入要解密的文件名:);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ù)請(qǐng)按Y或y.); n=judge();elseprintf(n 輸入密碼有誤!請(qǐng)重新輸入.n);flushall();void show(void)int n=1;FILE *fp;char fnameM;while(n)printf(n 請(qǐng)輸入要顯示的文件名稱:);scanf(%s,fname);if (fp=fopen(fname,r)=NULL)printf(n文件打不開,若要繼續(xù)輸入請(qǐng)按Y或y.);n=judge();elseprintf(n%s 的內(nèi)容是:nn,fname);while(!feof(fp)/ 判斷是否是文

17、件末尾putchar(fgetc(fp);/ 顯示文件內(nèi)容printf(n);fclose (fp);pri ntf(喏要繼續(xù)顯示文件,請(qǐng)按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 請(qǐng)輸入要查找單詞的文件名稱:); scanf(%s,fname);if (fp=fopen(fname,r)=NULL)printf(n文件打不開,若要繼續(xù)輸入請(qǐng)按Y或y.); n=judge();else

18、elsewhile(!feof(fp) cpyi+=fgetc(fp);printf(n 鍵入要統(tǒng)計(jì)個(gè)數(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)/將文件的內(nèi)容存入字符串?dāng)?shù)組/使要統(tǒng)計(jì)的單詞均由小寫字母拼成的/當(dāng)字符不是字母時(shí)結(jié)束/將字符串?dāng)?shù)組中的單詞換成小寫字母nworda=0;/nworda=0;/保證字符串結(jié)束后能形成單詞if(strc

19、mp(word,nword)=0)+jishu;/計(jì)算所要統(tǒng)計(jì)的單詞的數(shù)目a=0;fclose(fp);printf(n 文檔中有$ 的單詞數(shù)為:dn,word,jishu);jishu=0;i=0;printf(n若繼續(xù)統(tǒng)計(jì)單詞個(gè)數(shù)請(qǐng)按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請(qǐng)輸入要查找單詞的文件名稱:);flushall();scanf(%s,fname1);if (fp=fopen(fnam

20、e1,r)=NULL)pri ntf(nt文件打不開,若要繼續(xù)輸入請(qǐng)按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的個(gè)數(shù)是%dn,cpyj,ma);a+;flushall();prin tf(nt若繼續(xù)打開其他文件請(qǐng)按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;程序運(yùn)行結(jié)果:1.主菜單界面(1)退出系統(tǒng)時(shí)的界面匸-D;Mitroso ft Visual t + - Com

22、ma nMSD &v9&E inDebugirl .&k&* i-4ii z.lj密 h毎密 4亍 &-諒計(jì) -纟肚一二部 wiR *亠.亠乂、亠.亠乂、J訶件 紡貝半弋A魚.乂 系肯卜寶A送一0 12 3 4 5 6-VO 件 的的 丈:現(xiàn)壩 審密岀岀 ytr.蒔吞I.I訝 A,;-山也4 F1#進(jìn)貧.;:0cm 7 he y Lu cuitl iiiuie(2)錯(cuò)誤輸入時(shí)的界面(2)錯(cuò)誤輸入時(shí)的界面* 1 一輸八2加密3-解密4一顯示5-統(tǒng)計(jì)5-統(tǒng)計(jì)全部0-退岀*件 的的 文:現(xiàn)現(xiàn) 畫密。岀岀 文加彗中詞 入紅仃內(nèi)苫 磊進(jìn)的文各 并4AUL在中 :文文文詞件 統(tǒng)息的的本晏 奚信疋迄又其在

23、岀入給給一不菲 退顯統(tǒng)統(tǒng) 0 12 3 4 5 6輸入錯(cuò)誤,請(qǐng)按規(guī)范重新輸入?輸入文件內(nèi)容的界面D:Microso-ft Visual u+ 4-CommoDev9&-BinDebugl請(qǐng)輸入文件名;1 - txt青嫡入文件內(nèi)容=若結(jié)束請(qǐng)按ctrl+Ecan you can a can as a canner can can a can雯檔輸入并保存成加若繼續(xù)創(chuàng)建文檔,請(qǐng)輸Y或卯-文件加密時(shí)的界面D:Microscft Visual c4- +CcnnmonMGDev98BinDeb g 1.e-xe青輸入要加密的文件名稱,L txtibo + EpU*dljO*l)*db0*bt* bfdbDDfs tdbo t dbo tbtdbofl文檔加密并保存成功?是否繼續(xù)加密?若繼續(xù)請(qǐng)按丫或,文

溫馨提示

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