当前位置: 首页 > article >正文

C++文件流 例题

 问题:

设计一个留言类,实现以下的功能: 
1) 程序第一次运行时,建立一个 message.txt 文本文件,并把用户输入的信息存入该文件; 
2) 以后每次运行时,都先读取该文件的内容并显示给用户,然后由用户输入新的信息,退出时将新的信息存入这个文档。
文件的内容,既可以是最新的信息,也可以包括以前所有的信息,用户可自己选择。


代码:

#include <iostream>
#include <fstream>
#include <unistd.h>

#define MESSAGE_FILE_PATH "message.txt"

using namespace std;

int menu();

// Message
class Message{
public:
	string message;
	fstream message_file;
	void first_run(); // 第一次运行
	void run(); // 普通运行
	void display(); // 读输出
};

int main(){
	cout<<"*******welcome********"<<endl;
	Message data;
	cout<<"Please leave a message:";
	cin>>data.message; // 从键盘输入数据
	if(access(MESSAGE_FILE_PATH,F_OK))    data.first_run(); // 如果文件不存在
	else data.run();
	return 0;
}

// 读输出
void Message::display(){
	message_file.open(MESSAGE_FILE_PATH,ios::in|ios::binary); // 打开文件
	if(message_file.fail()){ // 打开失败
		cout<<"open file failed"<<endl;
		return ;
	}
	string line;
	cout<<"************************"<<endl;
	cout<<"previous message: ";
	while(getline(message_file,line))	cout<<line<<endl;
	message_file.close();
}
// 第一次运行
void Message::first_run(){
	message_file.open(MESSAGE_FILE_PATH,ios::out|ios::binary); // 创建打开文件
	if(message_file.fail()){ // 打开失败
		cout<<"open file failed"<<endl;
		return ;
	}
	message_file<<message; // 写文件
	cout<<"write ok,message is \""<<message<<"\"."<<endl;
	message_file.close(); // 关闭文件
}
// 正常运行
void Message::run(){
	int choose = 0;
	
	Message::display(); // 读输出
	
	choose = menu();
	if(choose == 1){ // 追加
		message_file.open(MESSAGE_FILE_PATH,ios::app|ios::binary); // 追加打开文件
		if(message_file.fail()){ // 打开失败
			cout<<"open file failed"<<endl;
			return ;
		}
	}
	else{ // 覆盖
		message_file.open(MESSAGE_FILE_PATH,ios::out|ios::binary); // 清空打开文件
		if(message_file.fail()){ // 打开失败
			cout<<"open file failed"<<endl;
			return ;
		}
	}
	message_file<<message; // 写文件
	cout<<"write success,new message is \""<<message<<"\"."<<endl;
	message_file.close(); // 关闭文件
}
// 菜单
int menu(){
	int choose,flag = 0;
	
	while(1){
		cout<<"************************"<<endl;
		cout<<"*         1.追加       *"<<endl;
		cout<<"*         2.覆盖       *"<<endl;
		cout<<"************************"<<endl;
		cin>>choose;
		switch(choose){
		case 1:
			flag = 1;
			break;
		case 2:
			flag = 1;
			break;
		default:
			cout<<"please choose again..."<<endl;
		}
		if(flag)	break;
	}
	return choose;
}

输出:

第一次运行:


追加写


覆盖写


http://www.kler.cn/a/467356.html

相关文章:

  • react axios 优化示例
  • SQL—Group_Concat函数用法详解
  • CSS——5. 外部样式
  • git 创建tag, 并推送到远程仓库,启动actions构建release自动发布
  • Swift Combine 学习(五):Backpressure和 Scheduler
  • PCA降维算法详细推导
  • 电子应用设计方案86:智能 AI背景墙系统设计
  • 激活函数概述及对比
  • 计算机网络 (24)网际控制报文协议ICMP
  • Excel导出功能:vue2+SpringBoot
  • 4.3 最短路径问题:Dijkstra、Floyd
  • tensorflow 内存错误
  • NS4866 500mA 多功能锂电池充放电管理IC
  • django vue3实现大文件分段续传(断点续传)
  • unity学习3:如何从github下载开源的unity项目
  • 数字0、字符‘0’、转义字符‘\0’、NULL有什么区别?
  • Profinet转EtherNet/IP网关连接AB PLC的应用案例
  • Word如何设置整段背景色
  • 成立一家无人机培训机构需要哪些基础配置
  • 机器学习 - 线性回归
  • Http基础认证摘要认证
  • uniapp实现后端数据i18n国际化
  • [CTF/网络安全] 攻防世界 get_post 解题详析
  • 基于Java+Netty搞了个类似teamviewer、向日葵、ToDesk的远程桌面工具
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机
  • Ruby 中文编码