课程设计--手机通讯录的可行性与实际运用分析

集美大学课程设计

计算机工程学院 网安2411 于鸿硕 《手机通讯录》

拓展博客:程序可行性与实际运用分析

一、现有程序问题分析

在程序设计中,我发现自己的方案存在如下问题

(一)文件储存与读写缺陷

本次设计使用txt文件存储联系人信息,而在调试中我发现,C++程序读取txt文件时通过逐行输入信息的方式获取数据,其所占用的系统时间和内存较大,时间复杂度达到O(N),空间复杂度达到O(M*Z),N为联系人数、M为使用的拼音首字母数、Z为26个字母数。这样的数据读取占用了很大的时间,我在实际读取时也出现了该问题。

而在删除联系人时,由于C++不能直接访问到txt的具体某一行进行修改,我现使用的方法是将Trie树按DFS顺序重新创建一个暂存文件,然后通过暂存文件覆盖现有文件的方式完成删除操作。这样的存储方法让空间复杂度异常地高,内存里要同时存在多个类、一个Trie和一个txt暂存文件,对系统内存要求大,不符合手机通讯录这种需要在任何内存环境下都能正常高速运行的要求。同时,多次的覆盖操作让txt文件并不稳定,这样的不稳定的算法很像不稳定排序,可能会导致某一个设计漏洞或其他干涉导致数据文件的损坏甚至丢失。

可能需要一个类似于顺序表的外存结构来储存联系人信息。

(二)Python库的调用问题

本次设计在拼音转置中使用了Python作为技术辅助,但是我考虑到在实际运用场景中,我们是面向手机用户进行设计,这样的程序要求用户手机内置Python环境且插入系统框架中。和实际通讯录的占用情况不大符合,无法实现在各种配置的手机上都能完美运行的要求。且要求Python路径固定可循,如用户对手机进行root操作后,可能会影响Python文件进而导致通讯录失效。

另外,调用Python库的方法并不能解决汉字的同音字问题,例如部分姓氏,如”单“,在系统中可能会被调用为”dan“而非”shan“,导致查找失败。

(三)动态内存管理问题

如前面所述,对内存的要求高,同时,对于动态内存的管理能力也要求很大。在早期程序设计完成时,我多次在调试中出现内存溢出、段错误等问题。对于此种情况,我查阅资料并引入了构折函数对系统进行多次的内存管理。现虽能基本完成功能,解决内存问题。但仍存在高的内存错误风险。


二、可能解决方案延申

结合Github有关材料和AI的帮助,我探索到以下可能解决方案

(一)文件储存与读写缺陷
  1. 使用结构化数据格式(推荐使用 SQLite

    • 替代 .txt 文件,使用轻量级数据库 SQLite 存储联系人。
    • 查询效率高(通过索引),支持更新与删除操作,不需要全表重写。
    • 适合嵌入式/移动设备,已广泛用于安卓APP中。
    • 可通过 C++ 使用 SQLite C API 或使用 sqlite3.h 封装库。
  2. 若继续使用文本文件,考虑以下改进

    • 缓存机制:读取时将文件内容加载进内存(如 vector<Contact>),只在退出或修改时写入。

    • 增量更新文件:在删除联系人时,可记录删除ID,逻辑上标记删除,不立即重写。

    • 多文件分块:将联系人按字母分块存储为多个文件,减少单文件大小,加快读写效率。

(二)Python库的调用问题
  1. C++内嵌拼音库(建议替代Python)
    • 使用纯C++拼音库,如 cppjieba-pinyinlibpinyin,适合嵌入式设备,独立于Python。
    • 若数据量小,也可使用静态拼音映射表(map<汉字, 拼音首字母>)进行转写。
  2. 使用上下文感知拼音处理算法(处理多音字):
    • 可利用前后字符语义或词典匹配改进转换准确性。
    • 若采用C++拼音库,部分已内建了 disambiguation 逻辑。
  3. 封装接口,提高可移植性
    • 将拼音转换封装为模块接口,便于后续替换为不同实现(如后续使用ML模型)。
(三)动态内存管理问题
  1. 使用智能指针(推荐 std::shared_ptr / std::unique_ptr
    • 自动管理生命周期,防止内存泄漏和重复释放;
    • 特别适合用于 TrieNode* 的递归结构。
  2. 构析函数优化
    • 确保每个new对应一个delete,析构函数中释放子节点;
    • 可设计递归析构逻辑,防止悬挂指针。
  3. 内存泄漏检测工具辅助调试
    • 使用 Valgrind(Linux)或 Visual Leak Detector(Windows)检查泄漏;
    • Visual Studio 本身也支持诊断工具(可启用CRT调试)。

三、结语

在可行性分析的最后,我发现了一些可能可供系统改进提升所可以使用的新解决方案,但由于本次课程设计时间不足、本人技术能力有限,暂无法得到实现。但希望通过可行性分析提升自己理解与评价程序的能力,从而真正地从学习数据结构走向运用数据结构,锻炼成为成熟技术人员的意识和能力。

posted @ 2025-06-18 09:38  KinthYu  阅读(24)  评论(0)    收藏  举报