文档介绍:目录一、实训要求……………………………………………………………………………..2 二、课题分析和设计……………………………………………………………………..2 1、基本需求分析…………………………………………………………………… 2,3 2、对应的类………………………………………………………………................3,4,5 三、主要功能界面………………………………………………………………………...5 1、主界面…………………………………………………………………………… 5 2、读取文章并对字符编码………………………………………………………… 5 3、哈弗曼编码信息………………………………………………………………….6 4、文章编码………………………………………………………………………….6 5、文章译码………………………………………………………………………….6 6、错误处理………………………………………………………………………….7 四、总结(课设心得体会) ……………………………………………………………… 7 五、附录(主要函数代码) ……………………………………………………………… 7~14 一、实训要求 1 、输入为:一段中文或英文的文章的文件名。 2 、读取文章的字符信息。 3 、对字符进行权值的计算。 4 、根据权值构造哈弗曼树。 5 、生成对应的编码。 6 、输出为:原文章的编译(译文)。 7 、根据已经生成的编码表,输入任意的译文可以得到原文。二、课题分析和设计 1. 基本需求分析: (1 )在通信过程中,为了提高信道利用率,缩短信息传输时间降低传输成本,需要一编译码器。(2) 此哈弗曼编码译码器应具有编码译码的双向功能,即在发送端通过编码系统对传入的数据进行编码。(3 )在接收端将数据译码,将具有两项功能的编码译码器用于双工信道就可满足,双工信道的双向编译功能。(4 )输入某段报文是,系统将自己完成编译输出。(5 )、程序设计流程: <1> 文字表述: 开始进入功能选择界面,包含五种操作(1) 读取文章并对字符编码。(2) 哈夫曼编码信息。(3) 文章编码。(4) 文章译码。(5) 退出程序。<2> 操作: (1) 给定一篇文章,统计字符出现的概率,并根据概率建立哈弗曼树,并利用哈弗曼树对字符进哈夫曼编码。(2) 显示哈弗曼编码信息,包括字符和其哈弗曼编码。(3) 对文章进行译码,显示译码信息,并保存。(4) 对文章进行译码,显示并保存。<3> 流程图: 2、对应的类: <1> 定义类: class Element // 结点类{ public: char name;// 字符名 int weight;// 字符权值 int lchild;// 左孩子 int rchild;// 右孩子 int parent;// 父结点 Element() { weight = 0; lchild = -1; 文章编码哈夫曼编码信息显示编码退出程序程序主界面读取文章并对文章进行编码文章译码程序开始显示译码保存编码保存译码返回主界面返回主界面 rchild = -1; parent =-1; } ~Element(){} }; <2> 定义字符和出现的次数: class Name // 字符类{ public: char pname;// 字符名 int num;// 字符出现的次数 double lweight;// 字符的权值 Name() { num = 0; lweight = 0; } ~Name(){} }; <3> 定义字符总类总数和存储信息: class GetName // 关于字符类{ public: char file_name[max2];// 文件名 int n; // 字符的种类 int sum; // 字符的总数 Name letter[max1]; // 存储字符信息的类的数组 GetName() { sum = 0;n= 0;}}; <4> 定义编码类: class CodeNode// 编码类{ public: char ch; // 存储字符 char save_code[max1]; // 存储编码}; <5> 主要功能实现类: class Function { public: GetName L; int fn; // 定义哈夫曼数组大小 Element HuffmanT[max3]; // 哈夫曼数组 CodeNode Code[max1]; // 字符编码数组 Function() { fn= 0;}}; 三、主要功能界面: 1、主界面: 2、读取文章并对字符编码: 3、哈弗曼编码信息: 4、文章编码: 5、文章译码: 6、错误处理: 四、总结(课设心得体会):