简单通讯录c++课程设计.doc
《简单通讯录c++课程设计.doc》由会员分享,可在线阅读,更多相关《简单通讯录c++课程设计.doc(22页珍藏版)》请在三一办公上搜索。
1、C+课程设计简单通讯录管理0411204班041120431董力1程序菜单功能 通讯录是一个简单的数据库库表,每一个记录(结点)包含个人所有通讯信息。程序执行过程为:显示主菜单,用户在choice:处输入选项(按照功能列表输入19中的一个数字),按回车后执行相应的功能。 具体函数的功能请见下面4. 提供典型测试数据组2分析,感想。 (1)、数据结构 程序采用一个单向链表类结构实现,每个结点代表一个通讯记录,链表类实现通讯录多个记录的管理工作。 (2)、新增功能 可批量输入,一次输入多个人的信息。 (3)、遇到的问题 这次课设遇到的问题较多,首先就是学过的知识无法融会贯通。在完成课设时,许多知识
2、点需要翻书查找(比如在输入输出流的部分),有时需要请教他人。其次,是程序十分长,而且自己小错误不断,这样检查起来非常麻烦。所以当运行程序时,出现了102个错误,其中大部分不是算法的问题,而是像少了“;”或是if中判断是否相等时用“=”而不是“=”。最后,程序较长,编辑起来费力,有时一个算法出问题,其后的几个函数连带都会出问题,而且编译时没有显示有错误,这让检查起来非常麻烦,需要一遍又一遍阅读,有时还要请教别人一起阅读,耗时很长。 (4)、感想这次课设成功完成,让我非常惊讶。平时作业的一个程序,有时需要一个下午来完成。现在,我发现原来我也可以完成如此复杂的程序。更重要的是,这次课设让我的一些知识
3、能记得更加深刻,对于编程也更加熟练。而且,我知道请教他人的重要性, 有时自己一个人想不出来的问题,问问同学,可以更好更快的解决。最后,我知道了光把理论知识还不够,还要不断实践,这样才能将知识掌握得更加牢固,更加灵活。3提供有注释的源程序#include #include #include #include #include #include class Nodechar Name10; /姓名int OfficePhone; /办公室电话int HomePhone; /家庭电话char MobilePhone15; /手机号码char E_Mail20; /电子邮箱地址Node*Next; /
4、下一个结点指针public:Node(char na=sb,int op=0,int hp=0,char mp=0,char em=0) /构造函数,有缺省值strcpy(Name,na); /将na中的姓名拷贝到Name中OfficePhone=op; /将op中的数值赋给OfficePhoneHomePhone=hp; /将hp中的数值赋给HomePhonestrcpy(MobilePhone,mp);/将mp中的字符串拷贝到MobilePhone中strcpy(E_Mail,em); /将em中的字符串拷贝到E_Mail中void Show() /显示结点数据couttNametOffi
5、cePhonetHomePhonetMobilePhonetE_Mailendl; /输出一个记录中的所有数据void print(ofstream &out) /将结点数据写入文件out.open(addresslist.text);/打开名为addresslist.text的文档outtNametOfficePhonetHomePhonetMobilePhonetE_MailNext=p;/如果不为空,则尾指针的Next指向pTailPtr=p; /将p的值赋给TailPtrTailPtr-Next=NULL;/使TailPtr的成员Next为空void AddSort(Node*p) /
6、将p指向的结点按Tag指定的顺序插入到链表中if(HeadPtr=NULL)/当链表为空时HeadPtr=TailPtr=p;/直接将数据记录在第一条p-Next=NULL;else /如果链表不为空Node *p1=HeadPtr,*p2=HeadPtr;/定义两个Node型指针变量 if(Tag=1)/按姓名排列 p1=HeadPtr;/将首指针赋给p1 while(strcmp(p-Name,p1-Name)0&p1-Next!=NULL)/比较p中Name和p1中的大小 p2=p1;p1=p1-Next; /如果p大,就将下一个数据赋给p1,否则跳出循环 if(strcmp(p-Nam
7、e,p1-Name)Next=p1;/将p的下一个指向p1 if(HeadPtr=p1) HeadPtr=p;/如果首指针等于p1,则将p的值赋给首指针 else p2-Next=p; /如果p1是第一个将p赋给HeadPtr,否则p2下一个指向p else/如果找不到比p的Name小的数据,就将p插在链表末尾 p1-Next=p;/将p赋给p的下一条记录 p-Next=NULL;/而p的下一条为空 if(Tag=2)/按办公室电话排列,同按姓名排列的方法 p1=HeadPtr; while(p-OfficePhone)(p1-OfficePhone)&p1-Next!=NULL) p2=p1
8、;p1=p1-Next; if(p-OfficePhone)OfficePhone) p-Next=p1; if(HeadPtr=p1) HeadPtr=p; else p2-Next=p; else p1-Next=p; p-Next=NULL; if(Tag=3)/按家庭电话排列,同按姓名排列的方法 p1=HeadPtr; while(p-HomePhone)(p1-HomePhone)&p1-Next!=NULL) p2=p1;p1=p1-Next; if(p-HomePhone)HomePhone) p-Next=p1; if(HeadPtr=p1) HeadPtr=p; else p
9、2-Next=p; else p1-Next=p; p-Next=NULL; if(Tag=4)/按手机号码排列,同按姓名排列的方法 p1=HeadPtr; while(strcmp(p-MobilePhone,p1-MobilePhone)0&p1-Next!=NULL) p2=p1;p1=p1-Next; if(strcmp(p-MobilePhone,p1-MobilePhone)Next=p1; if(HeadPtr=p1) HeadPtr=p; else p2-Next=p; else p1-Next=p; p-Next=NULL; if(Tag=5)/按电子邮箱地址排列,同按姓名排
10、列的方法 p1=HeadPtr; while(strcmp(p-E_Mail,p1-E_Mail)0&p1-Next!=NULL) p2=p1;p1=p1-Next; if(strcmp(p-E_Mail,p1-E_Mail)Next=p1; if(HeadPtr=p1) HeadPtr=p; else p2-Next=p; else p1-Next=p; p-Next=NULL; Node *LookUp(char*name)/按姓名查找结点,返回该结点指针 Node *p=HeadPtr;/定义一个Node型指针,初始值为HeadPtr while(p!=NULL)/当链表不为空时 if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 通讯录 c+ 课程设计
链接地址:https://www.31ppt.com/p-2385462.html