Controle de farmácia em C
Publicado por Rodrigo Zanuzzo (última atualização em 15/12/2009)
[ Hits: 19.790 ]
Homepage: @rodrigozanuzzo
Desenvolvi este projeto juntamente com meus colegas de faculdade. É um controle de farmácia, utilizo um método de ordenação ShellSort, não trabalho com arquivo neste projeto.
Dêem uma olhada e digam o que acham, estou aprendendo ainda.
/*
Trabalho G1 Algoritmo e estrutura de dados II
Alunos:Rodrigo Zanuzzo, Vinicius Geremia, Patrick Carvalho
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define x 100 //Constante
void menu(); //funcao que chama o menu principal
void sair(); //funcao para saida do programa
void controleVenda(); //funcao do menu de vendas
void controleProduto(); //menu do control de produtos
void menu2(); //Funcao do menu de entrada
void sobre(); //funcao de apresentae-ao dos academicos
void controlePessoa(); //Menu controle de pessoas
void bemvindo(); //funcao de abertura do programa
int ProdutoExiste(int cod); //Funçao verifica se o produto esta no banco de dados
int PessoaExiste(int cod); //Funçao verifica se o funcionario esta no banco de dados
int compare (const void * a, const void * b);
//definindo estruturas para armaznamento de, pessoas, produtos, e registro de vendas
typedef struct pessoas{
int codigo;
char nome[20];
char sobrenome[20];
float salario;
};
typedef struct produtos{
int codigo;
float pcompra;
float pvenda;
char descricao[200];
int quantidade;
char validade[50];
};
typedef struct vendas{
int lista;
double total;
};
pessoas pes[x];
produtos pro[x];
int QtdProdCad = 2;
int quantidade=x;
int qnt=0;
int cod=0;
int codProduto=0;
int codCliente=0;
int codPessoa=0;
float valor,total=0,saldo=0;
//BLOCO PRINCIPAL, entrada das pessoas e produtos padroes
int main(){
//funcionarios padrao
pes[0].codigo=15;
strcpy (pes[0].nome,"Joao");
strcpy (pes[0].sobrenome,"Silva");
pes[0].salario=100;
pes[1].codigo=20;
strcpy (pes[1].nome,"Pedro");
strcpy (pes[1].sobrenome,"Souza");
pes[1].salario=900;
pes[2].codigo=10;
strcpy (pes[2].nome,"Ana");
strcpy (pes[2].sobrenome,"Oliveira");
pes[2].salario=600;
pes[3].codigo=5;
strcpy (pes[3].nome,"Jose");
strcpy (pes[3].sobrenome,"Pereira");
pes[3].salario=700;
//remedios padrao
pro[97].codigo=15;
strcpy (pro[97].descricao,"Aspirina");
pro[97].quantidade=20;
pro[97].pvenda=1;
pro[97].pcompra=0.5;
strcpy (pro[97].validade,"10/01/2010");
pro[98].codigo=10;
strcpy (pro[98].descricao,"Analgesico");
pro[98].quantidade=30;
pro[98].pvenda=2;
pro[98].pcompra=0.9;
strcpy (pro[98].validade,"15/01/2010");
pro[99].codigo=5;
strcpy (pro[99].descricao,"Dipirona");
pro[99].quantidade=50;
pro[99].pvenda=3;
pro[99].pcompra=1;
strcpy (pro[99].validade,"03/01/2010");
bemvindo();
}
//funcao do entrada do menu principal
void menu(){
int op;
system("cls");
printf("Menu Principal:");
printf("\n{1} -> Efetuar Vendas");
printf("\n{2} -> Controle de Funcionarios");
printf("\n{3} -> Controle de Produtos");
printf("\n{4} -> Voltar\n");
scanf("%d",&op);
switch(op){
case 1: { //opcao 1, faz entrada no meuno do contrle de vendas
system("cls");
controleVenda();
getch();
menu();
break;
}
case 2: { //opcao 2, faz entrada do menu de controle de pessoas
controlePessoa();
getch();
menu();
break;
}
case 3: { //opcao 3 faz entrada do menu de controle de pessoa
controleProduto();
getch();
menu();
break;
}
case 4: { //opcao 4, voltar para o menu de entrada
menu2();
getch();
menu();
break;
}
default: { //caso o usuario digite uma opcao nao valida ee retonr ao menu, e avisa o usuario
printf("Opcao Invalida");
getch();
menu();
}
}
}
//funcao do controle de vendas
void controleVenda(){
system("cls");
int op,quant;
char cond;
printf("Controle de venda:");
printf("\n{1} -> Cadastrar nova venda");
printf("\n{2} -> Saldo do dia");
printf("\n{3} -> Voltar\n");
scanf("%d",&op);
switch(op){
case 1: { //funcao para efetuar venda, faz os caucolos e mais informaçoes para ajudar o usuario
int i=0;
do{
system("cls");
printf("Informe o codigo do produto:");
scanf("%d",&cod);
if (ProdutoExiste(cod) != 1){ //verifica se o produto esta cadastrado
printf("Produto inexistente !");
getch();
controleVenda();
}else{
printf("Produto:\t\t%s\nValor Unitario\t\t%.2f\nQuantidade em estoque\t%d\n",pro[codProduto].descricao,pro[codProduto].pvenda,pro[codProduto].quantidade);
printf("Informe a quantidade de %s a ser vendido:\n",pro[codProduto].descricao);
scanf("%d",&quant);
if(quant<pro[codProduto].quantidade){
valor=quant*pro[codProduto].pvenda;
total=total+valor;
saldo=saldo+total;
pro[cod].quantidade=pro[codProduto].quantidade-quant;
}else{
printf("Quantidade insuficiente em estoque\n");
getch();
controleVenda();
}
}
printf("\nSub total:%.2f\n",total);
printf("Deseja finalizar a venda(s/n)?:\n");
scanf("%s",&cond);
}
while(cond!='s');
printf("Total a pagar: R$%.2f",total);
total=0;
getch();
controleVenda();
break;
}
case 2:{ //opcao 2, imprime o saldo do dia
printf("O saldo do dia e: R$%.2f",saldo);
getch();
controleVenda();
break;
}
case 3:{ //opcao 3, volta para o menu
menu();
break;
}
default: { // informa o cliente quando ele digita um valor que nao coresponde ao menu
printf("Opcao Invalida");
getch();
controleVenda();
}
}
}
//funcao de saida do programa
void sair(){
system("cls");
printf("Obrigado por utilizr nosso sistema");
getch();
exit (0);
}
//Menu de entrada
void menu2(){
int op;
system("cls");
printf("Menu Principal:");
printf("\n{1} -> Entrar");
printf("\n{2} -> Sobre");
printf("\n{3} -> Sair\n");
scanf("%d",&op);
switch(op){
case 1: {
menu(); //opcao 1, abre o menu principal
getch();
menu2();
break;
}
case 2: { //opcao 2, abre as informacoes sobre os academicos
sobre();
getch();
menu2();
break;
}
case 3: { //opcao de saida do programa
sair();
getch();
break;
}
default: { //informa quando o usuario digita uma opcao invalida
printf("Opcao Invalida");
getch();
menu2();
}
}
}
//funcao de apresentasao do progeto
void sobre(){
system("cls");
printf("\n\n Sobre o Programa");
printf("\n Desenvolvido pelos academicos :\n Rodrigo Zanuzzo, Patrick Carvalho, Vinicius Geremia ");
}
//funcao de entrada do programa
void bemvindo(){
printf("******************************************************************************\n\n\n");
printf(" Bem Vindo ao programa UnoFarma\n\n\n");
printf("******************************************************************************\n");
getch();
menu2();
}
//funcao do menu de controle de pessoas
void controlePessoa(){
int op;
system("cls");
printf("Controle de funcionarios:");
printf("\n{1} -> Cadastro de funcionarios");
printf("\n{2} -> Consulta de funcionarios");
printf("\n{3} -> Alterar cadastro de funcionarios");
printf("\n{4} -> Excluir cadastro de funcionarios");
printf("\n{5} -> Voltar\n");
scanf("%d",&op);
switch(op){
case 1:{ //opcao 1, para o usuario poder fazer cadastro de pessoas
char cond;
do{
printf("\n Informe o codigo do funcionario\n");
scanf("%d",&cod);
if (PessoaExiste(cod) == 1){ //verifica se o pessoa esta cadastrado
printf("Funcionario ja cadastrado !");
getch();
controlePessoa();
}else{
while(pes[codPessoa].codigo>0){
codPessoa=codPessoa+1;
}
pes[codPessoa].codigo=cod;
printf("\n Informe o nome\n");
fflush(stdin);
gets(pes[codPessoa].nome);
printf("\n Informe o sobrenome\n");
fflush(stdin);
gets(pes[codPessoa].sobrenome);
printf("\n Informe o Salario\n");
scanf("%f",&pes[codPessoa].salario);
}
printf("\n Deseja cadastrar outro funcionario:(s/n)");
scanf("%s",&cond);
}
while(cond!='n');
controlePessoa();
break;
}
case 2:{ //menu de consulta de funcionarios
system("cls");
int opcao;
printf("{1} -> Consultar por codigo\n");
printf("{2} -> Exibir todos os funcionarios\n");
printf("{3} -> Ordenar por codigo\n");
printf("{4} -> voltar\n");
scanf("%d",&opcao);
switch (opcao){
case 1:{
int cod;
printf("Informe o codigo da pessoa\n");
scanf("%d",&cod);
for(int i=0;i<x;i++){
if(pes[i].codigo==cod){
printf ("\nCodigo: %d\nNome: %s\n",pes[i].codigo, pes[i].nome);
printf ("Sobrenome: %s\nSalario: %.2f\n\n", pes[i].sobrenome, pes[i].salario);
}
}
getch();
controlePessoa();
break;
}
case 2:{ //exibe todos os funcionarios na ordem da posisao dele
system("cls");
for(int i=0;i<x;i++){
if(pes[i].codigo>0){
printf ("\nCodigo: %d\nNome: %s\n",pes[i].codigo, pes[i].nome);
printf ("Sobrenome: %s\nSalario: %.2f\n\n", pes[i].sobrenome, pes[i].salario);
}
}
}
getch();
controlePessoa();
break;
case 3:{ //opcao 3, imprime os funcionarios na ordem crecente do codigo
int i , j , valor,c;
char valor1[20],valor2[50];
float valor3;
int gap = 1;
do {
gap = 3*gap+1;
} while(gap < x);
do {
gap /= 3;
for(i = gap; i < x; i++) {
valor =pes[i].codigo;
strcpy(valor1, pes[i].nome);
strcpy(valor2, pes[i].sobrenome);
valor3 =pes[i].salario;
j = i - gap;
while (j >= 0 && valor < pes[j].codigo) {
pes[j + gap].codigo = pes[j].codigo;
strcpy(pes[j + gap].nome,pes[j].nome);
strcpy(pes[j + gap].sobrenome,pes[j].sobrenome);
pes[j + gap].salario = pes[j].salario;
j -= gap;
}
pes[j + gap].codigo = valor;
strcpy(pes[j + gap].nome, valor1);
strcpy(pes[j + gap].sobrenome, valor2);
pes[j + gap].salario = valor3;
}
} while ( gap > 1);
system ("cls");
printf ("Codigo\t|Nome\t\t|Sobrenome\t\t|Salario\n");
for (c=0;c<x;c++){
if (pes[c].salario > 0)
printf ("%d\t|%s\t\t|%s\t\t| R$ - %.2f\n", pes[c].codigo,pes[c].nome,pes[c].sobrenome,pes[c].salario);
}
printf ("\n\n\n");
getch();
controlePessoa();
break;
}
case 4:{ //opcao 4, volta para o menu do controle de produtos
getch();
controlePessoa();
break;
}
}
}
case 3:{ //opcao 3, funcao para alterar os dados dos funcionarios
char cond;
do{
printf("Informe o codigo do funcionario a ser alterado\n");
scanf("%d",&cod);
if (PessoaExiste(cod) != 1){
printf("Funcionario inexistente !\n");
getch();
controlePessoa();
}
else{
printf("Nome: %s\n",pes[codPessoa].nome);
printf("Sobrenome: %s\n",pes[codPessoa].sobrenome);
printf("Salario: %.2f\n",pes[codPessoa].salario);
printf("\n Informe o novo codigo do funcionario\n");
scanf("%d",&pes[codPessoa].codigo);
printf("\n Informe o novo nome\n");
fflush(stdin);
gets(pes[codPessoa].nome);
printf("\n Informe o novo sobrenome\n");
fflush(stdin);
gets(pes[codPessoa].sobrenome);
printf("\n Informe o novo Salario\n");
scanf("%f",&pes[codPessoa].salario);
printf("\n Deseja alterar outro funcionario(s/n)?");
scanf("%s",&cond);
}
}
while(cond!='n');
controlePessoa();
break;
}
case 4:{ //opcao 4, o usuario informa o codigo do funcionario, e confirma a exclusao do mesmo
char cond,resp;
do{
printf("Informe o codigo do funcionario a ser excluido\n");
scanf("%d",&cod);
if (PessoaExiste(cod) != 1){ //verifica se o pessoa esta cadastrado
printf("Funcio inexistente !");
getch();
controlePessoa();
}else{
printf("Nome: %s\n",pes[codPessoa].nome);
printf("Sobrenome: %s\n",pes[codPessoa].sobrenome);
printf("Salario: %f\n",pes[codPessoa].salario);
printf("\n Deseja realmente excluir este cadastro(s/n)\n");
scanf("%s",&resp);
}
if(resp='s'){
pes[codPessoa].codigo=0;
strcpy (pes[codPessoa].nome,"");
strcpy (pes[codPessoa].sobrenome,"");
pes[codPessoa].salario=0;;
}
printf("\n Deseja excluir outro funcionario (s/n)\n");
scanf("%s",&cond);
}
while(cond!='n');
controlePessoa();
break;
}
case 5: { //opcao 5, volta para o menu principal
menu();
break;
}
default: {
printf("Opcao Invalida");
getch();
controlePessoa();
}
}
}
//Controle de produto
void controleProduto(){
int op;
system("cls");
printf("Controle de produtos:");
printf("\n{1} -> Cadastro de produtos");
printf("\n{2} -> Consulta de produto");
printf("\n{3} -> Listar Produtos");
printf("\n{4} -> Alterar cadastro de produto");
printf("\n{5} -> Excluir cadastro de produto");
printf("\n{6} -> Voltar\n");
scanf("%d",&op);
switch(op){
case 1:{//Cadastro de produto
char cond;
do{
printf("\n Informe o codigo do produto\n");
scanf("%d",&cod);
if (ProdutoExiste(cod) == 1){ //verifica se o produto esta cadastrado
printf("Produto ja castrado !");
getch();
controleProduto();
}else{
while(pro[codProduto].codigo>0){
codProduto=codProduto+1;
}
pro[codProduto].codigo=cod;
printf("\n Informe o nome do produto \n");
fflush(stdin);
gets(pro[codProduto].descricao);
printf("\n Informe a quantidade em estoque \n");
scanf("%d",&pro[codProduto].quantidade);
printf("\n Informe o Valor de Compra \n");
scanf("%f",&pro[codProduto].pcompra);
printf("\n Informe o Valor de Venda \n");
scanf("%f",&pro[codProduto].pvenda);
printf("\n Informe a validade do produto \n");
fflush(stdin);
gets(pro[codProduto].validade);
}
printf("\n Deseja cadastrar outro produto:(s/n)?");
scanf("%s",&cond);
}
while(cond!='n');
controleProduto();
break;
}
case 2:{//Consultar o cadastro de produto
system("cls");
int opcao;
printf("{1} -> Consultar por codigo\n");;
printf("{2} -> Ordenar produtos\n");
printf("{3} -> voltar\n");
scanf("%d",&opcao);
switch (opcao){
case 1:{ //procura o codigo por codigo
printf("Informe o codigo do produto \n");
scanf("%d",&cod);
for(int i=0;i<x;i++){
if(pro[i].codigo==cod){
printf ("\nCodigo: %d\nNome: %s\n",pro[i].codigo, pro[i].descricao);
printf ("Quantidade: %d\nValor de compra: %.2f\nValor de venda: %.2f\nValidade: %s\n\n", pro[i].quantidade, pro[i].pcompra, pro[i].pvenda,pro[cod].validade);
}
}
getch();
controleProduto();
break;
case 2:{ //Metodo que ordena os produtos
int i , j , valor,c;
char valor1[20],valor4[50];
float valor2,valor3;
int gap = 1;
do {
gap = 3*gap+1;
} while(gap < x);
do {
gap /= 3;
for(i = gap; i < x; i++) {
valor =pro[i].codigo;
strcpy(valor1, pro[i].descricao);
strcpy(valor4, pro[i].validade);
valor2 =pro[i].pcompra;
valor3 =pro[i].pvenda;
j = i - gap;
while (j >= 0 && valor < pro[j].codigo) {
pro[j + gap].codigo = pro[j].codigo;
strcpy(pro[j + gap].descricao,pro[j].descricao);
strcpy(pro[j + gap].validade,pro[j].validade);
pro[j + gap].pcompra = pro[j].pcompra;
pro[j + gap].pvenda = pro[j].pvenda;
j -= gap;
}
pro[j + gap].codigo = valor;
strcpy(pro[j + gap].descricao, valor1);
strcpy(pro[j + gap].validade, valor4);
pro[j + gap].pcompra = valor2;
pro[j + gap].pvenda = valor3;
}
} while ( gap > 1);
system ("cls");
printf ("Codigo\t|Nome\t\t|Preco de compra\t|Preco de venda\t|Validade\n");
for (c=0;c<x;c++){
if (pro[c].pcompra > 0)//Exibe os remedios ordenados somente os cadastrados
printf ("%d\t|%s\t| R$ - %.2f\t\t| R$ - %.2f\t|%s\n", pro[c].codigo,pro[c].descricao,pro[c].pcompra,pro[c].pvenda,pro[c].validade);
}
printf ("\n\n\n");
getch();
controleProduto();
break;
}
case 3:{ //voltar
getch();
controleProduto();
break;
}
}
}
case 3:{//Exibir todos os Produtos
system("cls");
for(int i=0;i<x;i++){
if(pro[i].codigo>0){
printf ("\nCodigo: %d\nNome: %s\n",pro[i].codigo, pro[i].descricao);
printf ("Quantidade: %d\nValor de compra: %.2f\nValor de venda: %.2f\nValidade: %s\n\n", pro[i].quantidade, pro[i].pcompra, pro[i].pvenda,pro[i].validade);
}
}
}
getch();
controleProduto();
break;
}
case 4:{//Altera um cadastro de produtos
char cond;
do{
printf("Informe o codigo do produto a ser alterado\n");
scanf("%d",&cod);
if (ProdutoExiste(cod) != 1){ //verifica se o codigo esta castrado
printf("Produto inexistente !");
getch();
controleProduto();
}
else{
printf("Nome: %s\n",pro[codProduto].descricao);
printf("Quantidade: %d\n",pro[codProduto].quantidade);
printf("Valor de Compra: %.2f\n",pro[codProduto].pcompra);
printf("Valor de Venda: %.2f\n",pro[codProduto].pvenda);
printf("Validade: %s\n\n",pro[codProduto].validade);
printf("\n Informe o novo codigo do produto\n");
scanf("%d",&pro[codProduto].codigo);
printf("\n Informe o novo nome do produto\n");
fflush(stdin);
gets(pro[codProduto].descricao);
printf("\n Informe o nova quantidade\n");
scanf("%d",&pro[codProduto].quantidade);
printf("\n Informe o novo Valor de Compra\n");
scanf("%f",&pro[codProduto].pcompra);
printf("\n Informe o novo Valor de Venda\n");
scanf("%f",&pro[codProduto].pvenda);
printf("\n Informe o nova validade\n");
fflush(stdin);
gets(pro[codProduto].validade);
}
printf("\n Deseja alterar outro produto(s/n)?");
scanf("%s",&cond);
}
while(cond!='n');
controleProduto();
break;
}
case 5:{//Excuir o cadastro de produto
char cond,resp;
do{
printf("Informe o codigo do produto a ser excluido\n");
scanf("%d",&cod);
if (ProdutoExiste(cod) != 1){ //verifica se o produto esta cadastrado
printf("Produto inexistente !");
getch();
controleProduto();
}else{
printf ("\nCodigo: %d\nNome: %s\n",pro[codProduto].codigo, pro[codProduto].descricao);
printf ("Quantidade: %d\nValor de compra: %.2f\nValor de venda %.2f\n Validade: %s\n\n", pro[codProduto].quantidade, pro[codProduto].pcompra, pro[codProduto].pvenda,pro[codProduto].validade);
printf("\n Deseja realmente excluir este produto(s/n)?\n");
scanf("%s",&resp);
}
if(resp='s'){
pro[codProduto].codigo=0;
strcpy (pro[codProduto].descricao,"");
pro[codProduto].quantidade=0;
pro[codProduto].pvenda=0;
pro[codProduto].pcompra=0;
strcpy (pro[codProduto].validade,"");
}
printf("\n Deseja excluir outro produto(s/n)?");
scanf("%s",&cond);
}
while(cond!='n');
controleProduto();
break;
}
case 6: { //Voltar
menu();
getch();
controleProduto();
break;
}
default: {
printf("Opcao Invalida");
getch();
controleProduto();
}
}
}
int ProdutoExiste(int cod){//Verifica se o produto esta cadastrado
int i;
int Retorno = 0;
for (i = 0; i < x; i++){
if (pro[i].codigo == cod){
codProduto=i;
Retorno = 1;
}
}
return Retorno;
}
int PessoaExiste(int cod){ //verifica se o funcionario
int i;
int Retorno = 0;
for (i = 0; i < x; i++){
if (pes[i].codigo == cod){
codPessoa=i;
Retorno = 1;
}
}
return Retorno;
}
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6
É normal não gostar de KDE? (21)
Servidor para arquivos e banco de dados (4)
780 mil usuários do Janelas baIxaram Linux em um mês (4)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (12)









