2013-06-25 32 views
-3

我在類中有一個方法,它通過詢問文件中的用戶帳戶並實例化類Users的一個對象來輸入數字。它會立即檢查哪個帳戶(Current,Savings)並取決於實例化某個類。代碼如下所示:如何在C++中顯示另一個類的數據

class Bank 
{ 
public: 
    Bank(); 
    enum AccType{ 
     Current = 'T', 
     Savings = 'Z', 
     Exchange = 'D' 
     }; 
    void registerUser(void); 
    void createNewUser(void); 
    void deleteUser(void); 
}; 

void Bank::registerUser(void) 
{ 
    filePathBuilder dataloader; 
    string fname = dataloader.filePath("account.dat"); 
    Users *us; 
    double saldo=0.0; 
    char data[45]; 
    string acc_number=""; 
    string vlasnik,prezime,adresa,amount; 
    char tip='\0'; 
    string brojRac; 
    string line; 
    bool isTrue = false; 

    ifstream fin; 
    fin.open(fname); 
    if(!fin){ 
     cout<<"Error - could not open a file. . .\n"<<endl; 
     exit(1); 
    } 

    vector<Users> korisnici; 
    cout<< "Account number: "<<endl; 
    cin>>brojRac; 

    while(fin.good()){ 

     fin>>data; 
     if(data == brojRac){ 
      acc_number = data; 
      fin>>data; 
      vlasnik = data; 
      fin>>data; 
      prezime = data; 
      fin>>data; 
      adresa = data; 
      fin>>data; 
      tip = data[0]; 
      fin>>data; 
      amount = data; 
      saldo = atof(amount.c_str()); 
      break; 
     } 
    } 

    fin.close(); 
    if(acc_number == ""){ 
     cout<<"Don't exists"<<endl; 
     exit(0); 
    } 
    us = new Users; 
    us->setName(vlasnik); 
    us->setSurname(prezime); 
    us->setAddress(adresa); 
    enum AccType tipRac = static_cast<AccType>(tip); 
    if(tipRac == 'T') 
    { 

    } 
    else if(tipRac == 'Z') 
    { 
     ZiroAccount zacc; 
     long acc = atoi(acc_number.c_str()); 
     zacc.setAccNumber(acc); 
     zacc.setBalance(saldo); 
     zacc.setAccType(tip); 
     us->setAccount(zacc); 
    } 
    else{ 

    } 

    korisnici.push_back(*us); 

    vector<Users>::iterator it; 

    for(it=korisnici.begin(); it != korisnici.end(); ++it){ 
     it->printUsersInfo(); 
     it->printUsersInfo(); 

    } 

    isTrue = true; 
} 

我有一個方法在另一個類中顯示主菜單。

void Initialize::main_menu(void) 
{ 
    bool flag = false; 
    char choice; 
    while(flag == false) 
    { 
     //system("clear"); 
     cout<<"\n\n\t\t Glavni izbornik"<<endl; 
     cout<<"\n\t Odaberite opciju:"<<endl; 
     cout<<"\n\t 01 - DISPLAY ACCOUNT"<<endl; 
     cout<<"\n\t 02 - DEPOSIT AMOUNT"<<endl; 
     cout<<"\n\t 03 - WITHDRAW AMOUNT"<<endl; 
     cout<<"\n\t 04 - CHECK BALANCE"<<endl; 
     cout<<"\n\t 05 - CLOSE AN ACCOUNT"<<endl; 
     cout<<"\n\t 06 - EXIT"<<endl; 
     cout<<"\n\n\tYout choice (1-6)"; 

     cin>>choice; 
     switch(choice){ 

     case '1': 
      //HOW TO DISPLAY USERS INFO AND ACCOUNT INFO??? 
      break; 
     case '2': 
      //. . . . 
      break; 
     case '3': 
      //. . . . 
      break; 
     case '4': 
      //. . . . 
      break; 
     case '5': 
      //. . . . 
     case '6': 
      flag = true; 
      cout<<"Exit"<<endl; 
      break; 
     default: 
      cout<<"Wrong input"<<endl; 
      cin.get(); 
     } 
    } 

} 

我的問題是:如果用戶從菜單中輸入1,如何顯示用戶和帳戶信息?

+0

問題是什麼? – bennofs

+8

歡迎來到SO。我認爲你在這裏發佈的90%的代碼並不涉及你的實際問題。你能否創建一個*小*例子來說明你想要做什麼? –

+0

聲明「我困擾的是,如果用戶輸入1,顯示子規範會對用戶和他或她的帳戶起作用?」不是一個問題。標題只會增加混亂。 – jdero

回答

1

當Bank :: registerUser函數返回所有收集到的數據時,它就被銷燬了。這是因爲您將用戶的矢量創建爲局部變量。你創建了us =新的用戶與本地變量我們。您需要了解存儲壽命。這些變量可能需要是成員變量,而不是局部變量,所以它們將在函數返回時倖存下來。

你是在哪裏創建Bank對象的? Initialize :: main_menu函數需要訪問Bank對象,以便它可以訪問該對象的成員變量。

+0

我從來沒有創建過一個Bank對象,我以爲轉移向量客戶作爲參考? – slena17

+0

好了,現在我把用戶和用戶變量的變量當成成員變量,但是現在我又遇到了另一個問題:當Bank :: registerUser函數返回所有的數據都被銷燬時,我沒有權限訪問我剛纔的賬號創建 ?這是否意味着我將不得不創建指向我在Bank類中創建的每個類的指針? TNX – slena17

相關問題