2013-03-23 134 views
0

下面是我的超級市場的​​結算和股票編輯程序的基本結構代碼 類:友元函數如何讀取和寫入二進制文件在C從/對象++正確

class Admin 
{ 
public: 
    admin(); 
private: 
    int Pid; 
    char name[20]; 
    double quant; 
    double price; 
    double disc; 
    double net_price; 

    friend istream &read(istream&, Admin&); 
    friend ostream &show(ostream&, const Admin); 
}; 

istream &read(istream&, Admin&); 
ostream &show(ostream&, const Admin); 

定義:

istream &read(istream &is, Admin &commodity) 
{ 
    double dis; 

    fflush(stdin); 
    is>>commodity.Pid; 

    is.getline(commodity.name,30); 

    is>>commodity.quant 
     >>commodity.price 
     >>commodity.disc; 

    dis=grs_pr*(commodity.disc/100); 

    commodity.net_price=grs_pr-dis; 

    return is; 
} 

ostream &show(ostream &os, const Admin thing) 
{ 
    os << thing.name <<" " << thing.quant <<" " 
     << thing.price <<" " << thing.disc <<" " 
     << thing.net_price << endl; 

    return os; 
} 

主要功能:

int main() 
{ 
    admin item; 

    while(read(cin,item) 
    { 
     ofstream file; 
     file.open("Stock.dat",ios::binary | ios::app); 
     file.write(reinterpret_cast<const char*>(&item),sizeof(Admin)); 
    } 
    ifstream readFile("Stock.dat",ios::in|ios::binary); 

    while(!readFile.eof()) 
    { 
     readFile.read(reinterpret_cast<char*> (&item),sizeof(Admin)); 
     Admin readedItem; 
     read(readFile,readedItem); /*i have used read and show function to watch the values that are read by readFile but every time show function output some five exponential values like 5.23689e-301*/ 
     show(cout,readedItem); 
    } 

    return 0; 
} 

請告訴我什麼的是錯誤的bove代碼,我應該怎麼做才能糾正它, 我的動機是從創建的文件中讀取數據,並通過用戶提及產品ID來更改或編輯要選擇的數據,請幫助我如何達到這個功能。

+0

什麼* *具體的問題你面對? – 2013-03-23 09:53:55

+0

@n.m.my問題是我無法從文件 – Udit 2013-03-23 09:58:18

+0

中讀取數據(對象)「我無法做到這一點或那個」不是特定的。 「我得到這個錯誤(粘貼錯誤的文本)」是。 「我希望程序打印FOO,但它打印BAR」是。 – 2013-03-23 10:06:16

回答

0

假設我理解正確那麼你的讀取和顯示迴路應

for (;;) 
    { 
     readFile.read(reinterpret_cast<char*> (&item),sizeof(Admin)); 
     if (readFile.eof()) 
      break; 
     show(cout,item); 
    } 

出於某種原因,你在讀兩次,第一次到一個名爲item變量,然後到名爲readItem另一個變量。你只需要閱讀一次。 while (!readFile.eof())也是錯誤的,因爲您必須在之後測試文件結尾,您在之前不讀取

1

你不應該自己實現一個naiive序列化。使用圖書館。

見即解答了12+comments34

另外,不要把數據操作(即commodity.net_price=grs_pr-dis;)的邏輯數據序列化

相關問題