[英]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.