C语言课程设计_第1页
C语言课程设计_第2页
C语言课程设计_第3页
C语言课程设计_第4页
C语言课程设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级语言程序设计课程设计学院计算机工程班级计算1113姓名李慧学号成绩指导老师杨建富2012年06月29日计算 2011级高级语言程序设计课程设计大纲一、设计目的:通过课程设计,学会把相关的理论知识和实际应用相结合,锻炼了独立实践的 能力;学会了查阅与设计相关资料的能力。二、设计内容:设计题目:学生使用 C 语言设计程序,产生如下界面,0-6 对应不同功能,若不用汉字, 可用拼音或英文表示。* TOC o 1-5 h z *1-输入 2-加密 3- 解密 4- 显示 5 统计 6 统计全部 0- 退出*请选择(0-6):0退出系统。输入信息,并写入文本文件。对给定的文件进行加密。对给定的文件进

2、行解密。显示文本文件的内容。5统计某单词在文件中出现的次数。*6. 统计在文件中各单词出现的次数(可选)。三、设计思想:主要思想为由总到分,由上到下的逐级分配任务的思想。通过主函数调用各个 被调用的函数,再由被调用函数通过多个循环嵌套的使用实现各自的功能,最终 达到程序的要求。主函数中:先使用了 switch 选择结构来调用不同命令下所对应的被调用函 数,其中包括:输入函数input(),加密函数jiami(),解密函数jiemi(),显示函数 showO,统计函数count()。在每个被调用函数中还多次调用了用来判断是否要继 续的函数judge(),以达到循环的目的。在主函数中还多次使用清屏

3、命令system(“cls”以及刷新全部流的命令flushall(),使调用函数后,界面保持清洁, 提高了程序的易读性。2输入函数中:while(c=getchar()!=EOF)的使用能提示使用者结束的命令,并 且通过fputc(c,fp)把一个字符c写到由文件指针fp指定的磁盘文件上。3加密函数中:先定义两个指针,将输入的文件内容通过fputc(c+1,fp1);进行 加密并保存到fpl所指定的文件上。保存成功后,使用remove(fname);语句删除 掉原文件,并使用rename(jiami.txt,fname);语句将加密后的文件名改为已被删 除的原文件名。解密函数中:考虑到解密时的

4、安全性问题,在进入解密系统时,需先输入进 入解密系统的密码,因此在程序的主函数外先对解密系统密码进行初始值化,然 后在进入解密系统时输入该密码就可进入。由于加密时是对每个文件内容都加上 了 1,所以解密时只需再减 1 即可。显示函数中:while(!feof(fp)语句用来判断是否到了文件的末尾,可以用来 保证文件的内容都被显示出来。统计函数中:先定义一个字符串数组,将文件中的内容存到数组中,再使用 tolower 函数统一将数组所有字符转化为小写字母,将用户输入的字符也转化为 小写字母,用strcmp来比较输入的字符是否与文件中的字符相等,若相等,则 变量jishu加1,最后可以统计出所查单

5、词在文件中的数目。l=strlen(word);语句 表示用户输入字符的长度。7高级统计函数中:通过调用tol()自定义函数来判断文件中的字符是否是小写 字母,若是的话,则将文件中的字符赋值给二维字符串数组cpy,而二维字符串数组则通过两个for循环嵌套来与自身进行比较,并且通过变量a的自增与自减来实现将重复被统计过的单词减去被多统计的次数,算出正确的单词个数。四、实验小结:过多的嵌套级别可能会使程序难以理解,应避免使用超过3个级别的缩 进。把程序写成小函数的集合,有助于程序编写、调试、维护和修改的方便。在相关性不是很大的语句之间可以使用空行隔开,有利于区分各个语句的 具体作用,在修改程序时起

6、到一定的作用,提高了程序的可读性。在switch语句中未加getchO;使得界面不会停留,直接跳回主菜单界面。在输入文件时,语句scanf(%s,fname);中的s误写成c,导致输入错误。6在对文件操作时需要注意关闭文件的操作,假如没有关闭,将会使在运行 程序之时,不能对文件进行删除或者重命名的操作。导致一些未知错误。要及时使用清屏函数清除键盘缓冲区的文件及数据流,否则会导致不必要 的错误。8在编写解密程序时,要注意使用两个while进行嵌套,使得在判断是否输 入密码正确后,再判断解密的文件及是否继续解密其他文件。9.通过这次的课程设计,我明白了,不管多么复杂的程序,其实都是有许许 多多的小

7、集合体组成的,只要肯花时间,肯认真,在编写程序的实践中,终将会 将一系列的问题解决,从而达到目的,提高自己的能力,实践是检验真理的唯一 标准!附录:程序清单#include/ 文件名字符串数组大小 / 解密码字符串数组大小 / 单词字符串数组的大小 / 数组大小#include #include #include #include #define N 30 / 文件名字符串数组大小 / 解密码字符串数组大小 / 单词字符串数组的大小 / 数组大小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);/ 输入数据的函数/ 对输入数据加密的函数/ 对已加密内容进行解密的函数/ 显示内容的函数/ 统计要查找的单词出现次数的函数int judge(void);char code=2011810063;/ 判断是否要继续的函数/ 设置进入解密系统所需的密码i

9、nt judge(void);char code=2011810063;/ 判断是否要继续的函数/ 设置进入解密系统所需的密码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 输入错误,请按规范重新输入!);break;case 6:system(cls); count2(); break;default:printf(nt 输入错误,请按规范重新输入!);break; getch(); flushall(); system(cls);void menu(void)/ 等待数据输入,使界面停留printf(nnnnt*printf(t* *n);printf(t* 1-输入 2-加

11、密 3-解密 4-显示 5-统计 6-统计全部 0-退出 *n);printf(t*n);printf(t*printf(t*printf(nnt 0.退出系统。n);printf(t 1.输入信息,并写入文本文件。n); printf(t 2. 对给定的文件进行加密。 n); printf(t 3. 对给定的文件进行解密。 n); printf(t 4. 显示文本文件的内容。 n);printf(t 5统计某单词在文件中出现的次数。 n); printf(t 6. 统计在文件中各单词出现的次数。 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若继续创建文档,请输Y或y.);flushall();n=ju

13、dge();/ 退出解密系统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 是否继续加密?若继续请按 Y 或 y.n);n=judge();flushall();void jiemi(void)int n=1;FILE *fp,*fp1;char c, fnameM,code1M;while(n)printf(n 请输入进入解密系统所需密码:);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是否继续解密?若继续请按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文件打不开,若要继续输入请按Y或y.);n=judge();elseprintf(n%s 的内容是:nn,fname);while(!feof(fp)/ 判断是否是文

17、件末尾putchar(fgetc(fp);/ 显示文件内容printf(n);fclose (fp);pri ntf(喏要继续显示文件,请按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文件打不开,若要继续输入请按Y或y.); n=judge();else

18、elsewhile(!feof(fp) cpyi+=fgetc(fp);printf(n 键入要统计个数的单词:); 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)/将文件的内容存入字符串数组/使要统计的单词均由小写字母拼成的/当字符不是字母时结束/将字符串数组中的单词换成小写字母nworda=0;/nworda=0;/保证字符串结束后能形成单词if(strc

19、mp(word,nword)=0)+jishu;/计算所要统计的单词的数目a=0;fclose(fp);printf(n 文档中有$ 的单词数为:dn,word,jishu);jishu=0;i=0;printf(n若继续统计单词个数请按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文件打不开,若要继续输入请按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的个数是%dn,cpyj,ma);a+;flushall();prin tf(nt若继续打开其他文件请按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)退出系统时的界面匸-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 件 的的 丈:现坝 審密岀岀 ytr.蒔吞I.I讶 A,;-山也4 F1#进貧.;:0cm 7 he y Lu cuitl iiiuie(2)错误输入时的界面(2)错误输入时的界面* 1 一输八2加密3-解密4一显示5-统计5-统计全部0-退岀*件 的的 文:现现 畫密。岀岀 文加彗中词 入红仃内苫 磊进的文各 并4AUL在中 :文文文词件 统息的的本晏 奚信疋迄又其在

23、岀入给给一不菲 退显统统 0 12 3 4 5 6输入错误,请按规范重新输入?输入文件内容的界面D:Microso-ft Visual u+ 4-CommoDev9&-BinDebugl请输入文件名;1 - txt青嫡入文件内容=若结束请按ctrl+Ecan you can a can as a canner can can a can雯档输入并保存成加若继续创建文档,请输Y或卯-文件加密时的界面D:Microscft Visual c4- +CcnnmonMGDev98BinDeb g 1.e-xe青输入要加密的文件名称,L txtibo + EpU*dljO*l)*db0*bt* bfdbDDfs tdbo t dbo tbtdbofl文档加密并保存成功?是否继续加密?若继续请按丫或,文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论