C++高级程序设计--City城市

本文介绍了一道高级程序设计题目,涉及C++实现城市信息管理。包括生成City类对象、人口增长计算、天气筛选、海拔筛选、排序、机场选址等多个功能,要求使用rand()函数、文件流、容器、排序算法等技巧。
摘要由CSDN通过智能技术生成

高级程序设计题目

1、按照要求随机生成City信息

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

2、根据2009年人口信息计算2010-2019年的人口,并保存至文件中

从2009年至2019年间, 各城市人口按照n%的速度进行变化。 以题目1中生成数据作为2009年数据计算各城市从2009年到2019年各年的人口数, 其中n的值在-10到+10间随机选取。 计算完毕后将数据重新写回文件City.txt。 (提示:用transform算法完成) 注意:可按照年份存储10个文件, 依次存储10年的数据(文件名依次为City2009,City2010…) 。也可将所有数据存储在一个文件中;每年的天气数据按照题目1的规则同样生成。

3、筛选符合人口数目的城市

设计算法, 对2009年至2019年间的各城市按照其人口数进行查找, 找出这10年里人口最多、 最少和人口处于中位数的各个城市。 (采用operator<进行排序) 。 结果写入文件Population.txt , 格式为“年份, 最多人口城市名称, 最少人口城市名称, 中位数人口城市名称” 。

4、筛选符合天气要求的城市

设计算法, 查找2009年到2019年的10年间,每年拥有最好天气数量的城市(即Sunny最多) , 结果写入文件Weather.txt, 格式为“年份, 城市名称,Sunny数量” 。

5、筛选符合海拔高度要求的城市

找出所有海拔在1000-3500米的城市, 结果写入文件altitude.txt。

6、按照海拔对城市排序

使用中的函数对象, 至少使用两种不同的方式按照海拔对城市进行排序(升序和降序各一次, 并展示结果) 。

7、选取符合要求的城市建立机场

现在需要在某些城市建立机场。 选取城市的规 则 为 : 1 、 好 天 气 ( Sunny 数 量 ) 排 前 100(2009-2019年间好天气的平均值) ; 2、 海拔高度在0-2500米; 3、 选中城市中不能有两个城市的海拔高度相差100米, 有则选取海拔较低的城市。 4、 人口数量排前100 ( 2009-2019年间人口数的平均值) 。 选择结果写入文件Airport.txt。

设计思路

1、设计过程中涉及到的知识点

(1)C++类的定义及使用,建City类
(2)利用rand()函数和srand((unsigned)time(NULL)); 对城市的基本属性值随机赋值
(3)Enum枚举常量的定义及使用
(4)C++文件流操作,用于将城市信息保存至文件中
(5)vector容器的使用,用于保存城市信息
(6)string类型字符串的分割,用于将从文件中读取到的城市信息保存至容器中
(7)transform()函数的重载使用
(8)sort()函数的重载使用

2、设计过程的思路

(1)rand()函数

程序中很多地方需使用该函数,因此为使用方便,对其进行宏定义。

// 生成[i,j]之间的随机数,城市名称4-8位
#define random1(i,j) {rand()%(j-i+1)+i}
// 生成[i,j)之间的随机数,城市人口[300000,10000000),海拔高度[0,5000)
#define random2(i,j) {rand()%(j-i)+i}

(2)按照要求生成City城市的信息并保存至City.txt文件中

建City类,并在City类中声明题目所要求的城市名称、城市人口、海拔高度、天气、年份这些属性,为方便计算每个城市好天气数量,因此在City类中还声明了int类型的好天气变量以记录每个城市每年的好天气数量。
第一步:随机生成城市名称,由4-8个英文小写字母构成。

string setName()// 生成城市名称
{
   
	string cityName = "";  // 城市名称
	int num; // 名称是4-8位
	num = random1(4, 8);
	for (int i = 0; i < num; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值