小森动画回忆录(二)-添加角色模块-迪迦篇

添加角色模块

#include "AnimatedCharacterProcess.h"
#include"menu.h"
#include<iostream>
#include"UseSelect.h"
using namespace std;

const int BatchAddLimits = 10;
static bool isInputStreamError() {
	if (!cin) {
		cin.clear();
		//刷新缓冲区
		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
		return true;
	}

	return false;
 }

static void ProcessSomeData(UltramanMainCharacter& C) {
	int pos = 0;
	if ((pos = C.realIdentity.find("无")) != string::npos) {
		C.realIdentity.insert(0, "(");
		C.realIdentity.append( ")");
		
	}

	if ((pos = C.dub.find("无")) != string::npos) {
		C.dub.insert(0, "(");
		C.dub.append(")");

	}

}

//添加并且更新的角色池
static void AddedAndUpdatedRolePool(vector<UltramanMainCharacter>& RolePool) {

	UltramanMainCharacter Character;

	while (true) {


		cout << "请输入角色名称:";
		cin >> Character.name;

		if (isInputStreamError()) {
			continue;
		}

		while (true) {
			cout << "请输入角色年龄(0-96):";
			cin >> Character.age;
			int age = Character.age;

			if ((age >= 0 || age < 96) || !isInputStreamError()) {
				break;
			}
		}
		while (true) {
			cout << "请输入角色职业:";
			cin >> Character.occupation;

			if (!isInputStreamError() && !Character.occupation.empty()) {
				break;
			}
		}
		while (true) {
			cout << "请输入角色是否隐藏身份(奥特曼 /无):";
			cin >> Character.realIdentity;

			if (!isInputStreamError() && !Character.realIdentity.empty()) {
				break;
			}
		}

		while (true) {
			cout << "请输入角色扮演者:";
			cin >> Character.role_player;

			if (!isInputStreamError() && !Character.role_player.empty()) {
				break;
			}
		}

		while (true) {
			cout << "请输入角色配音演员(若有:写这样的格式 日语:xxx ,国语:xxx  若没有就写:无):";
			cin >> Character.dub;

			if (!isInputStreamError() && !Character.dub.empty()) {
				break;
			}
		}

		ProcessSomeData(Character);

		RolePool.push_back(forward<UltramanMainCharacter>(Character));
		break;

	}
}

void AddUltramanMainCharacter(vector<UltramanMainCharacter>& RolePool) {

	int Select;

	bool Exit = false;

	while (!Exit) {

		cout << "1-单个添加" << endl;
		cout << "2-批量添加(不能超过" << BatchAddLimits << ")" << endl;
		cout << "请输入添加的类型:";

		cin >> Select;
		if (Select == 1) {

			UltramanMainCharacter Character;

	
			
			AddedAndUpdatedRolePool(RolePool);
			
			break;


		}else if (Select == 2) {

			int num;
			do{
				do {

					cout << "请输入批量添加数量:";
					cin >> num;
				
				} while (isInputValid());

				if (num > 0 || num <= BatchAddLimits) {
					cout << endl;
					for (size_t i = 0; i < num; i++) {

						cout << "第" << i + 1 << "次添加" << endl;
						AddedAndUpdatedRolePool(RolePool);
					}

					break;
				}
				else {

					cout << "你输入批量添加数量:";
				}
			} while (true);

			Exit = true;



		} else{
			//判断用户输入是否合法
			if (!isInputValid()) {
				cout << "没有以这个选项为:" << Select << endl << endl;
			 }
		}
	}
}

调用AddUltramanMainCharacter 这里有个问题 就是
UltramanSelectMenu 所有的变量是局部的
当然AddUltramanMainCharacter 函数体里也有局部
局部就是相当于临时 不稳定的,
不稳定的存储数据 你觉得会存储得了吗 存储不了 你没有这个能力 知道吗
怎么感觉这句话相当的熟悉?
范大将军?

当然你也可以自己管理 内存 和释放 优秀的程序员往往都会自己管理内存,当然有的时候,并不是
自己管理的内存也有可能 忘记释放导致内存泄漏,这个噩梦 能别碰尽量 别碰
指针存储的仓库 指针是啥玩意 指针相当于你的卫星定位 是不是不可思议呀 当然这是抽象的来说
具体的 还得家家户户有的门牌号
引用:C++的神来之笔: 引用相当于变量的别的代号 比如说刺客伍六七的 相当于伍六七

//迪迦选择菜单
bool UltramanSelectMenu(int Select) {

	bool IsExit = false;
	//相当于装水的杯子 只不过水是数据
	vector<UltramanMainCharacter> RolePool;

	switch (Select) {

	case 1://1.添加新角色 
		AddUltramanMainCharacter(RolePool);
		break;

	case 2://2.浏览角色

		break;

	case 3://3.浏览角色的关系  

		break;
	case 4://3.浏览角色的关系  

		break;

	case 0:
		IsExit = true;
		break;

	default:
		//std::cout << "输入有误!没有  " << Select << " 选项...." << std::endl;
		break;
	}
	return IsExit;
}

那怎么办既然放到这里不行
我放到 Ultraman 函数中 总可以了吧,提高生存周期模型 当然要想提高生存周期,必须自己分配 自己释放 !

void Ultraman(std::string Welcome){


	std::cout << Welcome << std::endl;

	//动画片名
	std::string  Cartoontitle;

	//截取动画片名
	Cartoontitle = InterceptSubString(Welcome);
	//休眠:1.5s
	sleep_for(1500ms);

	int Select;
	bool IsExit = false;
	

	//迪迦选择菜单
	vector<UltramanMainCharacter> RolePool;


	while (!IsExit) {

		system("cls");
		std::cout << "\t\t 动画片名:" << Cartoontitle << std::endl;

		UltramanMainMenu();

		Select = inputUseSelect();
		//参数菜单的数量
		if (isInputValid() || isInputIncorrect(Select, 4)) {
			continue;
		}
				//更新一下参数
		IsExit = UltramanSelectMenu(RolePool,Select);

	}

	return;
}
                 动画片名:迪迦奥特曼
*************************************************
[*************** 1.添加新角色 ******************]
[*************** 2.浏览角色 ********************]
[*************** 3.浏览角色的关系 **************]
[*************** 4.浏览角色的所有属性 **********]
[*************** 0.返回主系统 ******************]
*************************************************
请输入你的选择:1
1-单个添加
2-批量添加(不能超过10)
请输入添加的类型:1
请输入角色名称:圆大古
请输入角色年龄(0-96):36
请输入角色职业:  GUTS队员
请输入角色是否隐藏身份(奥特曼 /无):迪迦奥特曼
请输入角色扮演者:长野博
请输入角色配音演员(若有:写这样的格式 日语:xxx ,国语:xxx  若没有就写:无):日语:长野博,国语:金锋
叮! 数据已经同步到文件中....! 数据已经同步完成! 

文件?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值