C手机通讯录课程设计.docx
- 文档编号:12932250
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:18
- 大小:469.79KB
C手机通讯录课程设计.docx
《C手机通讯录课程设计.docx》由会员分享,可在线阅读,更多相关《C手机通讯录课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
C手机通讯录课程设计
学号
天津城建大学
高级程序设计语言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、详细设计:
、程序具体功能:
1、排序
利用冒泡排序,根据链表中的联系人的姓名进行排序。
主要用于修改联系人,修改的可能是联系人的名字,为保证链表中的联系人是按姓名排序,需要对联系人进行整体排序;添加联系人时,为降低代码的时间复杂度,将联系人插入到合适位置来实现链表的有序。
2、添加联系人
将要插入的联系人的姓名和链表中联系人的姓名依次进行比较,将联系人姓名插入到合适的位置,插入后保存联系人到文件并提示添加成功。
3、查找
从键盘上输入联系人名字中的字(一个或多个),根据输入的字,将通讯录中所有联系人姓名和该字进行匹配,从而输出所有包含该字的联系人的信息。
4、删除
根据要删除的姓名,和链表中的联系人姓名一一比较,找到后提示是否确定将联系人的信息删除,选择确定则删除联系人信息并提示删除成功,否则放弃删除操作。
删除后保存剩下的联系人到文件。
5、修改
将要修改的姓名和链表中的联系人姓名一一比较,找到要修改的联系人后,显示修改的选项,包括修改姓名,修改地址,修改手机号,修改邮箱和修改完毕选项。
修改完毕后对将联系人进行排序,保证链表中的联系人按姓名有序排列,同时保存联系人到文件并提示修改成功。
6、统计
统计联系人的个数。
7、保存
将链表里的联系人保存到文件里。
8、浏览
将保存在文件里的联系人读取出来,带有相应的界面,实现联系人信息的遍历。
、调试分析
调试前先初始化一个链表,链表包含5个联系人记录。
1.调试排序
用冒泡排序法将链表按照姓名进行排序,运行程序,观察链表是否排序成功。
2.添加联系人调试
根据联系人的姓名进行插入,调试包括将联系人添加到开始位置,中间位置和最后位置,添加后将所有联系人信息输出,运行程序,观察是否调试成功。
3.查找调试
输入要查找联系人姓名的一部分,看能不能将所有包含该输入字符串的联系人输出来。
4.删除调试
首先遍历所有联系人信息,分别调试删除开始位置,中间位置,最后位置的联系人,观察是否将联系人正确删除。
5.修改调试
修改调试包括修改姓名、手机号、地址、邮箱的调试以及同时修改多个属性的调试,修改后遍历所有联系人,观察是否修改成功。
如果修改了姓名,还要观察修改后是否进行了相应的排序。
6.统计调试
数一下遍历输出的联系人,观察是否和统计出来的相同。
同时还要测试删除、添加后统计出的数是不是正确的。
7.保存调试
运行程序后,打开保存联系人的文件夹,观察文件的内容是否正确。
8.浏览调试
运行程序,观察是不是文件中的联系人正确读出。
9.界面调试
运行程序,观察界面是否满意,如果不满意,一直调试到满意为止。
10.异常处理调试
运行程序,从键盘上随便输入数据,观察程序是否出现bug。
11.通讯录为空调试
当通讯录为空时,对于执行查询操作、修改操作、删除操作、浏览所有联系人操作、以及查看联系人个数操作,系统均提示“通讯录为空!
”。
4、源程序和运行结果
、源程序
头文件:
#include
usingnamespacestd;
template
structNode
{
DataTypedata;
Node
};
classPerson
{
public:
charname[10];显示主菜单*"< cout<<"*2.增加联系人*"< cout<<"*3.删除联系人*"< cout<<"*4.浏览联系人*"< cout<<"*5.修改联系人*"< cout<<"*6.查看联系人的个数*"< cout<<"*7.查询*"< cout<<"*0.退出*"< cout<<"*********************************************************"< }改姓名*"< cout<<"*2.修改地址*"< cout<<"*3.修改手机号*"< cout<<"*4.修改邮箱*"< cout<<"*0.修改完毕*"< cout<<"*************************************"< } template voidTelebook : delete_menu() { cout<<"*************************************"< cout<<"*您确定要删除该记录吗? *"< cout<<"*1.确定*"< cout<<"*2.取消*"< cout<<"*************************************"< } template voidTelebook : sort()ame,(q->data).name)>0) { DataTypetemp; temp=p->data; p->data=q->data; q->data=temp; } p=q; q=q->next; } end=p;ame,nam)==0) { set_menu(); while(flag) { cout<<"请选择您的操作(0-4): "; if(cin>>t){}ame,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();ame,<0) { q=p; p=p->next; } else { s->data=a; s->next=p; q->next=s; cout<<"添加成功! "< return; } } if(p==NULL)ame; string: : size_typepos=(nam,0);ame<<"|"< < cout<<"-------------------------------------------------------------------------"< m=true; } p=p->next; } if(m==false) cout<<"未找到任何联系人! "< } template voidTelebook : delet()ame,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()ame<<"|"< < t=t->next; cout<<"--------------------------------------------------------------------------"< } } template voidTelebook : save()ame<<""<<(p->data).address<<"" <<(p->data).phone<<""<<(p->data).mail;ame<<""<<(p->data).address<<"" <<(p->data).phone<<""<<(p->data).mail< } p=p->next; } (); } 源文件(): #include #include"" usingnamespacestd; voidmain() { boolflag=true; Telebook 示主菜单 3.添加联系人 4.删除联系人 5.查看联系人的个数 6.修改联系人信息 7.模糊查询 8.异常处理 9.保存联系人的文件内容 、心得体会 写代码之前应该对通讯录系统的功能及其实现方法做一个详细的思考,完成准备工作之后,将系统的功能依次实现,完成一个功能就对其进行测试,在实现功能的同时,为提高代码的可读性,还应该有必要的注释,同时注意程序的设计风格和命名规范,当把系统的功能都完成后,就要考虑代码的优化,简单界面的设计以及异常情况的处理,保证程序在运行过程中不会因为输入数据的错误而不能运行或者导致系统崩溃。 在设计的过程中,经常将java的用法和C++搞混,比如Java中String类型的变量可以直接定义,但C++中,定义string类型的变量应加string头文件。 因此,要想熟练的掌握C++,必须进行大量的写代码。 当我看到我的题目时,我瞬间就想到用链表和结构体实现,但在我写代码时才发现出现了在自己预料之外的错误,查看了很多资料后才把第一个功能完成,完成一个功能之后其他的功能实现起来感觉就比较容易了。 在实现模糊查询时,刚开始是根据自己的想法将链表中每个联系人的姓名和键盘输入的字符串进行匹配,但这样有一个问题就是: 用户可以从键盘输入一个或多个字,就需要对每种情况进行处理,最后我查找了相关资料,发现string类有一函数可以实现模式匹配。 实现文件的读出和写入的功能,写入时如果没有目标文件,则系统会自动在目标文件夹里生成一个文件用来储存用户数据,该文件类型可以按用户要求生成,如txt文本文档或doc文档等。 编写这次代码,在如何进行姓名排序上费了些力气,虽然老师讲过冒泡排序和选择排序,可是运用到单链表上就着实感到困难了,参考了老师PPT上的插入排序和冒泡排序实现了。 自己的代码还有很多不足,比如修改联系人信息时没有实现模糊查询到修改联系人,再进行修改;删除联系人是还可以实现批量删除以及代码优化方面等。 通过这次的课程设计,我感觉自己写代码的水平还有待提高,要想精通一门编程语言,写大量的代码是必不可少的。 以后我将更加努力学习专业知识,努力提高写代码的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 通讯录 课程设计