C++链表通讯录完美版

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档