
		fbbnenas
		
		(usa Ubuntu)
		
		Enviado em 08/12/2008 - 17:55h 
		necessito agora de atraves do arquivo gerado pela função "void salvar(int*j);" ler e usar seus dados na minha estrutura, ou seja, o usuario ira cadastrar apenas uma vez e salvaria o cadastro, atraves do arquivo salvo apenas carregaria os dados e executaria normalmente o programa!
codigo editado e corrigido em alguns erros.
//Laboratorio de Progrmação de Computadores I - 2/2008
//Trabalho Pratico
//Loja Virtual
//Implementação de uma loja virtual capaz de negociar preços de vendas
//com o usuário
//Autor: Felipe Godinho Correa
//Data: 07/12/2008
//Bibliotecas de funções declaradas 
#include <stdio.h>
#include <stdlib.h>  
#include <string.h> // para uso da função strcat
#include <time.h> //para uso da função time(NULL)
//Macros usadas afim de evitar "numeros magicos" pelo codigo fonte 
#define TAMANMAX 20
#define MAXPRODUTS 5
#define RANDOM 4
#define RODMAX 10
#define LIM 9
#define sim 1
#define nao 0
#define P1 0.01
#define P2 0.02
#define P3 0.03
#define P4 0.04
#define P5 0.05
//Declaração do vetor de estruturas para o uso no cadastramento de produtos
struct produto{
     char produto[TAMANMAX] ;
     int codigo;
     float preco;
     int desp;
     }pdr[MAXPRODUTS];
     
//Função usada para realizar o cadastro de produtos
void insert_pdt(int *i){
    printf("CADASTRAMENTO\n");
    printf("--------------\n");
    printf("Nome do produto     :"); scanf("%s", pdr[*i].produto);
    printf("Codigo do produto   :"); scanf("%d", &pdr[*i].codigo);
    printf("Valor do produto    :"); scanf("%f", &pdr[*i].preco);
    printf("Desposicao em estoque:");scanf("%d", &pdr[*i].desp);
    ++i;
    }
    
//Função usada para imprimir na tela a lista de produos cadastrados
void mostrar(int *j){
    int i;
    for(i=1; i<*j; i++){
      printf("\n***PRODUTOS***\n");
      if(*pdr[i].produto) printf("NUM 1 - Produto: %5s\n", pdr[i].produto);
      if(pdr[i].codigo) printf("NUM 2 -Codigo: %5d\n", pdr[i].codigo);
      if(pdr[i].preco) printf("NUM 3 - Preco: %5f\n", pdr[i].preco);
      if(pdr[i].desp) printf("NUM 4 - Desposicao: %5d\n", pdr[i].desp);
    }
    printf("***Pressione qualquer tecla para continuar***\n");
}
//Função usada para salvar a lista de produtos cadastrados
void salvar(int *j){
    int i;
    FILE *fp;
    char progn[TAMANMAX];
    printf("Insira um nome para o arquivo: ");
    scanf("%s", progn);
    strcat(progn,".txt"); //extenção .txt para o nome do arquivo
    if((fp = fopen (progn,"w"))==NULL){ //teste para ver se foi possivel
    //abrir o arquivo
       printf("IMPOSSIVEL ABRIR O ARQUIVO : %s\n\a",progn);
       exit(1);
       } 
    for(i=1; i<=*j; i++){
        if(*pdr[i].produto) fprintf(fp, "Produto: %5s\n", pdr[i].produto);
        if(pdr[i].codigo) fprintf(fp, "Codigo %5d\n", pdr[i].codigo);
     	if(pdr[i].preco) fprintf(fp, "Preco %5f\n", pdr[i].preco);
        if(pdr[i].desp) fprintf(fp, "Desposicao %5d\n", pdr[i].desp);
    }
    fclose(fp);
}
//Função desconto, o "motor principal do programa", função capaz de realizar 
//descontos com o usuário atraves de testes condicionais, será usado o seu valor
//de retorno para a negociação com o usuário
float desc(float val){
     int enter;
     float res, prctd;
     srand(time(NULL));
     enter = rand()%RANDOM;
     if(enter == 0)
       prctd = P1;       
     else if(enter == 1){
         prctd = P2;
     }
     else if(enter == 2){
         prctd = P3;
     }    
     else if(enter == 3){
	 prctd = P4;
     }
     else if(enter == 4){
         prctd = P5;	   		 
     }
     val -= (val*prctd);
     return val;
}
//INICIO DA FUÇÃO PRINCIPAL
main (){
//Declaração de arquivos e variaveis usadas durante o prgrama
FILE *file;
char opcao, opcad, continua, escolha,arqnom[TAMANMAX];
int cad, p, i,lvenda, j, num, para, contol = MAXPRODUTS;//a variavel contos 5 sera usada
//em determinada parte do programa que apresentaremos a lista de produtos 
//através da função "void mostar(int *j)"
float valorp, money, value;
while (1){  //uso de um laço infinito para execução
   printf("	******************************************\n");
   printf("	CORDAS DA ALEGRIA EQUIPAMENTOS DE SOM LTDA\n");
   printf("	******************************************\n");
   printf("\n");
   printf("SEJA BEM VINDO!\n");
   printf("Voce esta sendo atendido pelo nosso servidor eletronico ALPHA12\n");
   printf("\n");
   printf("Selecione uma das opcoes abaixo: ");
   printf("\n");
   do{ //uso do laço do while para execução deste menu
      printf("Selecione um dos campos para navegar\n");
      printf("\n");
      printf("TECLE 1 ou 2 ou 3\n");
      printf("\n");
      printf("\t\t*****************************\n");
      printf("\t\t1 - Cadastramento de produtos\n\t\t2 - Compra de produto\n\t\t3 - Envio de Relatorios\n"); 
      printf("\t\t*****************************\n");
      printf("\n");
      scanf("%c", &opcao);
      printf("\n");
      if((opcao!='1')&&(opcao!='2')&&(opcao!='3')){
        printf("Opcao incorreta\nFavor Inserir uma opcao correta\n");
        }
      }while((opcao!='1')&&(opcao!='2')&&(opcao!='3'));         
        switch(opcao){ //uso de um switch para a execução do programa
        //em diferentes campos
            case '1': { //campo para manipular produtos cadastrados
                 do{
                    printf("*************************\n");
                    printf("CADASTRAMENTO DE PRODUTOS\n");
                    printf("*************************\n");
                    printf("\n");
                    printf("TECLE M ou C ou S\n");
		            printf("\t\tM - Mostrar produtos cadastrados\n");
                    printf("\t\tC - Cadastramento de produtos\n");
                    printf("\t\tS - Salvar produtos cadastrados\n");
                    printf("\n");
                    scanf("%c", &opcad);
                    printf("\n");
                    
		    if(opcad == 'M'){ //opção do campo que imprime na tela a lista 
            // de produtos cadastrados 
                       printf("*****************\n");
                       printf("Lista de produtos\n");
                       printf("*****************\n");
                       printf("\n");
                       mostrar(&contol);
                       system("pause");
                       return 0;    
                       }
                    else if(opcad == 'C'){ //campo do programa que cadastra 
                    //produtos para a venda a um usuario                        
                        printf("*************\n");
                        printf("Cadastramento\n");
                        printf("*************\n");
                        printf("\n");
                        for(cad=1;cad<=5;cad++)
                            insert_pdt(&cad);
                        }
                    else if(opcad == 'S'){ //varia usada para salvar em 
                    //um arquivo de texto os produtos cadastrados
                        printf("SALVANDO O CADASTRAMENTO\n");
                        salvar(&contol);
                        return 0;
                        }
                    }while((opcad!='A')&&(opcad!='B')&&(opcad!='C'));
             system("cls"); //usado pra linpar a tela
             } break;
             case '2' : { //campo do programa destinado a negociação de produtos
             //com o usuário
                        printf("Insira um nome para o arquivo que ira enviar o relatorio de vendas\n");
                        scanf("%s", arqnom);
                        strcat(arqnom,".txt"); //extenção .txt para o nome do arquivo                  
                        if((file = fopen(arqnom, "w"))==NULL){ //teste se foi
                        //possivel abrir o arquivo
                            printf("Impossivel abrir o arquivo %s\n",arqnom);
                            exit(2);
                            }
                        printf("*******************\n");
                        printf("NEGOCIACAO E VENDAS\n");
                        printf("*******************\n");
                        printf("\n");
                        printf("Nossos Produtos\n");
                        mostrar(&contol);                        
                        printf("Selecione um dos pdr para comprar\n");
			printf("TECLE UM NUMERO DE 1 A 5\n"); 
                        scanf("%d", &p);
                        printf("Voce esta comprando o produto:\n");
                        mostrar(&p);
                        money = pdr[p].preco;
                        do{
                           for(j=1;j<=RODMAX;j++){  //Inicio das negociações
                             printf("rodada %d de negociacao\n", j);
                             fprintf(file, "rodada %d de negociacao\n", j);
                             printf("Por favor digite o valor que voce deseja comprar o produto\n");  
                             fprintf(file, "Por favor digite o valor que voce deseja comprar o produto\n");
                             scanf("%f", &valorp);	
                             		    
                             if (valorp > pdr[p].preco) { //caso o preço proposto pelo usuário
                             //seja maior que o valor que esta a venda, auotmaticamente
                             //o sistema vende para ele o produto
                               printf("%f e um bom preco!Negocio fechado!\n", valorp);
                               fprintf(file, "%f e um bom preco!Negocio fechado\n", valorp);
                               pdr[p].desp--;
                               salvar(&p);
                               return 0;                               
                               }
                           else{ // caso ele deseja por um preço menor do que o preço original,
                           //o sistema inicia negociações de preços com o usuário
                                money = desc(money); //uso da função que sera usada para decrementar
                                //o valor do preço no decorrer das negociações
                                printf("Posso lhe vender por este preco %f\n", money);
                                fprintf(file, "Posso lhe vender por este preco %f\n", money);
                                printf("Deseja comprar por este preco?\n");
                                fprintf(file, "Deseja comprar por este preco?\n");
                                printf("Pressione ''s'' para sim e ''n'' para nao\n");
                                scanf("%c", &escolha);
                                escolha = getchar();
                                getchar();
                                if(escolha == 's'){
                                   printf("Vendido pelo valor de %f\n", money);
                                   fprintf(file, "Vendido pelo valor de %f\n", money); 
                                   pdr[p].desp--;
                                    salvar(&p);
                                    return 0;   
                                   }
                           printf("Deseja continuar a negociar?\n");
                           fprintf(file, "Deseja continuar a negociar?\n");
                           printf("Digite ''s'' para sim e ''n''para nao\n");
                           scanf("%c", &continua);
                           continua = getchar();
                           getchar();
                           para = continua == 's' ? sim : nao;
                           if(j==LIM)
                              printf("A decima rodada sera a nossa ultima rodada de negociacoes!\n");
                                   }
                           } system("cls");
                        }while(!para);
                } break;
                case '3': {
                         printf("******************\n");
                         printf("ENVIO DE RELATORIO\n");
                         printf("******************\n");
                         printf("\n");
                         mostrar(&contol);
                         salvar(&contol);
                         } break;
    }
}
fclose(file);
}