《基于C++的面向对象程序设计》
题目:模拟手机通信录管理系统课程实验设计
学院:
系别:计算机工程系
专业:计算机科学与技术
班级:1320541
制作人: 学号:132054137
指导教师:完成时间:两天(12月13/14 ,周六周日)
目录
第一章:总体功能介绍
1.1 绪论及问题描述...............................................................第3页
1.2 功能介绍................................................................................第3页
1.2.1 增加功能.......................................................................第3页
1.2.2 查看功能.......................................................................第3页
1.2.3 拔号功能.......................................................................第3页
1.2.4 修改功能.......................................................................第3页
1.2.5 删除功能.......................................................................第3页
1.2.6 查找功能.......................................................................第3页
1.2.7 保存功能.......................................................................第4页
第二章:课程设计理念
2.1 总体设计勾画框架一览图.................................................第4页
2.2 设计过程..............................................................................第5页
2.3 欢迎菜单的实现..................................................................第5页
2.4 主菜单的实现......................................................................第5页
第三章:各功能模块的实现及调试
3.1 添加信息............................................................................第6页
3.1.1添加信息提示..............................................................第6页
3.1.2添加信息输入..............................................................第6页
3.1.3添加信息提示分组情况..............................................第7页
3.1.4添加信息错误提醒情况..............................................第7页
3.2 查看通讯录信息.................................................................第8页
3.3 拨号提示及拨打......./.........................................................第8页
3.4 修改通讯录信息.................................................................第9页
3.5 删除通讯录信息.................................................................第10页
3.6 模糊查找信息..................................................................第10/11/12页
3.7 帮助.....................................................................................第12页
3.8 关于.....................................................................................第12页
第四章:调试过程中的问题
4.1 程序中遇到过的问题..........................................................第13页
4.2 问题的解决与编写后的感受..............................................第13页
第五章:总结............................................................................第14页
第六章:参考文献....................................................................第15页
第七章:附源代码...................................................................第15~29页
第一章:总体功能介绍
1.1 绪论及问题描述
用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。 人员信息:姓名、手机号码、家庭电话号码、办公电话、电子邮件、分组 。基于C++6.0 dos环境设计。
(其中:手机号码、家庭电话号码、办公电话不能同时为空;分组说明: 未知、同事、亲戚、朋友、家人、同学等还可以自己创建分组)
1.2功能介绍
1.2.1 增加功能:
能录入新人员记录(当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;默认分组“未知”)
1.2.2 查看功能:
选择此功能时,当选中某类时,显示出此类所有数据中的姓名和电话号码);
1.2.3 拔号功能:
能显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字。
1.2.4 修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改。
1.2.5 删除功能:
选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
1.2.6 查找功能:
按姓名(模糊查找,如输入一个“李”,则列出所有姓李的信息)或按电话号码查找某人信息。
1.2.7 保存功能
将当前系统中各类记录存入文件中。
第二章:课程设计理念
2.1 总体设计勾画框架一览图
2.2 设计过程
欢迎菜单
主菜单:
1.添加
2.浏览
3.拨打
4.修改
5.删除
6.查找
7.帮助
8.关于
9.退出
注:首先向客户展示一个欢迎界面,并提醒客户输入任意键进入主菜单,在菜单中客户进行操作选择,而且客户操作完后还可以根据需求进行返回主菜单进行其他操作。
2.3 欢迎菜单的实现:
2.4 主菜单的实现:
第三章:各功能模块的实现及调试
3.1 添加信息
3.1.1 添加信息提示
3.1.2 添加信息输入
3.1.3 添加信息提示分组情况
3.1.4 添加信息出错(姓名/手机号/家庭电话/办公电话出现重复)提醒情况
3.2 查看通讯录信息
3.3 拨号提示及拨打
3.4 修改通讯录信息
修改后的可以对比 注意刘涛的手机号已经修改成功
3.5 删除通讯录信息
删除李四
注意观察通讯录中没有李四了
3.6 模糊查找信息(姓名中的首位/手机号的首位数)
姓名中的首位
显示:
手机号的首位数
显示如下:
3.7 帮助
3.8 关于
第四章:调试过程中的问题
4.1 程序中遇到过的问题
面对一个课程设计的诸多要求,在设计过程中一定会遇到诸多的问题。
有程序逻辑方面上的逻辑错误,语法上的错误。
主要由以下几个方面:
① 标点符号等出现错误,比较容易修改
② 类定义错误
③ 类的使用错误
④ 主函数的使用方法
⑤ 调用函数的使用方法
⑥ 非空函数的返回值
⑦ 主菜单的修改与美观
⑧ 欢迎菜单
⑨ 实现客户的来回输入
⑩ 实现客户数据输入错误提醒
11 实现工程文件的包含等
12 数据的更新
13 可视化的窗口
4.2 问题的解决与感受
问题的解决:
1) 解决问题中,仔细查找错误
2) 平时学习多问同学与老师
3) 平时学习多交流问题
4) 平时学习上网查找资料
5) 平时学习多看看书
6) 平时学习多实践实践
7)
感受:
1.在编写程序过程中需谨慎,一个好的程序员需要严谨的态度
2.C++主要靠自己的动手能力
3.多参加一些软件开发,对自己的c++有很大的好处
4.虽然实验过程中出现诸多问题,但是解决后的心情是相当不错的
5.多试验多操作
6.多交流,多问
7.有耐心有毅力,不怕失败
8.平时调试9999次不成功,你就要坚持调试10000次
第五章:总结
通过本次课程设计,以及联系到大一下学期有关《图书馆多媒体库管理系统课程设计》,能对本学期C++面向对象程序设计课程学习的知识进行了一次综合运用,巩固了所学的知识。而本次课程设计《模拟手机通讯录管理系统》与现实生活联系比较紧密,综合性也比较强,锻炼了独立思考并解决问题的能力。课程设计分为两个阶段,对于处理问题比较有层次性,即逐步深入;而课程要求也对本次试验有一定的引导作用。完成了本次试验,对于其他编程项目,不论简单、复杂,也比较容易理解、接受、尝试、解决。
虽然,本次课程设计试验的总体完成比较顺利,仅用两天时间,集中吸收了大一、大二的c++内容。对于一些数据的添加、修改、删除、查看、存档等主要功能,将是以后从事课程设计等所必需的知识。无一例外,当我们熟悉地掌握一种属于自己的方法,以不变应万变,便可以解决现实的很多问题。
当然,作为我们计算机科学与技术专业的学生,我们要善始善终,我们要时刻地明白:“纸上得来终觉浅,绝知此事要躬行。”要成为一个完美的程序员,我们需要清醒的头脑,清晰的客观逻辑,严谨的科学态度,持之以恒的耐心与毅力。“不积跬步无以至千里,不积小流无以成江海”,我们需要更多的练习,学好C++及其他语言的道路任重而道远。动手能力与逻辑思维能力至关重要。
同时衷心感谢王俊秀老师的指导,以及在学习之余中给我们带来的开心时刻!!!
第六章:参考文献
《C++程序设计》
《C++面向过程程序设计》
《C++面向对象程序设计》
《C++PrimerPlus 第五版》
第七章:附源代码
注:
① 本程序源代码已在基于windows系统VisualC++6.0DOS环境下严格通过调试。
② 通讯录中存在部分人员信息(姓名、手机号、家庭电话、办公电话等)是通过该程序录入的。
③ 该程序源代码在word的排版中均以左对齐方式予以显示,若给你带来阅读上的不便,敬请谅解。
模拟手机通讯录源代码
addresslist.Cpp
///////////////////////////主函数开始///////////////////////////////////
#include<iostream>
#include<fstream> //文件
#include"addresslist1.h"
#include<cstdlib> //清屏库文件
using namespace std;
int main()
{
system("color2f"); //控制台颜色,可控制
addresslistaddr;
addr.welcome_display(); //欢迎界面
charf;
while(1) //构造假死循环
{
addr.menu_display(); //主菜单界面
int ch;
cin>>ch;
switch(ch)
{
case 1:addr.add();break; //调用添加新信息函数
case 2:addr.skim();break; //调用浏览函数
case 3:addr.dial();break; //调用打电话函数
case 4:addr.modify();break; //调用修改信息函数
case 5:addr.deletepeople();break;//调用删除信息函数
case 6:addr.search();break; //调用查找信息函数
case 7:addr.help();break; //调用帮助函数
case 8:addr.about();break; //调用关于函数
case 0:cout<<"已安全退出该系统!\n";break;
default:cout<<"没有此操作选项"<<endl;exit(0);break;
}
cout<<"请问您是否需要返回主菜单中继续操作?(y:是;n:否)";
cin>>f;
system("cls"); //调用清屏函数,以便再次输入
if(f=='n'||f=='N')break; //判断是否结束
}
return0;
}
//////////////////////////////////////////////////////////主函数结束/////////////////////////////////////////
addresslist1.h
// addresslist1.h: interface forthe addresslist class.
//////////////////////////////////////////////////////////////////////
#if!defined(AFX_ADDRESSLIST1_H__D7290679_525E_4096_BE72_8EDF12890437__INCLUDED_)
#defineAFX_ADDRESSLIST1_H__D7290679_525E_4096_BE72_8EDF12890437__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class addresslist //定义addresslist类
{
private:
char name[20]; //定义私有变量:姓名
char phone[20]; //定义私有变量:电话
char homephone[20]; //定义私有变量:家庭电话
char officephone[20]; //定义私有变量:办公电话
char email[20]; //定义私有变量:Email
char group[20]; //定义私有变量:分组
public:
addresslist(); //声明构造函数
virtual ~addresslist();//声明析构函数
void welcome_display();//声明欢迎界面函数
void menu_display(); //声明主菜单显示函数
void add(); //声明增加信息函数
void skim(); //声明浏览信息函数
void dial(); //声明拨打电话信息函数
void modify(); //声明修改信息函数
void deletepeople(); //声明删除信息函数
void search(); //声明查询信息函数
void help(); //声明帮助信息函数
void about(); //声明关于信息函数
};
#endif //!defined(AFX_ADDRESSLIST1_H__D7290679_525E_4096_BE72_8EDF12890437__INCLUDED_)
addresslist1.cpp
// addresslist1.cpp:implementation of the addresslist class.
///////////////////////手机通讯录系统////////////////////////////////////////
#include<windows.h> //调用Sleep延长时间函数库文件
#include"addresslist1.h"
#include<ctime> //调用系统当前日期时间
#include<fstream>
#include<string>
#define max 1000 //通讯录最大容量1000人
#include<iostream>
using namespace std;
/////////////////////////////函数等的定义开始////////////////////////////////
addresslist people[max];
int count=0; //初始化当前通讯录的信息数
addresslist::addresslist() //默认全为0
{
strcpy(people[0].name,"0");
strcpy(people[0].phone,"0");
strcpy(people[0].homephone,"0");
strcpy(people[0].officephone,"0");
strcpy(people[0].email,"0");
strcpy(people[0].group,"0");
}
addresslist::~addresslist() //析构函数
{
}
voidaddresslist::welcome_display() //欢迎界面函数的定义
{
cout<<"\n";
cout<<" ********************欢迎界面******************** \n\n";
cout<<"*******************欢迎进入手机通讯录管理系统*********************\n\n";
cout<<" ******* 该简易系统制作者: 刘创 *********** \n\n";
cout<<" ******* 制作日期:2014年12月12周五 *********** \n\n";
cout<<" ******* 请按任意键进入主菜单……… *********** \n\n";
cout<<"******************************************************************\n ";
while(getchar()==0);
system("cls");
}
voidaddresslist::menu_display() //主菜单界面函数的定义
{
time_t t;
time(&t); //当前登录系统时间显示
cout<<" 当前登陆系统时间是: "<<ctime(&t)<<endl;
cout<<" ************************************************\n";
cout<<"*******************手机通讯录管理系统主菜单***********************\n";
cout<<" ******* >> 1.添加新通讯信息<< ******** \n";
cout<<" ******* 2.查看通讯录信息 ******** \n";
cout<<" ******* 3.拨号 ******** \n";
cout<<" ******* 4.修改通讯录信息 ******** \n";
cout<<" ******* 5.删除通讯录信息 ******** \n";
cout<<" ******* 6.查找通讯录信息 ******** \n";
cout<<" ******* 7.帮助 ******** \n";
cout<<" ******* 8.关于 ******** \n";
cout<<" ******* 0.退出 ******** \n";
cout<<" *******请输入数字:(0~8)进行选择操作 ******** \n";
cout<<"******************************************************************\n";
}
void addresslist::add() //添加信息函数的定义,其中添加函数最为复杂,需要全面考虑
{
system("cls"); //清屏
ofstreamoutfile("addresslist.txt",ios::binary);//本程序均采用二进制存档,文件为addresslist.txt
if(!outfile)
{cerr<<"打开错误!"<<endl;
abort();
}
ifstreaminfile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));
}
i=count; //从文件中读取count,并赋给i,以便存档
cout<<"\n************************新信息开始录入*********************\n请依次按下面顺序输入新通讯录的信息";
cout<<"(注:手机号,家庭电话,办公电话不能同时为空\n";
cout<<"且不填信息时以'0'结束进行下一个信息输入(以空格隔开信息,分组在之后操作)\n";
cout<<"姓名 \t手机号 \t家庭电话\t办公电话\t电子邮件\n";
cin>>people[i].name>>people[i].phone;
cin>>people[i].homephone>>people[i].officephone;
cin>>people[i].email;
if(i==0) //如果当前通讯录时空的话,则i=count==0,就直接存档;
{
cout<<"现在开始进行分组\n(注:在分组中有1.未知 2.同事3.亲戚 4.朋友5.家人 6.同学7.默认 8.自己创建分组)\n";
cout<<"请输入你的选项(1~8)进行分组\n";//实现客户对分组的选择输入
int c;
cin>>c;
switch(c) //分组选择在这里目的是:如果客户输入重复数据时,就不用对数据进行分组了
{
case1:strcpy(people[i].group,"未知");break;
case2:strcpy(people[i].group,"同事");break;
case3:strcpy(people[i].group,"亲戚");break;
case4:strcpy(people[i].group,"朋友");break;
case5:strcpy(people[i].group,"家人");break;
case6:strcpy(people[i].group,"同学");break;
case7:strcpy(people[i].group,"未知");break;
case 8:cout<<"请输入你要新建分组的名字:\n";cin>>people[i].group;break;
default:cout<<"你输入的操作选项错误!\n";
}
count++; //当存完档后count+1;
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
outfile.close();
}
else
{
for(int g=0;g<i;g++) //当当前通讯录人数不为零时,判断用户输入的姓名是否重复
{
if(!(strcmp(people[g].name,people[i].name)))//判断名字是否相等
{
cout<<"你存储的姓名已存在!此项信息录入取消\n";
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
outfile.close();break;
}
}
for(int k=0;k<i;k++) //判断用户输入的手机号是否重复
{
if(!(strcmp(people[k].phone,people[i].phone)))
{
cout<<"你存储的手机号已存在!此项信息录入取消\n";
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
outfile.close();break;
}
}
for(int l=0;l<i;l++) //判断用户输入的家庭电话是否重复
{
if(!(strcmp(people[l].homephone,people[i].homephone)))
{
cout<<"你存储的家庭电话已存在!此项信息录入取消\n";
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
outfile.close();break;
}
}
for(int m=0;m<i;m++) //判断用户输入的办公电话是否重复
{
if(!(strcmp(people[m].officephone,people[i].officephone)))
{
cout<<"你存储的办公电话已存在!此项信息录入取消\n";
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
outfile.close();break;
}
}
if(g==i&&k==i&&l==i&&m==i) //当客户输入的姓名,手机号,家庭电话,办公电话不重复时才可以
//把数据输入文件
{
cout<<"现在开始进行分组\n(注:在分组中有1.未知 2.同事3.亲戚 4.朋友5.家人 6.同学7.默认 8.自己创建分组)\n";
cout<<"请输入你的选项(1~8)进行分组\n";//实现客户对分组的选择输入
int c;
cin>>c;
switch(c) //分组选择在这里目的是:如果客户输入重复数据时,就不用对数据分组了,同上
{
case1:strcpy(people[i].group,"未知");break;
case2:strcpy(people[i].group,"同事");break;
case3:strcpy(people[i].group,"亲戚");break;
case4:strcpy(people[i].group,"朋友");break;
case5:strcpy(people[i].group,"家人");break;
case6:strcpy(people[i].group,"同学");break;
case7:strcpy(people[i].group,"未知");break;
case 8:cout<<"请输入你要新建分组的名字:\n";cin>>people[i].group;break;
default:cout<<"你输入的操作选项错误!\n";
}
count++; //当存完档后count+1;
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
cout<<"数据保存成功!";
outfile.close(); //关闭文件
}
}
infile.close(); //关闭文件
} //添加函数结束
void addresslist::skim() //浏览函数的定义
{
ifstream infile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<=count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));}
system("cls");
cout<<"***********************通讯录所有人的信息(姓名与电话)***********************\n";
cout<<"\t姓名 \t\t手机号\t\t\t家庭电话 \t\t办公电话\n";
for( i=0;i<count;i++)
{
cout<<"\t"<<people[i].name<<"\t\t"<<people[i].phone<<"\t\t"<<people[i].homephone<<"\t\t"<<people[i].officephone<<"\n";
}
cout<<"****************************************************************************\n";
infile.close();
}
void addresslist::dial() //模拟打电话函数的定义
{
char a[20]; //定义临时变量
ifstreaminfile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<=count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));}
system("cls");
cout<<"\n******************通讯录所有人的姓名信息(5人一行罗列)**********************\n";
for( i=0;i<count;i++)
{
cout<<"\t"<<people[i].name;
if((i+1)%5==0||i==count-1) //5个人一行进行罗列
cout<<"\n";
}
cout<<"**************************************************************\n";
cout<<"请选择输入上面通讯录中的一个姓名来拨打电话:\n";
cin>>a; //客户输入要拨打电话的姓名
for(i=0;i<=count;i++)
{
if(!(strcmp(a,people[i].name))) //判断客户输入的姓名是否在通讯录中
{
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"\t你正在向"<<people[i].name<<"拨打电话(默认为手机号)\n \t\t";
for(intj=0;j<strlen(people[i].phone);j++)
{
Sleep(500); //延长500毫秒即0.5秒的时间
cout<<people[i].phone[j];
}
cout<<"\n\t电话正在拨通中请稍候………\n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
}
}
infile.close();
}
void addresslist::modify() //修改函数的定义
{
char a[20]; //定义临时变量,同上
ifstreaminfile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<=count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));}
ofstream outfile("addresslist.txt",ios::binary);
if(!outfile)
{cerr<<"打开错误!"<<endl;
abort();
}
system("cls");
cout<<" ****************通讯录修改信息******************* \n";
cout<<"******************通讯录中所有人的姓名信息**********************\n";
for( i=0;i<count;i++)
{
cout<<"\t"<<people[i].name;
if((i+1)%5==0||i==count-1) //5人信息一行进行罗烈
cout<<"\n";
}
cout<<"**************************************************************\n";
cout<<"请选择输入上面通讯录中的一个姓名来修改信息:\n";
cin>>a; //输入上面通讯录中的一个姓名来修改信息
system("cls");
for(i=0;i<count;i++)
{
if(!(strcmp(a,people[i].name))) //判断输入的姓名是否在通讯录中
{
cout<<" *************"<<people[i].name<<"的所有信息如下**************\n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"\t手机号\t家庭电话\t办公电话\t电子邮件\t分组\n";
cout<<"\t"<<people[i].phone<<"\t"<<people[i].homephone<<"\t"<<people[i].officephone;
cout<<"\t"<<people[i].email<<"\t"<<people[i].group<<endl;
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"1.姓名 2.手机号3.家庭电话 4.办公电话5.电子邮件 6.分组\n";
cout<<"请输入1~6进行数据选择性修改\n";
int b;
cin>>b;
char c[20];
switch(b) //switch函数进行客户选择修改的内容
{
case 1:cout<<"请输入新的姓名:";cin>>c;strcpy(people[i].name,c);break;
case 2:cout<<"请输入新的手机号:";cin>>c;strcpy(people[i].phone,c);break;
case 3:cout<<"请输入新的家庭电话:";cin>>c;strcpy(people[i].homephone,c);break;
case 4:cout<<"请输入新的办公电话:";cin>>c;strcpy(people[i].officephone,c);break;
case 5:cout<<"请输入新的电子邮件:";cin>>c;strcpy(people[i].email,c);break;
case 6:cout<<"请输入新的分组:";cin>>c;strcpy(people[i].group,c);break;
default:cout<<"你输入的操作选项错误!\n";
}
}
}
for(int j=0;j<count;j++)
{outfile.write((char*)&people[j],sizeof(people[j]));
outfile.write((char*)&count,sizeof(count));
}
cout<<"数据修改保存成功!";
outfile.close();
infile.close();
}
void addresslist::deletepeople() //删除信息函数的定义
{
char a[20]; //临时变量定义,同上
ifstreaminfile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<=count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));}
ofstreamoutfile("addresslist.txt",ios::binary);
if(!outfile)
{cerr<<"打开错误!"<<endl;
abort();
}
system("cls");
cout<<" ****************通讯录删除信息******************* \n";
cout<<"******************通讯录中所有人的姓名信息(五人一行罗列)****************\n";
for( i=0;i<count;i++)
{
cout<<"\t"<<people[i].name;
if((i+1)%5==0||i==count-1) //五人一行进行罗列
cout<<"\n";
}
cout<<"**************************************************************\n";
cout<<"请选择输入上面通讯录中的一个姓名进行删除信息:\n";
cin>>a;
system("cls");
int j;
for(i=0;i<count;i++)
{
if(!(strcmp(a,people[i].name))) //判断哪个符合进行删除
{
for(j=i+1;j<count;j++)
{
strcpy(people[j-1].name,people[j].name);
strcpy(people[j-1].phone,people[j].phone);
strcpy(people[j-1].homephone,people[j].homephone);
strcpy(people[j-1].officephone,people[j].officephone);
strcpy(people[j-1].email,people[j].email);
strcpy(people[j-1].group,people[j].group);
}
count--; //删除信息时,要把个数-1;进行存档
break;
}
}
for(int k=0;k<count;k++)
{outfile.write((char*)&people[k],sizeof(people[k]));
outfile.write((char*)&count,sizeof(count));
}
cout<<"\t\t数据删除成功!\n";
outfile.close();
infile.close();
}
void addresslist::search() //查找信息函数的定义
{
char a[3];
ifstream infile("addresslist.txt",ios::binary);
if(!infile)
{cerr<<"打开错误!"<<endl;
abort();
}
for(int i=0;i<=count;i++)
{infile.read((char*)&people[i],sizeof(people[i]));
infile.read((char*)&count,sizeof(count));}
system("cls");
cout<<"********************查找通讯录信息*******************\n";
cout<<"\t 1.模糊查找 2.手机号码\n\t 请输入数字(1或2)进行查找信息:\n";
int b;
cin>>b;
if(b==1) //实现客户模糊查找(1.姓2.手机号第一位)
{
cout<<"请输入你要查找信息的姓(1个汉字):\n";
cin>>a;
cout<<"*****************所有符合此(姓)的信息*******************\n";
cout<<"\t姓名\t手机号码\t家庭电话\t办公电话\t电子邮件\t分组\n";
for(i=0;i<count;i++) //模糊查找相同的全部列出来
{ char c[3]; //定义一个临时字符数组,且初始化如下
c[0]=people[i].name[0];
c[1]=people[i].name[1];
c[2]='\0'; //这样就可以模糊查找
if(!(strcmp(&a[0],c))) //模糊查找中
{
cout<<"\t"<<people[i].name<<"\t"<<people[i].phone;
cout<<"\t"<<people[i].homephone<<"\t"<<people[i].officephone;
cout<<"\t"<<people[i].email<<"\t"<<people[i].group<<endl;
}
}
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"所有符合的信息查找完毕!";
}
else //数字模糊查找,类似于上面
{
cout<<"请输入你要模糊查找信息手机号码(1个数字):\n";
cin>>a;
cout<<"*****************所有符合手机号的信息*******************\n";
cout<<"\t姓名\t手机号码\t家庭电话\t办公电话\t电子邮件\t分组\n";
for(i=0;i<count;i++)
{
char d[2];
d[0]=people[i].phone[0];
d[1]='\0';
if(!(strcmp(&a[0],d)))
{
cout<<"\t"<<people[i].name<<"\t"<<people[i].phone;
cout<<"\t"<<people[i].homephone<<"\t"<<people[i].officephone;
cout<<"\t"<<people[i].email<<"\t"<<people[i].group<<endl;
}
}
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"所有符合的信息查找完毕!";
}
infile.close();
}
void addresslist::help() //帮助界面函数的定义
{
system("cls");
cout<<"\n";
cout<<" ********************帮助******************** \n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"%% %%\n";
cout<<"%% 基于C++面向对象大二上学期课程设计 %%\n";
cout<<"%% 课设主题: 模拟手机通信录管理系统 %%\n";
cout<<"%% help: %%\n";
cout<<"%% 在该简易系统中,客户可以实现对手机电话簿的管理操作 %%\n";
cout<<"%% 1.新信息的输入,及添加功能 %%\n";
cout<<"%% 2.浏览查看功能(可以显示所有人的姓名,电话) %%\n";
cout<<"%% 3.拨号功能(在这里采用了500毫秒的暂停以实现拨号界面) %%\n";
cout<<"%% 4.在模糊查找信息时,客户需要注意只能输入一个汉字或一个数字%%\n";
cout<<"%% 5.在修改信息时,应注意可以返回再进行修改其他的信息 %%\n";
cout<<"%% 6.本程序均采用二进制存档,存档文件为addresslist.txt %%\n";
cout<<"%% 客服联系电话:15835131937 %%\n";
cout<<"%% %%\n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
}
void addresslist::about() //关于界面函数的定义
{
system("cls");
cout<<"\n";
cout<<" ********************关于******************** \n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
cout<<"%% %%\n";
cout<<"%% 基于C++面向对象大二上学期课程设计 %%\n";
cout<<"%% 课设主题: 模拟手机通信录管理系统 %%\n";
cout<<"%% 该简易系统制作者: 刘创 %%\n";
cout<<"%% 指导老师 :王俊秀 %%\n";
cout<<"%% 制作日期:2014年12月12周五 %%\n";
cout<<"%% 制作地点:太原工业学院 %%\n";
cout<<"%% @版权所有 %%\n";
cout<<"%% 客服联系电话:15835131937 %%\n";
cout<<"%% %%\n";
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
}
//////////////////////////////函数定义至此结束//////////////////////////////////////////////////
// 模拟手机管理系统课程设计至此结束//