C++写的书上一个简单的电话薄程序
2013-11-20 09:50
507 查看
//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 }
相关文章推荐
- 一个简单的电话本程序,支持添加和查找功能。
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析
- 一个简单的C++内存泄漏检测程序
- C++字节流与二进制字符串相互转换(一个简单的明文加解密程序)
- 一个简单关于学生成绩管理的C++程序代码,但是对于拷贝析构函数目前还是不知其作用何在
- Ubuntu下面的一个简单的C++程序——My first C++ demo in Linux
- C++反汇编揭秘1 一个简单的C++程序反汇编解析
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 一个简单的C++程序
- C++字节流与二进制字符串相互转换(一个简单的明文加解密程序)
- 一个简单的录音软件程序代码【C++】
- 一个简单封装用户命令的C++程序
- C++ Primer 5th - 1.1 编写一个简单的C++程序
- C++/Qt中一个简单的加密解密程序
- 一个简单的c/c++程序
- C++ 容器的综合应用的一个简单实例——文本查询程序
- 一个简单的C++程序及说明
- 1.1 编写一个简单的C++程序【C++ Primer中文版(第5版)】
- C++实现的一个简单的多线程程序
- C++实践笔记(二)----实现一个简单的文本查询程序