C++按要求随机生成数据并写入文件

简介: 题目要求:     (1) 用名称、人口、海拔高度、天气、年份等数据成员建立一个名为City的类。建立一个产生City对象的类。

题目要求:

     (1) 用名称、人口、海拔高度、天气、年份等数据成员建立一个名为City的类。建立一个产生City对象的类。

     (2)将产生的City对象(数量大于200个)填充至一个容器,容器的类型自选。

     (3)对于City对象的具体属性值通过创建发生器来生成。生成规则如下:年份为2006年;名称由4-8个英文小写字符随机构成;人口在范围[100000,10000000)内随机选取;海拔高度在范围[0,4000)米内随机选取;上述三值均不可重复;天气在枚举常量表中{Rainy,Snowy,Cloudy,Sunny}随机选取(1年天气取12个值,即每月一个值)。

    (4)容器填充完毕后,将其内容写入一个名为City.txt的文件。

代码实现如下:

#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);
}






相关文章
|
23天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
36 5
|
9月前
|
存储 Serverless 数据安全/隐私保护
C++ 类的成员函数和数据成员的技术性探讨
C++ 类的成员函数和数据成员的技术性探讨
125 0
|
6月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
130 1
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
6月前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
66 2
|
6月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
6月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
|
6月前
|
存储 安全 数据处理
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
140 1
|
7月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
80 5
|
7月前
|
设计模式 监控 Go
开发与运维C++问题之C++部分原有的数据发送能力如何解决
开发与运维C++问题之C++部分原有的数据发送能力如何解决
36 1
|
7月前
|
存储 数据格式 运维
开发与运维C++问题之更改数据模型为通用数据结构如何解决
开发与运维C++问题之更改数据模型为通用数据结构如何解决
36 1