Created
December 5, 2017 00:15
-
-
Save anderson-marin26/da51d07224cd4970c6e73c889a92c9b4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Programa ponto de Venda | |
//FATEC - MC - Anderson - 04/05/2016 | |
#include "PontoDeVenda.h" | |
// Função que pede um código de produto válido ou zero para | |
// cancelar a transação da main que está sendo executada | |
// Parâmetros: | |
// Entrada: char *szAcao - ponteiro para um string que indica qual | |
// é a transação que está sendo executada | |
int PedeUmProdutoValido(char *szAcao, CONFIGURACAO stConfig) | |
{ | |
int nCodigo = 0; // para receber o código do produto | |
cout << "\n\tAção: " << szAcao << endl; | |
do | |
{ | |
cout << "Informe um código entre 1 e " << stConfig.nQtdeProdutos << endl | |
<< "Ou zeros para cancelar a transação: "; | |
cin >> nCodigo; // pede o código | |
if (nCodigo == 0) // cancelar a transação? | |
return 0; // indica que a transação foi cancelada | |
} while (nCodigo < 1 || nCodigo > stConfig.nQtdeProdutos); | |
return nCodigo; // devolve o código que foi digitado | |
} | |
// | |
//Entry point do Programa | |
// | |
void main(void) | |
{ | |
CONFIGURACAO stConfig; //struct para conter a configuração | |
PRODUTO stProduto; //para conter os dados de um produto | |
int i, nCodigo; | |
char cOpcao, //recebe a opçao de escolha do operador | |
cWork[200]; //para edições com o sprintf | |
SYSTEMTIME stTime; // struct para data e hora do sistema | |
FILE *fdConfig, //file descriptor do arquivo de configuração | |
*fdProduto; //idem arquivo de cadastro de produtos | |
setlocale(LC_ALL, "portuguese_brazil"); | |
//abrir o arquivo de configuração em modo leitura/binário | |
if (fopen_s(&fdConfig, CAMINHO_CONFIG, "rb") != 0) //erro de abertura? | |
{//não sendo aberto significa q é a primeira vez o programa é executado | |
if (fopen_s(&fdConfig, CAMINHO_CONFIG, "wb") != 0) //erro de abertura? | |
{//erro irrecuperável | |
cout << "Erro de ABertura da configuração!" << endl; | |
PAUSA; | |
exit(-1); //retorna ao S.O. em condição de erro | |
} | |
//configurar o programa | |
cout << "Informe quantidade de produtos: "; | |
cin >> stConfig.nQtdeProdutos; | |
cin.ignore(1, EOF); //ignora a tecla enter anterior | |
cout << "Razão social: "; | |
cin.getline(stConfig.cRazaoSocial, EXTENSAO_RAZAO, '\n'); | |
GetLocalTime(&stTime); //data e hora do sistema | |
stConfig.stDtInicio.nDia = stTime.wDay; | |
stConfig.stDtInicio.nMes = stTime.wMonth; | |
stConfig.stDtInicio.nAno = stTime.wYear; | |
if (fwrite(&stConfig, sizeof(CONFIGURACAO), 1, fdConfig) == 0) //erro gravação? | |
{//erro irrecuperável de gravação | |
fclose(fdConfig); //fecha o arquivo | |
cout << "Erro de gravação da configuração!" << endl; | |
PAUSA; | |
exit(-1); | |
} | |
//abrir o arquivo de produtos em modo gravação/leitura/binário | |
if (fopen_s(&fdProduto, CAMINHO_CADASTRO, "w+b") != 0) //erro de abertura? | |
{ | |
fclose(fdConfig); | |
cout << "Erro de Abertura do cadastro de Produtos" << endl; | |
PAUSA; | |
exit(-1); | |
} | |
//"Formatar" o arquivo de produtos com todos inativos | |
for (i = 0; i < stConfig.nQtdeProdutos; i++) | |
{ | |
stProduto.nCodProduto = i + 1; | |
stProduto.cAtivo = INATIVO; //produto não existe | |
stProduto.dPrecoUnit = 0.0; //zerar preço unitario | |
stProduto.cDescricao[0] = NULL; //string vazio | |
if (fwrite(&fdProduto, sizeof(PRODUTO), 1, fdProduto) == 0) //erro de gravação? | |
{//erro irrecuperável | |
fclose(fdConfig); //fecha o arquivo de configuração | |
fclose(fdProduto); //fecha o arquivo de cadastro | |
cout << "Erro de Gravação do produto!" << endl; | |
exit(-1); | |
} | |
}//for i | |
}//primeira vez | |
else | |
{//não é a primeira vez | |
if (fread_s(&stConfig, sizeof(CONFIGURACAO), sizeof(CONFIGURACAO), 1, fdConfig) == 0) //erro de leitura?? | |
{//erro irrecuperável | |
fclose(fdConfig); | |
cout << "Erro de Leitura da Configuração!" << endl; | |
PAUSA; | |
exit(-1); | |
} | |
//abrir o arquivo de produto em modo leitura/gravação/binário | |
if (fopen_s(&fdProduto, CAMINHO_CADASTRO, "r+b") != 0) //erro de abertura? | |
{//erro irrecuperável | |
fclose(fdConfig); | |
cout << "Erro de Abertura do Cadastro!" << endl; | |
PAUSA; | |
exit(-1); | |
} | |
}//os dois arquivos foram abertos | |
//loop infinito do programa | |
while (true) | |
{ | |
LIMPAR_TELA; | |
GetLocalTime(&stTime); | |
sprintf_s(cWork, sizeof(cWork), "\n\tPonto de Venda de %s %02d/%02d/%04d ás %02d:%02d:%02d Dt.Inicio %02d/%02d/%04d", | |
stConfig.cRazaoSocial, | |
stTime.wDay, | |
stTime.wMonth, | |
stTime.wYear, | |
stTime.wHour, | |
stTime.wMinute, | |
stTime.wSecond, | |
stConfig.stDtInicio.nDia, | |
stConfig.stDtInicio.nMes, | |
stConfig.stDtInicio.nAno); | |
cout << cWork << endl; | |
//exibir o menu de opções | |
cout << CADASTRAR_PRODUTO << " - Cadastrar novo Produto" << endl; | |
cout << EXCLUIR_PRODUTO << " - Excluir um produto existente" << endl; | |
cout << MOSTRAR_PRODUTO << " - Exibir dados de um produto" << endl; | |
cout << VENDER_PRODUTO << " - Vender um produto" << endl; | |
cout << SAIR_DO_PROGRAMA << " - Sair do Programa" << endl; | |
cout << "\tSelecione: "; | |
cin >> cOpcao; | |
cOpcao = toupper(cOpcao); | |
switch (cOpcao) | |
{ | |
case CADASTRAR_PRODUTO: | |
nCodigo = PedeUmProdutoValido("Cadastrar Produto", stConfig); | |
if (nCodigo == 0) | |
break; | |
if (stProduto.cAtivo == true) | |
{ | |
cout << "Produto já cadastrado!" << endl; | |
PAUSA; | |
break; | |
} | |
else | |
{ | |
cin.ignore(1, EOF); | |
cout << "Informe as caracteristicas do produto: " << endl; //pede as características do produto | |
cin.getline(stProduto.cDescricao, EXTENSAO_DESCRICAO - 1, '\n'); //mais de uma palavra armazenada | |
cout << "Qual o preço unitario do produto?" << endl << "R$"; //pergunta o preço do produto | |
cin >> stProduto.dPrecoUnit; //armazena o preço | |
stProduto.cAtivo = ATIVO; //define o código do produto como "ocupado" | |
cout << "Produto Cadastrado com sucesso!" << endl; //informa sucesso no cadastro | |
PAUSA; //pausa para leitura | |
// 6. Voltar ao menu | |
break; //volta ao menu | |
} | |
break; | |
case EXCLUIR_PRODUTO: | |
break; | |
case MOSTRAR_PRODUTO: | |
break; | |
case VENDER_PRODUTO: | |
break; | |
case SAIR_DO_PROGRAMA: | |
cout << "Sair realmente? (s ou n): "; | |
cin >> cOpcao; | |
if (cOpcao == 's' || cOpcao == 'S') //sair realmente? | |
{//vai sair realmente | |
fclose(fdConfig); | |
fclose(fdProduto); | |
exit(0); //retorna ao S.O. sem erro | |
} | |
break; | |
default: | |
cout << "\n\tOpção inválida!" << endl; | |
PAUSA; | |
} | |
}//while | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment