模拟手机通信录管理系统

《基于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~28页

第一章:总体功能介绍

      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  总体设计勾画框架一览图

模拟手机通信录管理系统_第1张图片

2.2 设计过程

   

欢迎菜单

主菜单:

          1.添加

          2.浏览

          3.拨打

          4.修改

          5.删除

          6.查找

          7.帮助

          8.关于

          9.退出

 

注:首先向客户展示一个欢迎界面,并提醒客户输入任意键进入主菜单,在菜单中客户进行操作选择,而且客户操作完后还可以根据需求进行返回主菜单进行其他操作。

 2.3 欢迎菜单的实现:

 


 

2.4 主菜单的实现:


第三章:各功能模块的实现及调试

 

3.1 添加信息

  3.1.1 添加信息提示

   3.1.2 添加信息输入

 模拟手机通信录管理系统_第2张图片

 

 

3.1.3 添加信息提示分组情况

 3.1.4 添加信息出错(姓名/手机号/家庭电话/办公电话出现重复)提醒情况

 模拟手机通信录管理系统_第3张图片

 3.2  查看通讯录信息

3.3 拨号提示及拨打

 模拟手机通信录管理系统_第4张图片

 

 

 

3.4  修改通讯录信息

          修改后的可以对比 注意刘涛的手机号已经修改成功

 

3.5  删除通讯录信息

          

       删除李四


     

        注意观察通讯录中没有李四了

3.6  模糊查找信息(姓名中的首位/手机号的首位数)

 

姓名中的首位

显示:

手机号的首位数

 

显示如下:

 

 模拟手机通信录管理系统_第5张图片

 

3.7  帮助

 模拟手机通信录管理系统_第6张图片

 3.8  关于

 模拟手机通信录管理系统_第7张图片

第四章:调试过程中的问题

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++PrimerPlus 第五版》

第七章:附源代码

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;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()                    //浏览函数的定义
{
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";
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));}
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)                 //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();
}
voidaddresslist::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];
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";
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";
}
 
//////////////////////////////函数定义至此结束//////////////////////////////////////////////////
 
            // 模拟手机管理系统课程设计至此结束//



你可能感兴趣的:(模拟手机通信录管理系统)