我正在研究这个程序:
创建一个将模拟ATM机的程序。您必须创建一个名为“ ATM”的类,该类将具有以下成员函数:
在屏幕上创建问候语
询问用户四位数的密码,
a)名为“ pin”的外部文件必须包含以下四个pin以及所有者名称和余额:
拉里1234 $ 200
Moe 5678 $ 350
露西0007 $ 600
Shirley 9876 $ 535
b)用户输入的密码必须与存储的密码之一匹配,以允许进行交易。
c)3次失败尝试后,告诉用户其帐户已冻结,必须与客户服务联系。
成功输入图钉后,使用其名称向用户问好。
创建一个屏幕,询问用户是否要提取或存钱或查看其余额。
初始化$ 500的初始机器余额。根据存款和提款跟踪余额。
不允许用户提取比目前机器中更多的钱。
将提取的金额限制为$ 400。
程序必须在连续循环中运行。
我不知道该怎么做2b和3。我认为我应该为4个不同的人创建4个不同的对象,每个对象1行,然后在对象内分离名称,固定和平衡,但是我我不太确定该怎么做。
我认为我应该在循环中使用类似getline()
的东西将行分成4个对象,然后使用fin >> name >> pin >> balance;
来区分name
,pin
和{ {1}},但我无法弄清楚。
如果我做错了一切,那么我将不胜感激朝着正确方向前进。
答案 0 :(得分:1)
如果您正在从输入流中读取内容,则基本上可以这样做:
struct User {
std::string name;
int pin;
int amnt;
};
User read_user(std::istream& stream) {
User user;
// Reads in the username (this assumes the username doesn't contain a space)
stream >> user.name;
// Reads in the pin as an integer
stream >> user.pin;
stream.ignore(2); //Ignore the extra space and dollar sign
// Reads in the dollar amount as an integer
stream >> user.amnt;
// Returns the user
return user;
}
这将使您可以从std::cin
或文件流中进行读取,并返回具有名称,图钉和金额的用户。
我们可以像这样读取多个用户。基本上,我们只是多次拨打read
。
std::vector<User> read_users(std::istream& stream, int n) {
std::vector<User> users;
for(int i = 0; i < n; i++) {
users.push_back(read_user(stream));
}
return users;
}
这将读取您想要的尽可能多的用户。
我们还可以读取文件中的所有用户。
std::vector<User> read_all_users(std::istream& stream) {
std::vector<User> users;
while(true) // Checks that there's stuff left in the stream
{
User u = read_user(stream); // Try reading a user
if(not stream) break; // If there was nothing left to read, exit
users.push_back(u);
}
return users;
}
我们将打开一个名为users.txt
的文件,并将其全部读入。然后,我们将打印出每个用户的姓名,大头针和帐户余额。
int main() {
std::ifstream user_file("users.txt");
std::vector<User> users = read_all_users(user_file);
// This prints out the name, pin, and balance of each user
for(User& user : users) {
std::cout << "Name: " << user.name << '\n';
std::cout << "Pin: " << user.pin << '\n';
std::cout << "Amnt: " << user.amnt << '\n';
}
// Do stuff with the list of users
}