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;`:程序结束。

相关推荐

最新推荐

recommend-type

linux系统中c++写日志文件功能分享

主要介绍了linux系统中c++写日志文件功能,简化了glog,只保留了写日志文件的功能,只是改写了linux版本,需要的朋友可以参考下
recommend-type

C++稀疏矩阵的各种基本运算并实现加法乘法

今天小编就为大家分享一篇关于C++稀疏矩阵的各种基本运算并实现加法乘法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

C++实现新年贺卡程序

主要为大家详细介绍了C++实现贺卡程序,C++应用程序编写的雪花贺卡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C++实现会员管理程序

主要为大家详细介绍了C++实现会员管理程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

vscode使用官方C/C++插件无法进行代码格式化问题

官方的C/C++插件是支持使用.clang-format配置文件进行自定义风格代码格式化的,无需另外安装clang-format插件。 但是使用clang-format -style=llvm -dump-config &gt; .clang-format导出的默认配置文件进行格式化的时候...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。