C/C++哈夫曼编码和解码器的实现[2023-07-06]

发布时间 2023-07-11 23:12:27作者: programwriter

C/C++哈夫曼编码和解码器的实现[2023-07-06]

“数据结构与算法综合设计”任务书
专 业: 计算机与软件工程学院所有专业 年 级: 2021
一、 设计题目
哈夫曼编码和解码器的实现
二、 设计内容
【问题描述】
电子邮件是一种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。电子邮件可以是文字、图像、声音甚至是涂鸦文件等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。电子邮件的存在极大地方便了人与人之间的沟通和交流,促进了社会的发展。为确保邮件的安全性,用户可以设置强密码登录,防止被黑客轻易破解,涉及敏感数据的邮件一定要进行加密,商务密邮采用高强度加密算法,对邮件正文、附件、图片等数据进行加密后发送,实现数据在传输中及邮件系统存储中均以密文形式,非授权用户无法解密邮件,即便邮箱被盗,不法分子也无法查看、篡改和复制里面的内容。模拟邮箱加密邮件的过程,以邮件信息为基础,发送方利用哈夫曼树对邮件内容(英文字母、数字、汉字)进行编码,将码本通过 RSA 加密并同编码后的邮件信息发送给接收者,接受方对密文进行解密并将邮件信息显示在界面上。
【基本要求】
(1)设计数据结构
邮件:待发送的重要信息,保存在文件中;
哈夫曼树:保存在文件中,建立字符与哈夫曼编码的映射;
密钥:保存在文件中,包括公钥和私钥,对码本加密和解密
(2)制作可视化界面
a. 界面要求可以进行交互,要求实现图形界面不是简单的控制台应用,界面要求美观、布局合理,符合用户使用习惯。
b. 对每种操作,可以在界面上进行选择,例如:路径选择、保存文件、对邮件进行加密和解密、将原文、码本和解密后的文本、哈夫曼树显示在界面上等。
c. 可视化系统(如窗体、web 网页等)
(3)数据以文件的方式进行存储。
a. 待加密文件保存为 document.txt
b. 对字符进行哈夫曼编码,保存为二进制格式 code.dat
c. 解码,保存为 decode.txt
d. 建立哈夫曼树,保存为 HFM.txt
(4)使用RSA算法
了解 RSA 算法,双方加解密需设计好公钥和私钥,用设定好的密钥对码本进行加密和解密和数字签名和验证。
(5)编码算法比较
给出并实现其它多种编码算法(其它2种以上),分析并比较这些算法和啥夫曼编码算法。
(6)基本操作实现要求至少要实现以下操作:
文件读写操作、构造哈夫曼树、构造哈夫曼编码和解码、RSA密钥生成和管理、邮件的签名与验证,邮件的加解密、其它编码算法实现。
【团队分工与协作】
(1) 团队人数:5人;
(2) 每个题目分解成多个模块,由多人合作共同完成;
(3) 同一大题目组内成员充分讨论,划分出每人的工作任务,不得雷同。
三、 设计要求
操作系统:Windows等,自选。
开发语言:首选C/C++,也可根据题目特点自选其它语言。
设计要求:
(1) 要求利用结构化程序设计方法以及所采用的C/C++等编程语言思想来完成系统设计;
(2) 模块化程序设计:要求在设计过程中按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现;
(3) 学生所选课题必须上机实现,并获得正确的结果;
(4) 每人完成各自模块的数据结构设计、模块界面设计、功能实现。
(5) 系统基础数据及功能模块应能共享使用,各模块应能整合在一起进行测试;
(6) 操作流程简便合理,操作界面美观自然,符合普通用户一般操作习惯和大众审美。

源码

https://pan.baidu.com/s/1J--MYtUyPilpJKTD15-SgA?pwd=1111

四、 设计原则、文档内容、提交文档
(一)设计原则

  1. 独立编程,某些技术或算法可借鉴他人成果,但必须在理解、吸收基础上借鉴和适应性修改,必须弄懂算法原理、技术手段,否则,成绩一律以零分计;
  2. 设计小组可共同探讨交流算法设计方法和技术实现,但每人必须独立开发一个模块,严禁复制!说明书严禁抄袭,必须独立撰写,否则,成绩一律以零分计;
  3. 与导师商议后可适度修改设计方案,同时说明修改理由,不得对设计内容擅自删减,否则,视作未完成设计任务;
  4. 设计说明书:认真撰写,论述充分,层次清楚,符合设计说明书的格式和内容等相关规定。
    (二)设计文档应包括以下内容
  5. 课程设计的题目、系统的总功能和各子模块的功能;
  6. 需求分析:描述问题,简述课题需要解决的问题是什么,有什么要求和限制条件等;
  7. 总体设计:程序设计组成框图、流程图、以及每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明)及关系等;
  8. 详细设计:各模块功能设计说明,如:算法设计、函数功能、入口及出口参数说明、函数调用关系描述等;
  9. 调试与测试:调试/测试方法,测试结果分析,测试过程中遇到的主要问题及采取的解决办法;
  10. 测试结果:用几组测试数据验证算法设计的正确性;
  11. 综合设计的总结,主要包括:
    (1)综合设计中遇到的主要问题和解决方法;
    (2)创新和得意之处;
    (3)综合设计中存在的不足,需进一步改进的设想;
    (4)综合设计的感想和心得体会。
  12. 附录(此项可选)
    以上内容均应写入《综合设计说明书》中,要求干净整洁,符合综合设计的要求和规范。
    (三)提交文档
    设计结束后,每个团队需要提交的综合设计相关资料如下:
    以“小组编号-题目”作为文件夹名,分别建:“文档”、“程序”两个子文件夹,如下:
    (1)“文档”文件夹:
    放入2个文档:
    1)综合设计任务书
    2)综合设计说明书(注:要求符合设计说明书(模板)之各项规定),要求为Word文档(.docx)+转换成的Pdf文档(.pdf);
    (2)“程序”文件夹:放入程序源代码、可执行文件,有数据文件的题目将数据文件也放入此文件夹里。
    五、 进度安排
    在2~3周的时间内完成综合设计任务,具体安排如下:
  13. 分组,每个小组4~7人,教师指定或自由组队。
  14. 选题,上机前完成。结合设计任务,复习课程相关内容。
  15. 查阅资料,完成总体设计和人机界面设计。
  16. 小组成员进行模块分工,各自学习并掌握开发工具及相关技术。
  17. 各小组成员分别进行自己模块的详细设计。
  18. 各小组成员分别进行自己模块的编码实现测试。
  19. 小组模块集成及系统测试。
  20. 撰写综合设计说明书。
  21. 以小组为单位进行答辩,指导教师对每个学生提问、答辩。
    六、 参考资料
  22. 游洪跃等.数据结构与算法(C++版)(第2版).北京:清华大学出版社.2020.11.
  23. Adam Drozdek. Data Structures and Algorithms in C++(4th Edition).北京:清华大学出版社.2018.04.
  24. 严蔚敏.数据结构(C语言版).北京:清华大学出版社.2007.03.
  25. [美]马克·艾伦·维斯.数据结构与算法分析:Java语言描述(第3版)北京:机械工业出版社.2016.03.
  26. 李春葆.数据结构简明教程(第2版).北京:清华大学出版社.2018.12.
  27. Jon Kleinberg. Algorithm Design.北京:人民邮电出版社.2019.05.
  28. 张海藩. 软件工程(第4版).北京:人民邮电出版社.2013.08.

指导教师签名 日期 年 月 日