【发布时间】:2015-10-22 04:13:49
【问题描述】:
下面的代码编译并成功运行,但在退出时没有写入文件。文件被创建,在选择注册时它会询问所有详细信息并显示消息注册成功。文件customers.data 为空(文件大小为 0kb)。函数write 不会将对象写入文件。代码中的所有内容似乎都是正确的。无法识别错误。请帮忙
主程序:
int main()
{
int ch;
Customer cust;
fstream file;
file.open("customers.data",ios::out|ios::app|ios::binary);
if(!file)
{
cout<<"\nError Files are missing. Unable to create files\n";
system("pause");
exit(1);
}
cout << "WELCOME! Press any key to continue.\n\n";
system("pause");
do
{
system("cls");
cout<<"\n\n\n";
cout<<"1->Login"<<endl;
cout<<"2->Register"<<endl;
cout<<"3->Exit"<<endl;
cout<<"Choose An option: ";
cin>>ch;
switch(ch)
{
case 1:
if(cust.Login()==true)
{
LaunchCustomerMenu();
}
else
{
cout<<"Incorrect Email/Password\n";
system("pause");
}
break;
case 2:
cust.Register();
file.write((char*)&cust, sizeof(cust)); //does not work
if(!file.fail()) //still true
{
cout<<"\n\nRegistration Successful"<<endl;
system("pause");
}
else
{
cout<<"\nTheir was a Error processing your Registration\n";
system("pause");
}
break;
case 3:
exit(0);
break;
default:
cout<<"\n\nWRONG OPTION\n";
cout<<"Choose Again\n\n";
system("pause");
}
cin.ignore();
}
while(ch!=3);
file.close();
return 0;
}
班级:
class Customer
{
private:
unsigned int CustomerID;
string CustomerName;
string CustomerAddress;
string CustomerEmail;
string CustomerPassword;
unsigned int CustomerPhone;
public:
Customer();
void Register();
bool Login();
unsigned int getID();
string getName();
string getEmail();
string readPassword();
unsigned int getPhone();
unsigned int RandomID();
void modifyName();
void modifyAddress();
void modifyEmail();
void modifyPassword();
void modifyPhone();
};
CustomerID 是随机生成的。
函数寄存器:
void Customer::Register()
{
cout<<"Enter Your Name: ";
cin.ignore();
getline(cin,CustomerName);
cout<<"Enter Your Address: ";
cin.ignore();
getline(cin,CustomerAddress);
cout<<"Enter Your Email: ";
cin>>CustomerEmail;
cout<<"Enter A Password: ";
cin.ignore();
getline(cin,CustomerPassword);
cout<<"Enter Your Phone no. :";
cin>>CustomerPhone;
}
编辑:
根据下面的答案,我添加了对 file.fail() 的检查,但它返回 false 并且 customers.data 为空,即 write 操作无法写入对象。
【问题讨论】:
-
听起来你应该使用现有的数据库,而不是自己发明。
-
@ThomasMatthews 我已经从头开始编写代码了。
-
如果这是家庭作业,你别无选择。否则,数据库会编写并调试;这就是为什么你应该使用数据库。