night tree 2016-06-29 15:18 采纳率: 0%
浏览 1174

用vc++6.0做通讯录出现问题

#include < iostream>
#include < iomanip>
#include < fstream>
#include < string>
#include < cstdlib>
#include"utility.h"
using namespace std;
struct TelephoneType
{ //电话结构
bool delTag; //删除标志
unsigned int seat; //序号
char name[16]; //姓名
char teleNo[18]; //电话号码
};
//电话号码簿类的声明
class TelephoneBook{
private:
//数据成员
fstream file; //电话号码簿文件
//辅助函数

public:
//构造函数,析构函数与方法
TelephoneBook(); //无参构造函数
virtual ~TelephonrBook(){file.close(); //析构函数
void Run(); //处理电话号码簿
void AddData(); //增加数据
void UpdateData(); //更新数据
void SearchData(); //查询数据
void DeleteData(); //删除数据,制作删除标志
void pack(); //在物理上删除作有删除标志的记录
};

TelephoneBook::TelephoneBook() //无参构造函数
{
ifstream iFile("telph.dat"); //建立输入文件
if(iFile.fail())
{ //打开文件失败,表示不存在文件
ofstream oFile("telph.dat"); //建立输出文件
if(oFile.fail()) throw("打开文件失败!"); //抛出异常
oFile.close(); //关闭文件
}
else
{ //存在文件
iFile.close(); //关闭文件
}
//在构造函数中,应以读写二进制方式打开数据文件,具体语句为

file.open("telph.dat",ios::in|ios::out|ios::binary);        //以读写方式打开文件
if(file.fail()) throw("打开文件失败!");                    //抛出异常

}

void TelephoneBook::AddData() //增加数据
{
TelephoneType telph; //电话号码记录
telph.delTag=flase; //正常,未作删除标记
do
{
cout<<"输入序号:";
cin>>telph.seat; //输入序号
cout<<"输入姓名:";
cin>>telph.name; //输入姓名
cout<<"输入电话号码:";
cin>>telph.teleNO; //输入电话号码
file.write((char*)&telph,sizeof(TelephoneType)); //写入文件
cout<<"继续添加吗?";
}
while(UserSaysYes()); //肯定回答时循环
}

void TelephoneBook::UpdateData() //更新数据
{
TelephoneType telph; //电话号码结构
unsigned int seat; //序号
cout<<"输入要更新电话序号:";
cin>>seat; //输入序号
file.seekg(0); //定位
file.read((char*)&telph,sizeof(TelephoneType)); //读记录
while(!file.eof())
{ //文件未结束
if(telph.seat==seat //序号相同
&&!telph.delTag) //记录正常,未作删除标识
break; //查询成功
file.read((char*)&telph,sizeof(TelephoneType)); //读记录
}
if(!file.eof())
{ //查询成功
cout< //输出记录
cout cout cin>>telph.seat; //输入序号
cout<<"输入姓名:";
cin>>telph.name; //输入姓名
cout<<"输入电话号码:";
cin>>telph.teleNO; //输入电话号码
file.seekg(-sizeof(TelephoneType),ios::cur); //定位
file.write((char*)&telph,sizeof(TelephoneType)); //写入记录
}
else
{ //查询失败
cout<<"无此序号的记录!";
file.clear(); //清除文件结束标志
file.seekg(0); //定位
file.read((char*)&telph,sizeof(TelephoneType)); //读记录
}
}

void TelephoneBook::SearchData()
{
TelephoneType telph;
unsigned int seat;
cout<<"输入要查询的电话的序号";
cin>>seat;
while(!file.eof())
{ //文件未结束
if(telph.seat==seat //序号相同
&&!telph.delTag) //记录正常,未作删除标识
break; //查询成功
file.read((char*)&telph,sizeof(TelephoneType)); //读记录
}
if(!file.eof())
{ //查询成功
cout<<setw(18)<<telph.seat<<setw(18)<<telph.name<<setw(18)<<telph.teleNo<<endl;
//输出记录
}
else
{ //查询失败
cout<<"无此序号的记录!";
file.clear(); //清除文件结束标志
}
}

void TelephoneBook::DeleteData() // 删除数据只作删除标志
{
TelephoneType telph; //电话号码结构
unsigned int seat; //序号
cout<<"输入要删除电话的序号:";
cin>>seat; //输入序号
file.seekt(0); //定位
file.read((char )&telph,sizeof(TelephoneType)); //读记录
while (!file.eof())
{ //文件未结束
if (telph.seat==seat //序号相同
&&!telph.delTag) //记录正常,未作删除标识
break; //查询成功

file.read((char
)&telph,sizeof(TelephoneType)); //读记录
}
if (!file.eof())
{ //查询成功
cout<<"被删除记录为:"<<endl;
cout<<setw(18)<<telph.seat<<setw(18)<<telph.name<<setw(18)<<telph.teleNo<<endl;
//输出记录
telph.delTag=true; //删除标志
file.seekg(-sizeof(TelephoneType),ios::cur); //定位
file.write((char*)&telph,sizeof(TelephoneType)); //写入记录
cout<<"删除成功!"<<endl;
}
else
{ //查询失败
cout<<"删除失败!"<<endl;
file.clear(); //清除文件结束标志
}
}

void TelephoneBook::Pack() //在物理上删除作有删除标记的记录
{
ofstream outFile("tem.dat",ios::app|ios::binary); //建立输出文件对象
TelephoneType telph; //电话号码结构
file.seekg(0); //定位
file.read((char*)&telph,sizeof(TelephoneType)); //读记录
while(!file.eof())
{ //文件未结束
if(!telph.delTag)
{ //记录正常。未作删除标记
outFile.write((char*))&telph,sizeof(TelephoneType));//写记录
}
file.read((char*)&telph,sizeof(TelephoneType)); //继续记录
}
file.close(); //关闭文件
outFile.close(); //关闭文件
remove("telph.dat"); //删除文件
rename("tem.dat","telph.dat"); //更改文件名
file.open("telph,dat",ios::in|ios::out|ios::binary); //重新打开文件夹
}

void TelephoneBook::Run() //处理电话号码簿
{
int select; //选择菜单号
do{
cout<<"请选择:"< cout cout cout cout cout cout cin>>select; //输入选择
while(cin.get()!='\n'); //跳过当前行后面的字符
switch(select)
{
case 1:
AddData(); //增加数据
break;
case 2:
UpdateData(); //更新数据
break;
case 3:
SearchData(); //查询数据
break;
case 4:
DeleteData(); //删除数据
break;
case 5:
Pack(); //在物理上删除作有删除标记的记录
break;
}
}
while(select!=6); //选择6将推出
}

int main()
{
try //用try封装可能出现异常的代码
{
TelephoneBook objTelephoneBook; //电话号码簿对象
objTelephoneBook.Run(); //处理电话号码簿
}
catch(Error err) //捕捉并处理异常
{
err.show(); //显示异常信息
}
system("PAUSE"); //调用库函数system()
return 0;
}

error C2872: 'fstream' : ambiguous symbol
error C2523: 'TelephoneBook::~TelephonrBook' : destructor tag mismatch
error C2535: '__thiscall TelephoneBook::TelephoneBook(void)' : member function already defined or declared
see declaration of 'TelephoneBook::TelephoneBook'
fatal error C1004: unexpected end of file found

  • 写回答

2条回答 默认 最新

  • devmiao 2016-06-29 15:24
    关注

    virtual ~TelephonrBook(){file.close(); //析构函数
    缺少后括号

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料