四)调试分析:
1,遇到的问题:
问题1: 将电话号作为关键字在哈希表中存储时,需要将字符串转换为整形,而直接将11位字符串转换为整形将超出int型的最大范围,故不可直接将字符串直接转换为int,要先截取一定长度的字符串,然后转换为整形,再用:Hi=(H(key)%MOD)m 换算在该记录哈希表中的位置。
key=change(phoneNum); addr=key%MOD;
while((EQ(f[addr].key,phoneNum)!=1)&&i 问题2: 电话号的前几位一般是相同的,故用于转换为关键字的串需要是电话号的后几位,而现有的strncpy()功能是截取字符串的前几位,故需要自己定义一个转换函数.为此可以先将字符串反转,去前几位,然后将取得的字符串再反转,即得到原来电话号的后几位字符串。 //----------电话号码到关键字的转换--------------- intchange(char phoneNum[]) { charstr[4]; int key; strrev(phoneNum); strncpy(str,phoneNum,3); str[3]='\\0'; strrev(str); key=atoi(str); return key; } 问题 3: 图形界面的实现. 因知识水平的限制,MFC中的图形界面用的不熟练,故选择擅长的c来做此通讯录,但c中找不到实用的图形界面头文件.所以就需要自己绘制图形界面。 cout<<\ !*********迷你电话本************!\ cout<<\ |------------------( ^* _ *^ )----------------------|\ cout<<\ |**【新建电话】请输入: 0 ***|\ cout<<\ |**【添加记录】请输入: 1 ***|\ cout<<\ |**【查找记录】请输入: 2 ***|\ cout<<\ |**【修改记录】请输入: 3 ***|\cout<<\ |**【删除记录】请输入: 4 ***|\cout<<\ |**【浏览记录】请输入: 5 ***|\cout<<\ |**【保存电话本】请输入: 6 ***|\cout<<\ |**【打开电话本】请输入: 7 ***|\cout<<\ |**【退出】请输入: 8 ***|\ cout<<\ !---------------------------------------------------!\cout<<\ 使用说明:其他操作之前请先新建电话本\cout<<\ --------请选择操作的序列号!----------------\ 2.课程设计过程的收获 通过课程设计让我学习到一个程序正确运行需要各个子程序正确结合,以及严密的语法结构,还要有清晰的流程图。 3.在课程设计过程中对《数据结构》课程的认识 数据结构锻炼的是我们的逻辑思维能力,能增加我们编程过程中的思维的严密性与可行性。数据结构考察的是程序的时间复杂度,与空间复杂度。它们直接反映了算法的优劣程度。故在将算法实现为程序的时候就需要注意实现语言,循环结构的选择,以及变量的类型等。