您的位置:首页 > 编程语言 > C语言/C++

C++学习之电话薄功能(类的简单应用)

2014-09-21 21:15 435 查看
本篇我们讨论一个小程序:实现电话薄简单功能。(一条语句最好一个作用)

问题描述 :

a) : 实现电话添加记录功能;(电话重复的视为同一人,不予增添);即电话号码唯一。

b) : 删除记录功能;(实现提醒功能:确认是否要真的删除)

c) : 查询记录功能;(按手机号码查询);

待优化功能:

1) :每次启动程序都为空。故可以先从文件读取若干项至vector中;readfile功能。

2) :没有提供修改记录的功能;比如某人的电话号码或者住址改了。(先按照号码查询,然后按要求修改之即可。);

3) :每次需将改动的记录写回文件。writetofile();

4) : 每次add、search、delete都必须遍历容器vector。是否有方法改进?

头文件:

//一条语句最多一个作用
#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <sstream>
#include <stdexcept>
using namespace std;


类:

class Item
{
public:
Item()
:name_(""), num_(0), address_("")
{}
Item(string name, int num,  string address)
:name_(name), num_(num), address_(address)
{}

void get(string name, int num, string address)
{
name_ = name ;
num_ = num ;
address_ = address ;
}

string getName()const
{
return name_ ;
}

int getNum()const
{
return num_;
}

string getAddress()const
{
return address_ ;
}

void showitem()
{
cout<< "姓名: " << name_ << endl;
cout<< "电话号码: "<<num_ << endl ;
cout <<"住址: "<< address_ << endl ;
}

private:
string name_ ;
int num_ ;
string address_ ;
};


3个全局 函数声明 及其 实现功能:

void addItem( vector<Item> &vec);//实现连续添加(如果已存在,则略过)。
void searchItem( vector<Item> &vec);//实现按号码查询。
void delItem( vector<Item> &vec);//实现删除。


main函数:

功能:提供一个简单界面。不同数字实现不同功能。

int main(int argc, const char *argv[])
{
vector<Item> vec ;
int tmp ;
int cnt = 0 ;//标记输入错误总次数
while(1)
{
system("clear");
cout<< "1、添加 2、查询 3、删除 0、退出" << endl ;
cin >> tmp ;
switch(tmp)
{
case 1:
addItem(vec);
break ;
case 2:
searchItem(vec);
break ;
case 3:
delItem(vec);
break ;
case 0:
exit(0);
default:
if(cnt < 5)//输入错误五次,则退出程序
{
cout << "the number of your input is illegal, please input once more:"<< endl;
cnt++ ;
cin >> tmp ;
}else
exit(0);
break;
}
}
return 0;
}


additem:

void addItem( vector<Item> &vec)
{
char flag = 'y';
string name, address ;
int num ;
Item person ;
while(flag == 'y')
{
// system("clear");
cout << "please input name:" << endl ;
cin >> name ;
cout << "please input telephone number:" << endl ;
cin >> num ;

cout <<"please input address:" << endl ;
cin >> address ;

int tmp = 0 ;//标记查找成功没有
for(vector<Item>::iterator it = vec.begin();
it != vec.end();
++it)
{
if(num == it->getNum())//已经存在该item了。
{
cout << "the num is already exist!" << endl ;
tmp = 1 ;
break ;
}
}
if(tmp == 1)//如果已经存在,则不添加。
goto done;
person.get(name, num, address);
vec.push_back(person);

person.showitem();
cout << "add success!" << endl ;

done:
cout << "continue to add item or not?(y/n)";

cin >> flag ; // 只需要输入即可,while自己会判断条件。
}
}


searchitem:

void searchItem( vector<Item> &vec)
{
char flag = 'y';
int num ;
while(flag == 'y')
{
cout << "please input search number:" << endl ;
cin  >> num ;

vector<Item>::iterator it = vec.begin();
while(it != vec.end())
{
if(num == it->getNum())
{
cout << "search success!" << endl ;
it->showitem();
break ;
}
it++ ;
}
if(it == vec.end())
cout << "search failure!" << endl ;
cout << "continue to search?(y/n)";
cin >> flag ;
}
}


deleteitem:

void delItem( vector<Item> &vec)
{
int num ;
char flag ='y';
while(flag == 'y')
{
cout << "input the number that you want to delete:" << endl ;
cin >> num ;

vector<Item>::iterator it = vec.begin();
while(it != vec.end())
{
if(num == it->getNum())
{
it->showitem();
string tmp  ;
cout << "Do you really want to delete this item?(yes/no)" << endl ;

cin >> tmp ;
if(tmp == "yes")//是否确定要删除该item
{
it = vec.erase(it);
cout << "delete success!" << endl ;
}
break ;
}
it ++ ;
}
if(it == vec.end())
{
cout << "The number is not exist!" << endl ;
}
cout<< "continue to delete?(y/n)" << endl ;

cin >> flag ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: