C语言课程设计一种简单的英文词典排版系统的实现.docx
- 文档编号:13874202
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:27
- 大小:181.65KB
C语言课程设计一种简单的英文词典排版系统的实现.docx
《C语言课程设计一种简单的英文词典排版系统的实现.docx》由会员分享,可在线阅读,更多相关《C语言课程设计一种简单的英文词典排版系统的实现.docx(27页珍藏版)》请在冰点文库上搜索。
C语言课程设计一种简单的英文词典排版系统的实现
1.课程论文题目
一种简单的英文词典排版系统的实现
【要求】
(1)能输入和现实打入的单词
(2)能分辨出单词
(3)对重复的单词和已经输入的单词能自动排除
(4)能按A~Z的顺序排版
(5)能将运行结果以文本形式储存
(6)具有添加新单词蹦重新排版的能力
[提示]
(1)需求分析:
运行结果以文本形式储存,因而要提供文件的输入输出操作;通过查找操作检查重复单词;提供排序操作现实按A~Z的顺序排版;提供插入操作添加新单词并重新排版。
另外通过键盘式菜单实现功能选择。
(2)总体设计:
整个系统被设计为单词录入模块,文件存储模块和单词浏览模块。
其中单词录入模块要完成输入单词,检查是否重复,排序操作。
文件存储模块把存放单词的数组中的数据写入文件。
单词浏览模块完成英文词典的输出,即文件的输出操作。
(3)数据结构采用指针数组或二维数组。
以【Enter】键或者空格键作为单词输入结束标志,对重复的单词自动排除可选用查找方法,数据结构可采用指针和数组。
2.程序设计思路
整个系统被设计为单词录入模块,文件存储模块和单词浏览四个模块。
其中单词录入模块要完成输入单词,检查是否重复,排序操作。
文件存储模块把存放单词的词组中的数据写入文件。
单词浏览模块完成英文词典的输出,即文件的输出操作。
这四个模块是整体的设计思路,设计核心,整个程序的设计都将围绕这四个模块进行,各个模块都相互衔接,所以需要在设计好各个部分地同时,还要把握好各个部分的连接。
3.功能模块图
(
4.数据结构设计
数据结构采用指针数组或二维数组:
char*dictionary[N];或chardictionary[N][20]。
其中N是宏定义#defineN256(表示单词个数)
(1)单词录入模块
输入一个单词,存放在一个临时字符数组中,以空格或回车表示单词的结束(这也是默认操作),然后换行输出刚刚输入的单词。
采用插入排序算法的思想把该单词插入单词数组中,不同的是如果两个单词相同则不插入。
(2)文件存储模块
采用fwrite或fprintf把单词数组输入到文件中。
(3)单词浏览模块
采用fread或fscanf把单词从文件中读出,然后输出。
5.算法设计
1.主函数
【流程图】
N
Y
【程序】
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"ctype.h"
#defineROWS256
#defineCOLS32
staticFILE*fp;
staticchara[ROWS][COLS];
charget_option(void);
intb(intcount);
voidc(char*pt[],intcount);
intcheck(chararr[],intcount);
voidstorage(char*pt[],intcount);
int n; //****n全局变量*****//
char word[N][20];
voidmenu()//***主界面***//
{
intn,w;//*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*//
do
{
puts("\t\t********************MENU********************\n\n");
puts("\t\t\tWelcometodj'sprogram!
\n\n");
newword.");
puts("\t\t\t\t2.Browseallthewords.");
puts("\t\t\t\t3.Searchtheword.");
puts("\t\t\t\t4.Sortthewords.");
puts("\t\t\t\t5.OrderbyA-z.");
puts("\t\t\t\t6.Exit!
");
puts("\n\n\t\t****************************************\n");
printf("Choiceyournumber(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)//*对选择的数字作判断*//
{
w=1;
getchar();
}
elsew=0;
}while(w==1);
switch(n)
{
case1:
add();break;//*追加模块*//
case2:
browse();break;//*浏览模块*//
case3:
search();break;//*查找模块*//
case4:
sort();break;//*分类模块*//
case5:
order();break;//*排序模块*//
case6:
exit(0);//*退出*//
}
}
voidmain()//********主函数*********//
{
menu();
}
【程序】
intload()//*加载函数*//
{
inti,count;
intstart;
char*pt[ROWS];
charch,len;
charinput;
if((fp=fopen("words.txt","a+"))==NULL)//*以输出打开方式,在此前的记录被覆盖*//
{
printf("\nCannotopenfile!
\n");
returnNULL;
}
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s",&word[i]);
fclose(fp);
returni+1;//*返回记录个数*//
}
voidsave(intn)//*保存函数,保存n个记录*//
{
FILE*fp;
inti;
if((fp=fopen("words.txt","a+"))==NULL)//*以输出打开方式,在此前的记录被覆盖*//
{
printf("\nCannotopenfile!
\n");
exit(0);
}
for(i=0;i fprintf(fp,"%s",&word[i]); fclose(fp); } 1)分类模块 【程序】 voidsort() { inti,j,k; charc[20]; if((n=load())==0) { printf("\nCannotopenfile! \n"); exit(0); } for(i=0;i for(j=0;j if(strcmp(word[j],word[j+1])>0) { strcmp(c,word[j]); strcmp(word[j],word[j+1]); strcmp(word[j+1],c); } save(n); printf("Successful! ^_^.\n"); printf("\nNow? 1.browseall2.back"); scanf("%d",&k); if(k==1) browse(); elseif(k==2) menu(); } 2)排序模块 【流程图】 【程序】 voidorder()//*排序模块*// { inta[N],i,j,t; structwords; n=load(); for(i=0;i for(i=0;i for(j=i+i;j if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } for(j=0;j printf("%3d",a[i]); } 3)修改模块 【流程图】 YN Y Y 【程序】 voidmodify(inta)//*修改模块*// { charc[20]; printf("Enterthenewword: "); scanf("%s",c); strcpy(word[a],c); save(n); } 4)删除模块 【流程图】 YN Y N 【程序】 voiddel(inta)//*删除模块*// { intx,i,y; printf("Areyousuretodeletethisword? \n\t1).sure2).noandbackmenu[]\b\b"); scanf("%d",&x);//*输入要修改的单词*// if(x==1) { for(i=a;i strcpy(word[i],word[i+1]); save(n-1); printf("Successful! ^_^.\nNow? 1).onemore2).backmenu"); scanf("%d",&y); if(y==1) search(); elseif(x==2) menu(); } elseif(x==2) { menu(); } } 5)追加模块 【流程图】 返回主菜单 Y N 【程序】 voidadd()//*追加模块*// { inti,x,w1,w2,w; charc[20]; if((n=load())==0) exit(0); else { puts("Enterthenewword! \n"); scanf("%s",c);//*输入要追加的单词*// for(i=0;i { if(strcmp(word[i],c)==0) break; } if(i { w=1; do { printf("Thewordhasalreadyexit! \n"); printf("\n\nWhatdoyouwanttodo? \n\t1).enteronemore2).backmenu[]\b\b"); scanf("%d",&x); if(x<1||x>2) w1=1; else w1=0; }while(w1==1); } else { w2=1; strcpy(word[i],c); save(n+1); printf("Successful! ^_^.Nowchoosewhatyouwilldonext? \n\t1).addanother2).backmenu[]\b\b"); do { scanf("%d",&x); if(x<1||x>2) w2=1; else w2=0; }while(w2==1); } switch(x) { case1: add();break; case2: menu();break; } } 6)浏览(全部)模块 【流程图】 【程序】 voidbrowse()//*浏览(全部)模块*// { inti,w; if((n=load())==0)//*加载记录*// { printf("\nCannotopenfile! \n"); exit(0); } for(i=0;i printf("%s/n",word[i]); puts("Successful! ^_^.Now1.backmenu2.sort"); scanf("%d",&w); if(w==1) menu(); elseif(w==2) sort(); } 7)查找模块 【流程图】 YN YN 【程序】 voidsearch()//*查找模块*// { inti,x,y; charvs[20]; if((n=load())==0)//*加载记录*// { printf("\nCannotopenfile! \n"); exit(0); } printf("Enterthewordwhatyouwanttosearch! "); scanf("%s",vs);//*输入要查找的单词*// for(i=0;i if(strcmp(word[i],vs)==0) { printf("Successful! ^_^.\nThewordis: %s\n",word[i]);//*找到需要修改的单词*// printf("Whatwouldyouliketodowiththeword? \n\t1).modify2).delrte3).nothing[]\b\b"); scanf("%d",&y); if(y==1) modify(i); else {del(i);} } if(i==n) printf("HOHO! Sorry........Notfound~~~"); printf("Now.....1).onemore2).back3).exit"); scanf("%d",&x); switch(x) {case1: search();break; case2: menu();break; case3: exit(0); } } 6.程序代码 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"ctype.h" #defineROWS256 #defineCOLS32 staticFILE*fp; staticchara[ROWS][COLS]; charget_option(void); intb(intcount); voidc(char*pt[],intcount); intcheck(chararr[],intcount); voidstorage(char*pt[],intcount); intmain(void) { inti,count; intstart; char*pt[ROWS]; charch,len; charinput; if((fp=fopen("words.txt","a+"))==NULL) { fputs("不能打开或建立文件! \n",stderr); exit (1); } fseek(fp,0L,SEEK_END); start=(int)ftell(fp)/32; count=start; rewind(fp); if(fread(a,32*sizeof(char),start,fp)==0) { i=0; puts("开始创建词库"); puts("请输入单词(每行一个)"); puts("在新行输入END结束输入: "); while(i { fflush(stdin); if(strncmp(a[i],"END",3)==0) { count+=i; break; } if(check(a[i],i)) continue; i++; } } puts("\t\t*********************欢迎使用字典排版系统*******************\n\n"); puts("MENU"); puts("您要做些什么? "); puts("a.显示已有的单词b.添加新单词"); puts("c.对已有的单词进行排序d.退出"); puts("\n\n\t\t**********************************************************\n"); while((input=get_option())! ='d') { if(input=='a') { puts("已有的单词: "); for(i=0;i { printf(""); puts(a[i]); } } if(input=='b') { puts("开始创建词库"); puts("请输入新的单词(每行一个)"); puts("在新行输入END结束输入: "); count=b(count); } if(input=='c') { puts("对单词进行排序: "); c(pt,count); for(i=0;i { printf(""); puts(pt[i]); } } puts("还要做些什么? "); } storage(pt,count); fclose(fp); puts("谢谢使用,再见! "); return0; } charget_option(void) { charch; while((ch=getchar())<'a'||ch>'d') { while((ch=getchar())! ='\n') ; puts("请输入a,b,c或者d."); } fflush(stdin); returnch; } intb(intcount) { inti; i=count; while(i { fflush(stdin); if(check(a[i],i)) continue; if(strncmp(a[i],"END",3)==0) { count=i; break; } i++; } returncount; } voidc(char*pt[],intcount) { inti,j; char*temp; for(i=0;i pt[i]=a[i]; for(i=0;i for(j=i+1;j { if(strcmp(pt[i],pt[j])>0) { temp=pt[i]; pt[i]=pt[j]; pt[j]=temp; } } } intcheck(chararr[],intcount) { inti; intflag=0; for(i=0;i if(isalpha(arr[i])==0) { printf("%s不是一个单词.\n",arr); flag=1; break; } for(i=0;i if(strncmp(a[i],a[count],strlen(a[count])+1)==0) { puts("重复的单词! "); flag=1; } returnflag; } voidstorage(char*pt[],intcount) { inti,j; charptr[ROWS][COLS]; c(pt,count); for(i=0;i for(j=0;pt[i][j]! ='\0';j++) ptr[i][j]=pt[i][j]; fp=fopen("words.txt","w+"); rewind(fp); fwrite(ptr,32*sizeof(char),count,fp); } 7.程序运行结果 8.编程中遇到的困难及解决方法 在学习C语言时,最初使用的是TurboC计算机编程软件,实习则用VC软件编程。 两个软件各有自己的特点。 VC作为后来开发的软件,功能上来讲比TurboC有优势,但是在很多方面VC并不能兼容TurboC。 以前在TurboC的习惯用法,在VC中使用就会出错。 一开始是很难适应的,。 比如,子函数写在VC,前面必须要声明其类型,在TurboC中时不必的,这类的问题很多,在以后索性只要涉及到的我都会注明类型。 在编程的过程中,很容易出现一个问题,就时少大括号“}”的问题。 这是,error只有一个,但是错误的地方很多,且都在括号处。 按照计算机所指出的错误位置寻找是不容易找出错误的。 直到整个程序看了一遍后才会发现是一个大括号的问题。 通常少的是“{”或着“}”,错误位置会出现在缺少括号位置之后的其他大括号出现的地方。 只要这种情况发生后,往前找是否有大括号缺失就可以将问题很快解决了。 在帮同学修改程序的过程中,也遇到过一个问题。 在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。 我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。 9.总结心得及良好建议 C语言实习基本上由老师引导,自己很多都靠自学,不明白的问老师,自学能力得到了很大的培养。 在实习过程中,我感觉到一点,程序是不能一气呵成的。 至少一气呵成的程序不会尽善尽美。 程序编写要一步一步的完成。 首先,对于要编的程序要有一个总体思路。 要明确想要什么。 只要把思路理清楚了,程序就好编写了。 把程序分割成几个块,即多个函数,一块一块的编写。 然后将分散的函数用另外的函数连接起来或者用main函数连接。 到这一步,程序也就初步编成了,之后便是调试,检查错误。 最后我觉得还可以对于已经编写好的程序进行一些修改添加,使它更加人性化。 优化程序的阶段是很重要的。 10.致谢 在C语言的实习过程中,让我巩固了C语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己独立编写程序。 我觉得自己说学的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 一种 简单 英文 词典 排版系统 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)