C++链表通讯录完美版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++语言课程设计
学号:*********
姓名:楚归羽
指导老师:张
目录
一、程序功能 (2)
二、题目分析 (2)
三、设计中遇到的问题及解决方法 (2)
四、感想与心得 (2)
五、程序说明 (2)
六、函数调用关系及主要算法的实现 (8)
七、数据测试 (8)
一、程序功能
程序采用单向链表类结构实现实现通讯录多个纪录的管理工作。
1、提示输入个字段,一次输入一个人的数据
2、输入待删除记录的姓名,显示其所有信息,让用户确认是否删除
3、按顺序显示所有记录,每显示10条记录暂停,按Enter继续
4、输入姓名,显示其所有信息
5、用户输入姓名,系统显示该姓名下所有信息,同时显示子菜单,用户按子菜单提示进行修改
6、从实现建立的正文文件中批量导入数据。程序运行时,用户需输入正文文件名
7、将库表中数据写入一个正文文件中。程序运行时,用户需输入正文文件名
8、首先显示当前排序关键字,然后提示是否需要改变。系统默认按姓名排序,可在按办公室电话排序之间切换
9、退出系统
二、题目分析
程序采用单向链表类结构实现,每个结点代表一个通讯记录。链表类实现通讯录多个纪录的管理工作。
三、设计中遇到的问题及解决方法
初次接触课程设计,刚刚拿到题目,实在是茫然无头绪,于是反复研究了题目,仔细复习了链表部分的知识点,加上和同学的讨论,终于是有了一个大概的思路。
刚开始着手编写的时候问题不断,幸好经过练习册上的指示,搭好了基本的框架,可是链表部分仍然是出了很大的问题,经过自己的反复实验与不断努力终于编译成功。后面的文本文件的读入与写入则是另一个难题,因为这一块练习的不是很多,只在课本上看到了一些皮毛,在编译与调试时也遇到了很大问题。最后通过看书上的例题并在与同学交流探讨中解决了这些问题。
四、感想与心得
C++作为一门必修课程,学习的过程实在是痛苦的,尤其是在编程的时候,因为总是会出现各种各样的错误。只有通过反复的调试,通过无数次的排错,才能编写出正确的程序,更多的时候,一个很小的很无聊错误就能导致长时间的迷惑。但是,这也让我学到了还能多,尤其是面对错误坚韧不拔的意志和不达目的绝不低头的毅力,这一点对科研工作想来也是相当重要的。
五、程序说明
/*通讯录管理系统||Copyright:010910236 丁志伟*/
#include
#include
#include
#include
#include
#include
/*------------------------分割线||节点类的定义--------------------------------------------*/
class node
{
char Name[15];
int OfficePhone;
int HomePhone;
char MobilePhone[15];
char Email[20];
node *next;
public:
node(char *n="a",int o=0,int h=0,char *m="b",char *e="c",node *ne=NULL)//初始化
{
if(n)strcpy(Name,n);
if(m)strcpy(MobilePhone,m);
if(e)strcpy(Email,e);
next=ne;
OfficePhone=o;HomePhone=h;
}
void show() //显示节点数据
{
cout< } void setName(char *s) //重置Name {strcpy(Name,s);} void setOfficePhone(int x) //重置officephone {OfficePhone=x;} void setHomePhone(int x) //重置homephone {HomePhone=x;} void setMobilePhone(char *s) //重置mobilephone {strcpy(MobilePhone,s);} void setEmail(char *s) //重置Emailail {strcpy(Email,s);} friend class addr; friend istream& operator>>(istream &,node *); //>>的重载 }; /*------------------------分割线||链表创建--------------------------------------------*/ class addr { node *head; node *tail; int t; public: addr(node *h=NULL,node *ta=NULL,int tag=1) {head=h;tail=ta;t=tag;} void addtail(node *p)//--------------------------------------------------------------添加到尾部 { tail->next=p; tail=p; } void addsort(node *p)//--------------------------------------------------------------按序添加 { node *p1,*p2; p1=head;p2=head; if(t==1)//姓名插入 { if (head==NULL){head=p;tail=head;} else if (strcmp(p->Name,head->Name)==-1){p->next=head;head=p;} else if(strcmp(p->Name,tail->Name)>=0) {tail->next=p;tail=p;} else { while (strcmp(p2->Name,p->Name)==-1)//< { p1=p2; p2=p2->next; } p->next=p2; p1->next=p; } } if (t==2)//电话插入 { if (head==NULL){head=p;tail=head;} else if (p->OfficePhone<=head->OfficePhone){p->next=head;head=p;} else if(p->OfficePhone>=tail->OfficePhone) {tail->next=p;tail=p;} else { while (p->OfficePhone>=p2->OfficePhone)//p2.OfficePhone