cin.get(pause); }} while(current_ptr != NULL); cin.ignore(1,pause); //循环直到结束.
system(\"cls\");
system(\"cls\"); }
else // 假如链表是空的,显示提示. {
cout << \"\\n没有记录显示!\\n\"; }
} //显示函数结束 程序设计思想如下:
首先给出提示:“输入您想要的每屏显示的数目(不大于22):”,等待用户输入个数a。
定义一个整型变量counter,用于记录信息的数目。按display_list()函数的操作方法输出信息。每输出一条信息,counter自增一次。当输出a 条信息时,counter==a,此时清除屏幕的信息。
然后提示:“按回车键继续”,当获取回车键字符时,输出下一个a 条信息。假如一开始current_ptr指针所指的头节点是空的,那么表示链表中没有任何信息,给出提示:“没有任何信息显示。”
4. 根据姓氏查询功能:
该功能是这样实现的:搜索由姓组成的数组,把current_ptr指针指向头节点开始搜索。
提示用户输入索要查询的人的姓氏,将用户输入的姓氏存入新定义的search_string指针中,采用strcmp()函数判断current_ptr指针所指的内容与search_string指针中的内容是否相同。
假如strcmp()返回值不是零,那么将current_ptr指针指向下一个节点,继续判断,如此循环。假如strcmp()返回值是零,说明找到所要找的人。然后按照以下格式输出:
****,***(姓,名) **********(电话号码)
如果current_ptr指针最后指向尾节点,说明没有找到。此时给出提示信息:“没有找到相符的,按回车键继续”。
5. 删除记录功能:
将previous_ptr初始化值定为空,将current_ptr移到头节点开始搜索。提示信息:“键入你要删除的人的姓:”。找出相应的人的信息所在位置,将current_ptr指针指向找到的信息。如果找到,提示信息:“是否要删除(Y/N)”,如果用户输入Y,执行删除操作,否则不删除。删除信息功能的具体实行相对较复杂,涉及到三种情况:删除头节点信息,从中间删除信息,从尾节点中删除信息。程序分别定义了三个函数处理三种情况:delete_head_of_list(),delete_from_middle_of_list(),delete_end_of_list()。三个函数共同的特点是:将指针指向被删除的节点的前面和后面,使它跳过被删除的节点。删除节点并释放空间。再把current_ptr指向头部,并给其赋值.不同之处在于,从头部删除信息,
或尾部删除信息后,链表就缺少了头节点和尾节点,必须在制造一个头节点和尾节点是其完整。delete_head_of_list()和delete_end_of_list()中就增加了这个功能。
6. 修改记录功能:
该功能也使我根据题目的要求在原程序中加入的。先调用函数change_record(),此函数实现时先搜索所要修改的信息,将current_ptr()指向该信息。然后调用change_node()函数修改信息。函数定义如下:
void change_node(friend_node *previous_ptr){
char change_string1[20]; char change_string2[20]; char change_string3[20]; cout<<\"修改为:\\n\"; cout<<\"名:\";
cin.get(change_string1,20);
strcpy(current_ptr->first_name,change_string1); cin.get();
cout<<\"姓:\";
cin.get(change_string2,20);
strcpy(current_ptr->last_name,change_string2); cin.get();
cout<<\"电话号码:\"; cin.get(change_string3,20 );
strcpy(current_ptr->phone_num,change_string3); }
定义三个字符型变量change_string1[20], change_string2[20] ,change_string3[20]来存储用户修改是输入的信息,然后采用strcpy()函数将其复制到current_ptr所指的节点中。这样就完成了修改功能。然后将其输出到屏幕,格式为:
****,***(姓,名)
**********(电话号码)
8. 帮助功能:
该功能用来解决用户在使用该程序中可能碰到的问题,并给予简单的帮助。主要有以下几个帮助选项:1: 我的记录出了什么问题?2: 怎样清空记录?3: 什么时候会推出新版本?4: 新版本里会有些什么内容?5: 退出。与handle_choice()函数一样采用switch()语句,针对不同的选项调用不同函数。
9.推出程序功能:
该功能调用delete_list()函数,将存储空间清空。并结束程序运行。delete_list()是这样实现的:将current_ptr指针所指的内容清除,再将其指向下一个节点,做循环操作,直到其指向尾节点。 二、 设计结构:
该程序的结构比较简单易懂。在程序的前面先申明了所要用到的各个函数清晰明了。接下去是主函数main(),其中罗列了该程序的各个功能。然后是各个功能的函数定义,基本是按照主函数中程序出现的顺序定义的,也方便理解。
三、 程序设计不足:
该程序在我的修改后,已经有相当多的功能,但还是存在一些不足。例如:1.增加信息时,只能一条一增。每增加一条信息,就要选择一次功能1。如果用户要增加许多信息,就要重复好多次操作,相当麻烦。2.该程序只能供一个用户使用,不能让许多用户使用,资源不能充分利用。3.信息的安全得不到保障,没有密码功能。4.帮助功能太简单,不能起到很大的作用。
在以后的时间里,会作进一步修改,使得该程序更加完美。
四、 完善及调试程序的心得体会:
短学期C++课的任务是编写一个C++程序,一开始真有些害怕。以前学的知识都是零零散散,从来没有系统地运用过。而且对自己也没有多大的信心,应为一直觉得C++是那么难的一门课,自己学的不是很扎实,可能编出来吗?抱着试一试的心态,开始了我的作业。我选择的是电话簿程序,应为它比较容易理解。而且题目的要求也相对比较容易:
1 增加记录修改功能(姓,名和电话号码)
2 增加显示功能(对链表提供逐屏显示选择而且可以由用户确定每屏显示的数
目)
3 汉化菜单和帮助
4 程序的结构改写,采用双链表结构。
我在做题时,先做第三个题目。一边翻译程序,一边理解程序。一个暑假没有接触C++了,好多知识已经忘记。翻译这么长的程序也是相当重的任务,但是通过翻译,我渐渐回忆起了学过的知识,基本理解了程序设计的思路,那么做下一步的操作就比较省力。
第一个题目比较简单,基本上没有遇到问题。但是在做第二个题目时,我遇到了一个很难处理的问题。题目要求每屏显示用户要求的信息条数,我就想到了用system(“cls”),每输出一屏信息后,用户按回车键,就清除一页的信息。这个思想在后来证明是对的,但是运行时却出现了问题。第一页信息不能显示,而后面的信息却能安要求执行。我怎么都不能发现错误,在万般无奈下,请教了老师。终于,在老师的指导下完成了任务。用cin.get()吸收掉一个回车符就达到要求了。在运行出程序的那一刻真是无比开心。
任务完成了, C++功能的强大,更牢固地掌握了C++知识,理解了C++强大的功能。将学过的知识系统的应用,作出一个属于自己的程序真是一种很享受的过程。在完成这个程序后,我的心情是无比的开心的———自己的劳动果实,承载这胜利的喜悦!这个短学期,让我不再害怕C++,而且更加崇尚科学。经过努力克服困难后得到的快乐会让我更乐观的对待以后的挫折!