C++写的书上一个简单的电话薄程序

//TelephoneBookMain.cpp文件
#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

int MenuSelect(void);
int main()
{
	char g_choice;
	AddressBook g_maillist;
	for(;;)
	{
		//循环,直到键盘输入结束代码
		g_choice = MenuSelect();
		switch(g_choice)
		{
		case 1:
			g_maillist.Enter();
			break;
		case 2:
			g_maillist.Erase();
			break;
		case 3:
			g_maillist.List();
			break;
		case 4:
			g_maillist.Save();
			break;
		case 5:
			g_maillist.Load();
			break;
		case 6:
			exit(0);
		} 
	}
	return 0;
}
int MenuSelect(void)
{
	//显示主菜单
	char c;
	cout<<"******************************************"<<endl;
	cout<<"*     模拟电话薄       v1.0              *"<<endl;
	cout<<"*     1.添加通讯录                       *"<<endl;
	cout<<"*     2.删除通讯录                       *"<<endl;
	cout<<"*     3.显示通讯录                       *"<<endl;
	cout<<"*     4.电话薄存盘                       *"<<endl;
	cout<<"*     5.读出电话薄                       *"<<endl;
	cout<<"*     6.退出                             *"<<endl;
	cout<<"******************************************"<<endl;
	cout<<"请输入(1~6):"<<endl;
	do 
	{
		//键盘输入循环
		cin.get(c);
	} while (c < '1' || c > '6');
	return c - '0';
}


//Address.h文件
#ifndef ADDRESS_H
#define ADDRESS_H

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
// 通讯录类
class Address
{

public:
	Address(){m_status = true;}//构造时清空通讯录
	~Address(){}
	string GetName() const; 
	string GetPhone() const;
	void Enter(string &name, string &phone); //输入通讯录
	bool IsEmptry();
	void Set();  //置通讯录状态0,非空
	void Clear();//置通讯录状态1,空
private:
	char m_name[31];
	char m_phone[21];
	bool m_status;  //通讯录状态,true表示空,false表示该通讯录已经被占用
};

#endif


//AddressBook.h文件
#ifndef   ADDRESS_BOOK_H
#define  ADDRESS_BOOK_H

#include "Address.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

const int ItemNum = 100;  //通讯录最大数量
//电话薄类
class AddressBook
{
public:
	AddressBook(){m_num = 0;}//构造函数,对象创建时通讯薄为空
	~AddressBook(){}
	void Enter();   //输入通讯录条目
	void Erase();   //删除通讯录条目
	void Load();    //从文件中读取电话薄的内容
	void Save();    //电话薄存盘
	void List();    //显示电话薄的内容
private:
	int m_num;      //通讯录条目数
	Address Item[ItemNum]; //通讯录
	int FineFree(); //查找空的通讯录
};

#endif


//Address.cpp文件
#include "Address.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

string Address::GetName() const
{
	string s = m_name;
	return s;
}

string Address::GetPhone() const
{
	string s = m_phone;
	return s;
}

void Address::Enter(string &name, string &phone)
{
	int len = name.length();
	if (len > 30)   //输入超长时截断
	{
		len = 30;
	}
	name.copy(m_name, len, 0); 
	m_name[len] = 0;  //字符串结束符,把string转换成char*
	len = phone.length();
	if (len > 20)   //输入超长时截断
	{
		len = 20;
	}
	phone.copy(m_phone, len, 0);
	m_phone[len] = 0; //字符串结束符,把string转换成char*
}

bool Address::IsEmptry()
{
	return m_status;
}

void Address::Set()//置通讯录状态0,非空
{
	m_status = false;
}

void Address::Clear()//置通讯录状态1,空
{
	m_status = true;
}


//AddressBook.cpp文件
#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

int AddressBook::FineFree()
{
	int t;
	for(t=0; t<ItemNum; t++)
	{
		if (Item[t].IsEmptry())
		{
			return t;
		}
	}
	return -1; //电话薄已记满
}

void AddressBook::Enter()
{
	string name, phone;
	int pointer;
	pointer = FineFree();
	if (-1 == pointer)
	{
		cout << "电话薄已记满";
	}
	else
	{
		cout << "电话薄中有" <<  m_num << "条通信录" <<endl;
		cout << "输入姓名: ";
		cin >> name;
		cout << "输入电话号码: ";
		cin >> phone;
		Item[pointer].Enter(name, phone);
		Item[pointer].Set();
		m_num++;
	}
}

void AddressBook::Erase()
{
	int t;
	string s;
	cout << "电话薄中有" << m_num << "条通讯录" <<endl;
	if (!m_num)
	{
		cout << "电话薄已空!" <<endl;
	}
	else
	{
		cout << "输入姓名: ";
		cin >>s;
		for(t=0; t<ItemNum; t++)
		{
			if (!Item[t].IsEmptry() && Item[t].GetName() == s)
			{
				Item[t].Clear();
				m_num--;
				cout << "已经删除" << s << "的通讯录。" <<endl;
				break;
			}
		}
		if (ItemNum == t)
		{
			cout << "该名字不存在" <<endl;
			cin.get();
		}
	}
}

ostream &operator << (ostream &output, const Address &addr)
{
	//重载 << ,直接用cout输出通讯录
	output << setiosflags(ios::left) <<setw(31)
		<< addr.GetName() <<setw(21) << addr.GetPhone();
	return output;
}

void AddressBook::List()
{
	int t,i,j;
	Address list[ItemNum], temp;
	if (!m_num)
	{
		cout << "电话薄已空!" << endl;
	} 
	else
	{
		cout << "电话薄中有" << m_num << "条通讯录" <<endl;
		for(t=0; t<ItemNum; t++)
		{
			list[t] = Item[t];
		}
		for(i=0; i<ItemNum; i++)
		{
			//排序
			for(j=ItemNum - 1; j>i; j--)
			{
				if (list[j-1].GetName() > list[j].GetName())
				{
					temp = list[j-1];
					list[j-1] = list[j];
					list[j] = temp;
				}
			}
		}
		cout << setiosflags(ios::left) <<setw(31)
			<< "姓名" << setw(21) << "电话" <<endl;
		for(t=0; t<ItemNum; t++)
		{
			if (!list[t].IsEmptry())
			{
				cout << list[t] <<endl;
			}
		}
	} //end else
}

void AddressBook::Save()
{
	ofstream file;
	int i;
	char fname[41];
	cout << "输入保存的文件名: " ;
	cin >>fname;
	file.open(fname, ios::out);
	if (!file)
	{
		cout << "打开文件失败!" <<endl;
		cin.get();
	}
	else
	{
		for(i=0; i<ItemNum; i++)
		{
			if (file && !file.eof())
			{
				file.write(reinterpret_cast < const char * >(&Item[i]),sizeof(Address));
			}
		}
		file.close();
	}//end else
}

void AddressBook::Load()
{
	ifstream file;
	int i;
	char fname[41];
	cout << "输入读取的文件名: ";
	cin >> fname;
	file.open(fname, ios::in);
	if (!file)
	{
		cout << "打开文件失败!" <<endl;
		cin.get();
	} 
	else
	{
		m_num = 0;
		for (i=0; i<ItemNum; i++)
		{
			if (file && !file.eof())
			{
				file.read(reinterpret_cast <char *> (&Item[i]), sizeof(Address));
			}
			if (!Item[i].IsEmptry())
			{
				m_num++;
			}
		}
		file.close();
	}//end else
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值