模拟手机通讯录管理系统

《基于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";

}

 

//函数定义至此结束//

 

            // 模拟手机管理系统课程设计至此结束//

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学校实验周的编程题目之一,大神都是自己编自然看不上,所以就给有需要的人看看。 下面是题目要求: 系统模拟手机通信录管理系统实现对手机中的通信录进行管理。提供以下几个基本功能: (1)查看功能:选择此功能时,列出下列三类选择。 A:办公类 B:个人类 C:商务类 (2)当选中某类时,显示出此类所有数据中的姓名电话号码、单键拨号号码。 (3)添加数据功能:能录入新数据,每个结点包括:姓名电话号码、分类(可能选项有:A为办公类 B为个人类 C为商务类)、电子邮件、单键拨号号码。例如: 杨春 13589664454 商务类 chuny@126.com 0 姓名电话号码不能同时相同,如果发生这种情况,需要提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号;单键拨号号码可以为空,但是不能设置为相同的数字。 (4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。 (5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。 (6)拔号功能:当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字;当输入单键拨号号码时,屏幕上显示被叫用户的姓名及完整电话号码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值