东南大学短学期C++电话簿
- 格式:doc
- 大小:349.50 KB
- 文档页数:24
课程设计报告摘要:随着科学技术的发展,计算机领域不断取得新的研究成果。
计算机知识越来越普及,计算机的应用也越来越广泛:它不再局限于科学研究方面,变得与我们的生活息息相关。
此例的通讯录便是日常生活中极实用的应用之一。
通讯录系统能方便用户迅速、准确的查找修改删除联系人信息,并实现把各个联系人的信息以文档保存。
本文介绍了简易通讯录管理系统在Microsoft Visual C++ 6.0环境下的实现过程:系统的分析,功能模块的设计,系统的调试和测试。
该通讯录包含的主要功能有:联系人的添加、修改、删除、拨号、分类显示以及整表导出为txt文本,并自动实现按字母升序排列通讯录。
关键词:Microsoft Visual C++、通讯录、功能函数、面向对象、控制台目录1课题小组成员组成及分工情况2功能需求分析2.1 通讯录界面设计 2.2 添加模块2.3 查找模块2.4 删除模块2.5 修改模块2.6 显示模块2.7 拨号功能模块2.8 来电显示模块3 程序框图4 主要代码描述4.1 添加记录 4.2 查找记录 4.3 删除记录 4.4 修改记录 4.5 整表输出 4.6 拨号功能 4.7 来电显示4.8 控制台5 调试6 总结与心得7 致谢(附:程序详细代码)1 课题小组成员组成及分工情况季予:程序MFC实现方法、Search、Edit、Delete、Dial函数的编写。
吕文广:程序MFC实现方法、输入输出流控制、运算符重载部分的编写。
李文贤:Address类、Terms类、Addrbook类基础框架构造。
组织各函数。
郭瑞琦:链表部分的排序实现、程序调试与bug修复、ppt\word报告编写。
2 功能需求分析通讯录主要应有以下功能模块:通讯录界面、新建联系人、修改原有联系人信息、删除联系人、查找联系人、显示联系人信息及由联系人姓名进行拨号的功能。
其中联系人的姓名、通讯号码等信息可由数字和字母混编而成。
2.1 通讯录界面设计主要功能是设计通讯录的界面,能够提示用户的实际操作等。
我组采用按照序号来实现相应的操作,其中:1添加通讯录2删除通讯录3编辑通讯录4查看通讯录5拨号6 来电显示7整表输出8保存退出2.2 通讯录添加模块主要功能是添加联系人,包括姓名、电话等信息,且添加后自动按字母顺序排列。
2.3 通讯录查找模块主要功能是在已编通讯录内查找所需删除或修改的联系人信息,并实现“查无此人”的报错功能。
2.4 通讯录修改模块主要功能是对原有联系人的个人信息进行修改更新。
2.5 通讯录删除模块主要功能是删除不再需要的联系人。
2.6 通讯录显示模块主要功能是显示已有的通讯录信息并可输出在文本文档中。
2.7 通讯录拨号模块主要功能是通过已知姓名的输入实现系统对号码的自动查找拨出。
2.8 通讯录来电显示模块主要功能是通过已知电话号码的输入实现系统对已有通讯录姓名的查找。
4 主要代码描述4.1添加记录通过输入联系人的姓名、电话等向程序中写入信息,具体由重载>>实现:istream& operator>>(istream &in,Address &a){cout<<"……姓名:";in>>;cout<<"…手机号:";in>>a.tel_num;while(1){ if(strlen(a.tel_num)!=11){ cout<<"请重新输入手机号码(11位数)"<<'\n';in>>a.tel_num;}elsebreak;}cout<<"……归类\n<A:老师类B:同学类其他字符:其他类>:";in>>a.arch;cout<<"…E_mail:";in>>a.e_addr;return in;}4.2查找记录根据姓名输入,查询原有联系人信息的地址,具体代码如下:Terms** AddrBook::Search(char *nam){Terms *p,*q;for(int i=0;i<3;i++){//逐类查找q=ab[i];for(p=q->link;p!=ab[i];p=p->link){if(!strcmp(p->,nam))//比较名字return &q->link;//相同时返回地址q=p;//用q保存前一个指针}}return &ab[i];//搜索失败时返回表头节点}4.3删除记录根据姓名输入,通过遍历全表找到原有联系人信息并删除,拥有报错功能,具体代码如下:bool AddrBook::Delete(){char *nam=new char[25];cout<<"请输入要删除的通讯录的姓名:";cin>>nam;//指定名字return Delete(nam);}bool AddrBook::Delete(char *nam){Terms *q,**p=Search(nam);if(Search(nam)==&ab[1]||Search(nam)==&ab[2]||Search(nam)==&ab[3]){cout<<"所找地址不存在!\n";return false;}//指定的名字不存在时删除失败q=*p;*p=(*p)->link;delete q;cout<<"删除成功!\n";return true;}4.4编辑记录根据姓名输入,通过遍历全表找到原有联系人信息并根据需要进行修改,拥有报错功能,具体代码如下:void Address::Modify(){char *str=new char[25],a;cout<<"请逐项输入新数据<不修改的数据请输入一个\"#\">:\n";cout<<"……姓名:";cin>>str;if(strcmp(str,"#")!=0)strcpy(name,str);cout<<"…手机号:";cin>>str;if(strcmp(str,"#")!=0)strcpy(tel_num,str);cout<<"……归类:";cin>>a;if(a!='#')arch=a;cout<<"…E_mail:";cin>>str;if(strcmp(str,"#")!=0)strcpy(e_addr,str);}4.5整表输出的实现把文件中的各种信息通过txt文本文档的形式保存出来,代码如下:void AddrBook::save(){ofstream outfile("data.txt");for(int i=0;i<3;i++){for(Terms *p=ab[i]->link;p!=ab[i];p=p->link){outfile<<"……姓名:"<<p-><<'\n'<<"…手机号:"<<p->term.tel_num<<'\n'<<"…E_mail:"<<'\n'<<p->term.e_addr<<endl<<'\n';//调用重载的运算符输出}}cout<<"已保存!"<<endl;}4.6拨号功能的实现查找功能的简单延伸,代码如下:bool AddrBook::Dial(char *nam){Terms **p=Search(nam);if(Search(nam)==&ab[1]||Search(nam)==&ab[2]||Search(nam)==&ab[3]){cout<<"地址不存在!\n";return false;//指定的名字不存在时拨号失败}char c;int i=0;c=(*p)->term.tel_num[i];do{for(unsigned long int j=0;j<19999999;j++);cout<<c;c=(*p)->term.tel_num[++i];}while(c!='\0'&&i<15);cout<<"……拨号中>>"<<endl;return true;}4.7来电显示功能bool AddrBook::comeshow(){char *come=new char[25];cout<<"拨入的电话:";cin>>come;Terms **p=show(come);if(show(come)==&ab[1]||show(come)==&ab[2]||show(come)==&ab[3]) {cout<<"地址不存在!\n";return false;//指定的名字不存在时来电显示失败}char c;int i=0;c=(*p)->[i];do{for(unsigned long int j=0;j<19999999;j++);cout<<c;c=(*p)->[++i];}while(c!='\0'&&i<15);cout<<"给您来电……>>"<<endl;return true;}Terms** AddrBook::show(char *come){Terms *p,*q;for(int i=0;i<3;i++){//逐类查找q=ab[i];for(p=q->link;p!=ab[i];p=p->link){if(!strcmp(p->term.tel_num,come))//比较名字return &q->link;//相同时返回地址q=p;//用q保存前一个指针}}return &ab[i];//搜索失败时返回表头节点}4.8控制台命令实现。