Jump to content

Programa de leilões


jluis

Recommended Posts

boas...

eu a desenvolver um programa para fazer um género de leiloes, tem o programa servidor e o cliente, para ligar isto estou a usar pipes, mas estou com um problema ao gravar os estruturas no ficheiro, o fprintf não esta a fazer o que devia... alguem sabe o porque?

programa clientes.c

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>
#include <termios.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "clientserver.h"
#define max 20
int data_si(int Dia,int Mes,int Ano) // data do sistema
{
struct tm *local;
time_t t;
t= time(NULL);
local=localtime(&t);
Dia=local->tm_mday;
Mes=local->tm_mon+1;
Ano=local->tm_year+1900;
}
//------------------- fim geral --------------------------------//
//------------------- inicio artigo ----------------------------//
int Inserir( )
{	
int i,j;
for (i=1;i<=19;i++)
{
if (i!=msg.arte[i].num_art)
{
 msg.arte[i].num_art=i;
 break;
}
}
msg.arte[i].num_uti=msg.uti[i].num_uti;
printf("Qual o Nome?\n");
scanf("%*[^\n]");
scanf("%*c");
gets(msg.arte[i].nome);
for(j=0;j<=strlen(msg.arte[i].nome);j++)
{
tolower(msg.arte[i].nome[j]);
}
printf("Qual o Preço?\n");
scanf("%d",&msg.arte[i].preco);
printf("Descrição: \n");
scanf("%*[^\n]");
scanf("%*c");
gets(msg.arte[i].descricao);
data_si(msg.arte[i].inicio.dia, msg.arte[i].inicio.mes, msg.arte[i].inicio.ano);
}
int Mostrar( )
{
int i;
if(ficheiros.co==0)
{
printf("nao existe dados\n");
}
for (i=1;i<=max;i++)
{
printf("----------------------------------------------------------0\n");
printf("Numero	 : %d\n", msg.arte[i].num_art);
printf("Nome	 : %s\n", msg.arte[i].nome);
printf("Preço	 : %d\n", msg.arte[i].preco);
printf("descrição : %s\n", msg.arte[i].descricao);
if(msg.arte[i].num_uti==msg.uti[i].num_uti)
{
 printf("Nome do msg.utilzador : %s\n", msg.uti[i].nome);
}

printf("Dt. Inicio : %d/%d/%d\n", msg.arte[i].inicio.dia,msg.arte[i].inicio.mes,msg.arte[i].inicio.ano);
printf("Dt. Fim : %d/%d/%d\n", msg.arte[i].fim.dia,msg.arte[i].fim.mes,msg.arte[i].fim.ano);
printf("----------------------------------------------------------1\n\n");
}
sleep(10);
}
int Editar()
{
char art[100];
int i;

printf("Qual o nome do artigo?\n");
scanf("%*[^\n]");
scanf("%*c");
gets(art);
for(i=0;i<=strlen(art);i++)
{
tolower(art[i]);
}
for (i=0;i<=max;i++)
{
if (strcmp(art,msg.arte[i].nome)==0)
{
 printf("Qual o Preço?\n");
 scanf("%d",&msg.arte[i].preco);
 printf("Descrição: \n");
 scanf("%*[^\n]");
 scanf("%*c");
 gets(msg.arte[i].descricao);
}
else
{
 printf("Não existe esse artigo!\n");
 sleep(5);
 break;
}
}

}
//------------------- fim artigo -------------------------------//
//------------------- inicio leilao ----------------------------//
int in_leilao()
{	

int dia, mes, ano,i,conta;
char name[100],b;
printf("Qual o Nome?\n");
scanf("%*[^\n]");
scanf("%*c");
gets(name);
for(i=0;i<=strlen(name);i++)
{
tolower(name[i]);
}
for (i=1;i>=ficheiros.co;i++)
{
if (strcmp(name,msg.arte[i].nome)==0)
{
conta=i;
} else{
conta=0;
}
if(conta!=0){
printf("Pelo mesmo preço?\n");
scanf("%c",&b);
if(b=='n'|| b=='N')
{
 printf("Qual o novo preço?\n");
 scanf("%d",&msg.arte[i].preco);
}
else
{
 data_si(msg.arte[i].inicio.dia, msg.arte[i].inicio.mes, msg.arte[i].inicio.ano);
 dia==msg.arte[i].inicio.dia; mes==msg.arte[i].inicio.mes; ano==msg.arte[i].inicio.ano;
 if(mes==2 && dia==28)
 {
mes++;
dia=dia+8;
 }
 else
 {
if(mes==1 || 3 || 5 || 7 || 8 || 10 || 12 && dia==31)
{
mes++;
dia=dia+8;
}
else
{
if(mes==4 || 6 || 9 || 11 && dia==30)
{
 mes++;
 dia=dia+8;
}
else
{
 if(mes==12 && dia==31)
 {
 dia=dia+8;
 mes=1;
 ano++;
 }
 else
 {
 dia=dia+8;
 }
}
}
 }
 msg.arte[i].fim.dia=dia;
 msg.arte[i].fim.mes=mes;
 msg.arte[i].fim.ano=ano;
 msg.arte[i].emleilao='s';
 return;
}
}

else
{
printf("Não existe esse artigo!");
}
}
}
int fim_leilao()
{
char art[100],b;
int i;
printf("Qual o nome do artigo?\n");
scanf("%*[^\n]");
scanf("%*c");
gets(art);
for(i=0;i<=strlen(art)-1;i++)
{
tolower(art[i]);
}
for (i=0;i<=ficheiros.co;i++)
{
if (strcmp(art,msg.arte[i].nome)==0)
{
 printf("Deseja finalizar o leilao?\n");
 scanf("%s",&b);
 if(b=='s'|| b== 'S')
 {
msg.arte[i].emleilao='n';
 }
}
else
{
 printf("Não existe esse artigo!");
}
}
}
int lis_leilao( )
{
int i;

for (i=1;i<=ficheiros.co;i++)
{
if(msg.arte[i].num_uti==msg.uti[i].num_uti)
{
 if(msg.arte[i].emleilao="s"||"S")
 {
printf("Numero	 : %d\n", msg.arte[i].num_art);
printf("Nome	 : %s\n", msg.arte[i].nome);
printf("Preço	 : %d\n", msg.arte[i].preco);
printf("descrição : %s\n", msg.arte[i].descricao);
printf("Nome do msg.utilizador : %s\n", msg.uti[i].nome);
printf("Dt. Inicio : %d/%d/%d\n", msg.arte[i].inicio.dia,msg.arte[i].inicio.mes,msg.arte[i].inicio.ano);
printf("Dt. Fim : %d/%d/%d\n", msg.arte[i].fim.dia,msg.arte[i].fim.mes,msg.arte[i].fim.ano);
 }
}
}
sleep(5);
}
//------------------- fim leilao -------------------------------//
//------------------- inicio msg.utilizadores ----------------------//
int Ins_artes()
{	
int i;

for (i=1;i<=ficheiros.co;i++)
{
if (i!=msg.uti[i].num_uti)
{
 msg.uti[i].num_uti=i;
}
}
printf("Qual o Nome?\n");
scanf("%*[^\n]");
scanf("%*c");
gets(msg.uti[i].nome);
tolower(msg.uti[i].nome[i]);
printf("Qual a data de Nascimento?\n");
scanf("%d %d %d",&msg.uti[i].nasc.dia, &msg.uti[i].nasc.mes, &msg.uti[i].nasc.ano);
}
int edi()
{
char art[100];
int i, n;

printf("Qual o numero?\n");
scanf("%d",&n);
for (i=0;i<=ficheiros.co;i++)
{
if (n==msg.uti[i].num_uti)
{
 printf("Qual o nome?");
 scanf("%*[^\n]");
 scanf("%*c");
 gets(msg.uti[i].nome);
 tolower(msg.uti[i].nome[i]);
 printf("Qual a data de Nascimento?\n");
 scanf("%d %d %d",&msg.uti[i].nasc.dia, &msg.uti[i].nasc.mes, &msg.uti[i].nasc.ano);
}
else
{
 printf("Não existe esse artigo!");
}
}
}
int lis_art_ven( )
{
int i;
for (i=1;i<=ficheiros.co;i++)
{
if(msg.arte[i].num_uti==msg.uti[i].num_uti)
{
 printf("Numero	 : %d\n", msg.arte[i].num_art);
 printf("Nome	 : %s\n", msg.arte[i].nome);
 printf("Preço	 : %d\n", msg.arte[i].preco);
 printf("descrição : %s\n", msg.arte[i].descricao);
 printf("Dt. Inicio : %d/%d/%d\n", msg.arte[i].inicio.dia,msg.arte[i].inicio.mes,msg.arte[i].inicio.ano);
 printf("Dt. Fim : %d/%d/%d\n", msg.arte[i].fim.dia,msg.arte[i].fim.mes,msg.arte[i].fim.ano);
}
}
sleep(5);
}
//------------------- fim msg.utilizadores -------------------------//
//------------------- inicio fifos	 -------------------------//
void fifos(int server_tunel,char clfifo[255])
{
int client_tunel;
printf("fifo\n");
if (server_tunel != -1)
{
 write(server_tunel, &msg, sizeof(msg));
 }
client_tunel = open(clfifo, O_RDONLY|O_NONBLOCK);
if (client_tunel!= -1)
{
 read(SERVER_FIFO, &msg, sizeof(msg));
}
}
int acc(int server_tunel,char clfifo[255])
{
char user[100], pass[100],b;
int i;
printf("nome do utilizador: ");
scanf("%*[^\n]");
scanf("%*c");
gets(user);
printf("password: ");
gets(pass);
for (i=0;i<=ficheiros.couti;i++)
{
if(strcmp(user,msg.uti[i].nome)!=0)
{
 strcpy(user,msg.uti[i].nome);
 strcpy(pass,msg.uti[i].pass);
}
}
msg.msget=2;
fifos(server_tunel,clfifo);
}
int login(int server_tunel,char clfifo[255])
{
char user[100], pass[100],b;
int i;
printf("ja tem conta?");
scanf("%s",&b);

if(b=='n'|| b== 'N')
{
acc(server_tunel,clfifo);
}
else{scanf("%*[^\n]");
 scanf("%*c");}
printf("Username: ");
gets(user);
printf("Password: ");
gets(pass);
for (i=0;i<=ficheiros.couti;i++)
{
if(strcmp(user,msg.uti[i].nome)!=0 && strcmp(pass,msg.uti[i].pass)!=0)
{
 printf("utilizador ou pass invalido");
}
else
{
 printf("Bem vindo %s", user);
 return;
}
}
}
//------------------- fim fifos	 -------------------------//
//------------------- inicio submenus -------------------------//
//------------------- fim submenus	 -------------------------//
int main()
{
int op;
int server_tunel,client_tunel;
char clfifo[255];

msg.client_pid = getpid();
sprintf(clfifo,CLIENT_FIFO,msg.client_pid);
printf("as %d\n\n",msg.client_pid);
server_tunel = open(SERVER_FIFO, O_WRONLY);
if (server_tunel == -1)
{
fprintf(stderr, "Sorry, no server\n");
exit(EXIT_FAILURE);
}

if (mkfifo(clfifo, 0777) == -1)
{
fprintf(stderr, "Sorry, can't make %s\n", CLIENT_FIFO);
exit(EXIT_FAILURE);
}
login(server_tunel,clfifo);
while(1)
{
system("clear");
printf("1 - intruduzir artigo\n");
printf("2 - vender artigo\n");
printf("3 - comprar artigo(fazer)\n");
printf("4 - listar todos os artigo em leilao\n");
printf("5 - meus artigo vendidos\n");
printf("6 - meus artigo comprados(fazer)\n");
printf("7 - sair\n");
scanf("%d",&op);
switch(op)
{
case 1:{into(server_tunel,clfifo);break;}
case 2:{vender(server_tunel,clfifo);break;}
case 3:{break;}
case 4:{lis_leilao();break;}
case 5:{lis_art_ven();break;}
case 6:{break; fifos(server_tunel,clfifo);}
case 7:{exit(0);}
}
}
close(client_tunel);
unlink(CLIENT_FIFO);
}
int vender( int server_tunel,char clfifo[255])
{
int sp;
while(1){
system("clear");
printf("1 - vender novo artigo\n");
printf("2 - vender ja\n");
printf("3 - voltar atraz\n");
scanf("%d",&sp);
switch(sp)
{
case 1:
 in_leilao();
 msg.msget=3;
 fifos(server_tunel,clfifo);
 break;

case 2:
 fim_leilao();
 msg.msget=3;
 fifos(server_tunel,clfifo);
 break;

case 3:
 return;
}
}
}
int into(int server_tunel,char clfifo[255])
{
int sp,i;
while(1){
system("clear");
printf("1 - intruduzir novo artigo\n");
printf("2 - Editar artigo\n");
printf("3 - Mostrar artigo\n");
printf("4 - voltar atraz\n");
scanf("%d",&sp);
switch(sp)
{
case 1:
 Inserir();
 msg.msget=3;
 fifos(server_tunel,clfifo);
 break;

case 2:
 Editar();
 msg.msget=3;
 fifos(server_tunel,clfifo);
 break;

case 3:
 system("clear");
 Mostrar();
 break;

case 4:
 return;
}
}
}

ficheiro clientserv.h

#include <sys/types.h>
#include <signal.h>
#include <ctype.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/stat.h>
#define SERVER_FIFO "/tmp/serv_fifo"
#define CLIENT_FIFO "/tmp/cli_%d_fifo"
typedef struct {int dia,mes,ano;}DATA;
struct artigo
{
int num_art;
int num_uti;
char nome[100];
int preco;
char descricao[500] ;
char emleilao;
DATA inicio;
DATA fim;
} artigo;
struct utilizadores
{
int num_uti;
char nome[100];
char pass[100];
DATA nasc;
} utilizadores;
struct ficheiros
{
int co, couti;
}ficheiros;
struct msg
{
int client_pid;
int msget;

struct utilizadores uti[40];
struct artigo arte[40];
int off;
}msg;

ficheiro serverv3.c

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>
#include <errno.h>
#include "clientserver.h"
//------------------- inicio geral -----------------------------//
void TrataSinal(int signal) {
printf("[Trata] Processo %d a tratar o sinal %d...\n", getpid(), signal);
}
int data_si(int Dia,int Mes,int Ano) /* data do sistema*/
{
struct tm *local;
time_t t;
t= time(NULL);
local=localtime(&t);
Dia=local->tm_mday;
Mes=local->tm_mon+1;
Ano=local->tm_year+1900;
}
void ler_uti()
{
FILE *ut;
 int i, conta ,el ,ca ;
ut = fopen("utilizadores.txt","a+");
if(ut==NULL)
{
printf("Impossivel abrir o ficheiro!");
exit(1);
}
else
{
for(i=1;i>=40;i++){
fscanf(ut,"%d\n %s\n %d\n %d\n %d\n",&msg.uti[i].num_uti,msg.uti[i].nome,&msg.uti[i].nasc.dia, &msg.uti[i].nasc.mes, &msg.uti[i].nasc.ano);
}
}
i=0;
conta=0;
while((ca = fgetc(ut)) != EOF)
{
el= 1; // há conteúdo no arquivo

if(ca == '\n')
{ // é uma quebra de linha?
 // vamos incrementar a quantidade de linhas
 conta++;			
}
}
ficheiros.couti=conta;
}
void gravar_uti()
{
FILE *ut;
int i;
ut = fopen("utilizadores.txt","a+");
if(ut==NULL)
{
printf("Impossivel abrir o ficheiro!");
exit(1);
}
else
{
}
for(i=1;i>=20;i++){
if(msg.uti[i].num_uti!=0)
{
fprintf(ut,"%d\n %s\n %d\n %d\n %d\n",msg.uti[i].num_uti,msg.uti[i].nome,msg.uti[i].nasc.dia, msg.uti[i].nasc.mes, msg.uti[i].nasc.ano);
}
}
}
void ler_art()
{
FILE *at;
int i;
at = fopen("artigos.txt","a+");
if(at==NULL)
{
printf("Impossivel abrir o ficheiro!");
exit(1);
}
else
{
 for(i=1;i>=40;i++){
fscanf(at,"%d\n %d\n %s\n %d\n %s\n %c\n %d\n %d\n %d\n %d\n %d\n %d\n",&msg.arte[i].num_art,&msg.arte[i].num_uti,msg.arte[i].nome,&msg.arte[i].preco,msg.arte[i].descricao,msg.arte[i].emleilao,&msg.arte[i].inicio.dia,&msg.arte[i].inicio.mes, &msg.arte[i].inicio.ano, &msg.arte[i].fim.dia, &msg.arte[i].fim.mes, &msg.arte[i].fim.ano);
}
}
int conta=0;
char curr; //prev variable is included to exclude multiple spaces.
while((fscanf(at,"%c",&curr))!=EOF)
{
if (curr=='\n') conta++;
}
ficheiros.co=conta;
}

void gravar_art()
{
FILE *at;
int i;
printf("control 6 \n");
at = fopen("artigos.txt","a+");
if(at==NULL)
{
printf("Impossivel abrir o ficheiro!");
exit(1);
}
else
{
for (i=1;i<=2;i++)
{
printf("----------------------------------------------------------0\n");
printf("Numero	 : %d\n", msg.arte[i].num_art);
printf("Nome	 : %s\n", msg.arte[i].nome);
printf("Preço	 : %d\n", msg.arte[i].preco);
printf("descrição : %s\n", msg.arte[i].descricao);
if(msg.arte[i].num_uti==msg.uti[i].num_uti)
{
 printf("Nome do utilzador : %s\n", msg.uti[i].nome);
}

printf("Dt. Inicio : %d/%d/%d\n", msg.arte[i].inicio.dia,msg.arte[i].inicio.mes,msg.arte[i].inicio.ano);
printf("Dt. Fim : %d/%d/%d\n", msg.arte[i].fim.dia,msg.arte[i].fim.mes,msg.arte[i].fim.ano);
printf("----------------------------------------------------------1\n\n");
}
printf("control 7 \n");
for(i=1;i<=40;i++){
 if(msg.arte[i].num_art!=0)
 {
 printf("control 8 \n");
fprintf(at,"%d\n %d\n %s\n %d\n %c\n %c\n %d\n %d\n %d\n %d\n %d\n %d\n",msg.arte[i].num_art,msg.arte[i].num_uti,msg.arte[i].nome,msg.arte[i].preco,msg.arte[i].descricao,msg.arte[i].emleilao,msg.arte[i].inicio.dia,msg.arte[i].inicio.mes, msg.arte[i].inicio.ano, msg.arte[i].fim.dia, msg.arte[i].fim.mes, msg.arte[i].fim.ano);
 printf("control 8 %d \n",i);
 }
}
}

}
//------------------- fim geral --------------------------------//
/*void ouch(int sig)
{
printf("OUCH! − I got signal %d\n", sig);
}*/
main()
{
int server_tunel, client_tunel,i, read_res,filho, ret, status,clpid;
char clfifo[255];
pid_t pid;
filho=0;
/* struct sigaction act;
act.sa_handler = ouch;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, 0);*/
ler_art();
ler_uti();

printf("Bem vindo ao leilao servidor\n");
printf("Carregando dados\n");
printf("Carregamento concluido, para desligar o servidor basta fechar esta janela\n");
ret = mkfifo(SERVER_FIFO, 0777);
if (ret == -1 && errno!=EEXIST)
{
fprintf(stderr, "Falha no pipe\n");
exit(EXIT_FAILURE);
}
if (ret == -1 && errno==EEXIST)
{
fprintf(stderr, "server ja existe\n");
exit(EXIT_FAILURE);
}
server_tunel = open(SERVER_FIFO, O_RDONLY);
if (server_tunel == -1)
{
fprintf(stderr, "Server fifo failure\n");
exit(EXIT_FAILURE);
}
read_res==0;
do
{

switch((pid=fork()))
{
 case -1: /* Erro no fork */
perror("[Erro] Fork...");
exit(EXIT_FAILURE);
 case 0: /* Processo filho */
 /*if (signal(SIGINT, TrataSinal)==SIG_ERR) {
 fprintf(stderr, "[Erro] A redirecionar sinal! (%d)\n", SIGINT);
 exit(1);
 }*/
do
 {
read_res = read(server_tunel, &msg, sizeof(struct msg));
printf("control 3A leitura pipe server \n");
printf("%d msg",msg.msget);
if(read_res<0)
{printf("erro");exit(1);}
if (read_res > 0)
{
switch(msg.msget);
{
case 2:gravar_uti();break;
case 3:gravar_art();printf("control 9 \n");
}
printf("control 10 \n");
 sprintf(clfifo,CLIENT_FIFO,msg.client_pid);
 printf("as %s\n",clfifo);
 client_tunel = open(clfifo, O_WRONLY);
 printf("as %d\n",client_tunel);
 if (client_tunel != -1)
 {
printf("tunel\n");
write(client_tunel, &msg, sizeof(struct msg));
close(client_tunel);
 }
}
else
{printf("nada\n");printf("nada\n");printf("nada\n");printf("nada\n");}
}while (read_res >=0);
filho=1;
break;
 default: /* Processo pai */
wait(&status);
 //if(WIFSIGNALED(status))
 //printf("[Pai] O meu filho terminou devido ao sinal %d que lhe enviei...\n", WTERMSIG(status) );
 if(WIFEXITED(status))
 printf("[Pai] O meu Filho terminou devido ao exit(%d)...\n", WEXITSTATUS(status) );
}
}while(!filho);
close(server_tunel);
unlink(SERVER_FIFO);
}

esta aqui todo o codigo feito...

cumprs e bem haja aos criadoes deste forum...

Edited by Baderous
geshi
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.