簡體   English   中英

我如何使用 .txt。 文件作為C++中的數據庫?

[英]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版本是我需要在此列表中列出項目(經過一些認識):

  • 3個文件,username.txt,password.txt,balance.txt
  • 將它們寫在 2 個字符串數組和 1 個整數數組變量(分別)上,並用一個空格將每個單詞划分到數組中的不同位置
  • 至少搜索用戶名數組以找到位置(如果我有其余的,我可能可以自己做)
  • 寫在文件上(即使我必須重寫整個文件,如果我有辦法,我會想辦法做到的)
  • 而且我可能需要能夠更改數組的大小(因為用戶可以創建一個新帳戶),除非可以定義一個大小未定義或可調整或較大的數組,但某些位置可以為NULL

將文本文件用作數據庫的最簡單方法是使用固定長度的字段。 這允許快速讀取(以塊為單位讀取),您可以計算記錄的位置並尋找它。

請注意,如果要修改文本文件,則可能需要將整個文本文件寫入新文件。 但是,使用固定寬度格式,您可以修改記錄而無需創建新文件。 插入,將需要寫入一個新文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM