电话号码查询系统实验报告
电话号码查询系统设计(数据库管理)毕业论文——基于JAVA
摘要摘要电话发展到现在已经成为千家万户最常用的通信工具,电话质量好的大家的首选之一,通话费用比别的通讯工具要便宜得多,基本上各家各户都拥有固定电话,由于使用的人不断的增加,带给管理的要求也越来越高,本管理系统的需要从实际情况出发,对业务经过详细的系统调查,开发出的操作简单而且方便实用的一个电话号码查询系统。
本系统使用Myeclipse开发工具,主要使用Hibernate和Strtus2,结合Oracle数据库来实现数据库的操作。
电话号码查询系统主要对电话号码管理日常工作中遇到的实际问题,例如添加,修改,删除维护操作等。
关键词:Myeclipse Oracle数据库电话号码 Hibernate Struts2ABSTRACTABSTRACTThe telephone developed now already becomes everyone most commonly used communication facility, one of telephone quality good everybody first choices, the telephone conversation expense had to be much cheaper than other communication facilities, the basically various each household all had the fixed telephone, because used person’s unceasing increase, took to the management the request also more and more high, this management system management system need embarked from the actual situation, passed through the detailed system investigation to the service, developed the operation was simple moreover facilitates a practical telephone number inquiry system. This system uses the myeclipse development kit, mainly uses the hql sentence, unifies the oracle database to realize the database operation.The telephone number inquiry system mainly the actual problem which meets to the telephone number management routine work in, for example the increase, the revision, deletes the maintenance operation and so on.This system after the test, the movement is stable, may put into the use. Keywords: Myeclipse Oracle Telephone number Hibernate struts 2目录i目录第一章绪论 (1)1.1系统开发背景 (1)1.2系统开发意义 (1)1.3开发技术 (2)1.3.1 JSP技术 (2)1.3.2 Struts2技术 (3)1.3.3 Hibernate技术 (3)1.4开发工具 (3)1.4.1 Myeclipse (3)1.4.2 Oracle (3)1.4.3 Tomcat (4)第二章系统的可行性分析 (5)2.1可行性分析 (5)2.1.1 技术可行性 (5)2.1.2 经济可行性 (5)2.1.3 操作可行性 (6)2.1.4 社会因素可行性 (6)2.2可行性研究结论 (6)第三章需求分析 (7)3.1信息需求 (7)3.2功能需求 (7)3.3系统流程图 (8)3.4数据字典 (8)第四章系统总体设计与实现 (9)4.1系统E-R图 (9)ii目录4.2数据库表的设计 (10)4.3详细设计 (11)4.3.1 数据库详细设计 (11)4.3.2 功能模块介绍 (13)第五章软件测试与调试 (21)5.1测试概要 (21)5.1.1 测试目的 (21)5.1.2 定义 (21)5.1.3 测试对象 (21)5.1.4 测试工具 (21)5.1.5 测试执行 (22)5.2测试用例 (22)5.2.1 功能性 (22)5.2.2 易用性 (22)5.3测试方法 (22)5.4测试结果及缺陷分析 (23)5.4.1 数据和数据库完整性测试 (23)5.4.2 功能测试 (24)5.4.3 用户界面测试 (24)第六章设计总结 (27)致谢 (29)参考文献 (31)第一章绪论 1第一章绪论1.1 系统开发背景计算机的应用及普及到经济和社会生活的各个领域。
数据结构电话号码查询系统设计报告及代码
数据结构电话号码查询系统设计报告及代码郑州轻工业学院课程设计任务书题目电话号码查询系统专业、班级计科10-01学号41姓名王平主要内容:设计哈希表实现电话号码查找系统基本要求:从键盘输入各记录,分别以电话号码和用户名为关键字设计哈希表;采用不同的哈希函数,比较冲突率;采用适当的方法解决冲突;在哈希函数确定的前提下,尝试不同类型处理冲突的方法,考察平均查找长度的变化;查找并显示给定电话号码的记录;查找并显示给定用户名的记录。
主要参考资料等:数据结构课本(c语言版)完成期限:21012年6月21号指导教师签名:课程负责人签名:12年 6 月 21 日郑州轻工业学院本科数据结构课程设计总结报告设计题目:电话号码查询系统学生姓名:王平系别:计算机科学与通信工程学院专业:计算机科学与技术班级:10-01学号:541007010141指导教师:卢冰、李晔2012年6月21 日2找)方式:这个过程中,我选取了数字分析法,解释如上。
主菜单的设计在设计效果上已经显示,不过多说明。
算法的流程主菜单建立->除留取余和数字分析法存储->开放地址法解决冲突->查找。
算法设计分析这段代码是哈希存储时从第三个数开始求,提高了代码效率。
int i = 3;while(s.num[i]!='\0') //关键字{key+=(s.num[i]-'0'); //关键字求和i++;}key=key%21;线性探测再散列处理冲突if(!strcmp(W.t[key].num,""))//查找,解决冲突W.t[key]=s;else{//第一次没解决彻底,继续解决冲突int j=1;while(strcmp(W.t[(key+j)%21].num,"")) j++;W.t[(key+j)%21]=s;}}查找代码;while(xnum[i]!='\0'){key+=(xnum[i]-'0'); //求和i++;}key=key%21;if(!strcmp(W.t[key].num,xnum))//第一次查找,如果值相等直接赋值printf("%s %s %s\n",W.t[key].name,W.t[key].address,W.t[ke y].num);else2{//第一次没找到,继续查找int j=1;while(strcmp(W.t[(key+j)%21].num,xnum)) j++;if(j==20)printf("查找元素不存在!");elseprintf("%s %s %s\n",W.t[(key+j)%21].name,W.t[(key+j)%21 ].address,W.t[(key+j)%21].num);//输出查找到得元素}主界面:printf("********电话号码查询系统********\n");printf(" 用电话号码查询1 \n");printf(" 用用户名查询 2 \n");printf("********************************\n");printf("请输入您要的选项:\n");int x,y;while(scanf("%d",&x)!=-1){if(x==1){printf("********电话号码查询********\n");printf(" 除留取余法1 \n");printf(" 数字分析法2 \n");3printf("****************************\n");printf("请输入y值:\n");scanf("%d",&y);while(y<3){switch(y){case 1:chuliu();break;//调用除留取余函数case 2:shuzi();break;//调用数字分析函数default:printf("输入指令不存在!\n");}printf("********电话号码查询********\n");printf(" 除留取余法1 \n");printf(" 数字分析法2 \n");printf("****************************\n");printf("请输入您要的选项:\n");scanf("%d",&y);}}else if(x==2){printf("********用户名查询********\n");printf(" 分析法 3 \n");printf("****************************\n");fenxi();//调用分析函数4}elseprintf("查找方式不存在!请重新输入\n");}}运行结果分析56测试实例:wangping kaifeng 123456wangdoudou luoyang 456789zhaijiajai zhengzhou 147258sunxueping zhoukou 258369收获及体会本次试验电话号码查询系统,看起来也不是想我想象中的那么难,他比较具有针对性,要求我们用哈希函数解决这倒比较实用的题目,但是这道题目用到的哈希函数仅仅是哈希中的九牛一毛,虽然写了大程序,但是对哈希表的了解还是一无所知,数据结构这门课程我认为有点难,也许是我c语言基础不够强吧,好多代码都不是很理解,以至于不能够灵活运用,其实通过每次实验我们都可以发现,数据结构的知识好像就是草原的草,密密麻麻的等待我们去拔掉,这是一项浩大的工程等待我们去建设,与此同时,也要求我们要踏实的完成每一次作业,认真的去分析重要的代码,只有端正自己的态度,才能不断地学到新的知识,提高自己。
简单个人电话号码查询系统数据结构课程设计
一、课题任务人们在日常生活中经常要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询二、设计要求(1)在外存上,用文件保存电话号码信息;(2)在内存中,设计数据结构存储电话号码信息;(3)提供查询功能:根据姓名或编号实现快速查询;(4)提供其他维护功能,例如插人、删除、修改等。
三、程序的结点设计现假设链表结点仅含有一个数据域和一个指针域。
数据域是为了描述通讯者的相关信息,定义通讯者的结点类型:typedef struct{char num[10]; //编号char name[15]; //姓名char phone[11]; //电话号码}dataType;因此,,线性表的链式存储结构定义如下:typedef struct node{ //结点类型定义dataType data; //结点的数据域struct node *next ; //结点指针域}listnode , * linklist ;linklist head ; //定义指向单链表的头指针listnode * p ; //定义一个指向结点的指针变量四、程序的功能设计创建:创建通讯录文件添加:添加通讯录记录输出:显示通讯录记录删除:删除通讯录记录查找:查询通讯录记录修改:修改通讯录记录保存:将信息保存到文件中五、程序的数据设计该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。
下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和删除数据。
建立:可以建立通讯录记录,利用C语言文件,向文件中按顺序输入编号、姓名、电话号码,这里实际上是要求建立一个带头结点的单链表。
添加:可以添加通信录记录,向链表中继续增加结点,但只是输入到内存中,如果要输入到文件中还得调用保存函数。
输出:也是用通过循环依次输出文件中的数据,即输出所有通讯录里的记录。
手机通讯录实验报告及使用说明(附源代码)
手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告内容:在本次实验中,我使用了Java编程语言,开发了一个简单的手机通讯录应用程序。
该应用程序可以实现添加联系人、查找联系人、删除联系人等基本功能。
在开发过程中,我遵循了面向对象的编程思想,使用了类和对象的概念来组织和管理联系人信息。
在实验中,我首先设计了Contact类,用于表示一个联系人的信息,包括姓名、电话号码、邮箱等属性。
然后,我设计了AddressBook类,用于管理联系人信息,包括添加联系人、查找联系人、删除联系人等操作。
最后,我编写了一个简单的用户界面,用于与用户交互,实现对通讯录的操作。
在实验过程中,我遇到了一些问题,比如在删除联系人时没有进行足够的输入验证,导致程序出现了错误。
不过,通过调试和修改代码,我最终解决了这些问题,并且实现了一个稳定和可靠的手机通讯录应用程序。
使用说明:1. 添加联系人,在应用程序中选择“添加联系人”选项,然后输入联系人的姓名、电话号码、邮箱等信息,点击“确认”按钮即可完成添加。
2. 查找联系人,在应用程序中选择“查找联系人”选项,然后输入联系人的姓名或电话号码,点击“搜索”按钮即可查找到对应的联系人信息。
3. 删除联系人,在应用程序中选择“删除联系人”选项,然后输入要删除的联系人的姓名或电话号码,点击“确认”按钮即可删除该联系人。
4. 显示所有联系人,在应用程序中选择“显示所有联系人”选项,即可查看当前通讯录中的所有联系人信息。
源代码:```java。
public class Contact {。
private String name;private String phone;private String email;public Contact(String name, String phone, String email) {。
= name;this.phone = phone;this.email = email;}。
电话号码查询系统实验报
课程名称: 《数据结构》课程设计分数_______课程设计题目:电话号码查找系统姓名:朱其奎院系: 计算机学院专业:计算机科学与技术学院年级: 三学号: E01114288指导教师:王爱平2013 年 10月 12 日目录:1课程设计的目的 (3)2 需求分析 (3)3 课程设计报告内容 (x)3.1概要设计 (3)3.2详细设计 (3)3.3调试分析 (5)3.4用户手册 (5)3.5测试结果 (5)3.6程序清单 (8)4 小结 (14)5 参考文献 (15)1.课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2. 需求分析①设每个记录有下列数据项:电话号码、用户名、地址;②从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;③采用一定的方法解决冲突;④查找并显示给定电话号码的记录;⑤查找并显示给定用户名的记录。
进一步完成内容:①系统功能的完善;②设计不同的散列函数,比较冲突率;③在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
3 课程设计报告内容为了实现电话号码的查找系统,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单配上相应的内容。
3.1概要设计(1)该电话号码的查询系统应该包括5个菜单选项;(2)电话号码散列表的建立;(3)通讯者的增加;(4)通讯者的删除;(5)通讯者的查询;(6)推出管理系统;3.2详细设计分为8个小版块,分别包括:1: 增加用户信息void shuru(Record* a){//键盘输入各人的信息printf("输入要添加的个数:");scanf("%d",&NUM);int i;for(i=0;i<NUM;i++){printf("请输入第%d个记录的用户名:",i+1);scanf("%s",a[i].name);printf("请输入%d个记录的电话号码:",i+1);scanf("%s",a[i].tel);printf("请输入第%d个记录的地址:",i+1);scanf("%s",a[i].ID);}}2: 查找所有用户信息void shuchu(Record* a)//显示输入的用户信息{int i;for( i=0;i<NUM;i++)printf("\n第%d个用户信息:\n 姓名:%s\n 电话号码:%s\n 联系地址:%s\n",i+1,a[i].name,a[i].tel,a[i].ID);}3: 以姓名建立散列表并解决冲突int name(char s[MAXSIZE]){//人名的折叠处理char *p;int sum=0;char ss[MAXSIZE];strcpy(ss,s);//复制字符串,不改变原字符串的大小写strupr(ss);//将字符串ss转换为大写形式p=ss;while(*p!='\0')sum+=*p++;printf("sum=%d",sum);return sum;}4: 以电话号码建立散列表并解决冲突void CreIDHash(HashTable* H,Record* a){//以电话号码为关键字,建立相应的散列表//若哈希地址冲突,进行冲突处理int i,p=-1,c,pp;for(i=0;i<NUM;i++){c=0;p=Hash2(a[i].tel);pp=p;while(H->elem[pp]!=NULL) {pp=collision(p,c);if(pp<0){printf("第%d记录无法解决冲突",i+1);//需要显示冲突次数时输出continue;}//无法解决冲突,跳入下一循环}H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入H->count++;printf("第%d个记录冲突次数为%d。
E41514068_周永涛_通讯录查询系统的设计与实现
if(H->elem[pp]!=NULL && bj(tel,H->elem[pp]->tel) == 1)
{
printf("\n\t\t\t 查找成功\n\n");
printf("\t 姓 名 :
%s\n\n\t 电 话 号 码 :
址: %s\n",H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);
}
else
printf("\n\t 此人不存在,失败!\n");
printf("\n\t 按 Esc 键,返回主菜单");
FRI tel;
int p,pp;
printf("\n\t 输入要查找的号码: ");
gets(tel);
p = HASH(tel);
pp = p;
while(H->elem[pp]!=NULL && bj(tel,H->elem[pp]->tel) == 0)
pp = collision(p,c);
void Menu() {
system("cls"); int n; printf("\n\n\n\n\n\n\n\n\n\t\t\t 输入 1(汉语)、 2(英语) 选择语言: "); scanf("%d",&n); system("cls"); if(n == 1) {
Pr1(); Pr2(); } }
void Pr6() {
printf("\n\t\t* * * * * * * * * * * * * * * * * * * * * * * *\n"); printf("\t\t\t\t 删除某人的信息\n\n"); printf("\t\t* * * * * * * * * * * * * * * * * * * * * * * *\n\n"); }
(完整word版)哈希表实现电话号码查询报告
《数据结构》课程设计报告书题目:哈希表存储的电话号码查询专业:学号:学生姓名:指导教师:完成日期:目录1.实训题目………………………………………………1。
1实训要求…………………………………………. 1。
2需求分析…………………………………………。
2.系统设计………………………………………………2。
1总体设计………………………………………….. 2。
2详细设计…………………………………………。
2。
2。
1程序头文件…………………………………。
2。
2.2学生信息类及哈希表类……………………。
.2.2.3主函数流程…………………………………。
. 3。
系统实现………………………………………………。
3.1编码………………………………………………。
3。
2测试………………………………………………。
4。
归纳总结……………………………………………….4.1实训中遇到的问题以及解决办法………………。
.4.2感想和心得体会…………………………………。
5。
参考资料………………………………………………1.实训题目1.1实训要求⏹设每个记录有以下数据项:用户名、电话、地址;⏹从键盘输入各记录,以电话号码为关键字建立哈希表;⏹采用链地址法方法解决冲突;⏹能够查找并显示给定电话号码的相关记录。
1。
2需求分析本次实验要求采用哈希表完成信息的查找和储存,哈希表即为散列表。
本程序采用学生信息管理为例,设每个学生有电话号码,学生姓名,家庭住址三个信息。
通过建立哈希表储存信息,信息储存在节点中,并通过以电话号码为关键字完成查找,并显示出该学生的姓名,电话号码以及家庭住址.当哈希表中的数据与输入的数据发生冲突时,使用节点向后移一位的方法来解决冲突。
2.系统设计2.1总体设计本系统通过设计学生信息类和哈希表类来完成整个系统。
通过学生信息类实现从键盘输入学生的姓名,电话号码以及家庭地址.将学生的信息储存在建立的哈希节点内,通过多个链表保存,相同信息的保存在同一个节点内。
数据结构课程设计通讯录、电话号码查询系统
一、课程设计概述:本次数据结构课程设计共完成两个题:电话号码查询系统、通讯录。
使用语言:C编译环境:VC6.0二、课程设计题目一[实验内容]电话号码查询系统[问题描述]设计散列表实现电话号码查找系统。
[需求分析](1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;(3)采用一定的方法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户名的记录。
整个系统必须满足系统功能要求;设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
[概要设计]void getin(Record* a) // 键盘输入联系人的信息void ShowInformation(Record* a) //显示输入的用户信息Status collision(int p,int &c) // 冲突处理函数,采用二次探测再散列法解决冲突void CreateHash(HashTable* H ,Record* a) // 建表,若哈希地址冲突,进行冲突处理void SearchHash ( HashTable* H,int &c) //在通讯录里查找关键字void Save() //保存void main_menu()[存储结构]typedef struct{//记录NA name;NA tel;NA add;}Record;typedef struct{//哈希表Record *elem[HASHSIZE]; //数据元素存储基址int count; //当前数据元素个数int size; //当前容量}HashTable;[详细设计]#include<iostream> //cout,cin语句的头文件#include<stdlib.h> //清屏函数头文件:使用csl时调用system#include<string> //字符串头文件#include<stdio.h>#include<fstream>#define MAXSIZE 100 //电话薄记录的数量#define MAX_SIZE 50 //用户名、电话号码、地址的最大长度#define HASHSIZE 400 //定义表长#define SUCCESS 1 //查找#define UNSUCCESS -1#define LEN sizeof(HashTable) // 哈希表的长度using namespace std;typedef int Status;//typedef用来定义类型的别名。
[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录
[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录工程名称:停车管理系统姓名:学号:专业:软件工程1.需求分析为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的与地址。
设计散列表存储,设计并实现通讯录查找系统。
1.根本要求〔1〕每个记录有以下数据项:号码、用户名、地址;〔2〕从键盘输入各记录,分别以号码为关键字建立散列表;〔3〕采用二次探测再散列法解决冲突;〔4〕查找并显示给定号码的记录;〔5〕通讯录信息文件保存。
2.重点、难点重点:〔1〕通过实验深入理解哈希表既是一种存储形式,又是一种查找方法;〔2〕哈希表的构造;〔3〕哈希冲突方案的设计。
难点:哈希表的构造与哈希冲突方案的设计输入的形式和输入值的范围;输入三个字符串:分别是号码,姓名,地址,每行一个数据字符串长度适当如:号码〔纯数字〕姓名地址输出的形式;如:姓名号码地址程序所能到达的功能。
1:并且通过号码为关键字,用二次再散列法寻找地址储存在哈希表中。
2:3:4:5:显示通讯录6:把通讯录写入文件储存。
2.概要设计(1)数据结构tructlit{chara[12];charname[15];charadd[15];intf=0;};用连续的内存空间构建哈希表tructqtack{tructlit某bae;inti;};(2)程序模块1:构建二次再散列:inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;2:主菜单:voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n");printf("某某某某某某某某某某某某某某某某某某某某\n");canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;};}3:输入voidhuru()4:存入哈希表,采用二次探测再散列法解决冲突;voidtore(char某a,char某name,char某add)voideach();voidchange()Voiddel〔〕;voidwrite()(3)各模块之间的调用关系以及算法设计3.详细设计4.测试与分析主界面:构建哈希表,允许号码重复可以支持姓名,,地址三个关键字的查找可以按照姓名地址删除写文件:创立文件通讯录.t某t 如图:5.附录3.cpp#include<tdio.h>#include<tdlib.h>#include<tring.h>#include<iotream>#include<tring.h>uingnamepacetd;intd[50];/某再散列某/tructlit{chara[12];charname[15];charadd[15];intf=0;};tructqtack{tructlit某bae;inti;};tructqtackS;voidtore(char某a,char某name,char某add){intkey;key=int(a[0])+int(a[3])+int(a[7]);/某以号码的第1,4,8位作为关键字构造哈希函数某/S.i=key%20;intj=1;while(true){if((S.bae+S.i)->f==0){trcpy((S.bae+S.i)->a,a);trcpy((S.bae+S.i)->name,name);trcpy((S.bae+S.i)->add,add);(S.bae+S.i)->f=1;break;}S.i=(key%20+d[j])%20;j++;}}voidhuru(){voidinterface();cout<<"请输入:\n例如:\n小王\n安徽省合肥市\n输入0结束\n"; chara[12];charname[15];charadd[15];while(true){canf("%",a);if(a[0]=='0')break;canf("%",name);canf("%",add);printf("%已保存\n",name);tore(a,name,add);/某将输入保存到哈希表某/}interface();}voidprint(){voidinterface();inti;printf("姓名号码地址\n");for(i=0;i<20;i++){if((S.bae+i)->f==1){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);}}interface();}voideach(){voidinterface();inti;intff=0;intb;chara[15];printf("输入1按号码查找,输入2按姓名查找,输入3按地址查找\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voiddel(){voidinterface();inti;intff=0;chara[15];printf("输入1按号码删除,输入2按姓名删除,输入3按地址删除\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){(S.bae+i)->f=0;Print(“已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voidchange(){voidinterface();inti;intff=0;intb;chara[15];printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("您要修改的是:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);printf("请输入新信息\n");canf("%",(S.bae+i)->a);canf("%",(S.bae+i)->name);canf("%",(S.bae+i)->add);printf("已修改成:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");interface();}voidwrite()voidinterface();inti=0;FILE某fp;if((fp=fopen("通讯录.t某t","wb"))==NULL){printf("openfileerror\n");e某it(1);}for(i=0;i<=20;i++){intch=32;if((S.bae+i)->f==1){fprintf(fp,"%",(S.bae+i)->name);fputc(ch,fp); fprintf(fp,"%",(S.bae+i)->a);fputc(ch,fp);ch=10;fprintf(fp,"%",(S.bae+i)->add);fputc(ch,fp); }fcloe(fp);interface();}voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n"); printf("某某某某某某某某某某某某某某某某某某某某\n"); canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;}intmain(){ytem("color70");//可以写成red调出颜色组S.bae=(tructlit某)malloc(20某izeof(tructlit)); ytem("date/T");ytem("TIME/T");inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;interface();}6.用户使用手册根据主菜单提示选择所想要的操作0:结束程序小华安徽合肥可以根据姓名,,地址分别作为关键字进行查询谢谢使用!。
C++大作业课程设计报告--简单个人电话号码查询系统设计
《高级语言程序设计》大作业设计报告专业测控技术与仪器班级测控09-1学号姓名指导教师完成时间成绩一、设计题目简单个人电话号码查询系统。
二、设计目的人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
三、设计要求⑴在外存上,用文件保存电话号码信息;⑵在内存中,设计数据结构存储电话号码信息;⑶提供查询功能:根据姓名实现快速查询;⑷提供其他维护功能:例如插入、删除、修改等。
四、设计思想与系统结构说明由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,所以电话号码信息采用文件的形式存放到外存中。
在系统运行时,需要将电话号码信息从文件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以设计如下结构类型的数组来接收数据:const int max=10;struct TeleNumber{string name; //姓名string phoneNumber; //固定电话号码string mobileNumber; //移动电话号码string email; //电子邮箱} Tele[max];为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,在数组中实现插入和删除操作的代价较高。
如果记录需频繁进行插入或删除操作,可以考虑采用二叉排序树组织电话号码信息,则查找和维护都能获得较高的时间性能。
更复杂地,需要考虑该二叉排序树是否平衡,如何使之达到平衡。
五、程序清单#include<iostream>#include<fstream>#include<string>using namespace std;int x=0;char a;int j=1;struct TeleNumber //数据类{char name[10]; //姓名int phoneNumber; //固定电话号码int mobileNumber; //移动电话号码char email[10]; //电子邮箱int s;TeleNumber * Next;void ReadFile(istream & in);void input();void display();} ;void TeleNumber::ReadFile(istream & in) //从文件把数据读入到程序{in>>name>>phoneNumber>>mobileNumber>>email;}void TeleNumber::input() //信息输入{cout<<"请输入姓名"<<endl;cin>>name;cout<<"请输入固定电话号码"<<endl;cin>>phoneNumber;cout<<"请输入移动电话号码"<<endl;cin>>mobileNumber;cout<<"请输入电子邮箱"<<endl;cin>>email;s=j++;}void TeleNumber::display() //信息输出{cout<<"姓名:"<<name<<'\t'<<"固定号码:"<<phoneNumber<<'\t'<<"移动电话号码:"<<mobileNumber<<'\t'<<"电子邮箱:"<<email<<endl; }class TeleMessage //功能类{public:TeleMessage(); //构造数据结构~TeleMessage(); //释放单链表void Save(); //数据保存到文件TeleNumber * Search(char *); //信息查找void Sort(); //排序void Insert(); //插入void Remove(); //删除void Change(); //更改void Show(); //显示void Swap(TeleNumber *,TeleNumber *); //两个TeleNumber对象交换数据域private:TeleNumber * End,* Head;ifstream in; //定义读,写文件对象ofstream out;};TeleMessage::TeleMessage(){Head=new TeleNumber; //头插法建立单链表Head->Next=new TeleNumber;End=Head->Next;in.open("TeleNumber.text"); //打开外存文件,看是否有数据存在if(!in)cout<<"电话系统中没有任何号码"<<endl;else{while(!in.eof()) //如果有,则打开,并将数据读取到程序{End->ReadFile(in);if(End->name[0]=='\0')break;End->Next=new TeleNumber;End=End->Next;}in.close();cout<<"读取电话号码系统成功!"<<endl;}cout<<"输入任意字母继续"<<endl;cin>>a;}TeleMessage::~TeleMessage() //释放单链表{TeleNumber * temp;while(Head->Next!=End){temp=Head->Next;Head=Head->Next;delete temp;}delete Head,End; //删除头尾指针}void TeleMessage::Save() //保存文件{out.open("TeleNumber.txt"); //建立外存文件TeleNumber.txtfor(TeleNumber *p=Head->Next;p!=End;p=p->Next)out<<p->name<<"\t"<<p->phoneNumber<<"\t"<<p->mobileNumber<<"\t"< <p->email<<endl; //将数据存到外存文件里out.close();cout<<"保存成功!"<<endl;}void TeleMessage::Swap(TeleNumber *p1,TeleNumber *p2) //两个类对象数据域进行交换{TeleNumber * temp=new TeleNumber;strcpy(temp->name,p1->name);strcpy(temp->email,p1->email);temp->mobileNumber=p1->mobileNumber;temp->phoneNumber=p1->phoneNumber;temp->s=p1->s;strcpy(p1->name,p2->name);strcpy(p1->email,p2->email);p1->mobileNumber=p2->mobileNumber;p1->phoneNumber=p2->phoneNumber;p1->s=p2->s;strcpy(p2->name,temp->name);strcpy(p2->email,temp->email);p2->mobileNumber=temp->mobileNumber;p2->phoneNumber=temp->phoneNumber;p2->s=temp->s;}void TeleMessage::Sort() //起泡排序{TeleNumber *p=NULL,*q=NULL;int exchange=j-1;int bound;int i;while(exchange){bound=exchange;exchange=0;for(p=Head->Next,i=1;i<bound;i++,p=p->Next)if(p->mobileNumber>p->Next->mobileNumber){Swap(p,p->Next); //调用交换函数exchange=p->s;}}Show();}void TeleMessage::Insert() //插入{End->input(); //从单链表尾部插入End->Next=new TeleNumber;End=End->Next;cout<<endl<<"插入成功"<<endl;}void TeleMessage::Remove() //删除{char name[20];TeleNumber * p=new TeleNumber,*temp=NULL;cout<<"请输入要删除人的姓名:"<<endl;cin>>name;p->Next=Search(name); //先进行查找,找到所要删除的结点if(Search(name)){temp=p->Next;p->Next=p->Next->Next; //摘链delete temp;cout<<"\t\t删除成功!"<<endl;}else{cout<<"\t\t没有找到!"<<endl;}}TeleNumber * TeleMessage::Search(char * name){for(TeleNumber *p=Head->Next;p!=End;p=p->Next)if(!strcmp(p->name,name)){if(x==4){p->display();return p;}elsereturn p;}if(x==4)cout<<"查无此人"<<endl;return 0;}void TeleMessage::Change() //修改信息{char name[20];cout<<"请输入要修改的人的姓名:";cin>>name;if(Search(name)){cout<<"\t\t已找到个人的信息,请输入新的信息!"<<endl;Search(name)->input();cout<<"修改成功!"<<endl;}else{cout<<"\t\t没有找到!"<<endl;}}void TeleMessage::Show(){for(TeleNumber * p=Head->Next;p!=End;p=p->Next) p->display();}int main(){bool flag=true;TeleMessage tele;char name[20];while(flag){system("cls");cout<<" 简单个人电话号码查询系统"<<endl;cout<<"1.增加电话号码"<<endl;cout<<"2.显示电话号码"<<endl;cout<<"3.排序个人电话"<<endl;cout<<"4.查找个人电话"<<endl;cout<<"5.删除个人信息"<<endl;cout<<"6.修改个人信息"<<endl;cout<<"7.保存个人信息*"<<endl;cout<<"0.退出系统*"<<endl;cout<<"请选择:";cin>>x;switch(x){case 0:flag=false;break;case 1:tele.Insert();break;case 2:tele.Show();break;case 3:tele.Sort();break;case 4:cout<<"请输入欲查找认得姓名"<<endl;cin>>name;tele.Search(name);break;case 5:tele.Remove();break;case 6:tele.Change();break;case 7:tele.Save();break;}cout<<"输入任意字母返回"<<endl;cin>>a;}return 0;}六、运行结果1、开始运行,主菜单:输入任何字符键,按回车建,运行结果:2、选择“1”,运行结果:3、选择“2”,运行结果:4、多次选择“1”,增加多几组电话号码,接着选择“3”,运行结果:5、选择“4”,运行结果:6、选择“5”,运行结果:7、选择“6”,运行结果:8、选择“0”,退出程序。
电话号码小型查询系统设计
皖西学院课程设计报告系别:机电系专业:电子信息学生姓名:学号:课程设计题目:电话号码小型查询系统设计起迄日期:课程设计地点:指导教师:完成日期: 09年 6月 23日课程设计任务书1、摘要 (4)2、设计思想及方案制定 (4)3、设计的基本思路 (5)4、程序流程图 (6)5、源程序代码清单 (7)5、设计体会 (11)6、参考文献 (12)7、鸣谢 (12)电话号码查询管理系统是用于辅助个人完成其通讯信息有序管理的计算机软件系统,系统实施的目的旨在帮助用户完成其私人通讯信息管理的数字化,以提供较手工方式下更高的效率和更低的出错率。
电话号码查询系统是为了方便用户查找所需的电话号码,本设计详细的介绍了软件设计原理和设计流程图及程序清单。
使用者只须输入用户的姓名就可查询到所需电话号码。
设计方案的制定(划分设计阶段、时间安排、拟采用方法):第一阶段:围绕程序设计进行相关的技术讨论,查找相关文档资料第二阶段:画好流程图,方案设计第三阶段:编写源代码、完成程序设计第四阶段:连接,调试(测试),完成最终程序,保存源代码及已编译的可执行程序第五阶段:、完成课程设计报告书,相关内容存盘设计基本思路该课题的目标是用汇编语言编写一个程序,实现通过姓名查询其电话号码的功能,按照设计任务的要求,一般的设计思路要分几个模块。
1.设某单位内部电话号码为4位,姓名均用汉语拼音表示,查询时,应键入用户姓名(小写字母),如果位合法用户,显示:姓名——电话号码否则显示姓名——X X X X2.由于汉字具有同音不同字的特点,汉语拼音相同的姓名也许不是同一人,具有不同的电话号码是必然的,本设计仅作这样的要求:把姓名拼音相同的电话号码全部找出并显示。
3.本例只假设有九个用户,电话号码和姓名的对照见下表,在这九个用户中,姓名长度分别为5个字符,6个字符和11个字符3类,对于其他长度的姓名串,一律按非法键入处理。
姓名汉语拼音电话号码李莉li li 2345于特yu te 2765马乐ma le 2456皮敏pi min 2289李梅li mei 2761于青果yu qing guo 2221丘宝梅qiu bao mei 2554俞庆国yu qing guo 2876田利秋tian li qiu 29014.编程的关键问题,首先是组织“姓名-电话号码表”,把长度相同的姓名组织在一张表中,本例应有3张“姓名-电话号码表”,表头分别用N5,N6,N11表示。
小型电话号码查询系统
小型电话号码查询系统王雨娉目录摘要 (1)1绪论 (1)2系统分析 (1)2.1功能需求 (1)2.2性能需求 (2)3总体设计 (2)3.1功能模块设计 (2)3.2系统设计方案 (3)4详细设计 (3)4.1系统信息添加和结果显示模块 (3)4.2系统信息保存和清空操作模块 (6)4.3系统信息查询模块 (7)5调试与测试 (8)5.1调试 (8)5.2测试 (10)6结论 (9)结束语 (9)参考文献 (9)附录1-用户手册 (10)附录2-源程序 (15)摘要当前社会已经步入了一个信息化的时代,随着社会劳动生产率的不断提高,与之相对应的信息查询服务系统也在不断的完善。
本程序运用查找函数和结构体的建立,构建的哈希表采用再哈希的方法解决冲突,实现电话号码及有相关信息的准确查询,同时编译了对信息的保存和清空函数,使该电话号码的查询系统操作起来更加自如。
本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
关键词:哈希表;再哈希法;查找函数1绪论高度信息化的年代里,电话号码信息系统的出现正是当前时代发展的需要,它的出现给我们的工作生活无疑带来了很多方便。
编程人员通过对电话号码及其相关信息查询功能的不断编写和完善,来尽量满足人们的需要。
根据课程设计任务书要求,本程序的开发主要完成以下功能和性能。
(1)设置一个包括用户姓、地址、号码的信息的结构体。
(2)编译void Create()函数来创建结点,运用int Apend()函数来添加结点信息,通过node* Input()函数来对用户的信息进行存储。
(3)编译函数void List()、void List2()分别根据号码和姓名的查询方式显示用户信息的哈希结果,并且结果会在屏幕上显示出来。
(4)编译void Find(char num[11]) 、void Find2(char name[8])函数分别根据用户的电话号码和姓名对用户的详细信息进行查找,当要查询的结果不在系统存储时,屏幕上将显示“无此记录”。
数据结构课程设计报告电话号码查询系统
数据结构课程设计报告电话号码查询系统课程设计报告学生姓名:学号:专业班级:课程名称:数据结构学年学期: 2 013—2 014学年第 2 学期指导教师:2 0 14年6 月课程设计成绩评定表学生姓名学号成绩专业班级起止时间2014.6.16----2014.6.22电话号码查询系统设计题目指导教师评语指导教师:年月日一、数据结构课程设计目标《数据结构》是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
《数据结构》课程的目标是使学生学会分析研究计算机加工对象的特性,选择合适的数据结构和存储表示,以及编制相应的实现算法,培养和提高学生程序设计的能力。
《数据结构》课程也是一门实践性较强的课程,设置实践环节是十分重要的。
本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。
二、问题描述人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
三、需求分析1程序的功能能够完成通讯链表的建立、通讯者的插入、通讯者的查询、显示所有通讯者的信息、通讯录的修改除名字外的其他信息以及保存通讯录、退出程序等功能。
2输入输出要求程序完成后,给出7个菜单项的内容和输入提示:①增加信息②显示信息③查找号码④删除信息⑤修改信息⑥保存信息⑦退出系统四、概要设计五、详细设计⑴定义结构体#include<iostream>#include<fstream>#include<string>using namespace std;int x=0;char a;int j=1;struct TeleNumber //数据类{char name[20]; //姓名int phoneNumber; //固定电话号码int mobileNumber; //移动电话号码char email[30]; //电子邮箱int s;TeleNumber * Next;void ReadFile(istream & in);void input();void display();} ;void TeleNumber::ReadFile(istream & in) //从文件把数据读入到程序{in>>name>>phoneNumber>>mobileNumber>>email;}void TeleNumber::input() //信息输入{cout<<"请输入姓名"<<endl;cin>>name;cout<<"请输入固定电话号码"<<endl;cin>>phoneNumber;cout<<"请输入移动电话号码"<<endl;cin>>mobileNumber;cout<<"请输入电子邮箱"<<endl;cin>>email;s=j++;}⑵信息输出void TeleNumber::display() //信息输出{cout<<"姓名:"<<name<<'\t'<<"固定号码:"<<phoneNumber<<'\t' <<"移动电话号码:"<<mobileNumber<<'\t'<<"电子邮箱:"<<email<<endl; }class TeleMessage //功能类{public:TeleMessage(); //构造数据结构~TeleMessage(); //释放单链表void Save(); //数据保存到文件TeleNumber * Search(char *); //信息查找void Insert(); //插入void Remove(); //删除void Change(); //更改void Show(); //显示private:TeleNumber * End,* Head;ifstream in; //定义读,写文件对象ofstream out;};⑶建立单链表TeleMessage::TeleMessage(){Head=new TeleNumber; //头插法建立单链表Head->Next=new TeleNumber;End=Head->Next;in.open("TeleNumber.text"); //打开外存文件,看是否有数据存在if(!in)cout<<"电话系统中没有任何号码,请输入号码"<<endl;else{in.close();cout<<"读取电话号码系统成功!"<<endl;}cout<<"输入任意字母继续"<<endl;cin>>a;}TeleMessage::~TeleMessage() //释放单链表0{TeleNumber * temp;while(Head->Next!=End){temp=Head->Next;Head=Head->Next;delete temp;}delete Head,End; //删除头尾指针}⑷保存号码void TeleMessage::Save() //保存文件{out.open("TeleNumber.txt"); //建立外存文件TeleNumber.txt for(TeleNumber *p=Head->Next;p!=End;p=p->Next)out<<p->name<<"\t"<<p->phoneNumber<<"\t"<<p->mobileNumber<<"\t"<<p->email<<e ndl;//将数据存到外存文件里out.close();cout<<"保存成功!"<<endl;}⑸插入号码void TeleMessage::Insert() //插入{End->input(); //从单链表尾部插入End->Next=new TeleNumber;End=End->Next;cout<<endl<<"插入成功"<<endl;}⑹删除号码void TeleMessage::Remove() //删除{char name[20];TeleNumber * p=new TeleNumber,*temp=NULL;cout<<"请输入要删除人的姓名:"<<endl;cin>>name;p->Next=Search(name); //先进行查找,找到所要删除的结点if(Search(name)){temp=p->Next;p->Next=p->Next->Next; //摘链delete temp;cout<<"删除成功!"<<endl;}else{cout<<"没有找到!"<<endl;}}⑺查找号码TeleNumber * TeleMessage::Search(char * name){for(TeleNumber *p=Head->Next;p!=End;p=p->Next) if(!strcmp(p->name,name)){if(x==4){p->display();return p;}elsereturn p;}if(x==4)cout<<"查无此人"<<endl;return 0;}⑻修改信息void TeleMessage::Change() //修改信息{char name[20];cout<<"请输入要修改的人的姓名:";cin>>name;if(Search(name)){cout<<"已找到个人的信息,请输入新的信息!"<<endl;Search(name)->input();cout<<"修改成功!"<<endl;}else{cout<<"没有找到!"<<endl;}}⑼主函数int main(){bool flag=true;TeleMessage tele;char name[20];while(flag){system("cls");cout<<"简单个人电话号码查询系统"<<endl<<endl;cout<<"1.增加信息"<<endl;cout<<"2.显示信息"<<endl;cout<<"3.查找号码"<<endl;cout<<"4.删除信息"<<endl;cout<<"5.修改信息"<<endl;cout<<"6.保存信息"<<endl;cout<<"0.退出系统"<<endl<<endl;cout<<"请选择:";cin>>x;switch(x){case 0:flag=false;break;case 1:tele.Insert();break;case 2:tele.Show();break;case 3:cout<<"请输入姓名"<<endl;cin>>name;tele.Search(name);break;case 4:tele.Remove();break;case 5:tele.Change();break;case 6:tele.Save();break;}cout<<"输入任意字母返回"<<endl;cin>>a;}return 0;}六、软件说明书通过软件的调试与测试可以跟数据程序上的对号码薄进行简单的增删改操作,在使用时应注意程序上的一些提示操作,要按照提示上的来操作源程序代码#include<iostream>#include<fstream>#include<string>using namespace std;int x=0;char a;int j=1;struct TeleNumber //数据类{char name[20]; //姓名int phoneNumber; //固定电话号码int mobileNumber; //移动电话号码char email[30]; //电子邮箱int s;TeleNumber * Next;void ReadFile(istream & in);void input();void display();} ;void TeleNumber::ReadFile(istream & in) //从文件把数据读入到程序{in>>name>>phoneNumber>>mobileNumber>>email;}void TeleNumber::input() //信息输入{cout<<"请输入姓名"<<endl;cin>>name;cout<<"请输入固定电话号码"<<endl;cin>>phoneNumber;cout<<"请输入移动电话号码"<<endl;cin>>mobileNumber;cout<<"请输入电子邮箱"<<endl;cin>>email;s=j++;}void TeleNumber::display() //信息输出{cout<<"姓名:"<<name<<'\t'<<"固定号码:"<<phoneNumber<<'\t'<<"移动电话号码:"<<mobileNumber<<'\t'<<"电子邮箱:"<<email<<endl; }class TeleMessage //功能类{public:TeleMessage(); //构造数据结构~TeleMessage(); //释放单链表void Save(); //数据保存到文件TeleNumber * Search(char *); //信息查找void Insert(); //插入void Remove(); //删除void Change(); //更改void Show(); //显示private:TeleNumber * End,* Head;ifstream in; //定义读,写文件对象ofstream out;};TeleMessage::TeleMessage(){Head=new TeleNumber; //头插法建立单链表Head->Next=new TeleNumber;End=Head->Next;in.open("TeleNumber.text"); //打开外存文件,看是否有数据存在if(!in)cout<<"电话系统中没有任何号码,请输入号码"<<endl;else{in.close();cout<<"读取电话号码系统成功!"<<endl;}cout<<"输入任意字母继续"<<endl;cin>>a;}TeleMessage::~TeleMessage() //释放单链表0{TeleNumber * temp;while(Head->Next!=End){temp=Head->Next;Head=Head->Next;delete temp;}delete Head,End; //删除头尾指针}void TeleMessage::Save() //保存文件{out.open("TeleNumber.txt"); //建立外存文件TeleNumber.txt for(TeleNumber *p=Head->Next;p!=End;p=p->Next)out<<p->name<<"\t"<<p->phoneNumber<<"\t"<<p->mobileNumber<<"\t"<<p->email<<e ndl;//将数据存到外存文件里out.close();cout<<"保存成功!"<<endl;}void TeleMessage::Insert() //插入{End->input(); //从单链表尾部插入End->Next=new TeleNumber;End=End->Next;cout<<endl<<"插入成功"<<endl;}void TeleMessage::Remove() //删除{char name[20];TeleNumber * p=new TeleNumber,*temp=NULL;cout<<"请输入要删除人的姓名:"<<endl;cin>>name;p->Next=Search(name); //先进行查找,找到所要删除的结点if(Search(name)){temp=p->Next;p->Next=p->Next->Next; //摘链delete temp;cout<<"删除成功!"<<endl;}else{cout<<"没有找到!"<<endl;}}TeleNumber * TeleMessage::Search(char * name){for(TeleNumber *p=Head->Next;p!=End;p=p->Next)if(!strcmp(p->name,name)){if(x==4){p->display();return p;}elsereturn p;}if(x==4)cout<<"查无此人"<<endl;return 0;}void TeleMessage::Change() //修改信息{char name[20];cout<<"请输入要修改的人的姓名:";cin>>name;if(Search(name)){cout<<"已找到个人的信息,请输入新的信息!"<<endl;Search(name)->input();cout<<"修改成功!"<<endl;}else{cout<<"没有找到!"<<endl;}}void TeleMessage::Show(){for(TeleNumber * p=Head->Next;p!=End;p=p->Next) p->display();}int main(){bool flag=true;TeleMessage tele;char name[20];while(flag){system("cls");cout<<"简单个人电话号码查询系统"<<endl<<endl;cout<<"1.增加信息"<<endl;cout<<"2.显示信息"<<endl;cout<<"3.查找号码"<<endl;cout<<"4.删除信息"<<endl;cout<<"5.修改信息"<<endl;cout<<"6.保存信息"<<endl;cout<<"0.退出系统"<<endl<<endl;cout<<"请选择:";cin>>x;switch(x){case 0:flag=false;break;case 1:tele.Insert();break;case 2:tele.Show();break;case 3:cout<<"请输入姓名"<<endl;cin>>name;tele.Search(name);break;case 4:tele.Remove();break;case 5:tele.Change();break;case 6:tele.Save();break;}cout<<"输入任意字母返回"<<endl;cin>>a;}return 0;}七、测试报告(每个函数的功能测试,输入条件,输出结果)八、课程设计总结。
JAVA语言课程设计报告(电话号码查询系统)
JAVA语言课程设计报告题目:设计者:学号:专业班级:指导教师:时间:摘要系统主要功能包括:实现添加联系人的姓名和手机号码家庭电话号码和办公号码,并且连接进数据库,将信息储存进数据库文件中去,添加成功弹出添加成功的对话框,对话框中的信息可以重置。
消息对话框负责显示消息,调用其静态方法显示警告信息。
要求在文本框中显示姓名,手机号码,家庭电话,办公电话等用户信息。
添加姓名,手机号码,家庭电话,办公电话等信息到数据库中,同样需要连接SQLSERVER2005数据库,用户的图形界面要求在文本框中显示姓名,手机号码,家庭电话,办公电话等用户信息。
修改姓名,手机号码,家庭电话,办公电话等信息到数据库中,同样需要连接SQLSERVER2005数据库,用户的图形界面要求在文本框中显示姓名,手机号码,家庭电话,办公电话等用户信息。
对已经存储的信息进行查询,而客户的具体需求多样,为了给客户营造更多的便利,可以将软件的查询细分为按整体进行查询模糊查询和精确查询和整体查询,模糊查询允许用户用较为模糊的查询条件,比如信息的姓来进行查询。
实现了满足用户需求的多样化。
对已经存储的信息进行查询,而客户的具体需求多样,为了给客户营造更多的便利,可以将软件的查询细分为按整体进行查询模糊查询和精确查询和整体查询,整体查询允许用户用整体的查询条件,比如信息的姓来进行查询。
实现了满足用户需求的多样化。
本论文内容主要是运用软件工程的知识,先进行系统需求分析,之后是系统概要设计,详细设计,并且详细介绍了各个功能模块的具体实现和数据库的设计。
关键字:Java语言,SQLSERVER2005,JVM,添加,删除,查询和排序目录1、系统需求分析 (4)1.1系统名称: (4)1.2系统介绍: (4)1.3开发背景 (4)1.4.系统面向的用户群体 (5)1.5开发环境 (5)2.系统总体设计 (5)2.1系统功能结构图 (5)2.2系统数据流程图 (6)3 系统详细设计 (6)3.1数据库实体E-R图设计 (7)3.2数据库表的设计 (8)3.3.详细设计 (9)4软件测试 (18)5 系统总结 (18)6系统设计心得体会 (19)参考文献.................................................................... 错误!未定义书签。
数据结构课程设计通讯录、电话号码查询系统
一、课程设计概述:本次数据结构课程设计共完成两个题:电话号码查询系统、通讯录。
使用语言:C编译环境:VC6.0二、课程设计题目一[实验内容]电话号码查询系统[问题描述]设计散列表实现电话号码查找系统。
[需求分析](1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;(3)采用一定的方法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户名的记录。
整个系统必须满足系统功能要求;设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
[概要设计]void getin(Record* a) // 键盘输入联系人的信息void ShowInformation(Record* a) //显示输入的用户信息Status collision(int p,int &c) // 冲突处理函数,采用二次探测再散列法解决冲突void CreateHash(HashTable* H ,Record* a) // 建表,若哈希地址冲突,进行冲突处理void SearchHash ( HashTable* H,int &c) //在通讯录里查找关键字void Save() //保存void main_menu()[存储结构]typedef struct{//记录NA name;NA tel;NA add;}Record;typedef struct{//哈希表Record *elem[HASHSIZE]; //数据元素存储基址int count; //当前数据元素个数int size; //当前容量}HashTable;[详细设计]#include<iostream> //cout,cin语句的头文件#include<stdlib.h> //清屏函数头文件:使用csl时调用system#include<string> //字符串头文件#include<stdio.h>#include<fstream>#define MAXSIZE 100 //电话薄记录的数量#define MAX_SIZE 50 //用户名、电话号码、地址的最大长度#define HASHSIZE 400 //定义表长#define SUCCESS 1 //查找#define UNSUCCESS -1#define LEN sizeof(HashTable) // 哈希表的长度using namespace std;typedef int Status;//typedef用来定义类型的别名。
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
设计哈希表实现查询系统一﹑目的通过课程设计,巩固和加深对结构体、文件、哈希表等理论知识的理解;掌握现实复杂问题的分析建模和解决方法,掌握包括问题描述、系统分析、设计建模、代码实现、结果分析等的方法;提高利用计算机分析解决综合性实际问题的基本能力;锻炼个人动手能力,历练自身素质。
哈希表实现查询系统是利用哈希表实现系统的快速查询,程序实现哈希表建表和查表,并实现对没有查找到的内容进行记录。
掌握哈希表的工作原理,熟悉建立哈希表、对哈希表冲突处理、哈希表查找等功能的实现,回顾文件读取、写入,回顾随机函数的作用。
二﹑需求分析1.输入的形式和输入值的范围数据输入分两种模式:一种是将原有数据记录在old.txt文档中,由程序读入;另一种是由程序随机生成,并储存在new.txt文档中。
数据的格式为:##、、家庭住址。
用户使用时显示菜单,用户输入菜单选项完成操作。
2.输出的形式查找的结果显示在屏幕上。
未被查找到的内容输出到out.txt文档中。
在用户需要时,将哈希表显示在屏幕上。
3.程序所能达到的功能根据用户的选择,从原有文档读入数据或随机生成数据,分别以##和做为关键字生成哈希表。
生成哈希表后用户可以根据相应关键字进行数据的查找,若查找到对应的数据则将数据输出到屏幕,若没有查找到对应的数据则将用户输入的查找内容输出到out.txt文档。
在用户选择显示哈希表时,显示完整的哈希表。
程序使用文字菜单的友好界面。
在数据输入时对输入内容进行范围控制。
4.初步测试计划在old.txt文档中输入30条记录,令程序读入并分别以##和做为关键字生成哈希表,查找记录中原有的记录,查看输出数据,查找记录中没有的记录查看回馈,查看整个哈希表的数据。
令程序随机生成记录,查看new.txt文档,分别以##和做为关键字生成哈希表,查看整个哈希表的数据,分别查找原有和没有的记录,查看回馈。
三﹑概要设计1.数据类型定义结构体类型存储每条记录。
struct Data{char name[sizename];char phone[sizephone];char address[sizeaddress];bool used;}*hash_data;2各种函数说明:int get_hashkey(char* str,int select)// 获得关键字void show(int i)// 显示每条信息void Store(char *str)//在没有找到时输出未找到的记录,打开文件out.txt并将记录储存在文档中void Allshow()//输出哈希表中的记录void Auto_file()//随机生成数据,并将数据保存在new.txtvoid Build_Hash(int HashType)//建立哈希表void FindName()//根据##查找哈希表中的记录void FindPhone()//根据查找哈希表中的记录四﹑详细设计1.头文件与定义结构体类型#include <time.h>#include <stdio.h>#include <string.h>#include <stdlib.h>struct Data{string name;//string phone;string address;}; Data *hash_data;2.定义长度#define sizehash 100#define sizename 20#define sizephone 15#define sizeaddress 403.获取关键字函数int get_hashkey(char* str,int select) {int Key=0, ReKey,m;char tmp[10];for (int i=0;i<strlen(str);i++){Key+=str[i];}Key%=sizehash;if (hash_data[Key].used) {m=Key;Key=-1;if (select==1){for (i=0;i<10;i++){ReKey=(m+A[i])%sizehash;if (!hash_data[ReKey].used){Key=ReKey;break;}}}else if (select==2){ReKey=m;for (i=0;i<100;i++){ ReKey=ReKey+1;ReKey=ReKey%sizehash;if (!hash_data[ReKey].used){Key=ReKey;break;}}}}return Key;}4.产生hash表void Build_Hash(int HashType){for (int i=0;i<sizehash;i++) hash_data[i].used=false;FILE* reader=fopen(DataFile,"r");if (reader==NULL){printf( "%s读取失败\n",DataFile);fclose(reader);exit(1);}char s[100];char seps[]=" ,\t";char *name;char* phone;char* address;int HashKey;while (!feof(reader)){fgets(s,100,reader);if (strlen(s)>0){name=strtok(s,seps);phone=strtok(NULL,seps);address=strtok(NULL,seps);if (HashType==1){HashKey=get_hashkey(name,HashType); }else if (HashType==2) {HashKey=get_hashkey(phone,HashType); }if (HashKey==-1){printf( "哈希表过小或哈希碰撞过多");fclose(reader);exit(1);}else{strcpy(hash_data[HashKey].name,name);strcpy(hash_data[HashKey].phone,phone);strcpy(hash_data[HashKey].address,address);hash_data[HashKey].used=true;}}}fclose(reader);}5.在没有找到时输出未找到的记录,打开文件out.txt并将记录储存在文档中void Store(char *str)//将查找失败记录添加到out.txt文件末尾{FILE* pf=fopen("out.txt","wa"); //以追加的方式写入if (pf==NULL)//判断文件是否打开成功{printf( "创建out.txt失败\n");fclose(pf);exit(1);}fscanf(pf,"%s",str);fclose(pf);}6.输出哈希表中的记录void Allshow(){for (int i=0;i<sizehash;i++){if (hash_data[i].used){show(i);}}printf("\n\n");}7.随机生成数据,并将数据保存在new.txt void Auto_file(){FILE* fp=fopen("new.txt", "w+");writer.open("new.txt");if(fp==NULL){printf( "创ä¡ä建¡§new.txt失º¡ì败㨹!\n\n");fclose(fp);exit(1);}char s[100]={0};int k=0;srand(time(0));for (int i=0;i<50;i++){memset(s,0,100);k=0;//随?机¨²产¨²生¦¨²用®?户¡ì名?for (int j=0;j<8;j++,k++){s[k]='a'+rand()%26;}//随?机¨²产¨²生¦¨²电Ì?话¡ã号?码?s[k++]='\t';for (j=0;j<12;j++,k++){s[k]='0'+rand()%10;}//随?机¨²产¨²生¦¨²地Ì?址¡¤s[k++]='\t';for (j=0;j<20;j++,k++){s[k]='a'+rand()%26;}fprintf(fp,"%s",s);if(i!=49)fprintf(fp,"\n");}fclose(fp);}8.根据##查找哈希表中的记录int Find_by_name(string name){int i=0;int j=1;int key;char*p;for(key=0,p=&name[0];*p;p++)key=key+*p;key=key%43;while(1){if(sign[key]=='0'&&key<=42){key++;j++;}if(hash_data[key].name==name)return key;else{key=Handle_Random(key,i);j++;}if(j==num)return -1;}}9.根据用户名查找记录void FindName(){char name[10]="";printf( "请输入要查找的用户名:");scanf("%s",name);int i=Find(name,1);if (i==-1){printf( "无此记录\n");Store(name);}else{printf( "查找结果:\n");show(i);}printf("\n\n");}10.根据查找记录void FindPhone(){char phone[12]="";printf( "请输入要查找的:");scanf("%s",phone);int i=Find(phone,2);if (i==-1){printf( "无此记!\n");Store(phone);}else{printf( "查找结果:\n");show(i);}printf("\n\n"); }12.整个程序的流程图如下五﹑调试分析1.测试环境在Windows 7环境下的Visual C++ 6.0。
电话语音查询系统分析
房屋维修资金电话语音查询系统1.前言随着我国通讯事业的迅速发展,电话资费的下调,电话普及率大大提高,为人们的生活提供了极大的便利;时空在缩短,人与人、人与社会的距离在拉近,生活的节奏在变快,竟争愈来愈强,对服务的要求愈来愈高。
电信、银行、电力、政府、企业等为提高自身的社会地位、美化形象,或是为增强产品竞争力,纷纷建立客户服务中心、服务热线、咨询热线、投诉热线,诸如1000、1860、12315、95588、95533、12345特服号等。
作为企事业单位对外的窗口,与社会建立了很好的沟通。
电话语音服务系统正是基于这种考虑,利用现有比较发达的电话网,跟踪和吸收发达国家的先进技术,采用了计算机网络技术,数字信号处理技术以及多媒体技术,开发出的智能语音查询系统,为各行各业提供了全面有效的解决方案。
由于采用了计算机,数字信号处理,语音处理技术及开放式系统结构,运行可靠、反应迅速,规模可大可小,并可平滑升级。
电话语音服务系统的意义:➢分担部分人力查询工作该系统充分利用自动语音查询技术,将日常性、大众化的问题交给电脑完成,回答问题标准、规范。
咨询者在电脑语音的提示下,通过电话按键操作来得到自己需要的答案,将被咨询人员从简单问询中解脱出来,将更多的精力放在疑难解答上。
➢提升企事业单位形象、促进交流简单而反复的问询容易使人产生疲劳,厌烦的心理,而该系统充分利用电脑语音技术,24小时工作,利用优美动听的电脑语音,保持了亲和力,美化了学校形象。
通过电话语音,打破空间的界限,成为企事业单位对外交流的一个窗口。
➢保持了信息的连续性电脑24小时值班,使咨询者可随时得到答案。
同时通过系统的留言功能,保持了信息的连续性,使企事业单位能更进一步的了采集外部信息,咨询者心理状态,必要时,企事业单位还可以利用咨询者留下的信息进行回访。
2.系统结构当咨询者拨通本系统专用服务电话后,咨询者根据电脑语音提示进入相应的查询目录,系统会自动将预先录好的语音播放出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称: 《数据结构》课程设计分数_______课程设计题目:电文的编码和译码——简单Huffman编码/译码的设计与实现姓名:学习院系: 计算机学院专业:计算机科学与技术学院年级: 三学号:学习指导教师:王爱平2013 年 9月 27 日目录:1课程设计的目的 (3)2 需求分析 (3)3 课程设计报告内容 (x)3.1概要设计 (3)3.2详细设计 (3)3.3调试分析 (5)3.4用户手册 (5)3.5测试结果 (5)3.6程序清单 (8)4 小结 (14)5 参考文献 (15)1.课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2. 需求分析①I:初始化(Initialization)。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
②E:编码(Encoding)。
利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
③D:译码(Decoding)。
利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
④P:印代码文件(Print)。
将文件CodeFile以紧凑格式显示在终端上,每行50个代码。
同时将此字符形式的编码写入文件CodePrint中。
⑤T:印哈夫曼树(Tree Printing)。
将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
3 课程设计报告内容利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。
对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
试为这样的信息收发站写一个哈夫曼编/译码系统。
3.1概要设计1)问题分析哈夫曼树的定义1.哈夫曼树节点的数据类型定义为:typedef struct{ //赫夫曼树的结构体char ch;int weight; //权值int parent,lchild,rchild;}htnode,*hfmtree;2)所实现的功能函数如下1、void hfmcoding(hfmtree &HT,hfmcode &HC,int n)初始化哈夫曼树,处理InputHuffman(Huffman Hfm)函数得到的数据,按照哈夫曼规则建立2叉树。
此函数块调用了Select()函数。
2、void Select(hfmtree &HT,int a,int *p1,int *p2) //Select函数,选出HT树到a为止,权值最小且parent为0的2个节点2、int main()主函数:利用已建好的哈夫曼树(如不在内存,则从文件hfmtree.txt中读入)对文件中的正文进行编码,然后将结果存入文件codefile.txt中。
如果正文中没有要编码的字符,则键盘读入并存储到ToBeTran文件中。
读入ToBeTran中将要编码的内容,将编码好的哈夫曼编码存储到CodeFile 中。
3、Encoding编码功能:对输入字符进行编码4、Decoding译码功能:利用已建好的哈夫曼树将文件codefile.txt中的代码进行译码,结果存入文件textfile.dat 中。
Print() 打印功能函数:输出哈夫曼树,字符,权值,以及它对应的编码。
5.主函数的简要说明,主函数主要设计的是一个分支语句,让用户挑选所实现的功能。
使用链树存储,然后分别调用统计频数函数,排序函数,建立哈夫曼函数,编码函数,译码函数来实现功能。
3.2详细设计(1)赫夫曼树的结构体typedef struct{ //赫夫曼树的结构体char ch;double weight; //权值int parent,lchild,rchild;}node,*Hfmtree;(2)选出权值最小且parent为0的2个节点void Select(Hfmtree &HT,int a,int *p1,int *p2) //Select函数,选出HT树到a为止,权值最小且parent 为0的2个节点{int i,j,x,y;for(j=1;j<=a;++j){if(HT[j].parent==0){x=j;break;}}for(i=j+1;i<=a;++i){if(HT[i].weight<HT[x].weight&&HT[i].parent==0){x=i; //选出最小的节点}}for(j=1;j<=a;++j) {if(HT[j].parent==0&&x!=j){y=j;break;}}for(i=j+1;i<=a;++i){if(HT[i].weight<HT[y].weight&&HT[i].parent==0&&x!=i){y=i; //选出次小的节点}}if(x>y){*p1=y;*p2=x;}else{*p1=x;*p2=y;}}void hfmcreat(Hfmtree &HT,hfmcode &HC,int n) //构建赫夫曼树HT,并求出n个字符的赫夫曼编码HC {int i,start,c,f,m;double w;int p1,p2;char *cd,z;if(n<=1){return;}m=2*n-1;HT=(Hfmtree)malloc((m+1)*sizeof(node));for(i=1;i<=n;++i) //初始化n个叶子结点{printf("请输入第%d字符信息和权值:",i);getchar();z=getchar();scanf("%lf",&w);HT[i].ch=z;HT[i].weight=w;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(;i<=m;++i) //初始化其余的结点{HT[i].ch='0';HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(i=n+1;i<=m;++i) //建立赫夫曼树{Select(HT,i-1,&p1,&p2);HT[p1].parent=i;HT[p2].parent=i;HT[i].lchild=p1;HT[i].rchild=p2;HT[i].weight=HT[p1].weight+HT[p2].weight;}HC=(hfmcode)malloc((n+1)*sizeof(char *));cd=(char *)malloc(n*sizeof(char));cd[n-1]='\0';for(i=1;i<=n;++i) //给n个字符编码{start=n-1;for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent){if(HT[f].lchild==c){cd[--start]='0';}else{cd[--start]='1';}}HC[i]=(char*)malloc((n-start)*sizeof(char));strcpy(HC[i],&cd[start]);}free(cd);}3.3调试分析该系统应该含有对程序进行初始化、编码、译码、印代码文件、印哈夫曼树功能,我们需要调用文件的输入输出,从而实现文本的操作。
3.4用户手册根据提示选择相应的选项,并进行相应的输入;I.Init 实现初始化功能,从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
E.Encoding 编码,利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
D.Decoding 译码,利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
Q.Exit 退出程序。
3.5测试结果1.运行程序。
2.首先我们需要对该程序进行初始化,选择I,并根据相应的提示输入用户的信息;可得对这8个数的哈弗曼编码,并在数据存放在了hfmTree.txt文件中。
3.我们对一下报文进行编码译码。
THIS PROGRAM IS MY FAVORITE编码结束后:ToBeTran.txt文件中的内容如下:CodeFile.txt文件中的内容如下:4;译码,建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
TextFile文件中的内容如下:5.退出程序:输入Q程序运行成功!3.6程序清单#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fstream>using namespace std;typedef struct{ //赫夫曼树的结构体char ch;double weight; //权值int parent,lchild,rchild;}node,*Hfmtree;typedef char **hfmcode;void Select(Hfmtree &HT,int a,int *p1,int *p2) //Select函数,选出HT树到a为止,权值最小且parent 为0的2个节点{int i,j,x,y;for(j=1;j<=a;++j){if(HT[j].parent==0){x=j;break;}}for(i=j+1;i<=a;++i){if(HT[i].weight<HT[x].weight&&HT[i].parent==0){x=i; //选出最小的节点}}for(j=1;j<=a;++j) {if(HT[j].parent==0&&x!=j){y=j;break;}}for(i=j+1;i<=a;++i){if(HT[i].weight<HT[y].weight&&HT[i].parent==0&&x!=i){y=i; //选出次小的节点}}if(x>y){*p1=y;*p2=x;}else{*p1=x;*p2=y;}}void hfmcreat(Hfmtree &HT,hfmcode &HC,int n) //构建赫夫曼树HT,并求出n个字符的赫夫曼编码HC {int i,start,c,f,m;double w;int p1,p2;char *cd,z;if(n<=1){return;}m=2*n-1;HT=(Hfmtree)malloc((m+1)*sizeof(node));for(i=1;i<=n;++i) //初始化n个叶子结点{printf("请输入第%d字符信息和权值:",i);getchar();z=getchar();scanf("%lf",&w);HT[i].ch=z;HT[i].weight=w;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(;i<=m;++i) //初始化其余的结点{HT[i].ch='0';HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(i=n+1;i<=m;++i) //建立赫夫曼树{Select(HT,i-1,&p1,&p2);HT[p1].parent=i;HT[p2].parent=i;HT[i].lchild=p1;HT[i].rchild=p2;HT[i].weight=HT[p1].weight+HT[p2].weight;}HC=(hfmcode)malloc((n+1)*sizeof(char *));cd=(char *)malloc(n*sizeof(char));cd[n-1]='\0';for(i=1;i<=n;++i) //给n个字符编码{start=n-1;for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent){if(HT[f].lchild==c){cd[--start]='0';}else{cd[--start]='1';}}HC[i]=(char*)malloc((n-start)*sizeof(char));strcpy(HC[i],&cd[start]);}free(cd);}int main(){char code[100],h[100],hl[100];int n,i,j,k,l;ifstream input_file; //文件输入输出流ofstream output_file;char choice,str[100];Hfmtree HT;hfmcode HC;while(1) //当choice的值不为q且不为Q时循环{printf(" ****************赫夫曼编码/译码器*****************\n");printf(" * I.Init *\n"); printf(" * E.Encoding *\n"); printf(" * D.Decoding *\n"); printf(" * Q.Exit *\n"); printf(" **************************************************\n\n");printf("请输入您要操作的步骤:");scanf("%c",&choice);if(choice=='I'||choice=='i') //初始化赫夫曼树{printf("请输入字符个数:");scanf("%d",&n);hfmcreat(HT,HC,n);for(i=1;i<=n;++i){printf("%c : %s\n",HT[i].ch,HC[i]);//cout<<HT[i].ch<<":"<<HC[i]<<endl;}output_file.open("HfmTree.txt");if(!output_file){printf("Can't oen file!\n");return 1;}for(i=1;i<=n;i++){output_file<<"("<<HT[i].ch<<HC[i]<<")";}output_file.close();printf("赫夫曼树已经创建完毕,并且已经放入hfmTree.txt文件中!\n");}else if(choice=='E'||choice=='e') //进行编码,并将字符放入ToBeTran.txt,码值放入CodeFile.txt中{printf("请输入字符:");gets(str);output_file.open("ToBeTran.txt");if(!output_file){printf("Can't oen file!\n");return 1;}output_file<<str<<endl;output_file.close();output_file.open("CodeFile.txt");if(!output_file){printf("Can't oen file!\n");return 1;}for(i=0;i<strlen(str);i++){for(j=0;j<=n;++j){if(HT[j].ch==str[i]){output_file<<HC[j];break;}}}output_file.close();printf("\n");printf("编码完毕,并且已经存入CodeFile.txt文件!\n");input_file.open("CodeFile.txt"); //从CodeFile.txt中读入编码,输出在终端if(!input_file){printf("can't oen file!\n");return 1;}input_file>>code;printf("编码码值为:%d\n",code);input_file.close();}else if(choice=='D'||choice=='d') //读入CodeFile.txt中的编码进行译码,将译出来的字符放入Textfile.txt中{input_file.open("CodeFile.txt");if(!input_file){printf("Can't oen file!\n");return 1;}input_file>>h;input_file.close();output_file.open("Textfile.txt");if(!output_file){printf("Can't oen file!\n");return 1;}k=0;while(h[k]!='\0') //先用编码中的前几个和字符的编码相比较,然后往后移{for(i=1;i<=n;i++){l=k;for(j=0;j<strlen(HC[i]);j++,l++){hl[j]=h[l];}hl[j]='\0';if(strcmp(HC[i],hl)==0){output_file<<HT[i].ch;k=k+strlen(HC[i]);break;}}}output_file.close();input_file.open("Textfile.txt");if(!input_file){printf("Can't oen file!\n");return 1;}input_file>>h;cout<<h<<endl;input_file.close();printf("译码结束,字符已经存入Textfile.txt文件中!\n");}else if(choice=='Q'||choice=='q') //退出程序{exit(0);}else //如果选了选项之外的就让用户重新选择{getchar();printf("您没有输入正确的步骤,请重新输入!\n");}}return 0;}4 小结在我自己课程设计中,就在编写好源代码后的调试中出现了不少的错误,遇到了很多麻烦及困难,我的调试及其中的错误和我最终找出错误,修改为正确的能够执行的程序中,通过分析,我学到了:在定义头文件时可多不可少,即我们可多写些头文件,肯定不会出错,但是若没有定义所引用的相关头文件,必定调试不通过;在执行译码操作时,不知什么原因,总是不能把要编译的二进制数与编译成的字符用连接号连接起来,而是按顺序直接放在一起,视觉效果不是很好。