C手机通讯录课程设计报告书.docx

上传人:b****1 文档编号:2408659 上传时间:2023-05-03 格式:DOCX 页数:31 大小:398.39KB
下载 相关 举报
C手机通讯录课程设计报告书.docx_第1页
第1页 / 共31页
C手机通讯录课程设计报告书.docx_第2页
第2页 / 共31页
C手机通讯录课程设计报告书.docx_第3页
第3页 / 共31页
C手机通讯录课程设计报告书.docx_第4页
第4页 / 共31页
C手机通讯录课程设计报告书.docx_第5页
第5页 / 共31页
C手机通讯录课程设计报告书.docx_第6页
第6页 / 共31页
C手机通讯录课程设计报告书.docx_第7页
第7页 / 共31页
C手机通讯录课程设计报告书.docx_第8页
第8页 / 共31页
C手机通讯录课程设计报告书.docx_第9页
第9页 / 共31页
C手机通讯录课程设计报告书.docx_第10页
第10页 / 共31页
C手机通讯录课程设计报告书.docx_第11页
第11页 / 共31页
C手机通讯录课程设计报告书.docx_第12页
第12页 / 共31页
C手机通讯录课程设计报告书.docx_第13页
第13页 / 共31页
C手机通讯录课程设计报告书.docx_第14页
第14页 / 共31页
C手机通讯录课程设计报告书.docx_第15页
第15页 / 共31页
C手机通讯录课程设计报告书.docx_第16页
第16页 / 共31页
C手机通讯录课程设计报告书.docx_第17页
第17页 / 共31页
C手机通讯录课程设计报告书.docx_第18页
第18页 / 共31页
C手机通讯录课程设计报告书.docx_第19页
第19页 / 共31页
C手机通讯录课程设计报告书.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C手机通讯录课程设计报告书.docx

《C手机通讯录课程设计报告书.docx》由会员分享,可在线阅读,更多相关《C手机通讯录课程设计报告书.docx(31页珍藏版)》请在冰点文库上搜索。

C手机通讯录课程设计报告书.docx

C手机通讯录课程设计报告书

学号11710115

天津城建大学

 

高级程序设计语言C++课程设计

设计说明书

 

通讯录管理系统

起止日期:

2013年12月5日至2013年12月12日

学生姓名

路江飞

班级

11卓越七班

成绩

指导教师(签字)

计算机与信息工程学院

2013年12月12日

天津城建大学

课程设计任务书

2013—2014学年第一学期

计算机与信息工程学院11卓越专业11卓越七班班级

课程设计名称:

高级程序设计语言C++课程设计

设计题目:

通讯录管理系统

完成期限:

自2013年12月5日至2013年12月12日共1周

设计依据、要求及主要内容(可另加附页):

设计依据:

c++程序设计

设计要求:

通过这次课程设计,需要对C++的各个环节知识形成一个有结构的整体,可以熟练的对C++知识进行综合应用,同时达到对已学知识的全面复习。

主要内容:

一、通讯录信息包括:

姓名、地址、手机(支持多个手机)、电子邮箱

二、支持以下功能:

●添加联系人

●按姓名查找并修改或删除联系人

●支持模糊查询

⏹输入姓名中的一个字,显示所有匹配联系人信息

 

指导教师(签字):

系(教研室)主任(签字):

批准日期:

2013年6月30日

课程设计进度计划表

序号

起止日期

计划完成内容

实际完成情况

检查日期

检查人签名

1

2013-12-5

完成课程设计任务书

2

2013-12-6

初步完成程序设计,调试程序

3

2013-12-7

-2013-12-11

继续修改调试程序以及完善程序设计

4

2013-12-12

课程设计答辩,完成并提交

指导教师批准,并签名:

2013年6月30日

 

 

通讯录管理系统

1、设计目的

.通过实验实现对通讯录系统的管理操作;

.进一步掌握和利用C++进行程设计的能力;

.进一步理解和运用结构化程序设计的思想和方法;

.初步掌握开发一个小型实用系统的基本方法;

.学会利用流程图或N-S图表示算法;

.掌握书写程设计开发文档的能力(书写课程设计报告);

2、总体设计

 

3、详细设计:

3.1、程序具体功能:

1、排序

利用冒泡排序,根据链表中的联系人的姓名进行排序。

主要用于修改联系人,修改的可能是联系人的名字,为保证链表中的联系人是按姓名排序,需要对联系人进行整体排序;添加联系人时,为降低代码的时间复杂度,将联系人插入到合适位置来实现链表的有序。

2、添加联系人

将要插入的联系人的姓名和链表中联系人的姓名依次进行比较,将联系人姓名插入到合适的位置,插入后保存联系人到文件并提示添加成功。

3、查找

从键盘上输入联系人名字中的字(一个或多个),根据输入的字,将通讯录中所有联系人姓名和该字进行匹配,从而输出所有包含该字的联系人的信息。

4、删除

根据要删除的姓名,和链表中的联系人姓名一一比较,找到后提示是否确定将联系人的信息删除,选择确定则删除联系人信息并提示删除成功,否则放弃删除操作。

删除后保存剩下的联系人到文件。

5、修改

将要修改的姓名和链表中的联系人姓名一一比较,找到要修改的联系人后,显示修改的选项,包括修改姓名,修改地址,修改手机号,修改邮箱和修改完毕选项。

修改完毕后对将联系人进行排序,保证链表中的联系人按姓名有序排列,同时保存联系人到文件并提示修改成功。

6、统计

统计联系人的个数。

7、保存

将链表里的联系人保存到文件里。

8、浏览

将保存在文件里的联系人读取出来,带有相应的界面,实现联系人信息的遍历。

3.2、调试分析

调试前先初始化一个链表,链表包含5个联系人记录。

1.调试排序

用冒泡排序法将链表按照姓名进行排序,运行程序,观察链表是否排序成功。

2.添加联系人调试

根据联系人的姓名进行插入,调试包括将联系人添加到开始位置,中间位置和最后位置,添加后将所有联系人信息输出,运行程序,观察是否调试成功。

3.查找调试

输入要查找联系人姓名的一部分,看能不能将所有包含该输入字符串的联系人输出来。

4.删除调试

首先遍历所有联系人信息,分别调试删除开始位置,中间位置,最后位置的联系人,观察是否将联系人正确删除。

5.修改调试

修改调试包括修改姓名、手机号、地址、邮箱的调试以及同时修改多个属性的调试,修改后遍历所有联系人,观察是否修改成功。

如果修改了姓名,还要观察修改后是否进行了相应的排序。

6.统计调试

数一下遍历输出的联系人,观察是否和统计出来的相同。

同时还要测试删除、添加后统计出的数是不是正确的。

7.保存调试

运行程序后,打开保存联系人的文件夹,观察文件的内容是否正确。

8.浏览调试

运行程序,观察是不是文件中的联系人正确读出。

9.界面调试

运行程序,观察界面是否满意,如果不满意,一直调试到满意为止。

10.异常处理调试

运行程序,从键盘上随便输入数据,观察程序是否出现bug。

11.通讯录为空调试

当通讯录为空时,对于执行查询操作、修改操作、删除操作、浏览所有联系人操作、以及查看联系人个数操作,系统均提示“通讯录为空!

”。

4、源程序和运行结果

4.1、源程序

头文件(a.h):

#include

usingnamespacestd;

template

structNode

{

DataTypedata;

Node*next;

};

classPerson

{

public:

charname[10];//姓名

charaddress[15];//地址

stringphone;//手机号码

stringmail;//邮箱

Person()

{}

Person(char*nam,char*addr,stringphone,stringmail)

{

strcpy(name,nam);

strcpy(address,addr);

this->phone=phone;

this->mail=mail;

}

};

template

classTelebook

{

public:

Telebook();//无参构造函数

Telebook(DataTypea[],intn);//有参构造函数

~Telebook(){};//析构函数

voidmain_menu();//主菜单界面

voidset_menu();//修改菜单界面

voiddelete_menu();//修改菜单界面

voidsort();//按姓名进行排序

voidset();//修改记录

voidlenth();//记录的个数

voidadd();//增加记录

voidsearch();//模糊查询

voiddelet();//删除记录

voidprintdata();//遍历记录

voidsave();//保存记录

private:

Node*first;

};

源文件(telebook.cpp):

#include

#include

#include

#include

#include"a.h"

usingnamespacestd;

template

Telebook:

:

Telebook()//无参构造函数

{

first=newNode;

first->next=NULL;

}

template

Telebook:

:

Telebook(DataTypea[],intn)//有参构造函数

{

Node*r,*s;

first=newNode;

r=first;

for(inti=0;i

{

s=newNode;

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL;

}

template

voidTelebook:

:

main_menu()

{

cout<<"*********************************************************"<

cout<<"*欢迎使用手机通讯录*"<

cout<<"*********************************************************"<

cout<<"*1.显示主菜单*"<

cout<<"*2.增加联系人*"<

cout<<"*3.删除联系人*"<

cout<<"*4.浏览联系人*"<

cout<<"*5.修改联系人*"<

cout<<"*6.查看联系人的个数*"<

cout<<"*7.查询*"<

cout<<"*0.退出*"<

cout<<"*********************************************************"<

}//主菜单

template

voidTelebook:

:

set_menu()

{

cout<<"*************************************"<

cout<<"*1.修改姓名*"<

cout<<"*2.修改地址*"<

cout<<"*3.修改手机号*"<

cout<<"*4.修改邮箱*"<

cout<<"*0.修改完毕*"<

cout<<"*************************************"<

}

template

voidTelebook:

:

delete_menu()

{

cout<<"*************************************"<

cout<<"*您确定要删除该记录吗?

*"<

cout<<"*1.确定*"<

cout<<"*2.取消*"<

cout<<"*************************************"<

}

template

voidTelebook:

:

sort()//排序

{

Node*p=first->next;

Node*q=p->next;//q为p的下一个节点

Node*end=NULL;

while(first->next!

=end)

{

p=first->next;

q=p->next;

while(p->next!

=end)

{

if(strcmp((p->data).name,(q->data).name)>0)

{

DataTypetemp;

temp=p->data;

p->data=q->data;

q->data=temp;

}

p=q;

q=q->next;

}

end=p;//end为每次排序后的尾节点

}

}

template

voidTelebook:

:

set()//修改记录

{

Node*p=first->next;

if(p==NULL)

{

cout<<"通讯录为空!

"<

return;

}

intt;

boolflag=true;

charna[10],addr[20];

stringph,ma;

charnam[10];

cout<<"请输入姓名:

";

cin>>nam;

while(p!

=NULL)

{

if(strcmp((p->data).name,nam)==0)

{

set_menu();

while(flag)

{

cout<<"请选择您的操作(0-4):

";

if(cin>>t){}//检验异常

else

{

cout<<"输入错误!

"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

switch(t)

{

case1:

cout<<"请输入修改后的姓名:

";

cin>>na;

strcpy((p->data).name,na);

break;

case2:

cout<<"请输入修改后的地址:

";

cin>>addr;

strcpy((p->data).address,addr);

break;

case3:

cout<<"请输入修改后的手机号:

";

cin>>ph;

(p->data).phone=ph;

break;

case4:

cout<<"请输入修改后的邮箱:

";

cin>>ma;

(p->data).mail=ma;

break;

case0:

flag=false;

cout<<"修改成功!

"<

sort();//修改成功后要排序

return;

default:

cout<<"输入错误!

";

break;

}

}

}

else

p=p->next;

}

if(p==NULL)

cout<<"要修改的联系人不存在"<

}

template

voidTelebook:

:

lenth()//查看记录的个数

{

Node*p=first;

intcount=0;

while(p->next!

=NULL)

{

count++;

p=p->next;

}

if(count==0)

cout<<"通讯录为空!

"<

else

cout<<"一共有"<

"<

}

template

voidTelebook:

:

add()//按姓名增加记录

{

Node*s=newNode;

Node*p=first->next;

Node*q=first;//p指向q的前一个对象

DataTypea;

cout<<"请输入姓名:

";

cin>>a.name;

cout<<"请输入地址:

";

cin>>a.address;

cout<<"请输入手机号:

";

cin>>a.phone;

cout<<"请输入邮箱:

";

cin>>a.mail;

if(p==NULL)

{

s->data=a;

first->next=s;

s->next=NULL;

cout<<"添加成功!

"<

return;

}

while(p!

=NULL)

{

if(strcmp((p->data).name,a.name)<0)

{

q=p;

p=p->next;

}

else

{

s->data=a;

s->next=p;

q->next=s;

cout<<"添加成功!

"<

return;

}

}

if(p==NULL)//处理插在最后一个位置的情况

{

s->data=a;

q->next=s;

s->next=NULL;

cout<<"添加成功!

"<

}

}

template

voidTelebook:

:

search()//模糊查询

{

Node*p=first->next;

if(p==NULL)

{

cout<<"通讯录为空!

"<

return;

}

stringnam;

boolm=false;

cout<<"请输入查询的姓名:

";

cin>>nam;

cout<<"--------------------------------------------------------------------------"<

cout<<"|";

cout<

cout<<"--------------------------------------------------------------------------"<

while(p!

=NULL)

{

strings=(p->data).name;

string:

:

size_typepos=s.find(nam,0);//查找字符串中某个子串出现的位置

if(pos!

=-1)

{

cout<

:

left);

cout<<"|";

cout<data).name<<"|"<data).address<<"|"

<data).phone<<"|"<data).mail<<"|"<

cout<<"-------------------------------------------------------------------------"<

m=true;

}

p=p->next;

}

if(m==false)

cout<<"未找到任何联系人!

"<

}

template

voidTelebook:

:

delet()//删除记录

{

intt=0;

boolflag=true;

Node*p=first->next;

Node*q;

if(p==NULL)

{

cout<<"通讯录为空!

"<

return;

}

charnam[10];

cout<<"请输入删除的名字:

";

cin>>nam;

delete_menu();

while(flag)

{

cout<<"请输入选项(1/2):

";

if(cin>>t){}//检验异常

else

{

cout<<"输入错误!

"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

switch(t)

{

case1:

if(strcmp((p->data).name,nam)==0)

{

first->next=p->next;

cout<<"删除成功!

"<

deletep;

return;

}

else

{

while(p!

=NULL)

{

if(strcmp((p->data).name,nam)==0)

{

q->next=p->next;

cout<<"删除成功!

"<

deletep;

return;

}

q=p;

p=p->next;

}

}

if(p==NULL)

cout<<"删除的联系人不存在!

"<

return;

case2:

return;

default:

cout<<"输入错误!

"<

break;

}

}

}

template

voidTelebook:

:

printdata()//浏览记录

{

Node*p=first;

first->next=NULL;

ifstreaminfile("123.txt",ios:

:

in);

if(!

infile)

{

cout<<"联系人浏览失败!

"<

return;

}

stringph,ma;

charnam[10],addr[20];

while(infile.good())//判断文件是否被读完

{

infile>>nam>>addr>>ph>>ma;

D

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2