Mudanças entre as edições de "Equipe6-2015-1"
(Desfeita a edição 91106 de Adilson.gs (Discussão)) |
(Desfeita a edição 91105 de Adilson.gs (Discussão)) |
||
Linha 99: | Linha 99: | ||
=Código fonte= | =Código fonte= | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include<stdio.h> | ||
+ | #include<stdlib.h> | ||
+ | #include<string.h> | ||
+ | |||
+ | typedef struct bicicletas{ | ||
+ | char codigo[5]; | ||
+ | char descricao[20]; | ||
+ | float preco; | ||
+ | int qtdade; | ||
+ | struct bicicletas *prox; | ||
+ | struct bicicletas *ant; | ||
+ | } lista; | ||
− | |||
− | |||
− | |||
FILE *fp; | FILE *fp; | ||
FILE *fp_temp; | FILE *fp_temp; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /* Abrir .dat */ | |
− | + | abrir(char tipo[3]){ | |
+ | fp=fopen("bicicletas.dat", tipo); | ||
+ | } | ||
− | + | /* Função Listar*/ | |
− | + | void listar(){ | |
− | + | abrir("r"); | |
− | + | char cod0[5], desc0[20]; | |
− | + | float preco0; | |
+ | int qntd0; | ||
+ | if(fp == NULL) | ||
+ | printf("Erro, não foi possível abrir o arquivo.\n\n"); | ||
+ | else | ||
+ | printf("\t\t\t **IMPRESSAO DA LISTA**\n\n"); | ||
+ | while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ) | ||
+ | printf(" Codigo:%s\n Descricao:%s\n Preco:%.2f\n Quantidade:%d\n\n", cod0, desc0, preco0, qntd0); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
fclose(fp); | fclose(fp); | ||
− | p-> | + | //return 0; |
+ | } | ||
+ | |||
+ | /* Função Inserir*/ | ||
+ | |||
+ | lista *inserir(lista*atual){ | ||
+ | abrir("a"); | ||
+ | //fseek(fp,0L, SEEK_END); | ||
+ | lista *novo=NULL,*p=atual; | ||
+ | int qtd; | ||
+ | float valor; | ||
+ | char temp[20],aux[5]; | ||
+ | printf("\t\t\t **Novo Elemento!**\n"); | ||
+ | printf("\n\n"); | ||
+ | printf("Código: "); | ||
+ | scanf("%s", aux); | ||
+ | printf("Descrição: "); | ||
+ | scanf("%s", temp); | ||
+ | printf("Preço: "); | ||
+ | scanf("%f", &valor); | ||
+ | printf("Quantidade: "); | ||
+ | scanf("%d", &qtd); | ||
+ | if(p==NULL){ | ||
+ | p = (lista *) malloc(sizeof(lista)); | ||
+ | if(p==NULL) | ||
+ | printf("\t\t\tNão foi possível realizar a operação !\n\n"); | ||
+ | else{ | ||
+ | strcpy(p->codigo,aux); | ||
+ | strcpy(p->descricao,temp); | ||
+ | p->preco = valor; | ||
+ | p->qtdade = qtd; | ||
+ | p->prox = NULL; | ||
+ | p->ant=NULL; | ||
+ | fprintf(fp, "%s %s %0.2f %d\n", p->codigo, p->descricao, p->preco, p->qtdade); | ||
+ | return(p);/*retorna lista com o novo elemento*/ | ||
+ | fclose(fp); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | else{ | ||
+ | novo=(lista*)malloc(sizeof(lista)); | ||
+ | if(novo==NULL) | ||
+ | printf("\t\tNao foi possivel realizar a operacao !\n\n"); | ||
+ | else{ | ||
+ | strcpy(novo->codigo,aux); | ||
+ | strcpy(novo->descricao,temp); | ||
+ | novo->preco = valor; | ||
+ | novo->qtdade = qtd; | ||
+ | novo->prox=p; | ||
+ | novo->ant=NULL; | ||
+ | p->ant=novo; | ||
+ | fprintf(fp, "%s %s %0.2f %d\n", novo->codigo, novo->descricao, novo->preco, novo->qtdade); | ||
+ | return(novo); | ||
+ | fclose(fp); | ||
+ | } | ||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | void | + | |
− | + | /* Função Busca */ | |
− | + | ||
− | + | void busca(){ | |
− | + | abrir("r"); | |
− | + | char cod0[5], desc0[20], codBusca[5]; | |
− | + | float preco0; | |
− | + | int qntd0, i=0; | |
− | + | printf("\t\t\t **BUSCAR BICLETA**\n\n"); | |
− | + | printf("Código da bicicleta:"); | |
− | + | scanf("%s", &codBusca); | |
− | + | system("clear"); | |
+ | if(fp == NULL) | ||
+ | printf("Erro, não foi possível abrir o arquivo.\n\n"); | ||
+ | else | ||
+ | printf("\t\t\t **BUSCAR BICICLETA**\n\n"); | ||
+ | while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ) | ||
+ | if(strcmp(codBusca, cod0) == 0){ | ||
+ | printf(" Codigo:%s\n Descricao:%s\n Preco:%.2f\n Quantidade:%d\n\n", cod0, desc0, preco0, qntd0); | ||
+ | i++; | ||
+ | } | ||
+ | if(i==0){ | ||
+ | printf("Nenhuma bicicleta encontrada.\n\n"); | ||
+ | } | ||
fclose(fp); | fclose(fp); | ||
− | if ( | + | |
− | + | //return 0; | |
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | /* Função Alterar*/ | ||
+ | |||
+ | void alterar(){ | ||
+ | abrir("r"); | ||
+ | fp_temp=fopen("bicicletas_temp.dat", "w"); | ||
+ | char cod0[5], desc0[20], desc1[5]; | ||
+ | float preco0, preco1; | ||
+ | int qntd0, qntd1; | ||
+ | char codBusca[5]; | ||
+ | printf("\t\t\t **ALTERAR BICICLETA!**\n\n"); | ||
+ | printf("Código da bicicleta:"); | ||
+ | scanf("%s", &codBusca); | ||
+ | system("clear"); | ||
+ | if(fp == NULL) | ||
+ | printf("Erro, nao foi possivel abrir o arquivo\n"); | ||
+ | else | ||
+ | printf("\t\t **ALTERAR BICICLETA - CÓDIGO: %s**\n", codBusca); | ||
+ | while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ) | ||
+ | if(strcmp(codBusca, cod0) != 0){ | ||
+ | fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0); | ||
+ | }else{ | ||
+ | printf("\nNova descrição(Antes: %s):", desc0); | ||
+ | scanf("%s", desc1); | ||
+ | printf("Novo preço(Antes: %0.2f):", preco0); | ||
+ | scanf("%f", &preco1); | ||
+ | printf("Nova quantidade(Antes: %d):", qntd0); | ||
+ | scanf("%d", &qntd1); | ||
+ | printf("\n"); | ||
+ | |||
+ | fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc1, preco1, qntd1); | ||
+ | } | ||
+ | fclose(fp); | ||
+ | fclose(fp_temp); | ||
+ | remove("bicicletas.dat"); | ||
+ | rename("bicicletas_temp.dat","bicicletas.dat"); | ||
+ | |||
+ | //return 0; | ||
+ | |||
} | } | ||
+ | |||
+ | /* Função Excluir */ | ||
void excluir(){ | void excluir(){ | ||
− | + | abrir("r"); | |
− | + | fp_temp=fopen("bicicletas_temp.dat", "w"); | |
− | char | + | char cod0[5], desc0[20]; |
− | + | float preco0; | |
− | + | int qntd0, opcao; | |
− | + | char codBusca[5]; | |
− | char codBusca[ | + | printf("\t\t\t **EXCLUIR BICICLETA**\n\n"); |
− | |||
− | printf("\t\t\t **EXCLUIR | ||
printf("\n\n"); | printf("\n\n"); | ||
− | printf("Código | + | printf("Código da bicicleta:"); |
− | scanf("%s", codBusca); | + | scanf("%s", &codBusca); |
system("clear"); | system("clear"); | ||
if(fp == NULL) | if(fp == NULL) | ||
printf("Erro, nao foi possivel abrir o arquivo\n"); | printf("Erro, nao foi possivel abrir o arquivo\n"); | ||
else | else | ||
− | + | printf("\t\t\t **EXCLUIR BICICLETA**\n\n"); | |
− | if(strcmp(codBusca, | + | |
− | fprintf(fp_temp, "%s %s % | + | |
+ | while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ) | ||
+ | if(strcmp(codBusca, cod0) != 0){ | ||
+ | fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0); | ||
}else{ | }else{ | ||
− | printf(" | + | printf("Código: %s\n", cod0); |
− | printf(" | + | printf("Descrição: %s\n", desc0); |
− | printf(" | + | printf("Preço: %0.2f\n", preco0); |
− | printf(" | + | printf("Quantidade: %d\n\n", qntd0); |
printf("Tem certeza que deseja excluir?(SIM = 1)\n"); | printf("Tem certeza que deseja excluir?(SIM = 1)\n"); | ||
scanf("%d", &opcao); | scanf("%d", &opcao); | ||
system("clear"); | system("clear"); | ||
if(opcao != 1){ | if(opcao != 1){ | ||
− | fprintf(fp_temp, "%s %s % | + | fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0); |
}else{ | }else{ | ||
− | printf("\ | + | printf("\nBicicleta excluída com sucesso!\n\n"); |
} | } | ||
+ | |||
} | } | ||
+ | |||
fclose(fp); | fclose(fp); | ||
fclose(fp_temp); | fclose(fp_temp); | ||
− | remove(" | + | remove("bicicletas.dat"); |
− | rename(" | + | rename("bicicletas_temp.dat","bicicletas.dat"); |
+ | |||
+ | |||
+ | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /* Função Excluir */ | |
− | + | void estatisticas(){ | |
+ | |||
+ | abrir("r"); | ||
+ | char cod0[5], desc0[20]; | ||
+ | float preco0, mediaPrecos, maiorPreco, menorPreco=10000000, somaPrecos = 0; | ||
+ | int qntd0, i=0; | ||
− | + | if(fp == NULL) | |
− | + | printf("Erro, nao foi possivel abrir o arquivo\n"); | |
− | + | else | |
+ | printf("\t\t\t **Estatísticas**\n\n"); | ||
+ | while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ){ | ||
+ | i++; | ||
+ | somaPrecos = somaPrecos + preco0; | ||
+ | if(maiorPreco < preco0){ | ||
+ | maiorPreco = preco0; | ||
+ | } | ||
− | + | if(menorPreco > preco0){ | |
− | + | menorPreco = preco0; | |
− | if( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | |||
} | } | ||
+ | mediaPrecos = somaPrecos/i; | ||
+ | |||
+ | printf("Média do preços = %0.2f\n", mediaPrecos); | ||
+ | printf("Maior preço = %0.2f\n", maiorPreco); | ||
+ | printf("Menor preço = %0.2f\n\n", menorPreco); | ||
+ | fclose(fp); | ||
+ | |||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | /* DESALOCA */ | ||
+ | |||
+ | lista *desaloca(lista *alocada){ | ||
+ | lista *p=alocada,*aux; | ||
+ | if(alocada!=NULL){ | ||
+ | while(p!=NULL){ | ||
+ | aux=p->prox; | ||
+ | free(p); | ||
+ | p=aux; | ||
+ | } | ||
+ | } | ||
+ | return p; | ||
+ | |||
} | } | ||
− | /* | + | |
− | + | /* Execução do Programa*/ | |
− | + | ||
− | + | main(){ | |
− | + | ||
− | + | ||
− | + | lista *atual=NULL; | |
− | + | int opcao; | |
− | + | do{ | |
− | + | printf(" ______________________* GERENCIAMENTO DE BICICLETAS *_______________________\n"); | |
− | + | printf("\n\n *MENU*\n\n"); | |
− | + | printf("1:Listar \n2:Inserir \n3:Buscar \n4:Alterar \n5:Excluir \n6:Estatísticas\n0:Sair\n\n"); | |
− | + | scanf("%d", &opcao); | |
− | + | system("touch bicicletas.dat"); | |
− | + | system("clear"); | |
− | + | switch(opcao){ | |
− | + | case 1: listar(); break; | |
− | + | case 2: atual=inserir(atual); fclose(fp); break; | |
− | + | case 3: busca(); break; | |
− | + | case 4: alterar(); break; | |
− | + | case 5: excluir(); break; | |
− | + | case 6: estatisticas(); break; | |
− | + | case 0: desaloca(atual); exit(1); | |
− | + | default :printf("\t\t\t **Opção Inválida !**\n\n"); | |
− | + | printf("\a"); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | //fclose(fp); | |
− | + | fflush(stdin); | |
− | + | }while((opcao!='0')&& (opcao!='0')); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | + | </syntaxhighlight> |
+ | |||
+ | |||
+ | ---- | ||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background: #cdc5bf;" | [[AULA 21 - Programação 1 - Graduação | << ]] | ||
+ | ! style="background: #cdc5bf;" | Equipe6-2015-1 | ||
+ | |} |
Edição das 18h07min de 30 de junho de 2015
Integrantes
AUGUSTO DA SILVEIRA WILLEMANN
GABRIEL FARIAS TURNES
JEFERSON RICARDO TICHZ ESPINDOLA
Descrição da atividade principal
Implemente um programa em linguagem C que faça o controle de estoque simplificado de uma loja que vende bicicletas. O programa deverá ter necessariamente um menu onde se poderá fazer a escolha pelas opções disponíveis em loop contínuo, mas com opção de saída. Deverá ler de um arquivo de dados informações sobre as bicicletas já cadastradas a venda, poderá acrescentar novas bicicletas, eliminar bicicletas, e buscar um bicicletas específica pelo seu código. Deverá ainda ter as opções de ordenar e imprimir a lista na tela de todas as bicicletas. Também deverá gravar as alterações no mesmo arquivo de dados lido. Pra terminar, contar com uma opção de estatística dizendo qual a quantidade de bicicletas, o maior, menor e valor médio das bicicletas cadastradas.
Descrição da atividade específica
- Fazer uso
- Comando swith
- Lista encadeada
- Ponteiros
- Alocação Dinâmica de Memória
- Funções para tratamento de arquivo
- Exemplo da estrutura (encadeada)
struct TBicicleta{ char codigo[5]; char descricao[20]; float preco; int qtdade; struct TBicicleta *prox; };
- Exemplo de arquivo (bicicletas.dat)
cat bicicletas.dat A111 MEGAULTRA 1920.00 10 FG02 KRONA 280.00 20 1B0A CALOI 1785.00 5 11CA HPS12 850.00 10
Atividades
Distribuição
Gabriel
Pensou na estrutura do programa, ajudou na criação das funções e execução das mesmas para que atendessem os requisitos, procurou a melhor maneira de desenvolver o programa.
Jeferson
Ajudou na criação das funções, auxiliou na correção de erros e fez os testes.
Augusto
Nada
Desenvolvimento
Esqueleto
Primeiramente criamos o esqueleto do programo, a base dele. Escrevemos os códigos mostrando todas as funções necessárias para a execução dele, definimos as estruturas para a bicicletas e planejamos a maneira mais fácil de executar as funções de maneira correta e cumprindo os requisitos.
Funções
Inserir
A primeira função feita foi a de inserir os dados cadastrais, tais como: código, descrição, preço e quantidade, assim como pedido. Existia maneiras mais fáceis para trabalhar com essa função e escrever os dados inseridos em um arquivo, porém usamos lista, ponteiros e alocação dinâmica de memória para atender o requisito que o professor pediu. Focamos em criar um arquivo .bat organizado por meio da estrutura "%s %s %0.2f %d\n", ou seja, "código descrição preço quantidade". Cada bicicleta foi separada por uma quebra de linha ("\n") e cada campo da bicicleta foi separa por um espaço. Usamos a função fprintf para escrever no arquivo "bicicletas.dat".
Abrir
Uma simples função que abre o arquivo "bicicletas.dat" de uma maneira mais simples para agilizar o processo de abrir o arquivo em todas as funções, nada mais que isso.
Listar
Nessa função apenas executamos a função fscanf para ler o nosso arquivo "bicicletas.dat". Ele lê nosso "banco de dados" de maneira organizada, através da estrutura "%s %s %f %d\n", a mesma usada para inserir as bicicletas. Essa maneira de organização facilitou muito o andamento do projeto. Separamos cada campo em uma variável, assim podendo organiza-las no printf para melhor visualização.
Buscar
Muito parecida com a função "Listar", a função que busca as bicicletas no nosso arquivo "bicicletas.dat" se baseia na separação dos campos por meio de variáveis. Pensando nessa maneira, listamos as bicicletas, porém apenas aquela que possuía o código digitado pelo usuário. Comparamos o valor digitado pelo usuário com a variável cod0, que se refere ao código da bicicleta, tudo isso através da função strcmp. Se os valores fossem iguais o programa mostraria as informações da bicicleta.
Alterar
A função "Alterar", um pouco diferente das outras, utiliza da busca usada na função "Buscar". Após digitada pelo usuário o código da bicicleta que ele deseja alterar, o programa faz uma busca e encontra a bicicleta com o código informado. Nessa hora ficou uma duvida: como alterar uma linha inteira no arquivo "bicicletas.dat"? Essa pergunta deu um nó na nossa cabeça até que pensamos: Por que não criar um arquivo temporário e mandar os dados do arquivo antigo para esse temporário? Com esse pensamento, desenvolvemos a função "Alterar" através da cópia dos dados que não seriam alterados para outro arquivo e escrever em uma nova linha os novos dados da bicicleta alterada. Usamos a condição usada na função "Busca", se o código digitado fosse diferente do código da bicicleta toda essa linha seria copiada pro novo arquivo temporário. Caso contrário, se o código digitado fosse igual o código da bicicleta, ele iria escrever essa linha baseada nos dados que o usuário digitou para alterar. O código da bicicleta não poderia ser alterado, porque ele seria considerado uma "chave primária" para identificação da bicicleta(linha). Com o novo arquivo chamado "bicicletas_temp.dat" criado, que possui todos os dados necessários alterados, o arquivo "bicicletas.dat" é excluído, pois ele armazena apenas dados antigos e renomeamos o "bicicletas_temp.dat" para "bicicletas.dat", assim satisfazendo nossa necessidade.
Excluir
Idêntica a função "Alterar", porém com uma diferença: ao invés de escrever essa nova linha alterada no novo arquivo, ela apenas não copiaria a linha desejada para o novo arquivo, assim ele seria excluído.
Estatísticas
Última função, bem simples, apenas usando alguns "if" já foi possível produzir o resultado esperado. Contamos os números de linhas, somamos todos os preços e fizemos a média, primeiro requisito feito! Comparamos todos os valores entre si e achamos o maior preço e o menos preço, já tínhamos feito algo parecido em aula, outros dois requisitos feitos. Depois era só exibir a média dos preços, o maior preço e o menor preço e pronto.
Main
Na nossa MAIN contém nada mais que o básico: um simples menu usando "switch" e "loop", onde o usuário digita a opção que deseja. Cada "case" executa sua função e pronto, o programa já pode ser executado.
Tratamento de erros
Alguns erros foram tratados para evitar a quebra do código, porém alguns acabaram passando, pois acreditamos que esse não seja o objetivo do projeto.
Conclusão
Com esse projeto chegamos a uma conclusão: é muito mais viável, para nós, trabalhar por meio de algo que você tem acesso diretamente. Armazenamento de dados é muito mais simples através de arquivos do que dentro do próprio programa. Quando você manipula o arquivo que serve de "banco de dados" diretamente, linha a linha, você consegue observar, analisar muita coisa e isso facilita muito na criação de novas ferramentas. Esse "programinha" que criamos é o básico, porém mexendo nele, criando outras funções, você consegue construir coisas bem maiores, projetos mais complexos, basta estudar algumas funções, pensar na lógica e colocar os dedos pra trabalhar no teclado. Assim concluímos que esse projeto nos ajudou a pensar de diversas maneiras, achar respostas pras nossas perguntas e que existem diversos caminhos para se percorrer, mas vai de cada um escolher o caminho que prefere.
Código fonte
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct bicicletas{
char codigo[5];
char descricao[20];
float preco;
int qtdade;
struct bicicletas *prox;
struct bicicletas *ant;
} lista;
FILE *fp;
FILE *fp_temp;
/* Abrir .dat */
abrir(char tipo[3]){
fp=fopen("bicicletas.dat", tipo);
}
/* Função Listar*/
void listar(){
abrir("r");
char cod0[5], desc0[20];
float preco0;
int qntd0;
if(fp == NULL)
printf("Erro, não foi possível abrir o arquivo.\n\n");
else
printf("\t\t\t **IMPRESSAO DA LISTA**\n\n");
while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF )
printf(" Codigo:%s\n Descricao:%s\n Preco:%.2f\n Quantidade:%d\n\n", cod0, desc0, preco0, qntd0);
fclose(fp);
//return 0;
}
/* Função Inserir*/
lista *inserir(lista*atual){
abrir("a");
//fseek(fp,0L, SEEK_END);
lista *novo=NULL,*p=atual;
int qtd;
float valor;
char temp[20],aux[5];
printf("\t\t\t **Novo Elemento!**\n");
printf("\n\n");
printf("Código: ");
scanf("%s", aux);
printf("Descrição: ");
scanf("%s", temp);
printf("Preço: ");
scanf("%f", &valor);
printf("Quantidade: ");
scanf("%d", &qtd);
if(p==NULL){
p = (lista *) malloc(sizeof(lista));
if(p==NULL)
printf("\t\t\tNão foi possível realizar a operação !\n\n");
else{
strcpy(p->codigo,aux);
strcpy(p->descricao,temp);
p->preco = valor;
p->qtdade = qtd;
p->prox = NULL;
p->ant=NULL;
fprintf(fp, "%s %s %0.2f %d\n", p->codigo, p->descricao, p->preco, p->qtdade);
return(p);/*retorna lista com o novo elemento*/
fclose(fp);
}
}
else{
novo=(lista*)malloc(sizeof(lista));
if(novo==NULL)
printf("\t\tNao foi possivel realizar a operacao !\n\n");
else{
strcpy(novo->codigo,aux);
strcpy(novo->descricao,temp);
novo->preco = valor;
novo->qtdade = qtd;
novo->prox=p;
novo->ant=NULL;
p->ant=novo;
fprintf(fp, "%s %s %0.2f %d\n", novo->codigo, novo->descricao, novo->preco, novo->qtdade);
return(novo);
fclose(fp);
}
}
}
/* Função Busca */
void busca(){
abrir("r");
char cod0[5], desc0[20], codBusca[5];
float preco0;
int qntd0, i=0;
printf("\t\t\t **BUSCAR BICLETA**\n\n");
printf("Código da bicicleta:");
scanf("%s", &codBusca);
system("clear");
if(fp == NULL)
printf("Erro, não foi possível abrir o arquivo.\n\n");
else
printf("\t\t\t **BUSCAR BICICLETA**\n\n");
while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF )
if(strcmp(codBusca, cod0) == 0){
printf(" Codigo:%s\n Descricao:%s\n Preco:%.2f\n Quantidade:%d\n\n", cod0, desc0, preco0, qntd0);
i++;
}
if(i==0){
printf("Nenhuma bicicleta encontrada.\n\n");
}
fclose(fp);
//return 0;
}
/* Função Alterar*/
void alterar(){
abrir("r");
fp_temp=fopen("bicicletas_temp.dat", "w");
char cod0[5], desc0[20], desc1[5];
float preco0, preco1;
int qntd0, qntd1;
char codBusca[5];
printf("\t\t\t **ALTERAR BICICLETA!**\n\n");
printf("Código da bicicleta:");
scanf("%s", &codBusca);
system("clear");
if(fp == NULL)
printf("Erro, nao foi possivel abrir o arquivo\n");
else
printf("\t\t **ALTERAR BICICLETA - CÓDIGO: %s**\n", codBusca);
while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF )
if(strcmp(codBusca, cod0) != 0){
fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0);
}else{
printf("\nNova descrição(Antes: %s):", desc0);
scanf("%s", desc1);
printf("Novo preço(Antes: %0.2f):", preco0);
scanf("%f", &preco1);
printf("Nova quantidade(Antes: %d):", qntd0);
scanf("%d", &qntd1);
printf("\n");
fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc1, preco1, qntd1);
}
fclose(fp);
fclose(fp_temp);
remove("bicicletas.dat");
rename("bicicletas_temp.dat","bicicletas.dat");
//return 0;
}
/* Função Excluir */
void excluir(){
abrir("r");
fp_temp=fopen("bicicletas_temp.dat", "w");
char cod0[5], desc0[20];
float preco0;
int qntd0, opcao;
char codBusca[5];
printf("\t\t\t **EXCLUIR BICICLETA**\n\n");
printf("\n\n");
printf("Código da bicicleta:");
scanf("%s", &codBusca);
system("clear");
if(fp == NULL)
printf("Erro, nao foi possivel abrir o arquivo\n");
else
printf("\t\t\t **EXCLUIR BICICLETA**\n\n");
while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF )
if(strcmp(codBusca, cod0) != 0){
fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0);
}else{
printf("Código: %s\n", cod0);
printf("Descrição: %s\n", desc0);
printf("Preço: %0.2f\n", preco0);
printf("Quantidade: %d\n\n", qntd0);
printf("Tem certeza que deseja excluir?(SIM = 1)\n");
scanf("%d", &opcao);
system("clear");
if(opcao != 1){
fprintf(fp_temp, "%s %s %0.2f %d\n", cod0, desc0, preco0, qntd0);
}else{
printf("\nBicicleta excluída com sucesso!\n\n");
}
}
fclose(fp);
fclose(fp_temp);
remove("bicicletas.dat");
rename("bicicletas_temp.dat","bicicletas.dat");
}
/* Função Excluir */
void estatisticas(){
abrir("r");
char cod0[5], desc0[20];
float preco0, mediaPrecos, maiorPreco, menorPreco=10000000, somaPrecos = 0;
int qntd0, i=0;
if(fp == NULL)
printf("Erro, nao foi possivel abrir o arquivo\n");
else
printf("\t\t\t **Estatísticas**\n\n");
while( (fscanf(fp,"%s %s %f %d\n", cod0, desc0, &preco0, &qntd0))!=EOF ){
i++;
somaPrecos = somaPrecos + preco0;
if(maiorPreco < preco0){
maiorPreco = preco0;
}
if(menorPreco > preco0){
menorPreco = preco0;
}
}
mediaPrecos = somaPrecos/i;
printf("Média do preços = %0.2f\n", mediaPrecos);
printf("Maior preço = %0.2f\n", maiorPreco);
printf("Menor preço = %0.2f\n\n", menorPreco);
fclose(fp);
}
/* DESALOCA */
lista *desaloca(lista *alocada){
lista *p=alocada,*aux;
if(alocada!=NULL){
while(p!=NULL){
aux=p->prox;
free(p);
p=aux;
}
}
return p;
}
/* Execução do Programa*/
main(){
lista *atual=NULL;
int opcao;
do{
printf(" ______________________* GERENCIAMENTO DE BICICLETAS *_______________________\n");
printf("\n\n *MENU*\n\n");
printf("1:Listar \n2:Inserir \n3:Buscar \n4:Alterar \n5:Excluir \n6:Estatísticas\n0:Sair\n\n");
scanf("%d", &opcao);
system("touch bicicletas.dat");
system("clear");
switch(opcao){
case 1: listar(); break;
case 2: atual=inserir(atual); fclose(fp); break;
case 3: busca(); break;
case 4: alterar(); break;
case 5: excluir(); break;
case 6: estatisticas(); break;
case 0: desaloca(atual); exit(1);
default :printf("\t\t\t **Opção Inválida !**\n\n");
printf("\a");
}
//fclose(fp);
fflush(stdin);
}while((opcao!='0')&& (opcao!='0'));
}
<< | Equipe6-2015-1 |
---|