2014-01-19 4 views
0

Я работаю над приложением заработной платы. Приложение должно позволить пользователю передавать сумму из учетной записи (учетная запись - это текстовый файл «магазин», который содержит значение 1000).Запись меток в файлы

Пользователь должен иметь возможность делать столько передач, сколько пожелает, без переустановки учетной записи. Каждая транзакция также должна быть записана по метке в отдельном файле, и это бит, с которым я борюсь.

В настоящее время с кодом, использующим временную метку, создается штраф в файле «время», за исключением 1040ED48, появляется до времени. Кто-нибудь знает, почему это? Также каждый раз, когда я делаю транзакцию, файл «time» перезаписывается новой меткой времени. Есть ли способ поместить каждую метку времени в другую строку в файле, чтобы она не была полностью перезаписана? Извините, если это не ясно.

#include <limits> 
#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <ctime> 
#include <string> 


int read_balance(void); 
void write_balance(int balance); 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 


    cout << "How much do you wish to transfer?" << endl; 


    int amount = 0; 

if (std::cin >> amount) 
{ 
    std::cout << "Transferred Amount:" << amount << "\n"; 
    int balance = read_balance(); 

    if (amount <= 0) 
    { 
     std::cout << "Amount must be positive\n"; 
    } 
    else if (balance < amount) 
    { 
     std::cout << "Insufficient funds\n"; 
    } 
    else 
    { 
     int new_balance = balance - amount; 

     write_balance(new_balance); 
     std::cout << "New account balance: " << new_balance << std::endl; 

    fstream infile; 
    infile.open("time.txt"); 


    std::time_t result = std::time(nullptr); 
    std::string timeresult = std::ctime(&result); 

    infile << std::cout << timeresult << std::endl; 
    } 

} 


system("pause"); 
return 0; 
} 

int read_balance(void) 
{ 
std::ifstream f; 
f.exceptions(std::ios::failbit | std::ios::badbit); 
f.open("shop.txt"); 
int balance; 
f >> balance; 
f.close(); 
return balance; 
} 

void write_balance(int balance) 
{ 
std::ofstream f; 
f.exceptions(std::ios::failbit | std::ios::badbit); 
f.open("shop.txt"); 
f << balance; 
f.close(); 
} 
+0

удалить 'std :: cout <<' from 'infile << std :: cout << timeresult << std :: endl;' – tumdum

+0

Спасибо, что избавился от 1040ED48. Просто нужно выяснить, как записывать временные метки seperatley. – user3057816

ответ

1

Если вы открываете файл для записи, вы начинаете с удаления этого файла. Если вы не хотите для удаления файла, вам необходимо открыть файл для добавления (используя режим app.)

+0

Спасибо, что он работает сейчас! – user3057816

1

Еще одна вещь. Вы должны распечатать следующее после проверки условий ошибки:

std::cout << "Transferred Amount:" << amount << "\n"; 
int balance = read_balance(); 

Представьте, что вы находитесь в банкомате. Теперь вы пытаетесь снять больше, чем вы оставили в своем аккаунте, и банкомат показывает, что деньги переданы и указывает, что у вас недостаточно баланса.