我怎么能用.txt。文件作为C ++中的数据库?

时间:2017-01-26 22:49:16

标签: c++

首先,我需要澄清一些事情: 英语不是我的第一语言,我可能无法正确翻译。 这仅适用于学校作业。我不想要任何精心设计的东西。 我需要在1月底之前完成这项工作,并且我做得最快,越好。并且认真地认为这是一个艰难的死线。

我只是希望能够读取,写入和搜索文件。我很可能需要将.txt文件转换为二维字符串数组(我不确定这是否是正确的术语)。

基本上我正在制作一个程序放入ATM。名为 account.txt 的第一个.txt文件将具有以下内容:

John 12345
George 11111
Lucas 22222
Mary 33333

第一个单词是用户名,第二个单词是密码,它们用空格分隔。 后来我意识到我需要一个名为 balance.txt 的第二个文件,在整数数组中写下每个帐户的余额,如下所示:

65
0
100
150

我需要能够写入文件,以防运行程序的人想要创建一个新帐户,其中该人将输入2件事,用户名,密码,然后是第二个文件的当前余额。< / p>

到目前为止,我的代码是:

#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 更改为用户名并添加密码

我意识到我已经创建了一个名为 cust_acc 的函数,并创建了一个名为 customer 的对象(或其他任何名称)。我不想改变这些事情,比如创建一个新对象。

我只想....我想在我的函数构造函数中打开.txt文件并将它们分别插入到一个字符串和一个整数数组中,并且能够搜索文件以匹配用户名密码的方式如下: 用户的输入进入临时变量,然后程序搜索字符串数组的第一列(插入了account.txt文件的内容), 找到它在数组上的行(例如 account [0] [3] (自从我们上次使用数组以来它实际上已经有一段时间了,所以我可能错了它的语法) 然后用户写入密码,程序将其与例如 account [1] [3] 进行比较。

还能够在用户提供用户名(将在文件末尾写入同时创建新行)的同时在文件末尾写入密码(将在用户名后写入)它们之间的空间)以及最后将在balance.txt文件末尾写入的起始余额(同时也创建一个新行)。 还需要创建新行,以便在将不同的帐户放入数组变量时可以区分它们。 哦,差点忘了最重要的:能够覆盖文件balance.txt

至于我目前的代码,我会对其进行修改,制作另一个菜单,允许用户创建一个新帐户。

我试图搜索这些东西,但每个人都在做自己特别的事情,在每一行前面写 std :: 并使用一些随机库......我找不到一个简单的有效来源

如果它有助于我使用类似的东西:(在我将account.txt放入字符串2维数组之后) 读取用户名,搜索数组的第一列,直到找到匹配的用户名,或者搜索进入没有写入任何内容的行。但我的问题是如何搜索,我意识到我不知道如何在新帐户的情况下向任何数组添加行。我也可以使用3个一维数组(userename.txt,password.txt,balance.txt)。

我想感谢所有评论并试图帮助我的人,但让我更清楚一点。这基本上就是我老师所说的:

  

从上面的代码(我们在课堂上写的那个)做出必要的   这样:

     
      
  • 您从用作&#34;数据库的文本文件中读取用户名,密码和余额&#34;
  •   
  • 您搜索您的&#34;数据库&#34;将用户名与其密码和余额相匹配
  •   
  • 然后你在那个文件上写,因为你在开头也有一个菜单,以防用户想要创建一个新的帐户   他基本上要求我们找到一种方法来编写阅读搜索文件。
  •   

所以 tl; dr 版本,据我所知,我需要列出此列表中的项目(经过一些实现):

  • 3个文件,username.txt,password.txt,balance.txt
  • 将它们写在2个字符串数组和1个整数数组变量(分别)上,并将每个单词划分为数组中的不同位置
  • 至少搜索用户名数组以查找位置(如果剩下的话,我可以自己这样做)
  • 写下文件(即使我必须重新编写整个文件,如果我有办法,我会找到一种方法)
  • 并且我可能还需要能够更改数组的大小(因为用户可以创建一个新帐户),除非可以定义具有未定义大小或可调整或大尺寸的数组但有些职位可以是 NULL

1 个答案:

答案 0 :(得分:1)

将文本文件用作数据库的最简单方法是使用固定长度字段。这允许快速阅读(以块读取)并且您可以计算记录的位置并寻找它。

请注意,如果要修改文本文件,可能需要将整个文本文件写入新文件。但是,使用固定宽度格式,您可以在不创建新文件的情况下修改记录。插入时,需要写入新文件。