课程设计(论文)说明书课题:电子英汉字典学院:电子工程与自动化专业:测控技术与仪器学生姓名:覃娇容学号: ************** : ***摘要英汉字典作为一个常用的学习工具,是我们经常要使用的。
运用C语言编写程序,使得系统能完成一个简单的电子英汉词典的功能,如:单词的查找、增词、删除、修改和保存等功能。
关键字:C语言、电子英汉字典、查找、增词、删除、修改、保存、显示目录1 设计任务与要求 (4)2 总体设计 (4)3 详细设计 (5)3.1 设计思路 (5)3.2 各功能模块实现的具体流程 (5)3.2.1 菜单显示 (5)3.2.2 查找 (6)3.2.3 增加 (8)3.2.4 删除 (9)3.2.5 修改 (11)3.2.6 显示 (13)4 调试分析 (15)总结与心得 (20)参考文献 (21)附录 (22)电子英汉字典设计1 设计任务与要求:该设计要求实现简单电子英汉字典的功能,具体管理操作包括单词的添加、显示、查找、删除、修改和保存等。
(1)使用结构体实现,每个数据的结构应包括:单词的英文拼写,单词的中文释义。
(2)系统功能:A.词条录入:即添加单词记录。
B.信息显示:将所有的单词按字母顺序显示。
C.词条修改:对已经输入的单词信息进行修改。
D.词条删除:删除某个单词记录。
E.单词查询:输入单词英文拼写,输出该单词的中文释义。
F.信息保存:将单词信息保存到文件。
G.退出系统。
2 总体设计系统功能分析:本系统可以实现词条录入、信息显示、词条修改、词条删除、单词查询、信息保存、退出系统等功能。
系统功能模块图如图2.1、图2.2所示。
图2.1系统功能模块图(1)图2.2系统功能模块图(2)3 详细设计3.1 设计思路:根据设计任务与要求,该设计主要实现简单电子英汉字典的功能。
具体实现单词的录入、显示、查找、修改、删除、保存与退出等功能。
单词录入之后将自动保存到文件中,然后调用显示函数,将保存在文件中的单词信息按照单词字母顺序排序前后显示出来。
调用查找函数,可以查找保存在文件中的单词信息并显示出来。
调用修改函数,可以对保存在文件中的信息进行修改。
调用删除函数,可以对保存在文件中的信息进行修改。
3.2 各功能模块实现的具体流程:3.2.1 菜单显示:打开运行窗口,进入菜单显示页面。
根据菜单的提示,选择继续执行或者是退出。
switch (a){case 1:Search(); break;//查找case 2:Append(); break;//添加case 3:Delete(); break;//删除case 4:Update(); break;//修改case 5:Display(); break;//显示default :break;//退出}根据菜单提示,输入a,选择要执行的指令。
具体流程如图3.2.1所示。
图3.2.1菜单显示流程图3.2.2 查找:选择查找指令后,提示你输入要查找的单词。
输入要查找的单词后,开始判断文件中是否存在此单词,若存在则显示出此单词及其意译,否则提示不存在此单词,然后提示你是否继续执行。
可以进行显示也可以到你所建立的文本文档里查看是否存在你所要查找的单词。
fp = fopen("G:\\file.txt", "rb");for (i=0; i<W; i++){fread(&word[i], sizeof (struct zidian), 1, fp);if (strcmp(word[i].danci, chazhao) == 0){printf("%s\t%s\n", word[i].danci, word[i].yisi);printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &a);break;}}fclose(fp);if (i == W){printf("不存在此单词!\n");printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &a);}将要查找的单词跟文件中存有的单词进行比较,若文件中存在所要查找的单词,则输出该单词及其意译,否则输出“不存在此单词!”。
具体流程如图3.2.2所示。
图3.2.2查找模块的流程图我的查找方法是:将保存在文件中的单词内容读出,然后将要查找的单词与之进行一一比较。
这一方法非常笨拙。
较好的方法可以是:先将保存在文件中的单词进行排序,然后用二分查找的方法来进行查找。
这一查找方法是较好的,可是之前没有想到,后来老师问起才想起这一方法。
今后有机会,我一定再改改这算法。
3.2.3 增加:选择录入单词的指令,提示你录入要添加的单词,如果文件里面存储的单词达到W(在程序中我设W=20)个了,就会提醒你“储存已满,不能增词”。
如果没有超过,那就引导你输入你想增加的单词及其意思。
若你所增加的单词之前已经存储,就会提醒你“已存在此单词”,否则即可成功增加单词。
后面还会提示你是否继续执行。
可以进行显示也可以到你所建立的文本文档里查看是否存在你所要查找的单词。
fp = fopen("G:\\file.txt", "a");//添加单词时以追加的方式打开文件。
fread(&word[i], sizeof (struct zidian), 1, fp);if (strcmp(word[i].danci, zengci) == 0){printf("已存在此单词!\n");printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &a);break;}//判断文件中是否已存在所要添加的单词,若已存在则提示“已存在此单词”。
fwrite(&word[i], sizeof (struct zidian), 1, fp);fclose(fp);//否则,将所要添加的单词写入文件中进行保存。
具体流程如图3.2.3所示。
在比较单词是否存在时也是与查找的方法一样,也是进行一一比较。
其实,我也可以先将文件中的单词进行排序然后再用二分查找的方法来比较的查找的。
这样的话,时间复杂度就要比我所用的那种一一比较的方法小得多。
图3.2.3增加模块的流程图3.2.4 删除:选择删除指令,出现“请输入需要删除的单词”,后面输进你想删除的单词,然后根据提示语输入单词,若输入的单词在文件中不存在则会提醒你“不存在此单词”。
否则就会告诉你成功删除了。
且之后会提示你是否继续执行。
可以进行显示也可以到你所建立的文本文档里查看是否删除成功。
fread(&word[i], sizeof (struct zidian), 1, fp);if (strcmp(word[i].danci, shanchu)==0)//要删除的单词存在,进行删除{t = 1;k = i;printf("确定要删除请输入3,否则退出程序\n");scanf("%d", &a);if (3 == a){for (j=0; j<D;j++){word[i].danci[j] = '\0';word[i].yisi[j]= '\0';}for (i=k; word[i+1].danci[0] !='\0'; i++){strcpy(word[i].danci, word[i+1].danci);strcpy(word[i].yisi, word[i+1].yisi);for(j=0; j<D;j++){word[i+1].danci[j] = '\0';word[i+1].yisi[j]= '\0';}}}if (i == W)//否则提示不存在此单词{printf("不存在此单词!\n");printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &b);}for (i=0; i<W; i++)//加入这一部分才能成功删除,否则无法删除{fread(&word[i], sizeof (struct zidian), 1, fp);}fclose(fp);fp = fopen("G:\\file.txt", "wb");for (i=0; word[i].danci[0] != '\0'; i++){fwrite(&word[i], sizeof (struct zidian), 1, fp);}fclose(fp);具体流程如图3.2.4所示。
图3.2.4删除模块流程图3.2.5 修改:选择修改指令。
会出现“请输入需要修改的单词”的提示语,后面输进你想修改的单词,若此单词不存在,系统将会提示你“不存在此单词”,否则,会提示你是修改单词还是意译,然后,系统会根据你的选择,提示你输入单词或者意译,之后就会告诉你修改完成了。
后面还会提示你是否继续执行。
可以进行显示也可以到你所建立的文本文档里查看是否修改成功。
fread(&word[i], sizeof (struct zidian), 1, fp);if (strcmp(word[i].danci, xiugai) == 0)//要修改的单词存在{printf("修改单词输入41,修改意译输入42\n");scanf("%d", &a);if (a == 41){for (j=0; j<D;j++){word[i].danci[j] = '\0';}printf("请输入修改后的单词\n");scanf("%s", xiugaih);strcpy(word[i].danci, xiugaih);//修改单词fclose(fp);}if (a == 42){for (j=0; j<D;j++){word[i].yisi[j]= '\0';}printf("请输入修改后的意译\n");scanf("%s", xiugaihy);strcpy(word[i].yisi, xiugaihy);//修改意思fclose(fp);}printf("修改成功!\n");printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &b);break;}}fclose(fp);if (i == W)//不存在要修改的单词{printf("不存在此单词!\n");printf("继续执行请输入指令,否则退出程序\n");scanf("%d", &b);}for (i=0; i<W; i++)//加入这一部分才能成功修改,否则无法修改{fread(&word[i], sizeof (struct zidian), 1, fp);fclose(fp);fp = fopen("G:\\file.txt", "wb");for (i=0; word[i].danci[0] != '\0'; i++){fwrite(&word[i], sizeof (struct zidian), 1, fp);}fclose(fp);具体流程如图3.2.5所示。