C语言课程设计一种简单的英文词典排版系统的实现.docx
- 文档编号:26923649
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:24
- 大小:62.25KB
C语言课程设计一种简单的英文词典排版系统的实现.docx
《C语言课程设计一种简单的英文词典排版系统的实现.docx》由会员分享,可在线阅读,更多相关《C语言课程设计一种简单的英文词典排版系统的实现.docx(24页珍藏版)》请在冰豆网上搜索。
C语言课程设计一种简单的英文词典排版系统的实现
C语言课程设计-一种简单的英文词典排版系统的实现
课程设计评语..................................................................................................错误~未定义书签。
2
目录....................................................................................................................................................11(课程论文题目................................................................................................................................2
2(程序设计思路................................................................................................................................2
3(功能模块图....................................................................................................................................34(数据结构设计................................................................................................................................3
5(算法设计........................................................................................................................................4(程序代码......................................................................................................................................126
7(程序运行结果..............................................................................................................................17
8(编程中遇到的困难及解决方法..................................................................................................19
9(总结心得及良好建议..................................................................................................................20
10(致谢............................................................................................................................................20
1
1(课程论文题目
一种简单的英文词典排版系统的实现
【要求】
1)能输入和现实打入的单词(
(2)能分辨出单词
(3)对重复的单词和已经输入的单词能自动排除
(4)能按A~Z的顺序排版
(5)能将运行结果以文本形式储存
(6)具有添加新单词蹦重新排版的能力
[提示]
(1)需求分析:
运行结果以文本形式储存,因而要提供文件的输入输出操作;通过查找操作检查重复单词;提供排序操作现实按A~Z的顺序排版;提供插入操作添加新单词并重新排版。
另外通过键盘式菜单实现功能选择。
(2)总体设计:
整个系统被设计为单词录入模块,文件存储模块和单词浏览模块。
其中单词录入模块要完成输入单词,检查是否重复,排序操作。
文件存储模块把存放单词的数组中的数据写入文件。
单词浏览模块完成英文词典的输出,即文件的输出操作。
(3)数据结构采用指针数组或二维数组。
以【Enter】键或者空格键作为单词输入结束标志,对重复的单词自动排除可选用查找方法,数据结构可采用指针和数组。
2(程序设计思路
整个系统被设计为单词录入模块,文件存储模块和单词浏览四个模块。
其中单词录入模块要完成输入单词,检查是否重复,排序操作。
文件存储模块把存放单词的词组中的数据写入文件。
单词浏览模块完成英文词典的输出,即文件的输出操作。
这四个模块是整体的设计思路,设计核心,整个程序的设计都将围绕这四个模块进行,各个模块都相互衔接,所以需要在设计好各个部分地同时,还要把握好各个部分的连接。
2
3(功能模块图
(
英文词典排版系统
单词录入文件存储单词浏览
4(数据结构设计
数据结构采用指针数组或二维数组:
char*dictionary[N];或chardictionary[N][20]。
其中N是宏定义#defineN256(表示单词个数)
(1)单词录入模块
输入一个单词,存放在一个临时字符数组中,以空格或回车表示单词的结束(这也是默认操作),然后换行输出刚刚输入的单词。
采用插入排序算法的思想把该单词插入单词数组中,不同的是如果两个单词相同则不插入。
(2)文件存储模块
采用fwrite或fprintf把单词数组输入到文件中。
(3)单词浏览模块
采用fread或fscanf把单词从文件中读出,然后输出。
3
5(算法设计
1.主函数
【流程图】
显示一系列的功能选项
N输入n,判断n是否是1—9
Y
【程序】根据n的值调用各功能模块函数#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);intn;//****n全局变量*****//
charword[N][20];
voidmenu()//***主界面***//
{
intn,w;//*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*//
do
{
puts("\t\t********************MENU********************\n\n");
puts("\t\t\tWelcometodj'sprogram!
\n\n");
puts("\t\t\t\t1.Addnewword.");
puts("\t\t\t\t2.Browseallthewords.");
puts("\t\t\t\t3.Searchtheword.");
4
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();
}
2.公共函数
【程序】
intload()//*加载函数*//
{
inti,count;
intstart;
char*pt[ROWS];
charch,len;
charinput;
if((fp=fopen("words.txt","a+"))==NULL)//*以输出打开方式,在此前的记录被覆
盖*//
{
printf("\nCannotopenfile!
\n");
returnNULL;
}
5
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); } 3.各功能模块设计 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"); 6 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 7询问用户是 返回主菜单否继续修改 【程序】 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) 8 { 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)追加模块 【流程图】 调用加载函数n=load();并计算可 以记录个数n 输入用户要追加的的单词 保存追加的单词 Y询问用户是否继续追加单词 N 返回主菜单 【程序】 voidadd()//*追加模块*// { inti,x,w1,w2,w; charc[20]; 9 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).back menu[]\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).add another2).backmenu[]\b\b"); do { scanf("%d",&x); if(x<1||x>2) w2=1; else w2=0; }while(w2==1); } 10 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词记录 显示找到的记录提示没有找到 询问用户是否继续查找11 让用户选择1).查找返回主菜单 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).modify 2).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" 12 #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; } 13 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); 14 fclose(fp); puts("谢谢使用,再见! "); return0; } charget_option(void){ charch; while((ch=getchar())
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 一种 简单 英文 词典 排版系统 实现