目录

一、C++按要求随机生成数据

1、题目要求

2、代码实现

二、C++文件操作

1、文件操作说明

2、读取文件

3、写入文件


一、C++按要求随机生成数据

1、题目要求

  1. 用名称、人口、海拔高度、天气、年份等数据成员建立一个名为City的类。建立一个产生City对象的类。
  2. 将产生的City对象(数量大于200个)填充至一个容器,容器的类型自选。
  3. 对于City对象的具体属性值通过创建发生器来生成。生成规则如下:年份为2006年;名称由4-8个英文小写字符随机构成;人口在范围[100000,10000000)内随机选取;海拔高度在范围[0,4000)米内随机选取;上述三值均不可重复;天气在枚举常量表中{Rainy,Snowy,Cloudy,Sunny}随机选取(1年天气取12个值,即每月一个值)。
  4. 容器填充完毕后,将其内容写入一个名为City.txt的文件。

2、代码实现

#include<iostream>
#include<vector>
#include<string>
#include<time.h>
#include<algorithm>
using namespace std;

//天气在枚举常量中表示
enum Enum_weather       
{
	Rainy=0,Snowy,Cloudy,Sunny
};
//创建城市类
class City      
{
public:
	int year;
	//char *name;
	string name;
	int persons;
	int elevation;
	char *weather[12];
	City()
	{
		//neme=new char[10];
	}
	~City(){}
};
//随机生成字符串函数
char *rand_str(char *str)     
{
	int i,n;
	n=rand()%5;
	for(i=0;i<n+4;++i)
	{
		str[i]='a'+rand()%26;
	}	
	str[++i]='\\0';
	return str;
}
//枚举类型转化为char*
static inline char* weather_str(enum Enum_weather w)      
{  
	char *strings[] = {"Rainy", "Snowy", "Cloudy", "Sunny",};  
	return strings[w];  
}
int main()
{
	srand((unsigned)time(NULL)); 
	vector<City>ve(215);
	for (int i=0;i<215;i++)  //将随机获取每个城市的数据写入vector中
	{
		ve[i].year=2006;
		ve[i].persons=rand()%(10000000 - 100000 + 1) + 100000;  //在某范围内随机获取数值
		ve[i].elevation=rand()%(4000-0+1)+0;	
		char name1[10]={};
		rand_str(name1);   //调用rand_str()函数随机生成城市名称字符串
		ve[i].name=name1;
		for (int j=0;j<12;j++)          
		{
			int n=rand()%4;
			Enum_weather w1=(enum Enum_weather)(n);
			char* nc=weather_str(w1);   //调用weather_str()函数将枚举类型值转化为char*
			ve[i].weather[j]=nc;
		}
	}
	//将2006年各个城市的数据信息写入City.txt文本文件中
	FILE *fp;
	fp=fopen("D://City.txt","w+");
	fprintf(fp,"年份   城市名称   城市人口   海拔高度   1月天气   2月天气    3月天气    4月天气    5月天气    6月天气    7月天气    8月天气    9月天气    10月天气   11月天气   12月天气\n");
	for (int i=0;i<215;i++)
	{
		char name2[10]={};
		for (int k=0;k<ve[i].name.size();k++)    //string类型转char数组
		{
			name2[k]=ve[i].name[k];
		}
		fprintf(fp,"%d%10s%10d%10d",ve[i].year,name2,ve[i].persons,ve[i].elevation);
		for (int j=0;j<12;j++)
		{
			fprintf(fp,"%11s",ve[i].weather[j]);
		}
		fprintf(fp,"\n");
	}
	fclose(fp);
}

二、C++文件操作

1、文件操作说明

文件操作头文件: #include<fstream>

ifstream ifile; //创建输入文件流对象ifile

ofstream ofile; //创建输出文件流对象ofile

说明:

  • 文件流类型ifstream支持从输入文件中提取数据的操作。
  • 文件流类型ofstream完成数据写入输出文件中的各种操作。
  • ifile是输入文件流对象,用于读;ofile是输出文件流对象,用于写。

指定路径和打开方式

ofile.open(文件路径,打开方式);例:ofile.open("e:/data/results", std::ios::app); //追加方式打开

打开方式说明:

  • ios::in     读文件打开
  • ios::out    写文件打开
  • ios::ate    从文件尾打开
  • ios::app    追加方式打开
  • ios::trunc    如果已经有文件先删除
  • ios::binary    二进制方式

文件关闭

  • ifile.close();   //文件操作结束后,应该显式地关闭该文件,与打开文件相对应
  • ofile.close();   //关闭文件时,系统把与该文件相关联的文件缓冲区中的数据写到磁盘文件中,保证文件的完整;同时把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。

2、读取文件

#include<fstream>
#include<vector>
#include<iostream>
#include<string>
using namespace std;

//读取文件,将文件内容存入vector
void read_file(vector<string>& v, string file)
{
	ifstream ifile(file);
	string temp;
	if (!ifile.is_open())
	{
		cout << "未成功打开文件" << endl;
	}
	while (getline(ifile, temp))
	{
		//cout << temp << endl;
		v.push_back(temp);
	}
	ifile.close();   //关闭文件
}

int main()
{
	string file = "e:/data/test";
	vector<string> vec;
	read_file(vec, file);   //读取文件内容
	cout << "Count:" << vec.size() << endl;
}

3、写入文件

#include<fstream>
#include<iostream>
using namespace std;
int main()
{
	string file = "e:/data/test";
	ofstream ofile(file, std::ios::app);  //将文本数据写入文件
	ofile << "文本数据\t"<< endl;   //写入文件
	ofile.close();   //关闭文件
}

ClassProjectCity-C++实现课程设计源码资源下载:

ClassProjectCity-C++实现课程设计源码资源.zip-C++文档类资源-CSDN下载

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐