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

上传人:b****9 文档编号:26382010 上传时间:2023-06-18 格式:DOCX 页数:27 大小:181.65KB
下载 相关 举报
C语言课程设计一种简单的英文词典排版系统的实现.docx_第1页
第1页 / 共27页
C语言课程设计一种简单的英文词典排版系统的实现.docx_第2页
第2页 / 共27页
C语言课程设计一种简单的英文词典排版系统的实现.docx_第3页
第3页 / 共27页
C语言课程设计一种简单的英文词典排版系统的实现.docx_第4页
第4页 / 共27页
C语言课程设计一种简单的英文词典排版系统的实现.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

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

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

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

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语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己独立编写程序。

我觉得自己说学的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1