C++手机通讯录课程设计.docx

上传人:大张伟 文档编号:6125746 上传时间:2020-09-11 格式:DOCX 页数:46 大小:392.14KB
返回 下载 相关 举报
C++手机通讯录课程设计.docx_第1页
第1页 / 共46页
C++手机通讯录课程设计.docx_第2页
第2页 / 共46页
C++手机通讯录课程设计.docx_第3页
第3页 / 共46页
C++手机通讯录课程设计.docx_第4页
第4页 / 共46页
C++手机通讯录课程设计.docx_第5页
第5页 / 共46页
点击查看更多>>
资源描述

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

1、C+手机通讯录课程设计学号11710115天津城建大学高级程序设计语言C+ 课程设计设计说明书通讯录管理系统起止日期:2013 年 12 月 5 日 至2013 年 12 月 12 日学生姓名路 江 飞班级11 卓 越 七 班成绩指 导 教 师 ( 签 字 )计算机与信息工程学院2013 年 12 月 12 日天津城建大学课程设计任务书20132014 学年第一学期计算机与信息工程学院11 卓越专业11 卓越七班班级课程设计名称:高级程序设计语言C+ 课程设计设计题目:通讯录管理系统完成期限:自2013 年 12 月 5 日至 2013 年 12 月 12 日共 1 周设计依据、要求及主要内容

2、(可另加附页):设计依据: c+程序设计设计要求:通过这次课程设计,需要对 C+的各个环节知识形成一个有结构的整体,可以熟练的对 C+知识进行综合应用,同时达到对已学知识的全面复习。主要内容:一、 通讯录信息包括:姓名、地址、手机(支持多个手机)、电子邮箱二、 支持以下功能:添加联系人按姓名查找并修改或删除联系人支持模糊查询输入姓名中的一个字, 显示所有匹配联系人信息指 导教 师 (签字):系(教研室)主任(签字) :批准日期:2013 年 6 月 30 日课 程 设 计 进 度 计 划 表检查序实际日期计 划 完 成检查起止日期完成号内 容人签情况名2013-12-5完成课程设计1任务书20

3、13-12-6 初步完成程序2设计,调试程序2013-12-7继续修改调试3 -2013-12-11 程序以及完善程序设计2013-12-12课程设计答辩,完成并提4交指导教师批准,并签名:2013 年 6 月 30 日目录1、设计目的12、总体设计13、详细设计:23.1 、程序具体功能 .23.2 、调试分析 . .24、源程序和运行结果44.1 、源程序44.2 、运行结果 . .174.3 、心得体会 . .20通讯录管理系统1、 设计目的1通过实验实现对通讯录系统的管理操作 ; 2进一步掌握和利用 C+进行程设计的能力 ; 3进一步理解和运用结构化程序设计的思想和方法;4 初步掌握开

4、发一个小型实用系统的基本方法 ;5学会利用流程图或N-S 图表示算法 ;6掌握书写程设计开发文档的能力(书写课程设计报告) ;2、总体设计1按照姓名排序添加联系人模糊查询按姓名删除联系人信息按姓名修改联系人信息统计联系人个数保存联系人到文件浏览所有联系人信息3、详细设计:3.1 、程序具体功能:1、排序利用冒泡排序,根据链表中的联系人的姓名进行排序。主要用于修改联系人, 修改的可能是联系人的名字, 为保证链表中的联系人是按姓名排序,需要对联系人进行整体排序; 添加联系人时,为降低代码的时间复杂度, 将联系人插入到合适位置来实现链表的有序。2、添加联系人将要插入的联系人的姓名和链表中联系人的姓名

5、依次进行比较, 将联系人姓名插2入到合适的位置, 插入后保存联系人到文件并提示添加成功。3、查找从键盘上输入联系人名字中的字 (一个或多个),根据输入的字,将通讯录中所有联系人姓名和该字进行匹配, 从而输出所有包含该字的联系人的信息。4、删除根据要删除的姓名, 和链表中的联系人姓名一一比较,找到后提示是否确定将联系人的信息删除,选择确定则删除联系人信息并提示删除成功,否则放弃删除操作。 删除后保存剩下的联系人到文件。5、修改将要修改的姓名和链表中的联系人姓名一一比较,找到要修改的联系人后, 显示修改的选项,包括修改姓名,修改地址,修改手机号,修改邮箱和修改完毕选项。 修改完毕后对将联系人进行排

6、序, 保证链表中的联系人按姓名有序排列,同时保存联系人到文件并提示修改成功。6、统计3统计联系人的个数。7、保存将链表里的联系人保存到文件里。8、浏览将保存在文件里的联系人读取出来, 带有相应的界面,实现联系人信息的遍历。3.2 、调试分析调试前先初始化一个链表,链表包含 5 个联系人记录。1. 调试排序用冒泡排序法将链表按照姓名进行排序, 运行程序,观察链表是否排序成功。2. 添加联系人调试根据联系人的姓名进行插入, 调试包括将联系人添加到开始位置,中间位置和最后位置,添加后将所有联系人信息输出, 运行程序,观察是否调试成功。3. 查找调试输入要查找联系人姓名的一部分, 看能不能将所有包含该

7、输入字符串的联系人输出来。4. 删除调试4首先遍历所有联系人信息, 分别调试删除开始位置,中间位置,最后位置的联系人,观察是否将联系人正确删除。5. 修改调试修改调试包括修改姓名、 手机号、地址、邮箱的调试以及同时修改多个属性的调试, 修改后遍历所有联系人, 观察是否修改成功。 如果修改了姓名,还要观察修改后是否进行了相应的排序。6. 统计调试数一下遍历输出的联系人, 观察是否和统计出来的相同。同时还要测试删除、 添加后统计出的数是不是正确的。7. 保存调试运行程序后, 打开保存联系人的文件夹, 观察文件的内容是否正确。8. 浏览调试运行程序,观察是不是文件中的联系人正确读出。9. 界面调试运

8、行程序,观察界面是否满意, 如果不满意,一直调试到满意为止。510. 异常处理调试运行程序,从键盘上随便输入数据, 观察程序是否出现 bug。11. 通讯录为空调试当通讯录为空时,对于执行查询操作、修改操作、删除操作、浏览所有联系人操作、以及查看联系人个数操作, 系统均提示 “通讯录为空!”。4、源程序和运行结果4.1 、源程序头文件 (a.h):#include usingnamespacestd;templatestructNodeDataType data;Node *next;class Person6public :char name10; / 姓名char address15;/

9、地址string phone;/ 手机号码string mail;/ 邮箱Person() Person( char *nam, char *addr,string phone,string mail)strcpy(name,nam);strcpy(address,addr);this -phone=phone;this -mail=mail;templateclass Telebookpublic :Telebook();/ 无参构造函数7Telebook(DataType a,intn); / 有参构造函数Telebook();/ 析构函数void main_menu(); / 主菜单界面

10、voidset_menu(); / 修改菜单界面voiddelete_menu(); / 修改菜单界面voidsort();/按姓名进行排序voidset();/ 修改记录voidlenth();/ 记录的个数voidadd();/ 增加记录voidsearch();/ 模糊查询voiddelet();/ 删除记录voidprintdata();/ 遍历记录voidsave();/保存记录private:Node *first;源文件( telebook.cpp):#include #include 8#include #include #include a.husingnamespacest

11、d;templateTelebook:Telebook()/ 无参构造函数first=new Node;first-next=NULL;template Telebook:Telebook(DataTypea,intn) / 有参构造函数Node *r, *s;first = new Node; r = first;for ( inti = 0; i n; i+)s =new Node;s-data = ai;9r-next = s;r = s;r-next = NULL;templatevoid Telebook : main_menu()cout *endl;cout *欢迎使用手机通讯录

12、* endl;cout *endl;cout *1.显示主菜单* endl;cout *2.增加联系人* endl;cout *3.删除联系人* endl;cout *4. 浏览联系人* endl;cout *5.修改联系人* endl;cout *6.查看联系人的个数* endl;cout *7.查询* endl;10cout *0. 退出* endl;cout *endl; / 主菜单templatevoid Telebook : set_menu()cout * endl;cout *1.修改姓名* endl;cout *2.修改地址* endl;cout *3.修改手机号* endl;

13、cout *4.修改邮箱* endl;cout *0.修改完毕* endl;cout *endl;11templatevoid Telebook : delete_menu()cout * * endl;cout *您确定要删除该记录吗?* endl;cout *1.确定* endl;cout *2.取消* endl;cout *endl;templatevoid Telebook :sort()/排序Node *p=first-next;Node *q=p-next; /q 为p的下一个节点Node *end=NULL;12while (first-next!=end)p=first-nex

14、t;q=p-next;while (p-next!=end)if (strcmp(p-data).name,(q-data).name )0)DataType temp;temp=p-data;p-data=q-data;q-data=temp;p=q;q=q-next;end=p; /end 为每次排序后的尾节点template13void Telebook :set() / 修改记录 Node *p = first-next;if (p=NULL)cout 通讯录为空! endl; return ;intt;bool flag=true ;char na10,addr20;string p

15、h,ma;char nam10;coutnam;while (p!=NULL)if (strcmp(p-data).name,nam)=0)set_menu();while (flag)14coutt) / 检验异常 elsecout 输入错误! endl;cin.sync();/ 清空流cin.clear();/ 清除流错误标记continue ;switch (t)case 1:coutna;strcpy(p-data).name,na);break ;case 2:coutaddr;strcpy(p-data).address,addr);15break ;case 3:coutph;(

16、p-data).phone=ph;break ;case 4:coutma;(p-data).mail=ma;break ;case 0:flag= false ;cout 修改成功! endl;sort();/ 修改成功后要排序return ;default:coutnext;if (p=NULL)cout 要修改的联系人不存在 endl;templatevoid Telebook :lenth()/ 查看记录的个数Node *p = first;intcount=0;while (p-next!=NULL)count+;p=p-next;if (count=0)cout 通讯录为空! en

17、dl; elsecout 一共有 count 个联系人! endl;17templatevoid Telebook :add()/ 按姓名增加记录Node *s = new Node; Node *p = first-next;Node *q=first;/p 指向 q的前一个对象DataType a;couta.name;couta.address;couta.phone;couta.mail;if (p=NULL)s-data=a;first-next=s;18s-next=NULL;cout 添加成功! data).name,a.name)next;elses-data=a;s-next

18、=p;q-next=s;cout 添加成功! data=a;q-next=s;s-next=NULL;cout 添加成功! endl;templatevoid Telebook :search()/ 模糊查询Node *p = first-next;if (p=NULL)cout 通讯录为空! endl; return ;string nam;bool m=false ;coutnam;cout -20- endl;cout | ;coutsetw(10) 姓名 | setw(15) 地址 | setw(20) 手机号 | setw(20) 邮箱 | endl;cout - data).nam

19、e;string:size_typepos=s.find(nam,0);/ 查找字符串中某个子串出现的位置if (pos!=-1)coutsetiosflags(ios:left);cout | ;coutsetw(10)data).name| setw(15)data).address | setw(20)data).phone |21 setw(20)data).mail| endl;cout - next;if (m=false )cout 未找到任何联系人 ! endl;templatevoid Telebook :delet()/ 删除记录intt=0;bool flag=true

20、;Node *p =first-next;Node *q ;if (p=NULL)22cout 通讯录为空! endl; return ;char nam10;coutnam;delete_menu();while (flag)coutt) / 检验异常elsecout 输入错误! data).name,nam)=0)first-next=p-next;cout 删除成功! data).name,nam)=0)q-next=p-next;cout 删除成功! next;24if (p=NULL)cout 删除的联系人不存在! endl; return ;case 2:return;defaul

21、t:cout 输入错误! endl;break ;templatevoid Telebook : printdata()/浏览记录Node *p=first;first-next=NULL;ifstream infile(123.txt,ios:in);if (!infile)cout 联系人浏览失败! namaddrphma; DataType a(nam,addr,ph,ma); Node *s= new Node ;s-data=a;p-next=s;s-next=NULL;p=s;infile.close();Node *t=first-next;coutsetiosflags(ios

22、:left);cout - endl;cout | ;26coutsetw(10) 姓名 | setw(15) 地址 | setw(20) 手机号 | setw(20) 邮箱 | endl;cout - endl;while (t!=NULL)coutsetiosflags(ios:left);cout | ;coutsetw(10)data).name| setw(15)data).address| setw(20)data).phone| setw(20)data).mail| next;cout - endl;templatevoid Telebook : save()/ 保存到27文件

23、Node *p =first-next; ofstream outfile( 123.txt ,ios:out); if (!outfile)cout 联系人保存失败! next=NULL)outfiledata).name data).address data).phone data).mail; / 最后一个不应该换行,/ 否则读记录时将多一行break ;else28outfiledata).name data).address data).phone data).mailnext;outfile.close();源文件( main.cpp ):#include #include tel

24、ebook.cppusingnamespacestd;void main()bool flag=true ;Telebook telebook;/ 调用无参构造函数telebook.main_menu();29while (flag)intt;coutt)/ 检验异常elsecout 输入错误! endl;cin.sync();/ 清空流cin.clear();/ 清除流错误标记continue ;switch (t)case 1:telebook.main_menu();break ;case 2:telebook.add();telebook.save();break ;case 3:30telebook.delet();telebook.save();break ;case 4:telebook.printdata();break ;case 5:telebook.set();telebook.save();break ;case 6:telebook.lenth();break ;case 7:telebook.search();break ;case 0:

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1