欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

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

    • 资源ID:6125746       资源大小:392.14KB        全文页数:46页
    • 资源格式: DOCX        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    C+手机通讯录课程设计学号11710115天津城建大学高级程序设计语言C+ 课程设计设计说明书通讯录管理系统起止日期:2013 年 12 月 5 日 至2013 年 12 月 12 日学生姓名路 江 飞班级11 卓 越 七 班成绩指 导 教 师 ( 签 字 )计算机与信息工程学院2013 年 12 月 12 日天津城建大学课程设计任务书20132014 学年第一学期计算机与信息工程学院11 卓越专业11 卓越七班班级课程设计名称:高级程序设计语言C+ 课程设计设计题目:通讯录管理系统完成期限:自2013 年 12 月 5 日至 2013 年 12 月 12 日共 1 周设计依据、要求及主要内容(可另加附页):设计依据: c+程序设计设计要求:通过这次课程设计,需要对 C+的各个环节知识形成一个有结构的整体,可以熟练的对 C+知识进行综合应用,同时达到对已学知识的全面复习。主要内容:一、 通讯录信息包括:姓名、地址、手机(支持多个手机)、电子邮箱二、 支持以下功能:添加联系人按姓名查找并修改或删除联系人支持模糊查询输入姓名中的一个字, 显示所有匹配联系人信息指 导教 师 (签字):系(教研室)主任(签字) :批准日期:2013 年 6 月 30 日课 程 设 计 进 度 计 划 表检查序实际日期计 划 完 成检查起止日期完成号内 容人签情况名2013-12-5完成课程设计1任务书2013-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 初步掌握开发一个小型实用系统的基本方法 ;5学会利用流程图或N-S 图表示算法 ;6掌握书写程设计开发文档的能力(书写课程设计报告) ;2、总体设计1按照姓名排序添加联系人模糊查询按姓名删除联系人信息按姓名修改联系人信息统计联系人个数保存联系人到文件浏览所有联系人信息3、详细设计:3.1 、程序具体功能:1、排序利用冒泡排序,根据链表中的联系人的姓名进行排序。主要用于修改联系人, 修改的可能是联系人的名字, 为保证链表中的联系人是按姓名排序,需要对联系人进行整体排序; 添加联系人时,为降低代码的时间复杂度, 将联系人插入到合适位置来实现链表的有序。2、添加联系人将要插入的联系人的姓名和链表中联系人的姓名依次进行比较, 将联系人姓名插2入到合适的位置, 插入后保存联系人到文件并提示添加成功。3、查找从键盘上输入联系人名字中的字 (一个或多个),根据输入的字,将通讯录中所有联系人姓名和该字进行匹配, 从而输出所有包含该字的联系人的信息。4、删除根据要删除的姓名, 和链表中的联系人姓名一一比较,找到后提示是否确定将联系人的信息删除,选择确定则删除联系人信息并提示删除成功,否则放弃删除操作。 删除后保存剩下的联系人到文件。5、修改将要修改的姓名和链表中的联系人姓名一一比较,找到要修改的联系人后, 显示修改的选项,包括修改姓名,修改地址,修改手机号,修改邮箱和修改完毕选项。 修改完毕后对将联系人进行排序, 保证链表中的联系人按姓名有序排列,同时保存联系人到文件并提示修改成功。6、统计3统计联系人的个数。7、保存将链表里的联系人保存到文件里。8、浏览将保存在文件里的联系人读取出来, 带有相应的界面,实现联系人信息的遍历。3.2 、调试分析调试前先初始化一个链表,链表包含 5 个联系人记录。1. 调试排序用冒泡排序法将链表按照姓名进行排序, 运行程序,观察链表是否排序成功。2. 添加联系人调试根据联系人的姓名进行插入, 调试包括将联系人添加到开始位置,中间位置和最后位置,添加后将所有联系人信息输出, 运行程序,观察是否调试成功。3. 查找调试输入要查找联系人姓名的一部分, 看能不能将所有包含该输入字符串的联系人输出来。4. 删除调试4首先遍历所有联系人信息, 分别调试删除开始位置,中间位置,最后位置的联系人,观察是否将联系人正确删除。5. 修改调试修改调试包括修改姓名、 手机号、地址、邮箱的调试以及同时修改多个属性的调试, 修改后遍历所有联系人, 观察是否修改成功。 如果修改了姓名,还要观察修改后是否进行了相应的排序。6. 统计调试数一下遍历输出的联系人, 观察是否和统计出来的相同。同时还要测试删除、 添加后统计出的数是不是正确的。7. 保存调试运行程序后, 打开保存联系人的文件夹, 观察文件的内容是否正确。8. 浏览调试运行程序,观察是不是文件中的联系人正确读出。9. 界面调试运行程序,观察界面是否满意, 如果不满意,一直调试到满意为止。510. 异常处理调试运行程序,从键盘上随便输入数据, 观察程序是否出现 bug。11. 通讯录为空调试当通讯录为空时,对于执行查询操作、修改操作、删除操作、浏览所有联系人操作、以及查看联系人个数操作, 系统均提示 “通讯录为空!”。4、源程序和运行结果4.1 、源程序头文件 (a.h):#include <string>usingnamespacestd;template< class DataType>structNodeDataType data;Node<DataType> *next;class Person6public :char name10; / 姓名char address15;/ 地址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;template< class DataType>class Telebookpublic :Telebook();/ 无参构造函数7Telebook(DataType a,intn); / 有参构造函数Telebook();/ 析构函数void main_menu(); / 主菜单界面voidset_menu(); / 修改菜单界面voiddelete_menu(); / 修改菜单界面voidsort();/按姓名进行排序voidset();/ 修改记录voidlenth();/ 记录的个数voidadd();/ 增加记录voidsearch();/ 模糊查询voiddelet();/ 删除记录voidprintdata();/ 遍历记录voidsave();/保存记录private:Node<DataType> *first;源文件( telebook.cpp):#include <fstream>#include <strstream>8#include <iomanip>#include <string>#include "a.h"usingnamespacestd;template< class DataType>Telebook<DataType>:Telebook()/ 无参构造函数first=new Node<DataType>first->next=NULL;template < class DataType> Telebook<DataType>:Telebook(DataTypea,intn) / 有参构造函数Node <DataType>*r, *s;first = new Node<DataType> r = first;for ( inti = 0; i < n; i+)s =new Node<DataType>s->data = ai;9r->next = s;r = s;r->next = NULL;template< class DataType>void Telebook<DataType> : main_menu()cout<< "*"<<endl;cout<< "*欢迎使用手机通讯录*" <<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; / 主菜单template< class DataType>void Telebook<DataType> : set_menu()cout<< "*" <<endl;cout<< "*1.修改姓名*" <<endl;cout<< "*2.修改地址*" <<endl;cout<< "*3.修改手机号*" <<endl;cout<< "*4.修改邮箱*" <<endl;cout<< "*0.修改完毕*" <<endl;cout<< "*"<<endl;11template< class DataType>void Telebook<DataType> : delete_menu()cout<< "* *" <<endl;cout<< "*您确定要删除该记录吗?*" <<endl;cout<< "*1.确定*" <<endl;cout<< "*2.取消*" <<endl;cout<< "*"<<endl;template< class DataType>void Telebook<DataType> :sort()/排序Node <DataType>*p=first->next;Node <DataType>*q=p->next; /q 为p的下一个节点Node <DataType>*end=NULL;12while (first->next!=end)p=first->next;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 为每次排序后的尾节点template< class DataType>13void Telebook<DataType> :set() / 修改记录 Node <DataType>*p = first->next;if (p=NULL)cout<< " 通讯录为空! " <<endl; return ;intt;bool flag=true ;char na10,addr20;string ph,ma;char nam10;cout<< " 请输入姓名: " ;cin>>nam;while (p!=NULL)if (strcmp(p->data).name,nam)=0)set_menu();while (flag)14cout<< " 请选择您的操作 (0-4) :" ; if (cin>>t) / 检验异常 elsecout<< " 输入错误! " <<endl;cin.sync();/ 清空流cin.clear();/ 清除流错误标记continue ;switch (t)case 1:cout<< " 请输入修改后的姓名:" ;cin>>na;strcpy(p->data).name,na);break ;case 2:cout<< " 请输入修改后的地址: " ; cin>>addr;strcpy(p->data).address,addr);15break ;case 3:cout<< " 请输入修改后的手机号:" ;cin>>ph;(p->data).phone=ph;break ;case 4:cout<< " 请输入修改后的邮箱:" ;cin>>ma;(p->data).mail=ma;break ;case 0:flag= false ;cout<< " 修改成功! " <<endl;sort();/ 修改成功后要排序return ;default:cout<< " 输入错误! " ;break ;16elsep=p->next;if (p=NULL)cout<< " 要修改的联系人不存在" <<endl;template< class DataType>void Telebook<DataType> :lenth()/ 查看记录的个数Node <DataType>*p = first;intcount=0;while (p->next!=NULL)count+;p=p->next;if (count=0)cout<< " 通讯录为空! " <<endl; elsecout<< " 一共有 " <<count<<" 个联系人!" <<endl;17template< class DataType>void Telebook<DataType> :add()/ 按姓名增加记录Node <DataType>*s = new Node<DataType> Node <DataType>*p = first->next;Node <DataType>*q=first;/p 指向 q的前一个对象DataType a;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;18s->next=NULL;cout<< " 添加成功! " <<endl;return ;while (p!=NULL)if (strcmp(p->data).name,a.name)<0)q=p;p=p->next;elses->data=a;s->next=p;q->next=s;cout<< " 添加成功! " <<endl;return ;if (p=NULL)/ 处理插在最后一个位置的情况19s->data=a;q->next=s;s->next=NULL;cout<< " 添加成功! " <<endl;template< class DataType>void Telebook<DataType> :search()/ 模糊查询Node <DataType>*p = first->next;if (p=NULL)cout<< " 通讯录为空! " <<endl; return ;string nam;bool m=false ;cout<< " 请输入查询的姓名: " ; cin>>nam;cout<< "-20-" <<endl;cout<< "| "cout<<setw(10)<< " 姓名 " <<"|" <<setw(15)<< " 地址 " <<"| " <<setw(20)<< " 手机号 " <<"| " <<setw(20)<< " 邮箱 " <<"|" <<endl;cout<< "-" <<endl;while (p!=NULL)string s=(p->data).name;string:size_typepos=s.find(nam,0);/ 查找字符串中某个子串出现的位置if (pos!=-1)cout<<setiosflags(ios:left);cout<< "| "cout<<setw(10)<<(p->data).name<<"|" <<setw(15)<<(p->data).address<< "| " <<setw(20)<<(p->data).phone<< "|21" <<setw(20)<<(p->data).mail<<"| "<<endl;cout<< "-" <<endl; m=true ;p=p->next;if (m=false )cout<< " 未找到任何联系人 !" <<endl;template< class DataType>void Telebook<DataType> :delet()/ 删除记录intt=0;bool flag=true ;Node <DataType>*p =first->next;Node <DataType>*q ;if (p=NULL)22cout<< " 通讯录为空! " <<endl; return ;char nam10;cout<< " 请输入删除的名字 :" ;cin>>nam;delete_menu();while (flag)cout<< " 请输入选项 (1/2) :" ; if (cin>>t) / 检验异常elsecout<< " 输入错误! " <<endl;cin.sync();/ 清空流cin.clear();/ 清除流错误标记continue ;switch (t)case 1:23if (strcmp(p->data).name,nam)=0)first->next=p->next;cout<< " 删除成功! " <<endl;deletep;return ;elsewhile (p!=NULL)if (strcmp(p->data).name,nam)=0)q->next=p->next;cout<< " 删除成功! " <<endl;deletep;return ;q=p;p=p->next;24if (p=NULL)cout<< " 删除的联系人不存在! " <<endl; return ;case 2:return;default:cout<< " 输入错误! " <<endl;break ;template< class DataType>void Telebook<DataType> : printdata()/浏览记录Node <DataType>*p=first;first->next=NULL;ifstream infile("123.txt",ios:in);if (!infile)cout<< " 联系人浏览失败! " <<endl; return ;25string ph,ma;char nam10,addr20;while (infile.good()/ 判断文件是否被读完infile>>nam>>addr>>ph>>ma; DataType a(nam,addr,ph,ma); Node <DataType> *s= new Node<DataType> ;s->data=a;p->next=s;s->next=NULL;p=s;infile.close();Node <DataType>*t=first->next;cout<<setiosflags(ios:left);cout<< "-" <<endl;cout<< "| "26cout<<setw(10)<< " 姓名 " <<"|" <<setw(15)<< " 地址 " <<"| " <<setw(20)<< " 手机号 " <<"| " <<setw(20)<< " 邮箱 " <<"|" <<endl;cout<< "-" <<endl;while (t!=NULL)cout<<setiosflags(ios:left);cout<< "| "cout<<setw(10)<<(t->data).name<<"|" <<setw(15)<<(t->data).address<<"| "<<setw(20)<<(t->data).phone<<"|" <<setw(20)<<(t->data).mail<<"| "<<endl;t=t->next;cout<< "-" <<endl;template< class DataType>void Telebook<DataType> : save()/ 保存到27文件Node <DataType>*p =first->next; ofstream outfile( "123.txt" ,ios:out); if (!outfile)cout<< " 联系人保存失败! " <<endl; return ;inti=0;while (p!=NULL)if (p->next=NULL)outfile<<(p->data).name<<"" <<(p->data).address<<" "<<(p->data).phone<<"" <<(p->data).mail; / 最后一个不应该换行,/ 否则读记录时将多一行break ;else28outfile<<(p->data).name<<"" <<(p->data).address<<" "<<(p->data).phone<<"" <<(p->data).mail<<endl;p=p->next;outfile.close();源文件( main.cpp ):#include <iostream>#include "telebook.cpp"usingnamespacestd;void main()bool flag=true ;Telebook<Person> telebook;/ 调用无参构造函数telebook.main_menu();29while (flag)intt;cout<< " 请选择您的选择 (0-8)按返回主菜单 :" ;if (cin>>t)/ 检验异常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:

    注意事项

    本文(C++手机通讯录课程设计.docx)为本站会员(大张伟)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开