c++写日记簿程序,要求可以储存日记,并通过日期查找日记内容,并解释每行代码的意思
时间: 2024-02-26 14:59:04 浏览: 21
好的,下面是一个C++日记簿程序的完整代码,可以储存日记,并通过日期查找日记内容,并解释每行代码的意思:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
using namespace std;
int main()
{
string filename = "diary.txt"; // 定义日记文件名
string content; // 定义日记内容变量
string input_date; // 定义用户输入的日期字符串变量
time_t now = time(0); // 获取当前时间
tm* ltm = localtime(&now); // 转换为本地时间
int year = ltm->tm_year + 1900; // 年份,需要加上1900
int month = ltm->tm_mon + 1; // 月份,需要加上1
int day = ltm->tm_mday; // 日
int hour = ltm->tm_hour; // 时
int minute = ltm->tm_min; // 分
int second = ltm->tm_sec; // 秒
cout << "请输入日记内容:" << endl; // 提示用户输入日记内容
getline(cin, content); // 获取用户输入的日记内容
// 将日记内容和时间写入文件中
ofstream outfile;
outfile.open(filename, ios::app); // 打开文件,以追加的方式写入
outfile << year << "-" << month << "-" << day << " " << hour << ":" << minute << ":" << second << endl; // 写入时间
outfile << content << endl; // 写入日记内容
outfile << "----------------------------------------" << endl; // 写入分隔符
outfile.close(); // 关闭文件
cout << "日记已保存成功!" << endl; // 输出保存成功的消息
cout << "请输入要查找的日期(例如:2022-02-01):" << endl; // 提示用户输入要查找的日期
cin >> input_date; // 获取用户输入的日期字符串
// 从文件中查找对应日期的日记内容
ifstream infile;
infile.open(filename, ios::in); // 打开文件,以读取的方式打开
string line; // 定义每行读取的字符串变量
bool found = false; // 定义是否找到对应日期的标志变量
while (getline(infile, line)) // 逐行读取文件内容
{
if (line.substr(0, 10) == input_date) // 判断当前行是否为对应日期的日记
{
found = true; // 标记为找到了对应日期的日记
cout << line << endl; // 输出日期和时间
while (getline(infile, line) && line != "----------------------------------------") // 读取日记内容,直到遇到分隔符
{
cout << line << endl; // 输出日记内容
}
break; // 退出循环
}
}
infile.close(); // 关闭文件
if (!found) // 如果没有找到对应日期的日记
{
cout << "没有找到对应日期的日记!" << endl; // 输出提示消息
}
return 0; // 程序结束
}
```
希望这个程序对您有所帮助。下面是每行代码的解释:
1. `#include <iostream>`:包含输入输出流的头文件。
2. `#include <fstream>`:包含文件读写流的头文件。
3. `#include <string>`:包含字符串相关操作的头文件。
4. `#include <ctime>`:包含时间相关操作的头文件。
5. `using namespace std;`:使用命名空间std。
6. `int main()`:程序入口。
7. `string filename = "diary.txt";`:定义日记文件名。
8. `string content;`:定义日记内容变量。
9. `string input_date;`:定义用户输入的日期字符串变量。
10. `time_t now = time(0);`:获取当前时间。
11. `tm* ltm = localtime(&now);`:将时间转换为本地时间。
12. `int year = ltm->tm_year + 1900;`:获取当前年份,需要加上1900。
13. `int month = ltm->tm_mon + 1;`:获取当前月份,需要加上1。
14. `int day = ltm->tm_mday;`:获取当前日。
15. `int hour = ltm->tm_hour;`:获取当前小时。
16. `int minute = ltm->tm_min;`:获取当前分钟。
17. `int second = ltm->tm_sec;`:获取当前秒数。
18. `cout << "请输入日记内容:" << endl;`:提示用户输入日记内容。
19. `getline(cin, content);`:获取用户输入的日记内容。
20. `ofstream outfile;`:定义文件写入流。
21. `outfile.open(filename, ios::app);`:以追加的方式打开文件。
22. `outfile << year << "-" << month << "-" << day << " " << hour << ":" << minute << ":" << second << endl;`:将时间写入文件中。
23. `outfile << content << endl;`:将日记内容写入文件中。
24. `outfile << "----------------------------------------" << endl;`:写入分隔符。
25. `outfile.close();`:关闭文件。
26. `cout << "日记已保存成功!" << endl;`:输出保存成功的消息。
27. `cout << "请输入要查找的日期(例如:2022-02-01):" << endl;`:提示用户输入要查找的日期。
28. `cin >> input_date;`:获取用户输入的日期字符串。
29. `ifstream infile;`:定义文件读取流。
30. `infile.open(filename, ios::in);`:以读取的方式打开文件。
31. `string line;`:定义每行读取的字符串变量。
32. `bool found = false;`:定义是否找到对应日期的标志变量。
33. `while (getline(infile, line))`:逐行读取文件内容。
34. `if (line.substr(0, 10) == input_date)`:判断当前行是否为对应日期的日记。
35. `found = true;`:标记为找到了对应日期的日记。
36. `cout << line << endl;`:输出日期和时间。
37. `while (getline(infile, line) && line != "----------------------------------------")`:读取日记内容,直到遇到分隔符。
38. `cout << line << endl;`:输出日记内容。
39. `break;`:退出循环。
40. `infile.close();`:关闭文件。
41. `if (!found)`:如果没有找到对应日期的日记。
42. `cout << "没有找到对应日期的日记!" << endl;`:输出提示消息。
43. `return 0;`:程序结束。