Equipe4-2015-1
Integrantes
ADILSON GOEDERT SIQUEIRA
GUSTAVO VIEIRA ZACCHI
RAPHAEL WASHINGTON BAPTISTA GIASSI
Descrição da atividade principal
Implemente um programa em linguagem C que faça o controle de estoque simplificado de livros. 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 os livros(já cadastrados), poderá acrescentar novos livros, eliminar livros, e buscar um livro específico pelo isbn. Deverá ainda ter as opções de ordenar e imprimir a lista na tela de todos os livros. 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 o número de livros, o maior, menor e valor médio dos livros.
Descrição da atividade específica (dessa equipe)
- 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 TLivro { char isbn[20]; char titulo[50]; char autor[40]; float preco; struct TLivro *prox; };
- Exemplo de arquivo (livros.dat)
cat livros.dat 978-85-8041-019-8,O DIA DA CAÇA,JAMES PATTERSON,19.90 978-85-8044-027-0,A FURIA DOS REIS,GEORGE R.R. MARTIN,56.80 85-204-1043-X,BODY FOR LIFE,BILL PHILLIPS,99.80 978-85-99296-93-6,CILADA,HARLAN COBEN,21.50 978-85-8041-191-1,NAO BRINQUE COM FOGO,JOHN VERDON,36.70
Atividades
Distribuição
Desenvolvimento
Conclusão
Código fonte
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
FILE *fp;
char ch;
struct TLivro {
char isbn[20];
char titulo[50];
char autor[40];
float preco;
struct TLivro *next;
}*head1, *tail1;
void add_nodo_tail_livro()
{
int res;
struct TLivro *p = malloc (sizeof(struct TLivro));
if (!p){
printf("Erro:Alocação\n");
return;
}
printf("Entre com o ID do livro (ex: XXX-XX-XXXX-XXX-X,X)\n");
scanf("%s",p->isbn);
printf("Entre com o nome do livro\n");
scanf("%s",p->titulo);
printf("Entre com o nome do autor \n");
scanf("%s",p->autor);
printf("Entre com o preco \n");
scanf("%f",&p->preco);
if ((fp=fopen("livros.dat", "a")) == NULL) {
printf("Falha na abertura do arquivo\n");
return;
}
if((res = fprintf(fp,"\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, p->preco)) == EOF) {
printf("Erro\n");
}
fclose(fp);
p->next = NULL;
if (tail1==NULL) {
tail1 = head1 = p;
}
else {
tail1->next = p;
tail1 = p;
}
printf("Livro adicionado com sucesso!\n\n");
return;
}
void print_livro_list(struct TLivro *runner)
{
int res;
struct TLivro *p = malloc (sizeof(struct TLivro));
printf("Lista de livros:\n\n");
if (runner==NULL)
return;
if ((fp=fopen("livros.dat", "a")) == NULL) {
printf("Falha na abertura do arquivo\n");
return;
}
while (1) {
if((res = fscanf(fp,"\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, &p->preco))==EOF) {
printf("Fim de leitura\n");
break;
}
printf("\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, p->preco);
}
for (;;){
printf("---->ID: %s\n",runner->isbn);
printf("---->Nome: %s\n",runner->titulo);
printf("---->Autor: %s\n",runner->autor);
printf("---->Preco: %f\n\n",runner->preco);
if (runner->next==NULL)
return;
else
runner=runner->next;
}
}
void delete_livro(struct TLivro *runner){
char id[20];
struct TLivro *prunner;
printf("Entre com o ID do livro a ser deletado (ex: XXX-XX-XXXX-XXX-X,X)\n");
scanf("%s",id);
if (runner==NULL)
return;
if(runner==head1){
head1=runner->next;
}
for (;runner->next==NULL;runner=runner->next){
if(strcmp(id,runner->isbn)==0){
if(prunner!=NULL){
prunner->next=runner->next;
if(runner==tail1){
tail1=prunner;
}
if(prunner==NULL && runner==tail1){
tail1=NULL;
}
free(runner);
}
prunner=runner;
}
}
}
void find_livro(struct TLivro *runner){
char id[20];
printf("Entre com o ID do livro a ser encontrado (ex: XXX-XX-XXXX-XXX-X,X)\n");
scanf("%s",id);
if (runner==NULL){
printf("Livro não encontrado!\n\n");
return;
}
for (;;){
if(strcmp(id,runner->isbn)==0){
printf("---->ID: %s\n",runner->isbn);
printf("---->Nome: %s\n",runner->titulo);
printf("---->Autor: %s\n",runner->autor);
printf("---->Preco: %f\n\n",runner->preco);
return;
}
if (runner->next==NULL){
printf("Livro não encontrado!\n\n");
return;
}
else
runner=runner->next;
}
}
void stats(struct TLivro *runner){
float max=0;
float min=0;
int nlivros=1;
float vmedio=0;
printf("Estatisticas:\n\n");
if (runner==NULL)
return;
min=runner->preco;
for (;;){
if(max<runner->preco){
max=runner->preco;
}
if(min>runner->preco){
min=runner->preco;
}
vmedio=vmedio+runner->preco;
if (runner->next==NULL)
break;
else
nlivros++;
runner=runner->next;
}
vmedio=vmedio/nlivros;
printf("---->Preco max: %f\n",max);
printf("---->Preco min: %f\n",min);
printf("---->Numero de livros: %d\n",nlivros);
printf("---->Preco medio: %f\n\n",vmedio);
}
void carrega_livro_list(){
}
void salva_livro_list(){
}
main()
{
head1 = tail1 = NULL;
int opcao;
printf("\e[H\e[2J");
MENU:
printf("Entre com uma opção:\n 1-Adicionar Livro. \n 2-Lista de Livros. \n 3-Remover Livro. \n 4-Estatisticas. \n 5-Procurar Livro. \n 6-Sair.\n");
scanf ("%d",&opcao);
switch(opcao) {
case 1:
printf("\e[H\e[2J");
add_nodo_tail_livro();
goto MENU;
case 2:
printf("\e[H\e[2J");
print_livro_list (head1);
goto MENU;
case 3:
printf("\e[H\e[2J");
delete_livro(head1);
goto MENU;
case 4:
printf("\e[H\e[2J");
stats(head1);
goto MENU;
case 5:
printf("\e[H\e[2J");
find_livro(head1);
goto MENU;
case 6:
printf("\e[H\e[2J");
return;
}
}
<< | Equipe4-2015-1 |
---|