繁体   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