我正在用c ++制作银行管理系统。我有Visual Studio 2008.请参阅下面的代码,我将解释我的问题。
class ACCOUNT
{
int accno,deposit;
char name[20];
char type;
public:
int create_account()
{
//The whole process of accepting details from user goes here/
}
int retacc() //Accessor Function
{
return accno;
}
void write_account()
{
ACCOUNT acc1,acc2;
char ch='Y';
fstream rec;
rec.open("d://useless.dat",ios::out|ios::in|ios::app|ios::binary);
c:
acc1.create_account();
rec.seekg(0);
while(!rec.eof())
{
rec.read((char*)&acc2,sizeof(acc2));
if(acc1.retacc()==acc2.retacc()) //THIS IS WHERE I AM DOING THE COMPARING PART. IS THIS THE WRONG WAY TO DO IT?
{
cout<<"\nAccount No. already exist.";
cout<<"Want to enter again? (Y/N) : ";
cin>>ch;
ch=toupper(ch);
if(ch=='Y')
goto c;
}
}
rec.write((char*)&acc1,sizeof(acc1));
rec.close();
cout<<"\nCongratulations! Your account is created.\n\n";
}
我在这里要做的是当用户输入帐号时,会发送它以检查具有相同帐号的其他记录是否。是否存在于文件useless.dat
中。所以我做了两个班级的实例。一个用于从用户获取数据,一个用于读取文件。然后,比较它们,如果有一些记录具有相同的帐户号。然后用户必须输入另一个号码,如果没有,则用户提供的详细信息将写入文件中。
答案 0 :(得分:2)
您可能需要考虑的方法是创建一个静态方法,用于从文件加载数据(而不是将其作为帐户对象上的实例方法)。每个帐号对应一个帐户对象,因此当您加载数据时,从每个帐号中创建一个帐户对象。将这些Account对象存储在数据结构中,例如Vector。
然后,要确定帐号是否已存在,您只需迭代向量,检查帐号是否与现有号码相对应。如果是,则拒绝输入并重复输入,直到输入有效的帐号。
那就是说,@ asawyer在他对安全问题的评论中是绝对正确的。您确定用户应该提供自己的帐号吗?通常,这将由银行处理,并且用户在创建用户帐户时将被分配帐号。同样,这对你的任务可能有点过分,可以根据教授为你提供的指导原则予以忽略。
编辑:一些伪代码可以帮助您理解
class Account
{
Account(acctNumber);
retacc();
write_account();
static load_accounts() {
for each acctNumber A in file
storageVector->push(A)
end
}
static account_exists(Account account) {
for each acctNumber A in storageVector {
if account->retacc() == A->retacc() {
return true
}
}
return false;
}
}
一般的想法是加载所有帐号并将它们存储到Vector容器中,然后迭代该容器以查看您要查找的值是否已经存在。
这只是伪代码,但它应该足以让你知道如何从这里开始。祝你好运!
答案 1 :(得分:2)
您可以使用C ++声明运算符。
class ACCOUNT {
...
bool operator==(const ACCOUNT& other) const {
return accno == other.accno; // whatever you want
}
}
之后,您可以像使用标准类型一样使用此运算符==。
您可能会看到更多相关信息here。