根据你的要求,我将补全四个函数的代码实现,并解释思路:
- #include <fstream>
- #include <iostream>
- #include <cstdlib>
- // 全局文件路径定义
- const char* FILE_PATH = "FishOil.dat";
- bool InitFishC()
- {
- // 思路:检查数据文件是否存在,若不存在则创建空文件
- std::ofstream file(FILE_PATH, std::ios::app);
- return file.is_open(); // 返回文件是否成功打开
- }
- bool ReadFishC()
- {
- // 思路:逐行读取文件内容并显示
- std::ifstream file(FILE_PATH);
- if (!file) return false;
- std::string name, uid;
- char sex;
- int count = 0;
- while (std::getline(file, name) &&
- std::getline(file, uid) &&
- file.get(sex))
- {
- file.ignore(); // 跳过换行符
- std::cout << "记录" << ++count << ":\n"
- << "姓名: " << name << "\n"
- << "UID: " << uid << "\n"
- << "性别: " << sex << "\n\n";
- }
- return count > 0;
- }
- void RecordFishC()
- {
- // 思路:接收用户输入并写入文件
- FishOil newRecord;
- std::cout << "请输入姓名: ";
- std::getline(std::cin, newRecord.name);
- std::cout << "请输入UID: ";
- std::getline(std::cin, newRecord.uid);
- std::cout << "请输入性别(M/F): ";
- std::cin >> newRecord.sex;
- std::cin.ignore(); // 清除输入缓冲
- if (WriteFishC(&newRecord)) {
- std::cout << "\n记录保存成功!\n";
- } else {
- std::cerr << "\n保存失败!\n";
- }
- }
- bool WriteFishC(FishOil *OilData)
- {
- // 思路:以追加模式写入数据
- std::ofstream file(FILE_PATH, std::ios::app);
- if (!file) return false;
- file << OilData->name << "\n"
- << OilData->uid << "\n"
- << OilData->sex << "\n";
-
- return file.good();
- }
复制代码
实现思路说明:
1.
InitFishC():使用追加模式打开文件,若文件不存在则自动创建
2.
ReadFishC():按顺序读取三行数据(姓名/UID/性别)并格式化输出
3.
RecordFishC():通过标准输入获取数据,调用写入函数保存
4.
WriteFishC():以文本追加模式写入数据,每条记录占三行
注意事项:
1. 数据文件采用纯文本格式存储,每条记录包含三行内容
2. 使用
std::cin.ignore()清除输入缓冲区残留的换行符
3. 写入模式使用
std::ios::app保证数据追加不覆盖
4. 性别字段只存储单个字符(M/F)
这个实现保证了数据存储的简洁性和可读性,同时符合结构化存储的要求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。