[英]How to compare two objects of the same class?
我正在用C ++制作銀行管理系統。 我有Visual Studio2008。請參見下面的代碼,我將解釋我的問題。
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
。 因此,我制作了該類的兩個實例。 一種用於從用戶獲取數據,另一種用於讀取文件。 然后,比較它們,如果有一些記錄具有相同的帳號。 那么用戶必須輸入另一個數字,如果不是,則將用戶給出的詳細信息寫入文件中。
您可能要考慮的一種方法是創建一個靜態方法來從文件加載數據(而不是使它成為account對象上的實例方法)。 每個帳號對應一個Account對象,因此在加載數據時,請使用每個帳號創建一個Account對象。 將這些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容器中,然后僅對該容器進行迭代以查看您要查找的值是否已經存在。
這只是偽代碼,但足以讓您了解如何從此處開始。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.