Você está na página 1de 6

#include <iostream>

#include <stdlib.h>
#include <fstream>
#include <cstring>
#include <limits>
using namespace std;

typedef struct
{
int codigo;
char marcaModelo[50], placa[7], categoria, situacao;

} Veiculo;

//Validacoes
int validaInt(string mensagem);
void validaPlaca(string mensagem,char vetor[]);
void validaMarca(string nome,char vetor[]);
int validaInt(string mensagem);
char validaCarac(string mensagem, char a, char b,char c, string d, string e,string
f);

//Impressoes e ordenacao
void imprimiMenu();

//ADD
void incluirVeiculo(int codigo,char marcaModelo[],char placa[],char categoria,char
situacao);

bool veiculoExiste(char placa[]);

//Relatorios
void relatorioVeiculosPorCategoria(char categoria,bool &carroEncontra);

int main()
{
int opcao,codigo=1;
char marcaModelo[50], placa[7], categoria, situacao,escolhaExibir;
bool carroEncontra;

do
{
system("cls");
imprimiMenu();
opcao = validaInt("Informe a sua opcao: ");

switch (opcao)
{
case 1:
system("cls");
cout << "******** INCLUSAO DE VEICULO ********" << endl << endl;
validaPlaca("Informe sua placa de carro (LLLNNNN): ",placa); // ARRUMAR
A VALIDACAO PARA ELE AJUSTAR TODAS AS LETRAS EM CAPS LOCK
if("? "){ // COLOCAR O ACHADO
validaMarca("Insira o nome do carro",marcaModelo); // DEPOIS DE 1
TENTATIVA E DEIXAR TUDO EM BRANCO ELE DA PROBLEMA
categoria = validaCarac("Informe a categoria do
carro:",'B','I','S',"Basico","Intermediario","Super"); // RETORNEI CHAR EM VEZ DE
STRING COMO NO OUTRO TRABALHO
situacao = 'D'; // Sempre disponivel para nao dar problema
incluirVeiculo(codigo,marcaModelo,placa,categoria,situacao);

codigo+=1; // AUMENTA TODA VEZ QUE TEM OUTRO CARRO

}else{
cout<<"Ja existe um carro com esta placa"<<endl;

system("pause");
break;

case 2:

system("cls");
cout << "*********** LOCACAO DE VEICULO ***********" << endl;
carroEncontra = false;
escolhaExibir = validaCarac("Informe a categoria do carro que voce
deseja fazer uma locacao:",'B','I','S',"Basico","Intermediario","Super");
relatorioVeiculosPorCategoria(escolhaExibir,carroEncontra); //
Verificar depois de alterar
if (!carroEncontra) {
cout << "Nenhum veiculo disponível encontrado na categoria
"<<escolhaExibir<< endl;
}
system("pause");
break;

case 3:
system("cls");
cout << "******** DEVOLUCAO DE VEICULO LOCADO ********" << endl;

system("pause");

break;

case 4:
system("cls");
cout << "******** RELATORIO ********" << endl << endl;
system("pause");
break;

case 5:

cout << endl << "Programa finalizado. Obrigado pela preferencia!!" <<
endl;
return 0;
break;

default:
cout<< endl << "Opcao invalida." << endl;
system("pause");
system("cls");
break;
}
}
while(opcao!=5);
return 0;

// Validacoes
-----------------------------------------------------------------------------------
----------

int validaInt(string mensagem)


{
string numero;
int num;
unsigned int i;
bool validada;

cout << mensagem;

do
{
do
{
validada=true;
getline(cin,numero); // ler string!!!

if(numero=="")
{
validada=false;
}

else if(not isdigit(numero[0]) and numero[0]!='-')


{
validada=false;
}
else
for(i=1; i<numero.length(); i++)
if(not isdigit(numero[i]))
{
validada=false;
break;
}
if(!validada)
cout <<"Numero invalido, digite novamente: ";
}
while(!validada);
num=atoi(numero.c_str());

if(num<0)
{
cout <<"Numero menor que zero, digite novamente: ";
}
}
while(num<0);
return num;
}
void validaPlaca(string mensagem,char vetor[])
{
string placa;
bool validada;
cout<<mensagem<<endl;

do
{
validada = true;
getline(cin, placa);

if (placa.length() != 7)
{
validada = false;
}
else
{
for (int i = 0; i < 3; i++)
{
if (!isalpha(placa[i]))
{
validada = false;
break;
}
}

for (int i = 3; i < 7; i++)


{
if (!isdigit(placa[i]))
{
validada = false;
break;
}
}
}

if (!validada)
{
cout << "Placa invalida, digite novamente: ";
}

}
while (!validada);
strcpy(vetor, placa.c_str());
}

void validaMarca(string mensagem, char vetor[]) {


string nome;
cout << mensagem << endl;
char caracteresValidos;

do {
caracteresValidos = true;
getline(cin, nome);
if (nome.empty() or nome.length() > 50) {
cout << "Nome invalido. Digite um nome valido com no maximo 50
caracteres." << endl;
caracteresValidos = false;
} else {
for (int i = 0; i < nome.size(); i++) {
if (!isalpha(nome[i]) and !isspace(nome[i])) {
caracteresValidos = false;
break;
}
}

if (!caracteresValidos) {
cout << "Nome invalido. Use apenas letras e espacos." << endl;
}
}
} while (nome.empty() or nome.length() > 50 or !caracteresValidos);

strcpy(vetor, nome.c_str());
}

char validaCarac(string mensagem, char a, char b,char c, string d, string e,string


f)
{
char letra;

cout << mensagem<<a<<"-"<<d<<" "<<b<<"-"<<e<<" "<<c<<"-"<<f<<":"<<endl;

letra = getchar();
letra = toupper(letra);

while((letra!=a) and (letra!=b) and(letra != c))


{
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout <<"Caracatere invalido, informe novamente: ";
letra = getchar();
letra = toupper(letra);
}
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if(letra == a)
{
return a;
}else{
if(letra == b)
{
return b;
}
}
return c;
}

// Impressao e relatorio
----------------------------------------------------------------------------------
void imprimiMenu()
{
cout<<"------------------------"<<endl;
cout << "Controle de Locacao de Veiculos: " << endl;
cout<<" 1 - Inclusao de veiculo"<<endl;
cout<<" 2 - Locacao de veiculo"<<endl;
cout<<" 3 - Devolucao de veiculo locado"<<endl;
cout<<" 4 - Relatorio"<<endl;
cout<<" 5 - Fechar programa" << endl;
cout<<"------------------------"<<endl;
}
//incluir
void incluirVeiculo(int codigo,char marcaModelo[],char placa[],char categoria,char
situacao){
Veiculo novoVeiculo;
novoVeiculo.codigo = codigo;
strcpy(novoVeiculo.marcaModelo, marcaModelo); // JA USEI O STRCPY DEVO USAR DNV
COMO AGR?
strcpy(novoVeiculo.placa, placa);
novoVeiculo.categoria = categoria;
novoVeiculo.situacao = situacao;
ofstream arquivo("FROTA.DAD", ios::binary | ios::app);

if (!arquivo.is_open())
{
cerr << "Erro ao abrir o arquivo" << endl;
exit(1);
}
arquivo.write((char *)(&novoVeiculo), sizeof(Veiculo));
cout<<"Veiculo incluido com sucesso"<<endl;
arquivo.close();
}

// Relatorio
void relatorioVeiculosPorCategoria(char categoria, bool &encontrado) {
ifstream arquivo("FROTA.DAD", ios::binary);

if (!arquivo) {
cerr << "Erro ao abrir o arquivo" << endl;
exit(1);
}

Veiculo veiculo;
encontrado = false;

cout << "------------------------" << endl;


cout << "Relatorio de Veiculos Disponíveis da Categoria " << categoria << endl;
cout << "------------------------" << endl;

while (arquivo.read((char *)(&veiculo), sizeof(Veiculo))) {


if (veiculo.categoria == categoria and veiculo.situacao == 'D') {
cout << "Codigo: " << veiculo.codigo << endl;
cout << "Marca/Modelo: " << veiculo.marcaModelo << endl;
cout << "Placa: " << veiculo.placa << endl;
cout << "Situacao: " << veiculo.situacao << endl;
cout << "------------------------" << endl;
encontrado = true;
}
}

arquivo.close();
}

Você também pode gostar