词典变位词检索系统课程设计报告
- 格式:doc
- 大小:431.50 KB
- 文档页数:17
《数据结构课程设计》实验报告•57.词典变位词检索系统•在英文中,把某个单词字母的位置(顺序)加以改变所形成的新字词,英文叫做anagram,不妨译为变位词。
譬如said(say的过去式)就有dais(讲台)这个变位词。
在中世纪,这种文字游戏盛行于欧洲各地,当时很多人相信一种神奇的说法,认为人的姓名倒着拼所产生的意义可能跟本性和命运有某种程度的关联。
所以除了消遣娱乐之外,变位词一直被很严肃地看待,很多学者穷毕生精力在创造新的变位词。
本设计要求词典检索系统实现变位词的查找功能。
dictionary.cchar a[102][30]={//0号单元留空"", "abide","abound","abreast","abstain","absurs","adore","adorn","advent","advers","at", "baby","back","bacon","bad","badge","badly","ball","ban","bank","bar", "cab","cabin","cable","cafe","cage","cake","call","calm","came","camp", "dais","damn","damp","dance","danger","dark","dash","data","date","dawn", "day","dead","deaf","deal","dean","dear","death","debt","deck","deer", "each","eager","eagle","ear","early","earn","earth","ease","east","easy", "eat","edge","edit","effect","effort","egg","ego","elder","elect","else", "face","fact","factor","fade","fail","faint","fair","fake","fall","false", "gain","game","gap","gate","gay","gaze","gear","gene","germ","get", "hail","hair","half","hall","halt","ham","hand","hang","hard","said"};//严格按照字典里的顺序int length=101;bianweici.h#include<string.h>#include<stdio.h>#include<malloc.h>typedef char ElemType;typedef struct Diction{ElemType word[100];struct Diction *next;}Diction;typedef struct LNode{char c[29];struct LNode *next;}LNode,*LinkList;int m;//记录字符串长度int n;//记录字符串中的字符种类数char map[256];//记录是哪几种字符char A[256];int count[256];//记录每种字符有多少个bienweicioperation.cvoid Make_Map(char *str)//统计字符串的相关信息{int s[256];int i;memset(s,0,sizeof(s));memset(count,0,sizeof(count));m=strlen(str);while(*str){s[*str]++;str++;}n=0;for(i=0;i<256;i++)if(s[i]){map[n]=i;count[n]=s[i];n++;}}int stack[1000];Diction *Find(int depth,Diction *head,Diction *HEAD,LinkList *L)//对所输入的单词进行排列,并存在链表L中{LinkList s;Diction *p,*p1,*p2;p=head;if(depth==m){int i;for(i=0;i<depth;i++)A[i]=map[stack[i]];A[i]='\0';/*printf("%s",A);*//*显示所输入单词的所有排列,A就是其中一员,循环输出A*/ s=(LinkList)malloc(sizeof(LNode));for(i=0;i<=depth;i++)s->c[i]=A[i];s->next=(*L)->next;(*L)->next=s;while(p!=NULL){if(strcmp(p->word,A)==0)break;p=p->next;}if(p!=NULL){p1=HEAD;while(p1->next!=NULL){p1=p1->next;}p2=(Diction *)malloc(sizeof(Diction));strcpy(p2->word,A);p1->next=p2;p2->next=NULL;}}else{int i;for(i=0;i<n;i++)if(count[i]){stack[depth]=i;count[i]--;Find(depth+1,head,HEAD,L);count[i]++;}}return HEAD;}Bianweici.c#include"bianweici.h"#include"dictionary.c"#include"bianweicioperation.c"void main(){int x=0;int i=0;int low,mid,high;Diction *head;LinkList L,p;printf("======================================================== ==================\n");printf(" 词典变位词检索系统\n");printf("======================================================== ==================\n");head=NULL;while(1){int j=0;//j用来统计变位词的个数char str[30];Diction *HEAD=(Diction *)malloc(sizeof(Diction));HEAD->next=NULL;L=(LinkList)malloc(sizeof(struct LNode));//建立带头结点的链表L,用来存放所输入单词的所有排列组合L->next=NULL;printf("输入单词:");gets(str);Make_Map(str);HEAD=Find(0,head,HEAD,&L);p=L->next;while(p){//折半查找法low=1;high=length;while(low<=high){mid=(low+high)/2;if(strcmp(p->c,a[mid])==0&&strcmp(p->c,str)!=0){j++;//j用来统计变位词的个数printf("%s ",a[mid]);//找到就输出变位词break;//找到就退出,进行下一排列比较}else if(strcmp(p->c,a[mid])<0)high=mid-1;else low=mid+1;}p=p->next;}//将链表L中的单词与词典中的单词进行比较if(j)printf("是%s的变位词\n",str);else printf("%s没有变位词或本字典不包含它的变位词\n",str);printf("输入0继续1退出\n");scanf("%d",&x);getchar();if(x==1)break;}}。
课程设计报告课程名称:java .班级:学号:姓名:完成日期:2021、11、16沈阳航空工业学院北方软件学院北方软件学院课程设计任务书专业名称:计算机科学与技术课程名称:Java课程设计设计题目:基于数据库的词典工具起止时间:问题描述:实现一个基于数据库电子词典,输入一个词汇后能在数据库中检索出该词的解释,并显示出来。
根本要求:要求使用MySQL做为后台存储数据库,使用Java GUI的方法,具有联想功能。
用户可以添加词汇和解释,可以定义定制常用词汇列表。
较高要求:在查词框的下拉列表中能显示历史查词记录。
实现提示学生姓名:学号:指导教师:基于数据库的词典工具1概要设计(1)程序分析:用java程序编写一个基于数据库的词典工具,实现一个基于数据库电子词典,输入一个词汇后能在数据库中检索出该词的解释,并显示出来。
要求使用MySQL做为后台存储数据库,使用Java GUI的方法,具有联想功能。
用户可以添加词汇和解释,可以定义定制常用词汇列表。
(2)用到的工具:MySQL-Front〔SQL编辑器〕,MySQL做为后台数据库。
(3)模块图:2详细设计(1)数据库的相关知识:利用JDBC开发数据库应用一般包括如下步骤:1、建立与数据库的连接数据库连接的建立包括两个步骤:首先要加载相应数据库的JDBC驱动程序;然后建立连接。
Class.forName()方法的执行,将创立数据库驱动的实例并注册到驱动管理器。
在某种数据库的驱动程序加载后,就可以建立与该DBMS的连接了。
定义如下: Class.forName(〞〞);创立数据库连接这个步骤中要使数据库驱动连接到相应的DBMS。
连接的建立通过使用DriverManager类中的static方法getConnection(),该方法的定义如下:Cion(“jdbc:mysql://.14/KEMDB?useUniCode=true&characterEncoding=utf-8”);2、执行SQL语句在所建立的数据库连接上,创立Statement对象,对各种SQL语句发送到所连接的数据库执行。
北京联合大学课程设计报告课程名称:C语言程序设计课设项目名称: 电子生词库软件学院:自动化学院专业:信息处理与只能技术姓名:彭霜辰(组长) 刘轩张鑫学号:202020指导教师: 梁军成绩:2008年7月1日目录第一部分课程设计题目与要求ﻩ错误!未定义书签。
1.问题描述.............................................................................. 错误!未定义书签。
2.功能要求ﻩ错误!未定义书签。
3.大致任务分工ﻩ错误!未定义书签。
第二部分《电子生词库软件》的设计与功能实现ﻩ错误!未定义书签。
1.总体设计: ............................................................................ 错误!未定义书签。
2.数据结构.............................................................................. 错误!未定义书签。
3.算法设计.............................................................................. 错误!未定义书签。
4.程序代码设计ﻩ错误!未定义书签。
5.测试与调试ﻩ错误!未定义书签。
第三部分课程设计总结....................................................... 错误!未定义书签。
1.个人总结ﻩ错误!未定义书签。
2.结束语............................................................................... 错误!未定义书签。
附录Ⅰ程序清单........................................................................ 错误!未定义书签。
中国地质大学本科生课程论文封面课程名称C语言课程设计教师姓名本科生姓名本科生学号本科生专业所在院系日期:课程设计评语2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目录课程设计评语 (2)目录 (3)1.课程论文题目 (4)2.程序设计思路 (4)3.功能模块图 (5)4.数据结构设计 (5)5.算法设计 (5)6.程序代码 (16)7.程序运行结果 (21)8.编程中遇到的困难及解决方法 (24)9.总结心得及良好建议 (24)10.致谢 (24)1.课程论文题目一种简单的英文词典排版系统的实现:【要求】(1)能输入和现实打入的单词;(2)能分辨出单词;(3)对重复的单词和已经输入的单词能自动排除;(4)能按A~Z的顺序排版;(5)能将运行结果以文本形式储存;(6)具有添加新单词重新排版的能力。
[提示](1)需求分析:运行结果以文本形式储存,因而要提供文件的输入输出操作;通过查找操作检查重复单词;提供排序操作现实按A~Z的顺序排版;提供插入操作添加新单词并重新排版。
另外通过键盘式菜单实现功能选择。
(2)总体设计:整个系统被设计为单词录入模块,文件存储模块和单词浏览模块。
其中单词录入模块要完成输入单词,检查是否重复,排序操作。
文件存储模块把存放单词的数组中的数据写入文件。
单词浏览模块完成英文词典的输出,即文件的输出操作。
(3)数据结构采用指针数组或二维数组。
以【Enter】键或者空格键作为单词输入结束标志,对重复的单词自动排除可选用查找方法,数据结构可采用指针和数组。
2.程序设计思路在英文词典排版当中,人工统计的速度很慢,且容易出现差错。
本英文词典排版系统的自动化加速了排版工作,提高工作效率本程序主要采用对零散的单词进行自动读取,然后按单词首字母顺序讲单词保存到文档,这样的结构化非常便于程序后续的排版工作。
排版具体过程涉及到自动排除重复单词与添加新单词并重新排版等问题,将于正问中详细介绍。
数据结构课程设计报告(简易英汉词典系统)数据结构课程设计报告(简易英汉词典系统)广西大学课程设计报告课程:《数据结构》题目:简易英汉词典系统学院:______计算机与电子信息学院_专业:______计网类___________班级:______计网071_____ ___ _学号: 0707100103学生姓名:蓝冠恒指导教师:__ ________二〇〇九年四月一、实验目的和要求【实验目的】设计一个简易英汉词典系统,实现基本的单词检索功能,即输入英文单词则系统输出其汉语,反之亦然;并能够进行基本的词典维护操作,包括插入和删除,要求按英语的词典顺序排列单词。
【设计要求】(1)使用图形化界面。
(2)建立英语词汇表,输入为小写字母时为合法输入。
(3)每个词条应包含单词的英语形式、汉语释义、发音等基本信息。
二、设计概要:1、根据实验要求,与及所了解的数据类型相关知识,定义了如下数据类型:链接数据库声明的变量:Connection connection = null;Statement statement = null;ResultSet Result = null;声明全局变量:String newWord, pronunciations,indexWord="", deleteWord, searchEnglish, searchChinese,isSound;它们分别是:新增单词、新单词音标、引擎词、删除词、查找的英文、查找的汉语、判断音频是否存在。
2、实验功能所定义的各种按钮、文本框、选择框和列表框:取消删除功能按钮:JButton deleteCancelButton = new JButton();英汉互译面板上的发音按钮:JButton sound = new JButton();浏览词库面板上的发音按钮:JButton scanSoundButton = new JButton();添加单词的按钮:JButton addOkJButton = new JButton();取消添加功能的按钮:JButton addCancelButton = new JButton();删除词库单词信息按钮:JButton deleteOkButton = new JButton();浏览词库按钮:JButton scanButton = new JButton();要查找的英文或汉语的文本框输入框:JTextField inputSearchWord = new JTextField();新增单词文本输入框:JTextField inputNewWord = new JTextField();新增单词音标输入框:JTextField pronunciation = new JTextField();新增单词释义输入框:JTextField newWordChinese = new JTextField();新增单词过去式输入框:JTextField newWordPreterite = new JTextField();新增单词现在进行时态输入框:JTextField newWordModernism = new JTextField();要删除的单词输入框:JTextField inputDeleteWord = new JTextField();新增单词词性复选框:JComboBox newWordClass = new JComboBox();列出要查找的词的记录信息的多行文本框:TextArea outputSearchEnglish = new TextArea();列出要删除的单词的记录信息的多行文本框:TextArea deleteWordChinese = new T extArea();列出浏览时需浏览单词信息的多行文本框:TextArea scanOutput = new TextArea();DefaultListModel model = new DefaultListModel();列出所查找的英文或汉语对应的单词的列表框:JList listSearchEnglish = new JList(model);列出备选英标的列表框:JList pronunciationJList = new JList(listItem);列出可能且可以被删除的单词的列表框:JList deleteJList = new JList(model);列出词库所有单词的列表框:JList scanWordJList = new JList(model);3、实现功能所定义的各种函数:1)public static String Return(String str)将数据库里的单词的音标进行还原。
VB课程设计查词典一、教学目标本节课的教学目标是让学生掌握VB编程中查词典的应用程序设计方法。
知识目标要求学生理解查词典程序的需求分析、设计思路和实现方法;技能目标要求学生能够运用VB编程语言独立完成一个简单的查词典程序;情感态度价值观目标则是培养学生的编程兴趣,提高学生解决实际问题的能力。
二、教学内容本节课的教学内容主要包括以下几个部分:首先是查词典程序的需求分析,让学生理解查词典程序的功能和用途;其次是VB编程语言的基本语法和数据类型,为学生编写程序打下基础;然后是查词典程序的设计思路和实现方法,引导学生学会独立思考和解决问题;最后是程序调试和优化,让学生掌握程序运行的基本原理。
三、教学方法为了达到本节课的教学目标,我们将采用多种教学方法相结合的方式进行教学。
首先,采用讲授法向学生讲解VB编程语言的基本语法和数据类型;其次,通过案例分析法引导学生分析查词典程序的需求,并设计出相应的程序;然后,采用实验法让学生动手编写和调试程序,提高学生的实践能力;最后,采用讨论法让学生分享自己的编程心得,培养学生的团队协作精神。
四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:教材《VB编程与应用》及相关参考书,为学生提供理论知识的支持;多媒体教学课件,直观地展示程序运行过程和效果;在线编程平台,让学生可以随时随地编写和调试程序;查词典API接口,用于实现查词典程序的核心功能。
五、教学评估本节课的教学评估将采用多元化的评价方式,以全面、客观、公正地评价学生的学习成果。
评估主要包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性。
2.作业完成情况:评估学生作业的完成质量,包括编程代码的正确性、规范性和创新性。
3.考试成绩:通过课后布置的编程练习和模拟考试,评估学生对查词典程序设计的掌握程度。
4.自我评价:要求学生撰写自我评价报告,反思自己在学习过程中的收获和不足。
2012-2013学年第二学期《高级语言程序设计》课程设计报告题目:英汉小词典专业:计算机科学与技术班级:计科2班姓名:XXXX指导教师:XXX成绩:计算机与信息工程系2013年06月28日目录1设计内容及要求 (3)1.1设计内容 (3)1.2设计任务及具体要求 (3)2概要设计 (4)2.1系统功能简介 (4)2.2总体设计框图 (4)3设计过程或程序代码 (5)3.1对关键代码加以分析说明 (5)3.2程序运行界面 (10)4 程序设计结果与分析 (12)5 心得 (13)致谢 (13)参考文献 (13)附录:源程序 (14)英汉小词典1 设计内容及要求1.1设计内容(1)、在计算机中建立有限规模的电子英汉词典(文件),利用程序实现电子英汉词典的查询、增词、删除、修改和维护工作。
(2)、词典的内容为:每行对应一个词条,每个词条由两个字符串组成,字符串用若干空格符分开;前一个是单词字符串(英文),后一个是释义字符串(中文),使用分号作为多个释义的分隔符(无空格)。
(3)、对单词和释义字符串长度的限定分别为不少于20个与40个字符,词条数限定为不多于200条。
(4)、采用菜单工作方式。
在一个操作执行之后,程序询问是否继续执行该操作。
如输入A或a,则重复同一操作,不退回到菜单;如输入其它信息,则回到菜单等待另一次选择。
仅当选择退出操作时,程序应询问是否将修改后的词典存盘,并根据用户选择存盘退出或不存盘退出。
1.2设计任务及具体要求主要利用c语言的文件操作能力设计开发一个英汉小词典,至少具有如下功能:查询、删除、增词、修改单词。
操作界面要符合用户的一般习惯,图形或文本界面都可以。
要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。
词典变位词检索系统目录摘要 (2)1绪论 (2)2系统分析 (2)2.1功能需求 (2)2.2数据需求 (2)2.3性能需求 (2)3总体设计 (2)3.1系统设计方案.................................................................... 错误!未定义书签。
4详细设计 .. (3)4.1数据结构定义 (3)4.2读入词典模块 (4)4.3求出变位词并输出合法单词模块 (6)4.4循环输入单词模块 (8)5调试与测试 (8)5.1调试 (8)5.2测试 (8)6结论 (9)结束语 ......................................................................................... 错误!未定义书签。
参考文献 .. (9)附录1-用户手册 (11)附录2-源程序 (12)摘要本系统的开发是用C语言作为程序开发的工具,利用抽象数据类型,实现单词的变位词检索功能,系统首先处理用户给出的词典文件,之后系统从标准输入函数中反复接受一个单词或字符串的输入,然后系统输出该字符串的所有可能排列和其中形成的合法单词。
本文从分析词典变位词检索系统开发需求出发,描述了系统的总体设计、详细设计、调试和测试等整个系统的设计和实现过程,并对系统的完成情况进行总结。
关键词:单词全排列;合法单词;词典文件1绪论词典变位词检索系统就是从词典中查找输入单词的变位词中的合法单词的系统。
(扩充)根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1) 处理词典文件:从用户给出的词典文件中读取单词进线性表。
(2)求出变位词并输出合法单词:输入单词后输出单词字母所有可能形成的变位词,即单词的全排列,然后从词典中检索出生成的全排列中的合法单词。
(3)循环输入单词:系统可以循环输入单词进行检索。
课程设计报告2020~2021学年第一学期课程可视化程序设计课程设计题目电子英汉词典院(系): 计算机学院(软件学院)姓名学号专业班级2019级计科2班指导教师2020年 12 月 31 日目录第一章绪论 (1)1.1 课题背景及意义 (1)1.2 开发环境及技术 (2)第二章概要设计 (2)2.1页面设计 (2)2.1.1 系统首页设计 (2)2.1.2 注册界面设计 (3)2.2 数据库设计 (4)2.2.1 数据库概念结构设计 (4)2 2.2数据库逻辑结构设计 (6)2.2.3 数据库物理结构设计 (7)第三章功能详细设计与实现 (8)3.1实现的全部功能表 (9)3.2功能1 (10)3.3功能2 (11)3.4功能3 (12)3.5功能4 (13)3.6功能5 (14)3.7功能6 (15)3.8功能7 (16)第四章检测及评价 (17)第五章结语 (23)第一章绪论当今时代是信息化时代,而信息的数字化也越来越被人们所重视,所以,数字化技术的重要性也逐渐体现了出来,主要体现在以下几个方面: 数字化是数字计算机的基础,数字化是软件技术的基础,是智能技术的基础,数字化是信息社会的技术基础,数字化是信息社会的经济基础。
词典作为一种为大众服务的工具书,已经渐渐退居二线了,进而出现了另一种查找方式更加简便,更加精确,词汇量更加丰富而且随身携带更加方便的工具,那就是电子英汉词典,应该说这是一个新旧交替的过程,电子英汉词典取代传统词典只是时间的问题。
所以说电子词典的发展前景是明朗的,电子英汉词典生产厂家也如同雨后春笋般崛起了。
电子英汉词典是一种将传统的印刷词典转成数码方式、进行快速查询的数字学习工具。
电子英汉词典以轻便易携、查询快捷、功能丰富等特点,成为21世纪学生学习生活、社会人士移动办公的掌上利器。
它不仅可实现英译汉、汉译英的基本翻译功能,还可以让用户根据自己的需要添加、修改、删除词库,形成自己的词库。
- 第二学期《高级语言程序设计》课程设计汇报题目:英汉小词典专业:计算机科学和技术班级:计科2班姓名:XXXX指导老师:XXX成绩:计算机和信息工程系06月28日目录1设计内容及要求 (3)1.1设计内容 (3)1.2设计任务及具体要求 (3)2概要设计 (4)2.1系统功效介绍 (4)2.2总体设计框图 (4)3设计过程或程序代码 (5)3.1对关键代码加以分析说明 (5)3.2程序运行界面 (10)4 程序设计结果和分析 (12)5 心得 (13)致谢 (13)参考文件 (13)附录: 源程序 (14)英汉小词典1 设计内容及要求1.1设计内容(1)、在计算机中建立有限规模电子英汉词典(文件), 利用程序实现电子英汉词典查询、增词、删除、修改和维护工作。
(2)、词典内容为: 每行对应一个词条, 每个词条由两个字符串组成, 字符串用若干空格符分开;前一个是单词字符串(英文), 后一个是释义字符串(汉字), 使用分号作为多个释义分隔符(无空格)。
(3)、对单词和释义字符串长度限定分别为不少于20个和40个字符, 词条数限定为不多于200条。
(4)、采取菜单工作方法。
在一个操作实施以后, 程序问询是否继续实施该操作。
如输入A或a, 则反复同一操作, 不退回到菜单;如输入其它信息, 则回到菜单等候另一次选择。
仅当选择退出操作时, 程序应问询是否将修改后词典存盘, 并依据用户选择存盘退出或不存盘退出。
1.2设计任务及具体要求关键利用c语言文件操作能力设计开发一个英汉小词典, 最少含有以下功效: 查询、删除、增词、修改单词。
操作界面要符适用户通常习惯, 图形或文本界面全部能够。
要求:明确课程设计目标, 能依据课程设计要求, 查阅相关文件, 为完成设计准备必需知识;提升学生用高级语言进行程序设计能力, 关键提升用C语言进行文件操作和绘图应用编程技术水平;初步了解软件开发通常方法和步骤;提升撰写技术文档能力。
词典变位词检索系统目录摘要 (2)1绪论 (2)2系统分析 (2)2.1功能需求 (2)2.2数据需求 (2)2.3性能需求 (2)3总体设计 (2)3.1系统设计方案.................................................................... 错误!未定义书签。
4详细设计 .. (3)4.1数据结构定义 (3)4.2读入词典模块 (4)4.3求出变位词并输出合法单词模块 (6)4.4循环输入单词模块 (8)5调试与测试 (8)5.1调试 (8)5.2测试 (8)6结论 (9)结束语 ......................................................................................... 错误!未定义书签。
参考文献 .. (9)附录1-用户手册 (11)附录2-源程序 (12)摘要本系统的开发是用C语言作为程序开发的工具,利用抽象数据类型,实现单词的变位词检索功能,系统首先处理用户给出的词典文件,之后系统从标准输入函数中反复接受一个单词或字符串的输入,然后系统输出该字符串的所有可能排列和其中形成的合法单词。
本文从分析词典变位词检索系统开发需求出发,描述了系统的总体设计、详细设计、调试和测试等整个系统的设计和实现过程,并对系统的完成情况进行总结。
关键词:单词全排列;合法单词;词典文件1绪论词典变位词检索系统就是从词典中查找输入单词的变位词中的合法单词的系统。
(扩充)根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1) 处理词典文件:从用户给出的词典文件中读取单词进线性表。
(2)求出变位词并输出合法单词:输入单词后输出单词字母所有可能形成的变位词,即单词的全排列,然后从词典中检索出生成的全排列中的合法单词。
(3)循环输入单词:系统可以循环输入单词进行检索。
2系统分析2.1 功能需求本系统主要是从词典中检索出单词变位词的系统。
该系统需要有处理词典、求出变位词并输出合法单词、循环输入单词的功能。
2.2数据需求根据分析,本系统中主要涉及到的数据为单词。
扩充2.3 性能需求要求性能稳定可靠、运算速度快、安全性能高、方便易懂性、使用合理性、实用性强、可移植性好。
3总体设计3.1 功能模块设计词典变位词检索系统分为三个模块,分别为读入词典、求出变位词并输出合法单词、循环输入单词。
功能模块图如图1所示。
图1功能模块图(1) 读入词典模块读入词典模块,实现从用户给出的词典文件中读入单词进线性表。
(2) 求出变位词并输出合法单词模块求出变位词并输出合法单词模块,实现输入单词后输出单词字母所有可能形成的变位词,即单词的全排列,并从词典中检索出生成的全排列中的合法单词。
(3) 循环输入单词模块系统可以循环输入单词进行检索。
3.2 系统设计方案。
4详细设计词典变位词检索系统主要实现读入词典、求出变位词并输出合法单词、循环输入单词,它们的详细设计和实现过程如下介绍。
4.1 数据结构定义在本系统中使用了线性表数据结构,结构类型定义如下。
定义词典typedef char ElemType;typedef struct Diction{ElemType word[100];//单词struct Diction *next;//指针}Diction;4.2读入词典模块读入词典模块是将用户给出的diction.txt词典文件读入到链式存储结构的顺序表中。
具体实现流程如图2所示。
图2读入词典流程图读入词典流程图解释如下:首先定义int k;Diction *head,*p1,*p2;FILE *fp;开辟新结点p1=p2=(Diction *)malloc(sizeof(Diction));令k=0记录单词个数,head=NULL,如果文件打不开输出提示并返回head,如果打开成功,读取一个单词给p1,当k=1时,说明是第一个单词head=p1,p2指向p1,以后循环,每读入一个单词开辟新结点p1,最后p2->next=NULL,返回head,并输出一共有多少单词。
4.3求出变位词并输出合法单词模块求出变位词并输出合法单词模块,先对输入的单词进行全排列,每排出一个可能,输出排列,从词典中依次对比看是否为合法单词,如果是则存入新建的单链表中,然后全部输出合法单词。
程序流程如图3。
图3 求出变位词并输出合法单词流程图统计单词字符串的信息,用memset函数将数组空间初始化,m记录字符串长度,n记录字符串中的字符种类数,map记录是哪几种字符,count记录每种字符有多少个。
图4 求出变位词并输出合法单词流程图用stack记录字符的位置,复制字符数组map中第stack[i]个字符给A[i],同时输出字符,直到第一个可能的单词结束。
从词典链表中第一个结点存的单词开始,依次查找,直到最后一个,如果是合法单词,则新建结点p2,存入这个单词,直到所有全排列都输出结束后,将存储是合法单词的单链表HEAD带回,在主函数中输出。
4.4循环输入单词模块循环输入单词模块是用来在输出结果后跳转到“请输入单词”位置,使系统能实现循环输入单词进行检索功能。
该功能在主函数中用while(1)循环,printf("输入0继续1退出\n"),输入跳出条件用if判断,break跳出while结束程序来实现。
5调试与测试5.1 调试调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序不能运行程序运行到输出单词所有的变位词时,出现错误,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。
(2)运行完程序一次有错误提醒原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。
(写出你的系统在调试过程中的错误)5.2 测试测试数据过程如下:输入单词:post此单词的全排列为:opst opts ospt otps otsp post pots psot psto ptos ptso sopt sotp spot spot stop stpo tops tosp tpos tpso tsop tspo其中是单词的有:postspotstop输入0继续1退出输入单词:bee此单词的全排列为:bee eeb ebe没有这个单词输入0继续1退出1结束。
经过测试,给出特定的单词在系统中都能找到相应的变位词,系统的功能和性能得以实现。
但是由于用户给出的词典中单词量有限,所以输入有些单词,在词典中不能找到相映的合法单词。
6结论(以下两部分重写)经过一周的课程设计词典变位词检索系统基本完成,实现了任务书中的所有要求。
结束语为期一个礼拜的C语言综合训练终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,学会了在曾经编写过的函数上加以修改实现了我期望实现的功能,知道学习编程必须亲手将每一个字符敲入电脑中这样才能真正的学到课本或一些理论中学不到的知识,这才达到了实践的目的,当程序编写完成而且能够正常运行心里一种说不出的自豪感,虽然这对于一名程序员来说可能什么也不是,但这是我编程的开始,如果希望在编程这方面能够有所发展我所要走过的路还很长,还需要不断的学习!学习!参考文献[1] 谭浩强. C语言程序设计(第三版).北京:清华大学出版社[2] 林碧英. C语言程序设计教程.中国电力出版社,2006[3] 美赫伯特.希尔特,王子恢等译.C语言大全.电子工业出版社,2003(3到5个)。
源代码清单:#include<string.h>#include<stdio.h>#include<malloc.h>typedef char ElemType;typedef struct Diction{ElemType word[100];struct Diction *next;}Diction;int m;//记录字符串长度int n;//记录字符串中的字符种类数char map[256];//记录是哪几种字符char A[256];int count[256];//记录每种字符有多少个void Make_Map(char *str)//统计字符串的相关信息{int s[256];int i;memset(s,0,sizeof(s));memset(count,0,sizeof(count));m=strlen(str);while(*str){s[*str]++;str++;}n=0;for(i=0;i<256;i++)if(s[i]){map[n]=i;count[n]=s[i];n++;}}int stack[1000];Diction *Find(int depth,Diction *head,Diction *HEAD) {Diction *p,*p1,*p2;p=head;if(depth==m){int i;for(i=0;i<depth;i++)A[i]=map[stack[i]];A[i]='\0';printf("%s",A);while(p!=NULL){if(strcmp(p->word,A)==0)break;p=p->next;}if(p!=NULL){p1=HEAD;while(p1->next!=NULL){p1=p1->next;}p2=(Diction *)malloc(sizeof(Diction));strcpy(p2->word,A);p1->next=p2;p2->next=NULL;}putchar(' ');}else{int i;for(i=0;i<n;i++)if(count[i]){stack[depth]=i;count[i]--;Find(depth+1,head,HEAD);count[i]++;}}return HEAD;}Diction *read(void){int k;Diction *head;Diction *p1,*p2;FILE *fp;p1=p2=(Diction *)malloc(sizeof(Diction));k=0;head=NULL;if((fp=fopen("diction.txt","rb"))==NULL){printf("打不开\n");return(head);}while(1){if(fread(p1,sizeof(Diction),1,fp)==1){k=k+1;if(k==1) head=p1;else p2->next=p1;p2=p1;p1=(Diction *)malloc(sizeof(Diction));}elsebreak;}p2->next=NULL;fclose(fp);printf("词典中共%d个单词\n",k);return(head);}void main(){int x=0;Diction *head,*q;printf("单词变位词查询系统\n");head=read();while(1){Diction *HEAD=(Diction *)malloc(sizeof(Diction));HEAD->next=NULL;char str[1000];printf("输入单词:");gets(str);Make_Map(str);printf("此单词的全排列为:\n");HEAD=Find(0,head,HEAD);putchar('\n');q=HEAD->next;if(q==NULL){printf("没有这个单词\n");}else{printf("其中是单词的有:\n");while(q!=NULL){printf("%s\n",q->word);q=q->next;}}printf("输入0继续1退出");scanf("%d",&x);getchar();map[256]='1';A[256]='1';if(x==1)break;}}完成日期:2009年07月02日。