C手机通讯录课程设计报告书.docx
- 文档编号:2408659
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:31
- 大小:398.39KB
C手机通讯录课程设计报告书.docx
《C手机通讯录课程设计报告书.docx》由会员分享,可在线阅读,更多相关《C手机通讯录课程设计报告书.docx(31页珍藏版)》请在冰点文库上搜索。
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
};
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
};
源文件(telebook.cpp):
#include
#include
#include
#include
#include"a.h"
usingnamespacestd;
template
Telebook
:
Telebook()//无参构造函数
{
first=newNode
first->next=NULL;
}
template
Telebook
:
Telebook(DataTypea[],intn)//有参构造函数
{
Node
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 Node Node 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 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 intcount=0; while(p->next! =NULL) { count++; p=p->next; } if(count==0) cout<<"通讯录为空! "< else cout<<"一共有"< "< } template voidTelebook : add()//按姓名增加记录 { Node Node Node 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 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< < cout<<"-------------------------------------------------------------------------"< m=true; } p=p->next; } if(m==false) cout<<"未找到任何联系人! "< } template voidTelebook : delet()//删除记录 { intt=0; boolflag=true; Node Node 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 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 通讯录 课程设计 报告书