C语言课程设计报告一种简单的英文词典排版系统的实现

上传人:痛*** 文档编号:84862600 上传时间:2022-05-04 格式:DOC 页数:32 大小:123KB
收藏 版权申诉 举报 下载
C语言课程设计报告一种简单的英文词典排版系统的实现_第1页
第1页 / 共32页
C语言课程设计报告一种简单的英文词典排版系统的实现_第2页
第2页 / 共32页
C语言课程设计报告一种简单的英文词典排版系统的实现_第3页
第3页 / 共32页
资源描述:

《C语言课程设计报告一种简单的英文词典排版系统的实现》由会员分享,可在线阅读,更多相关《C语言课程设计报告一种简单的英文词典排版系统的实现(32页珍藏版)》请在装配图网上搜索。

1、-中 国 地 质 大 学本科生课程论文封面课程名称 C语言课程设计 教师*本科生*本科生*本科生专业所在院系日期: 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语2目录31课程论文题目42程序设计思路43功能模块图54数据构造设计55算法设计56程序代码167程序运行结果218编程中遇到的困难及解决方法249总结心得及良好建议2410致谢241课程论文题目一种简单的英文词典排版系统的实现:【要求】1能输入和现实打入

2、的单词;2能分辨出单词;3对重复的单词和已经输入的单词能自动排除;4能按AZ的顺序排版;5能将运行结果以文本形式储存;6具有添加新单词重新排版的能力。提示1需求分析:运行结果以文本形式储存,因而要提供文件的输入输出操作;通过查找操作检查重复单词;提供排序操作现实按AZ的顺序排版;提供插入操作添加新单词并重新排版。另外通过键盘式菜单实现功能选择。2总体设计:整个系统被设计为单词录入模块,文件存储模块和单词浏览模块。其中单词录入模块要完成输入单词,检查是否重复,排序操作。文件存储模块把存放单词的数组中的数据写入文件。单词浏览模块完成英文词典的输出,即文件的输出操作。3数据构造采用指针数组或二维数组

3、。以【Enter】键或者空格键作为单词输入完毕标志,对重复的单词自动排除可选用查找方法,数据构造可采用指针和数组。2程序设计思路在英文词典排版当中,人工统计的速度很慢,且容易出现过失。本英文词典排版系统的自动化加速了排版工作,提高工作效率本程序主要采用对零散的单词进展自动读取,然后按单词首字母顺序讲单词保存到文档,这样的构造化非常便于程序后续的排版工作。排版具体过程涉及到自动排除重复单词与添加新单词并重新排版等问题,将于正问中详细介绍。本程序实现了所有设计要求。整个系统被设计为单词录入模块、文件存储模块和单词浏览模块。其中单词录入模块要完成输入单词、检查是否重复、排序操作。文件存储模块把存放单

4、词的数组中的数据写入文件。单词浏览模块完成英文词典的输出,即文件的输出操作。一种简单的英文词典排版系统3功能模块图单词排序单词浏览单词录入4数据构造设计数据构造采用指针数组或二维数组:char* dictionaryN;或char dictionaryN20。其中N是宏定义*define N 256表示单词个数。1单词录入模块输入一个单词,存放在一个临时字符数组中,以空格或回车表示单词的完毕这也是默认操作,然后换行输出刚刚输入的单词。采用插入排序算法的思想把该单词插入单词数组中,不同的是如果两个单词一样则不插入。2文件存储模块采用fwrite或fprintf把单词数组输入到文件中。3单词浏览模

5、块采用fread或fscanf把单词从文件中读出,然后输出。5算法设计1主函数【流程图】显示一系列的功能选项根据n的值调用各功能模块函数输入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(int count); void c(char *pt, int count); i

6、nt check(char arr, int count); void storage(char *pt, int count);intn;/*n全局变量*/charwordN20;void menu()/*主界面*/int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/doputs(tt*MENU*nn);puts(tttWele to djs program!nn);puts(tttt 1.Add new word.);puts(tttt 2.Browse all the words.);puts(tttt 3.Search the word.);pu

7、ts(tttt 4.Sort the words.);puts(tttt 5.Order by A-z.);puts(tttt 6.E*it!);puts(nntt*n);printf(Choice your number(1-6): bb);scanf(%d,&n);if(n6)/*对选择的数字作判断*/w=1;getchar();else w=0;while(w=1);switch(n)case 1:add();break;/*追加模块*/case 2:browse();break;/*浏览模块*/case 3:search();break;/*查找模块*/case 4:sort();br

8、eak;/*分类模块*/case 5:order();break;/*排序模块*/case 6:e*it(0);/*退出*/void main() /*主函数*/ menu();2公共函数【程序】int load()/*加载函数*/int i,count; int start; char *ptROWS; char ch, len; char input;if(fp=fopen(words.t*t,a+)=NULL)/*以输出翻开方式,在此前的记录被覆盖*/printf(nCannot open file!n);return NULL;for(i=0;!feof(fp);i+)fscanf(f

9、p,%s,&wordi);fclose(fp);return i+1;/*返回记录个数*/void save(int n)/*保存函数,保存n个记录*/FILE *fp;int i;if(fp=fopen(words.t*t,a+)=NULL)/*以输出翻开方式,在此前的记录被覆盖*/printf(nCannot open file!n);e*it(0);for(i=0;in;i+)fprintf(fp,%s,&wordi);fclose(fp);3各功能模块设计1分类模块【程序】void sort()int i,j,k;char c20;if(n=load()=0)printf(nCanno

10、t open file!n);e*it(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排序模块【流程图】 返回主菜单 保 存 用选择法排序【程序】void order() /*排序模块*/int aN,i,j,t;struct words;n=load

11、();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显示找到的单词,调用修改函数提示没有找到询问用户是否继续修改Y返回主菜单Y【程序】void modify(int a) /*修改模块*/char c20;printf(Enter the new word:);scanf(%s,c);strcpy(worda,c);save(n);4删除模块【流程图】显示所有记录,让用户看哪

12、个需要删除输入需要删除的单词是否找到此单词记录YN提示没有找到显示找到的记录 调 用 删 除 函 数返回主菜单询问用户是否继续删除YN【程序】void del(int a) /*删除模块*/int *,i,y;printf(Are you sure to delete this wordnt1).sure 2).no and back menu bb);scanf(%d,&*); /*输入要修改的单词*/if(*=1)for(i=a;in-1;i+) /*查找要修改的单词*/strcpy(wordi,wordi+1);save(n-1);printf(Successful!_.nNow 1).

13、one more 2).back menu);scanf(%d,&y);if(y=1)search();else if(*=2)menu();else if(*=2)menu();5追加模块询问用户是否继续追加单词保存追加的单词输入用户要追加的的单词调用加载函数n=load();并计算可以记录个数n【流程图】返回主菜单YN【程序】void add() /*追加模块*/int i,*,w1,w2,w;char c20;if(n=load()=0)e*it(0);elseputs(Enter the new word!n);scanf(%s,c); /*输入要追加的单词*/for(i=0;in;i

14、+)if(strcmp(wordi,c)=0)break;if(in)w=1;doprintf(The word has already e*it!n);printf(nnWhat do you want to dont1).enter one more 2).back menu bb);scanf(%d,&*);if(*2)w1=1;elsew1=0;while(w1=1);elsew2=1;strcpy(wordi,c);save(n+1);printf(Successful!_.Now choose what you will do ne*tnt1).add another 2).bac

15、k menu bb);doscanf(%d,&*);if(*2)w2=1;elsew2=0;while(w2=1);switch(*)case 1:add();break;case 2:menu();break;6浏览全部模块返回主菜单回到分类模块用户进展选项显示所有单词记录【流程图】【程序】void browse() /*浏览全部模块*/int i,w;if(n=load()=0) /*加载记录*/printf(nCannot open file!n);e*it(0);for(i=0;in-1;i+)printf(%s/n,wordi);puts(Successful!_.Now 1.bac

16、k menu 2.sort);scanf(%d,&w);if(w=1)menu();else if(w=2)sort();7查找模块是否找到该单词记录输入需要查找的单词【流程图】YN返回主菜单让用户选择1.查找另一个2.返回询问用户是否继续查找提示没有找到显示找到的记录YN【程序】void search() /*查找模块*/int i,*,y;char vs20;if(n=load()=0) /*加载记录*/printf(nCannot open file!n);e*it(0);printf(Enter the word what you want to search!);scanf(%s,v

17、s); /*输入要查找的单词*/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 wordnt1).modify 2).delrte 3).nothing bb);scanf(%d,&y);if(y=1)modify(i);elsedel(i);if(i=n)printf(HOHO!Sorry.Not found);printf(Now.1).one

18、more 2).back 3).e*it);scanf(%d,&*);switch(*)case 1:search();break;case 2:menu();break;case 3:e*it(0);6程序代码*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(int count); void c(cha

19、r *pt, int count); int check(char arr, int count); void storage(char *pt, int count); int main(void) int i,count; int start; char *ptROWS; char ch, len; char input; if(fp=fopen(words.t*t,a+)=NULL) fputs(不能翻开或建立文件!n,stderr); e*it(1); fseek(fp,0L,SEEK_END); start=(int)ftell(fp)/32; count=start; rewind

20、(fp); if(fread(a,32*sizeof(char),start,fp)=0) i=0; puts(开场创立词库);puts(请输入单词每行一个);puts(在新行输入END完毕输入:); while(iROWS&scanf(%s, ai)=1) fflush(stdin); if(strncmp(ai,END,3)=0) count+=i; break; if(check(ai, i) continue; i+; puts(tt*欢迎使用字典排版系统*nn);puts( MENU );puts(您要做些什么.); puts(a. 显示已有的单词 b. 添加新单词); puts(c

21、. 对已有的单词进展排序 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(开场创立词库);puts(请输入新的单词每行一个);puts(在新行输入END完毕输入: ); count=b(count); if(input=c) puts(对单词进展排序:); c(pt, count); for(i=0;icount;i+) printf( ); puts(pti); puts(还要

22、做些什么); storage(pt,count); fclose(fp); puts(谢谢使用,再见!); return 0; char get_option(void) char ch; while(ch=getchar()d) while(ch=getchar()!=n) ; puts(请输入a,b,c或者d.); fflush(stdin); return ch; int b(int count) int i; i=count; while(iROWS&scanf(%s, ai)=1) fflush(stdin); if(check(ai, i) continue; if(strncmp

23、(ai,END,3)=0) count=i; break; i+; return count; void c(char *pt, int count) int i,j; char *temp; for(i=0;iROWS;i+) pti=ai; for(i=0;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,ar

24、r); flag=1; break; for(i=0;icount;i+) if(strncmp(ai,acount,strlen(acount)+1)=0) puts(重复的单词!); flag=1; return flag; void storage(char *pt, int count) int i,j; char ptrROWSCOLS; c(pt, count); for(i=0;icount;i+) for(j=0;ptij!=0;j+) ptrij=ptij; fp=fopen(words.t*t,w+); rewind(fp); fwrite(ptr,32*sizeof(ch

25、ar),count,fp); 7程序运行结果1输入单词2显示打入的单词3能分辨出单词并对重复的单词和已经输入的单词能自动排除4按AZ的顺序排版5添加新单词并重新排版6退出7将运行结果以文本形式word.t*t存储8编程中遇到的困难及解决方法在编程的过程中,很容易出现多个小问题,比方缺少;或者。按照计算机所指出的错误位置寻找是不容易找出错误的。直到重新把程序看过一遍之后,才能找到其中的错误。在帮同学修改程序的过程中,也遇到过一个问题。在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。9总结心得及良好建议这次实习,我对之前学过的C语言知识有所遗忘,在重新学习了一边课本知识后,我才开场进入到正式的编程实践中。通过这次的C语言程序设计实习,我收获了很多。以前的学习是为了应付考试,而此次的实习是将所学的知识运用到实际当中。尤其是这样一个很实用的英文词典排版系统,让自己对程序设计的方法和思路有了比较清晰的认识。该次实习中,我独立完成了这道题。这道题看似繁琐,但思路清晰,就很简单了,指导书中有关文件的题目*小异,一通则百通。只要讲各功能模块融会贯穿并加以适当调整即可,但前提是必须对指导书里的立体熟练掌握。. z.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!