[英]How can I use a .txt. file as a database in C++?
首先,我需要澄清一些事情:英語不是我的第一語言,我可能不會正確翻譯一些東西。 這只是一個學校作業。 我不想要任何復雜的東西。 我需要在 1 月底之前完成這項工作,而且我完成得越快越好。 說真的,這是一個艱難的最后期限。
我只是希望能夠讀取、寫入和搜索文件。 我很可能需要將 .txt 文件轉換為二維字符串數組(我不確定這是否正確)。
基本上我正在制作一個要放入自動取款機的程序。 第一個名為account.txt 的.txt 文件將包含以下內容:
John 12345
George 11111
Lucas 22222
Mary 33333
第一個詞是用戶名,第二個詞是密碼,它們用空格分隔。 后來我意識到我需要一個名為balance.txt的第二個文件來將每個帳戶的余額寫入一個整數數組,如下所示:
65
0
100
150
我需要能夠寫入文件,以防運行該程序的人想要創建一個新帳戶,該人將在其中輸入兩件事,一個用戶名,一個密碼,然后是第二個文件的當前余額。
到目前為止,我的代碼是這樣的:
#include <iostream>
using namespace std;
class cust_acc{
private:
int id;
double balance;
public:
cust_acc(){
cout<<"Account's ID: ";
cin>>id;
cout<<"Starting Balance: ";
cin>>balance;
cout<<"Account: "<<id<<" created."<<endl<<endl;
}
void withdraw(){
double temp;
cout<<"Amount to Withdraw: ";
cin>>temp;
if(temp<=balance)
balance-=temp;
else{
cout<<"The amount you requested to withdraw is greater than your current balance."<<endl;
cout<<"Your account was not charged."<<endl;
}
}
void deposit(){
double temp;
cout<<"Amount to Deposit: ";
cin>>temp;
balance+=temp;
}
void inform(){
cout<<"Your current Balance is: "<<balance<<endl;
}
};
int main(void){
int choice;
cust_acc customer;
do {
cout<<"Withdraw: 1"<<endl;
cout<<"Deposit: 2"<<endl;
cout<<"Inform: 3"<<endl;
cout<<"Quit: 4"<<endl;
cin>>choice;
switch (choice) {
case 1:
customer.withdraw();
break;
case 2:
customer.deposit();
break;
case 3:
customer.inform();
break;
case 4:
break;
default:
cout<<"Wrong number."<<endl;
break;
}
}while(choice!=4);
return(0);
}
這段代碼直接來自我的班級,正是我編寫它的方式,我還沒有做任何更改。 最終我會將id更改為username並包含一個password 。
我知道我已經創建了一個名為功能和cust_acc我創建一個對象(或任何它被稱為)命名的客戶。 我不想改變這些事情,比如創建一個新對象。
我只想......我想在我的函數的構造函數上打開 .txt 文件,並將它們分別插入到一個字符串和一個整數數組中,並且能夠以如下方式搜索文件以將用戶名與密碼匹配:用戶的輸入進入臨時變量,然后程序搜索字符串數組的第一列(已插入 account.txt 文件的內容),找到它在數組上的行(例如account[0] [3] (自從我們上次使用數組以來實際上已經有一段時間了,所以我的語法可能是錯誤的)然后用戶寫入密碼,程序將其與例如account[1][3] 進行比較。
還可以在文件末尾寫入用戶名(將寫入文件末尾,同時創建一個新行),然后是密碼(將在用戶名后面寫入一個空格)它們之間),最后是將寫入 balance.txt 文件末尾的起始余額(同時創建一個新行)。 也需要創建新行,以便將不同的帳戶放入數組變量時可以區分。 哦,差點忘了最重要的:能夠覆蓋文件 balance.txt
至於我目前的代碼,我會完善它,制作另一個菜單,允許用戶創建一個新帳戶。
我試圖搜索這些東西,但每個人都在做自己的特殊事情,在每一行前面寫std::並使用一些隨機庫......我找不到一個簡單的有效來源。
如果它有助於我考慮使用類似的東西:(在我將 account.txt 放入字符串二維數組之后)讀取用戶名,搜索數組的第一列,直到找到匹配的用戶名或搜索轉到一行什么都沒有寫。 但我的問題是如何搜索,我意識到我不知道如何在新帳戶的情況下向任何數組添加一行。 我也可以使用 3 個一維數組(userename.txt、password.txt、balance.txt)。
我想對所有評論並試圖幫助我的人說聲謝謝,但讓我更清楚一點。 我的老師基本上是這樣說的:
從上面的代碼(我們在課堂上寫的那個)做必要的,以便:
- 您從將用作“數據庫”的文本文件中讀取用戶名、密碼和余額
- 您搜索“數據庫”以將用戶名與其密碼和余額相匹配
- 然后你在那個文件上寫,因為你在開頭還有一個菜單,以防用戶想要創建一個新帳戶他基本上要求我們找到一種寫、讀和搜索文件的方法。
所以我理解的tl;dr版本是我需要在此列表中列出項目(經過一些認識):
將文本文件用作數據庫的最簡單方法是使用固定長度的字段。 這允許快速讀取(以塊為單位讀取),您可以計算記錄的位置並尋找它。
請注意,如果要修改文本文件,則可能需要將整個文本文件寫入新文件。 但是,使用固定寬度格式,您可以修改記錄而無需創建新文件。 插入,將需要寫入一個新文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.