如何在C++中使用.txt文件作为数据库

How can I use a .txt. file as a database in C++?

本文关键字:文件 txt 数据库 C++      更新时间:2023-10-16

首先,我需要澄清一些事情:英语不是我的第一语言,有些东西我可能翻译不好。这只是学校的作业。我不想要任何详细的东西。我需要在一月底之前完成这项工作,我做得越快越好说真的,这是一条死路。

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

基本上,我正在制作一个放入ATM的程序。名为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更改为用户名,并包含密码

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

我只想……我想打开函数构造函数上的.txt文件,将它们分别插入一个字符串和一个整数数组中,然后能够搜索文件以匹配用户名和密码,方法如下:用户的输入进入一个临时变量,然后程序搜索字符串数组的第一列(已插入account.txt文件的内容),找到它在数组中所处的行(例如account[0][3](实际上,我们上次使用数组已经有一段时间了,所以我可能对它的语法有误)然后用户写入密码,程序将其与例如帐户[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

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

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