#include "stdafx.h"
#include "CAddressBook.h" //包含定义类的头文件
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CAddressBook Add[15]; //声明长度为15的CAddressBook对象数组用于保存数据
int nflag = 0; //命令标记
bool bflag = false; //查找标记
int edit_flag = 0; //编辑命令标记
int ncount = 0; //用于记录同类联系人个数
string tar_name; //查找目标姓名
string tar_sort; //目标类别名
ifstream filein; //文件输入流
ofstream fileout; //文件输出流
//从磁盘文件中读取数据
//二进制形式读取
filein.open("Data.txt",ios::binary);
//判断文件是否打开成功
if(!filein)
{
abort();
}
//使用read操作读取数据
for (int i = 0; filein.read((char*)&Add[i],sizeof(CAddressBook)); i++)
{
CAddressBook::m_ncount ++; //计数器自增
}
//关闭文件
filein.close();
cout << "读入数据成功!" << endl;
//显示主菜单
while(1)
{
cout << endl << endl << "欢迎使用通讯录管理系统" << endl;
cout << "1.查看联系人列表\n2.新联系人\n3.编辑联系人\n4.退出系统" << endl;
cout << "请输入命令序号:";
cin >> nflag;
//命令处理
switch(nflag)
{
case 1:
cout << "请选择输出的类型名:" << endl;
cout << "1.办公类\t2.个人类\t3.商务类" << endl;
cin >> edit_flag;
switch(edit_flag)
{
case 1:
tar_sort = "办公类";
break;
case 2:
tar_sort = "个人类";
break;
case 3:
tar_sort = "商务类";
break;
default:
cout << "您输入的数据有误!" << endl;
}
for (int i = 0, ncount = 0; i < CAddressBook::m_ncount; i++)
if (Add[i].GetSort() == tar_sort)
{
Add[i].Show();
ncount++;
}
cout << "已显示该类全部共" << ncount << "位联系人" << endl;
break;
case 2:
//判断数据库是否有剩余空间
if(CAddressBook::m_ncount >= 15)
{
cout << "添加失败!数据库已满,无法录入更多数据!";
}
else
{
Add[CAddressBook::m_ncount].Set();
//重置查找标记
nflag = true;
//检查是否重复录入
for(int i = 0; i < CAddressBook::m_ncount; i++)
{
if(Add[i] == Add[CAddressBook::m_ncount])
{
cout << "添加失败!数据录入重复!" << endl;
nflag = false;
break;
}
}
if(nflag)
{
CAddressBook::m_ncount++; //计数器自增
//冒泡法实现排序功能
for (int i = CAddressBook::m_ncount; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (Add[j].GetName() > Add[j+1].GetName())
{
CAddressBook temp = Add[j];
Add[j] = Add[j+1];
Add[j+1] = temp;
}
}
}
//编号
for (int i = 0; i < CAddressBook::m_ncount; i++)
{
Add[i].SetNum(i);
}
cout << "添加成功!当前列表中共有" << CAddressBook::m_ncount << "位联系人" << endl;
}
}
break;
case 3:
cout << "请输入联系人姓名:";
cin >> tar_name;
bflag = false; //重置查找标记
for (int i = 0; i < CAddressBook::m_ncount; i++)
{
if (Add[i].GetName() == tar_name)
{
bflag = true;
cout << "找到联系人!请选择下一步操作!" << endl;
cout << "1.修改联系人信息\t2.删除联系人" << endl;
cin >> edit_flag;
switch(edit_flag)
{
case 1:
Add[i].Set();
cout << "修改成功!" << endl;
break;
case 2:
for (int j = i; j < CAddressBook::m_ncount-1; j++)
{
Add[j] = Add[j+1]; //后续条目前移
Add[j].SetNum(j); //修改编号
}
CAddressBook::m_ncount --; //计数器自减
cout << "删除成功!" << endl;
break;
default:
cout << "您输入的命令有误!" << endl;
}
}
}
if (!bflag)
{
cout << "未找到联系人!" << endl;
}
break;
case 4:
//将数据保存在磁盘文件
fileout.open("Data.txt",ios::binary);
if(!fileout)
{
abort();
}
for (int i = 0; i < CAddressBook::m_ncount; i++)
fileout.write((char*)&Add[i], sizeof(CAddressBook));
fileout.close();
cout << "数据已成功保存!任意键退出..." << endl;
exit(0);
break;
default:
cout << "您输入的命令有误!" << endl;
}
}
return 0;
}
#include "CAddressBook.h" //包含定义类的头文件
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CAddressBook Add[15]; //声明长度为15的CAddressBook对象数组用于保存数据
int nflag = 0; //命令标记
bool bflag = false; //查找标记
int edit_flag = 0; //编辑命令标记
int ncount = 0; //用于记录同类联系人个数
string tar_name; //查找目标姓名
string tar_sort; //目标类别名
ifstream filein; //文件输入流
ofstream fileout; //文件输出流
//从磁盘文件中读取数据
//二进制形式读取
filein.open("Data.txt",ios::binary);
//判断文件是否打开成功
if(!filein)
{
abort();
}
//使用read操作读取数据
for (int i = 0; filein.read((char*)&Add[i],sizeof(CAddressBook)); i++)
{
CAddressBook::m_ncount ++; //计数器自增
}
//关闭文件
filein.close();
cout << "读入数据成功!" << endl;
//显示主菜单
while(1)
{
cout << endl << endl << "欢迎使用通讯录管理系统" << endl;
cout << "1.查看联系人列表\n2.新联系人\n3.编辑联系人\n4.退出系统" << endl;
cout << "请输入命令序号:";
cin >> nflag;
//命令处理
switch(nflag)
{
case 1:
cout << "请选择输出的类型名:" << endl;
cout << "1.办公类\t2.个人类\t3.商务类" << endl;
cin >> edit_flag;
switch(edit_flag)
{
case 1:
tar_sort = "办公类";
break;
case 2:
tar_sort = "个人类";
break;
case 3:
tar_sort = "商务类";
break;
default:
cout << "您输入的数据有误!" << endl;
}
for (int i = 0, ncount = 0; i < CAddressBook::m_ncount; i++)
if (Add[i].GetSort() == tar_sort)
{
Add[i].Show();
ncount++;
}
cout << "已显示该类全部共" << ncount << "位联系人" << endl;
break;
case 2:
//判断数据库是否有剩余空间
if(CAddressBook::m_ncount >= 15)
{
cout << "添加失败!数据库已满,无法录入更多数据!";
}
else
{
Add[CAddressBook::m_ncount].Set();
//重置查找标记
nflag = true;
//检查是否重复录入
for(int i = 0; i < CAddressBook::m_ncount; i++)
{
if(Add[i] == Add[CAddressBook::m_ncount])
{
cout << "添加失败!数据录入重复!" << endl;
nflag = false;
break;
}
}
if(nflag)
{
CAddressBook::m_ncount++; //计数器自增
//冒泡法实现排序功能
for (int i = CAddressBook::m_ncount; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (Add[j].GetName() > Add[j+1].GetName())
{
CAddressBook temp = Add[j];
Add[j] = Add[j+1];
Add[j+1] = temp;
}
}
}
//编号
for (int i = 0; i < CAddressBook::m_ncount; i++)
{
Add[i].SetNum(i);
}
cout << "添加成功!当前列表中共有" << CAddressBook::m_ncount << "位联系人" << endl;
}
}
break;
case 3:
cout << "请输入联系人姓名:";
cin >> tar_name;
bflag = false; //重置查找标记
for (int i = 0; i < CAddressBook::m_ncount; i++)
{
if (Add[i].GetName() == tar_name)
{
bflag = true;
cout << "找到联系人!请选择下一步操作!" << endl;
cout << "1.修改联系人信息\t2.删除联系人" << endl;
cin >> edit_flag;
switch(edit_flag)
{
case 1:
Add[i].Set();
cout << "修改成功!" << endl;
break;
case 2:
for (int j = i; j < CAddressBook::m_ncount-1; j++)
{
Add[j] = Add[j+1]; //后续条目前移
Add[j].SetNum(j); //修改编号
}
CAddressBook::m_ncount --; //计数器自减
cout << "删除成功!" << endl;
break;
default:
cout << "您输入的命令有误!" << endl;
}
}
}
if (!bflag)
{
cout << "未找到联系人!" << endl;
}
break;
case 4:
//将数据保存在磁盘文件
fileout.open("Data.txt",ios::binary);
if(!fileout)
{
abort();
}
for (int i = 0; i < CAddressBook::m_ncount; i++)
fileout.write((char*)&Add[i], sizeof(CAddressBook));
fileout.close();
cout << "数据已成功保存!任意键退出..." << endl;
exit(0);
break;
default:
cout << "您输入的命令有误!" << endl;
}
}
return 0;
}