2) Uma empresa prestadora de serviços armazena informações sobre os serviços prestados. Sabe-se que a empresa pode realizar no máximo três serviços diariamente. É de interesse de sua direção manter um histórico mensal (30 dias) sobre os serviços prestados.
A empresa realiza quatro tipos de serviços: 1) pintura; 2) jardinagem; 3) faxina e 4) reforma em geral. Cada serviço realizado deve ser cadastrado com as seguintes informações: número do serviço, valor do serviço, código ddo serviço e ccódigo do cliente.
Cadastre os quetro tipos de serviços (códdigo e descrição) que a empresa poderá realizar. Para isso, utilize um vetor de quatro posições.
O programa deverá mostrar o seguinte menu de opções:
1. Cadastrar os tipos de serviços.
2. Cadastrar os serviços prestados.
3. Mostrar os serviços prestados em determinado dia.
4. Mostrar os serviços prestados dentro de um intervalo de valor.
5. Mostrar um relatório geral (separado por dia), que exiba, inclusive, a descrição do tipo do serviço.
6. Finalizar.
Para a opção 1: deve-se cadastrar os tipos de serviços oferecidos pela empresa, com código e descrição.
Para a opção 2: deve-se considerar que deverão ser cadastrados os serviços prestados ao longo do mês.
Em cada dia podem ser cadastrados, no máximo três serviços prestados.
Utilize uma matriz capaz de armazenar em cada posição todas as informações referentes a um serviço prestado. Cada linha representa um dia do mês. Dessa maneira, considere a matriz com dimensão 30 x 3.
Solicite o dia em que o serviço foi prestado e as demais informações.
Lembre-se de que a empresa só pode prestar os serviços que já tenham sido cadastrados no vetor de tipo de serviços.
Caso o usuário tentar cadastrar mais de três serviços prestados em um mesmo dia, também deverá mostrar uma mensagem de erro.
Para a opção 3: o programa deverá receber o dia que se deseja consultar e mostrar os respectivos serviços prestados.
Para a opção 4: o programa deverá receber o valor mínimo e o valor máximo e mostrar os serviços prestados que estiverem nesse intervalo.
Para a opção 5: o programa deverá mostrar todos os serviços prestados, conforme o exemplo a seguir.
Dia 01
Nº do serviço | Valor do serviço | Código do Serviço | Descrição | Código do cliente |
100 | R$ 200,00 | 1 | Pintura | 1 |
150 | R$ 100,00 | 3 | Faxina | 5 |
Dia 02
Nº do serviço | Valor do serviço | Código do Serviço | Descrição | Código do cliente |
301 | R$ 600,00 | 4 | Reforma em feral | 1 |
280 | R$ 352,00 | 1 | Pintura | 5 |
Código: Selecionar todos
#include <stdio.h>
#include <string.h>
#define MAX_SERVICOS_DIA 3
#define DIAS_MES 30
#define MAX_TIPOS_SERVICOS 4
typedef struct {
int numero;
float valor;
int codigoServico;
int codigoCliente;
} Servico;
typedef struct {
int codigo;
char descricao[30];
} TipoServico;
void cadastrarTiposDeServicos(TipoServico tipos[], int *tiposCadastrados);
void cadastrarServico(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados);
void mostrarServicosPorDia(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados);
void mostrarServicosPorIntervalo(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados);
void mostrarRelatorioGeral(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados);
int main() {
Servico servicos[DIAS_MES][MAX_SERVICOS_DIA] = {0};
int servicosPorDia[DIAS_MES] = {0};
TipoServico tipos[MAX_TIPOS_SERVICOS];
int tiposCadastrados = 0;
int opcao;
do {
printf("\nMenu de opções:\n");
printf("1. Cadastrar os tipos de serviços\n");
printf("2. Cadastrar os serviços prestados\n");
printf("3. Mostrar os serviços prestados em determinado dia\n");
printf("4. Mostrar os serviços prestados dentro de um intervalo de valor\n");
printf("5. Mostrar relatório geral\n");
printf("6. Finalizar\n");
printf("Escolha uma opção: ");
scanf("%d", &opcao);
switch (opcao) {
case 1:
cadastrarTiposDeServicos(tipos, &tiposCadastrados);
break;
case 2:
cadastrarServico(servicos, servicosPorDia, tipos, tiposCadastrados);
break;
case 3:
mostrarServicosPorDia(servicos, servicosPorDia, tipos, tiposCadastrados);
break;
case 4:
mostrarServicosPorIntervalo(servicos, servicosPorDia, tipos, tiposCadastrados);
break;
case 5:
mostrarRelatorioGeral(servicos, servicosPorDia, tipos, tiposCadastrados);
break;
case 6:
printf("Encerrando o programa.\n");
break;
default:
printf("Opção inválida! Tente novamente.\n");
}
} while (opcao != 6);
return 0;
}
void cadastrarTiposDeServicos(TipoServico tipos[], int *tiposCadastrados) {
if (*tiposCadastrados >= MAX_TIPOS_SERVICOS) {
printf("Todos os tipos de serviços já foram cadastrados.\n");
return;
}
for (int i = *tiposCadastrados; i < MAX_TIPOS_SERVICOS; i++) {
int codigo;
printf("Código do serviço (0 para sair): ");
scanf("%d", &codigo);
if (codigo == 0) {
printf("Cadastro interrompido. Voltando ao menu principal.\n");
return;
}
// Verificar se o código já existe
int existe = 0;
for (int j = 0; j < *tiposCadastrados; j++) {
if (tipos[j].codigo == codigo) {
existe = 1;
break;
}
}
if (existe) {
printf("Erro: Código já cadastrado. Tente outro código.\n");
i--; // Repetir a iteração
continue;
}
tipos[i].codigo = codigo;
printf("Descrição do serviço: ");
scanf(" %[^\n]", tipos[i].descricao);
(*tiposCadastrados)++;
}
printf("Tipos de serviços cadastrados com sucesso.\n");
}
void cadastrarServico(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados) {
if (tiposCadastrados == 0) {
printf("Erro: Nenhum tipo de serviço foi cadastrado.\n");
return;
}
int dia;
printf("Dia do serviço (1 a 30): ");
scanf("%d", &dia);
if (dia < 1 || dia > DIAS_MES) {
printf("Dia inválido.\n");
return;
}
if (servicosPorDia[dia - 1] >= MAX_SERVICOS_DIA) {
printf("Erro: Já foram cadastrados três serviços neste dia.\n");
return;
}
Servico novoServico;
printf("Número do serviço: ");
scanf("%d", &novoServico.numero);
printf("Valor do serviço: ");
scanf("%f", &novoServico.valor);
printf("Código do tipo de serviço: ");
scanf("%d", &novoServico.codigoServico);
int tipoEncontrado = 0;
for (int i = 0; i < tiposCadastrados; i++) {
if (tipos[i].codigo == novoServico.codigoServico) {
tipoEncontrado = 1;
break;
}
}
if (!tipoEncontrado) {
printf("Erro: Código do tipo de serviço não encontrado.\n");
return;
}
printf("Código do cliente: ");
scanf("%d", &novoServico.codigoCliente);
servicos[dia - 1][servicosPorDia[dia - 1]] = novoServico;
servicosPorDia[dia - 1]++;
printf("Serviço cadastrado com sucesso.\n");
}
void mostrarServicosPorDia(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados) {
int dia;
printf("Dia a consultar (1 a 30): ");
scanf("%d", &dia);
if (dia < 1 || dia > DIAS_MES || servicosPorDia[dia - 1] == 0) {
printf("Nenhum serviço cadastrado neste dia.\n");
return;
}
printf("Serviços prestados no dia %d:\n", dia);
for (int i = 0; i < servicosPorDia[dia - 1]; i++) {
Servico s = servicos[dia - 1][i];
for (int j = 0; j < tiposCadastrados; j++) {
if (tipos[j].codigo == s.codigoServico) {
printf("Número: %d, Valor: %.2f, Código Serviço: %d, Descrição: %s, Cliente: %d\n",
s.numero, s.valor, s.codigoServico, tipos[j].descricao, s.codigoCliente);
break;
}
}
}
}
void mostrarServicosPorIntervalo(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados) {
float minimo, maximo;
printf("Digite o valor mínimo: ");
scanf("%f", &minimo);
printf("Digite o valor máximo: ");
scanf("%f", &maximo);
printf("Serviços no intervalo de %.2f a %.2f:\n", minimo, maximo);
for (int dia = 0; dia < DIAS_MES; dia++) {
for (int i = 0; i < servicosPorDia[dia]; i++) {
Servico s = servicos[dia][i];
if (s.valor >= minimo && s.valor <= maximo) {
for (int j = 0; j < tiposCadastrados; j++) {
if (tipos[j].codigo == s.codigoServico) {
printf("Dia %d: Número: %d, Valor: %.2f, Código Serviço: %d, Descrição: %s, Cliente: %d\n",
dia + 1, s.numero, s.valor, s.codigoServico, tipos[j].descricao, s.codigoCliente);
break;
}
}
}
}
}
}
void mostrarRelatorioGeral(Servico servicos[DIAS_MES][MAX_SERVICOS_DIA], int servicosPorDia[], TipoServico tipos[], int tiposCadastrados) {
for (int dia = 0; dia < DIAS_MES; dia++) {
if (servicosPorDia[dia] > 0) {
printf("Dia %d:\n", dia + 1);
for (int i = 0; i < servicosPorDia[dia]; i++) {
Servico s = servicos[dia][i];
for (int j = 0; j < tiposCadastrados; j++) {
if (tipos[j].codigo == s.codigoServico) {
printf("Número: %d, Valor: %.2f, Código Serviço: %d, Descrição: %s, Cliente: %d\n",
s.numero, s.valor, s.codigoServico, tipos[j].descricao, s.codigoCliente);
break;
}
}
}
}
}
}
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”
Steve Jobs