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);
}