我正在研究简单的工资申请。我有一个包含4个选项的菜单和一个名为“shop-account”的文本文件,其中只包含值100。 对于选项一,用户可以从该100转移金额。用户应该能够进行多笔交易,但不能透支该账户。
目前我刚刚打开文件并将值100声明为int“balance”,然后要求用户输入要转移的金额(“NewAmount”)并简单地减去它。但是,这仅适用于一次交易。
当我回去尝试进行第二次转移时,它会再次从100减去,而不是更新的数量。所以我想知道是否有人知道如何在每次交易后获取文件更新?
int balance;
int NewAmount;
fstream infile;
infile.open("shop-account.txt");
infile >> balance;
do {
cout << "1. Transfer an amount" <<endl;
cout << "2. List recent transactions"<<endl;
cout << "3. Display account details and current balance"<<endl;
cout << "4. Quit" << endl;
cout << "Please enter menu number"<<endl;
cin >> selection;
switch(selection) {
case 1:
cout << "You have choosen to transfer an amount" << endl;
cout << "How much do you wish to transfer from the shop account?"<<endl;
cin >> NewAmount;
cout << balance - NewAmount << endl;
break;
case 2:
cout << "Here are you're recent transactions" <<endl;
cout << "" << endl;
cout << "" << endl;
break;
case 3:
cout << "The account names is:" << name << endl;
cout << "The account number is:" << number << endl;
cout << "The current balance is\n\n" << endl; //Need to get cuurent balance still
break;
case 4:
return 0;
break;
default:
cout << "Ooops, invalid selection!" << endl;
break;
}
} while(selection != 4);
system("pause");
return 0;
}
答案 0 :(得分:2)
基本上,您的文件只包含一个数据,因此进行部分更新根本没有意义。
您所要做的就是在开头阅读,就像您一样,并在每次交易时将其完全写回来。
int read_balance (void)
{
fstream f;
f.open("shop-account.txt");
f >> balance;
f.close();
return balance;
}
void write_balance (int balance)
{
fstream f;
f.open("shop-account.txt");
f << balance;
f.close();
}
然后在你的代码中:
cout << "You have choosen to transfer an amount" << endl;
cout << "How much do you wish to transfer from the shop account?"<<endl;
cin >> NewAmount;
balance -= NewAmount;
write_balance (balance);
cout << balance << endl;
答案 1 :(得分:0)
要“更新”文件,您必须编写整个文件,并更改您正在“更新”的部分。
答案 2 :(得分:0)
执行此操作的最有效方法是将内存映射文件(在Unix中为mmap()
),在内存中更新并允许操作系统将更改后的版本刷新回磁盘(定期或关闭) 。