在上一段代码的基础上,关联用户名和余额,输入用户名时可显示该用户的余额,实现可录入多人资料
时间: 2024-02-13 21:02:18 浏览: 21
以下是一个基于上一个代码的改进版本,用于录入多个用户的信息,并且在输入用户名时可以显示该用户的余额信息:
```c++
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;
int main() {
map<string, double> user_info; // 使用 map 来储存用户信息
string name;
double balance;
// 从文件中读取用户信息
ifstream infile("userinfo.txt");
if (infile.is_open()) {
while (infile >> name >> balance) {
user_info[name] = balance;
}
infile.close();
}
// 录入用户信息
while (true) {
cout << "请输入用户名(输入 q 退出录入):";
cin >> name;
if (name == "q") {
break;
}
if (user_info.find(name) != user_info.end()) { // 如果该用户已存在,显示其余额信息
cout << "该用户余额为:" << user_info[name] << endl;
}
else { // 如果该用户不存在,提示输入余额信息
cout << "请输入该用户的余额:";
cin >> balance;
user_info[name] = balance; // 储存该用户的信息
}
}
// 将用户信息写入文件
ofstream outfile("userinfo.txt", ios::out | ios::trunc); // 打开文件,使用 truncate 模式
if (outfile.is_open()) {
for (auto iter = user_info.begin(); iter != user_info.end(); iter++) {
outfile << iter->first << " " << iter->second << endl;
}
outfile.close(); // 关闭文件
cout << "用户信息已储存!" << endl;
}
else {
cout << "无法打开文件!" << endl;
}
return 0;
}
```
这个程序使用了 C++ 的 `map` 类型来储存用户信息。在程序运行时,首先从文件中读取已有的用户信息,并存储在 `user_info` 变量中。接着,程序通过循环来录入新的用户信息。如果输入的用户名已经存在于 `user_info` 中,程序将显示该用户的余额信息;否则,程序将提示输入该用户的余额信息,并将新的用户名和余额信息存储在 `user_info` 中。
当所有用户信息都录入完毕后,程序将用户信息写入文件中。这里使用了 `ios::trunc` 模式,表示在写入文件前先清空文件内容,避免写入重复信息。如果文件成功打开并写入信息,程序将输出一条成功消息;否则,程序将输出一个错误消息。