Ajuda em programa de c++(Urgente)(cont)

KaRrEiRa

Membro
Desculpa inda sou novo nisto....
"Para o efeito,
é necessário ter a informação em cada momento em relação às
características técnicas de cada projecto, assim como do seu estado desde a
encomenda feita pelo cliente, até à sua aprovação e posterior entrada em execução
em obra.
Em cada instante, pretendese
ter a informação relativa aos projectos, armazenada
em ficheiro. Havendo neste caso um ficheiro Project_in.txt, que contém a
informação de cada um dos projectos em execução e outro ficheiro

Project_out.txt
, que guarda a informação dos projectos concluídos.
Os projectos em execução, podemse
encontrar em dois estados distintos:

encomenda (1)
, execução (2) ou concluído (3). Por outro lado, os projectosgrama
concluídos, podem estar: em aprovação (3), aprovados (4) ou em obra (5).
Em termos organizaconais, sempre que um projecto em execução, estiver no
estado concluído, significa que este se encontra preparado para ser apagado do
ficheiro Project_in.txt e passar para o ficheiro Project_out.txt.

Em conson
ância com o exposto, o programa deverá realizar as seguintes tarefas:

a)
Efectuar a introdução dos dados, relativos a um novo projecto, cujo estado inicial
deverá ser encomenda (1), e posterior adição ao ficheiro Project_in.txt;

b)
Efectuar a leitura da informação contida em cada um dos ficheiros
(Project_in.txt e Project_out.txt), para a respectiva estrutura de dados
adequada;

c)
Permitir a impressão do ecrã do computador da informação, relativa a um dado
projecto, a partir da sua leitura do ficheiro Project_in.txt ou Project_out.txt,
quer este ainda se encontre no primeiro ou já esteja no segundo. Alterar o
estado de cada um dos projectos, em função do seu estado actual;

d)
Remover um projecto que esteja no estado concluído (3) no ficheiro

Project_in.txt
e, adicionálo
ao ficheiro Project_out.txt, colocando o seu estado
em aprovação (3);

e)
Efectuar a pesquisa dos projectos em cada um dos ficheiros, em função do seu
estado, ID do Projecto e Nome do Cliente;
Sugerese
que no início do programa, se faça sempre o carregamento da
informação contida em cada um dos ficheiros Project_in.txt ou Project_out.txt,
caso estes existam, para uma estrutura de dados adequada. Caso não existam

ainda, estes ficheiros deverão ser criados.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
 
typedef struct projecto {
int id_proj; //ID_Proj = xxxGrupoTurno
char nome_obra[80];
int estado;
float potencia_kw;
int n_circuito_tomada16;
int n_circuito_ilumi10;
int n_circuito_maq20;
char nome_cliente[80];
char telf[9];
char morada[80]; 
struct projecto *seg, *ant; 
}projecto;
int id_proj,estado,n_circuito_tomada16,n_circuito_ilum i10,n_circuito_maq20 ;
float potencia_kw;
void pausa(){ 
char pausa;
pausa=getch();
}
void empresa(){
system("cls");
printf("\nEmpresa de Tensão.Lda\n");
}
int menu(){ //menu principal
int op;
empresa();
printf("\nQual e a sua opcao?\n");
printf("\n\t(1) -> Inserir novo projecto;");
printf("\n\t(2) -> Remover projecto;");
printf("\n\t(3) -> Alterar projecto;");
printf("\n\t(4) -> Procurar projecto;");
printf("\n\t(5) -> Listar projectos;");
printf("\n\t(6) -> Gravar projectos;");
printf("\n\t(7) -> Carregar projectos;");
printf("\n\t(8) -> Ordenar lista;");
printf("\n\t(9) -> Sair;\n\n");
do{
op=getch()-48;
}while(op<1 || op>9 && !int());
return op;
}
void insere(projecto **inicio, projecto **fim){ 
projecto *aux;
 
aux=(projecto*)malloc(sizeof(projecto));
if(aux==NULL)
{
empresa();
printf("Erro de alocacao de memoria!");
return;
}
empresa();
printf("\nIntroducao de dados do Projecto:\n");
scanf("%d",&id_proj);
printf("\nNome da Obra: ");
fflush(stdin);
gets(aux->nome_obra);
 
printf("\nEstado: ");
fflush(stdin);
scanf("%d",&estado);
printf("\nPotência em KW: ");
fflush(stdin);
scanf("%f",&potencia_kw);
printf("\nNúmero de Circuito com Tomadas com 16A: ");
scanf("%d",&n_circuito_tomada16);
printf("\nNúmero de circuitos de iluminação com 10A: ");
fflush(stdin);
scanf("%d",&n_circuito_ilumi10);
printf("\nNúmero de circuitos de maquinas com 20A: ");
fflush(stdin);
scanf("%d",&n_circuito_maq20);
printf("\nNome do Cliente: ");
fflush(stdin);
gets(aux->nome_cliente);
printf("\nNúmero de Telefone: ");
fflush(stdin);
gets(aux->telf);
 
printf("\nMorada do Cliente: ");
fflush(stdin);
gets(aux->morada);
 
if(*inicio==NULL) 
{
*inicio=*fim=aux;
aux->seg=NULL;
}
else 
{
(*fim)->seg=aux;
*fim=aux;
aux->seg=NULL;
}
}
void listar(projecto *inicio){ 
projecto *aux;
aux=inicio;
empresa();
 
if(!aux) 
{
printf("\n\nLista vazia!!");
}
else
{
do{
printf("\n\nIntroducao de dados do Projecto: %d",id_proj);
printf("\n\nNome da Obra: %s", aux->nome_obra);
printf("\n\tEstado: %d",estado);
printf("\n\tPotência em KW: %f",potencia_kw);
printf("\n\tNúmero de Circuito com Tomadas com 16A: %d",n_circuito_tomada16);
printf("\n\tNúmero de circuitos de iluminação com 10A: %d",n_circuito_ilumi10);
printf("\n\tNúmero de circuitos de maquinas com 20A: %d",n_circuito_maq20);
printf("\n\tNome Cliente: %s", aux->nome_cliente);
printf("\n\tTelefone: %s", aux->telf);
printf("\n\tMorada do Cliente: %s", aux->morada);
aux=aux->seg;
}while(aux!=NULL);
}
pausa();
}
projecto *remove(projecto **inicio){ 
projecto *aux, *ant, *ret;
int av=1;
char projectos[50];
empresa();
printf("Introduza o projecto que pretende eliminar: ");
fflush(stdin);
gets(projectos);
 
 
if(*inicio==NULL) 
{
ret=NULL;
printf("\nO registo %s nao foi encontrado!!\n", &projectos);
pausa();
return NULL;
 
}
else 
{
ant=aux=*inicio;
while(av){
if(aux==NULL) 
av=0;
else if(!strcmp(aux->nome_obra,projectos)) 
av=0;
else 
{
ant=aux;
aux=ant->seg;
}
}
 
if(aux!=NULL)
{
ret=aux;
if(*inicio==aux)
*inicio=aux->seg;
 
else
ant->seg=aux->seg;
 
}
else
ret=NULL;
}
return(ret);
}
void gravar(projecto *inicio, char n_fich[]){ 
projecto *info;
FILE *fp;
info=inicio;
if((fp=fopen(n_fich,"w"))==NULL) 
{
empresa();
printf("\nAbertura para escrita de dados nao autorizada!!");
pausa();
return;
}
empresa();
printf("\nDados guardados com sucesso!!\n");
pausa();
info=inicio;
while(info)
{
fwrite(info,sizeof(*info),1,fp);
info=info->seg; 
}
fclose(fp);
}
void carregar(projecto **inicio, projecto **fim, char n_fich[]){ 
int size;
projecto *info, *temp;
FILE *fp;
if((fp=fopen(n_fich,"r"))==NULL)
{
empresa();
printf("\nNao pode abrir ficheiro para leitura ou o ficheiro nao existe!!");
pausa();
menu();
}
else{
printf("\nDados carregados com sucesso!!...");
pausa();
size=sizeof(projecto); 
info=(projecto*)malloc(size); 
 
if(!info) 
{
empresa();
printf("\nMemoria esgotada!!");
pausa();
return;
}
*inicio=*fim=info; 
fread(info,sizeof(*info),1,fp); 
while(!feof(fp)){
info->seg=(projecto*)malloc(size);
if(!info->seg)
{
empresa();
printf("\nMemoria esotada!!");
pausa();
return;
}
temp=info;
info=info->seg;
fread(info,sizeof(*info),1,fp);
}
free(temp->seg);
temp->seg=NULL;
*fim=temp;
fclose(fp);
}
menu();
}
void sair(projecto *inicio){ 
 
char sai, alt;
do{ 
empresa();
printf("\nTem a certeza que pretende sair (s/n)?\n");
sai=getch();scanf("%c", &sai);
}while((sai!='s') && (sai!='S') && (sai!='n') && (sai!='N')); 
switch(sai){ 
case 's': case 'S': do{ 
empresa();
 
printf("\nDeseja guardar as alteracoes feitas [s/n]?\n");
alt=getch();scanf("%c", &alt);
}while((alt!='s') && (alt!='S') && (alt!='n') && (alt!='N'));
 
switch(alt){
case 's': case 'S': empresa();
 
gravar(inicio,"Projectos");
printf("\n\nPrograma desligado!!\n");
exit(0);
break;
case 'n': case 'N': empresa();
 
printf("\n\nPrograma desligado!!\n");
exit(0);
break;
}
 
case 'n': case 'N': menu(); break;
 
} 
}
void troca(projecto *info,projecto *temp){
projecto *aux;
aux=(projecto *) malloc (sizeof(*aux)); 
*aux=*info; 
*info=*temp;
*temp=*aux;
free(aux);
}
void ordena (projecto *inicio,projecto *fim){ 
projecto * info,*temp;
int houve_troca=1;
while(houve_troca){
info=inicio;
houve_troca=0;
while(info !=fim){
if(strcmp(info->nome_obra,info->seg->nome_obra)>0)
{
temp=info->seg; 
troca(info,temp); 
temp->seg=info->seg;
info->ant=temp->ant;
info->seg=temp;
houve_troca=1L;
}
info=info->seg;
}
}
}
 
void main(){
 
projecto *cabeca,*cauda,*retirar;
cabeca=cauda=NULL;
int opcao;
char a;
 
 
do{ 
opcao=menu();
 
switch(opcao){ 
case 1:insere(&cabeca,&cauda); break; 
case 2:retirar=remove(&cabeca);
 
empresa();
if(retirar==NULL)
{
printf("Este projecto nao consta no ficheiro!!\7");
pausa();
}
else
if(!retirar){ 
do{ 
empresa();
 
printf("Tem a certeza que pretende eliminar este projecto [s/n]?\n");
scanf("%c",&a);
}while(a!='s' && a!='S' && a!='n' && a!='N'); 
switch(a){ 
case 's': case 'S': 
empresa();
 
printf("\n\nProjecto %s removido com sucesso!!\n",retirar->nome_obra);
pausa(); break;
case 'n': case 'N': menu(); break;
} 
} break; 
// case 3:alterar(cabeca,cauda); break;
 
// case 4:busca(cabeca,cauda); break;
case 5:listar(cabeca); break;
case 6:gravar(cabeca,"Projectos"); break;
case 7:carregar(&cabeca,&cauda,"Projectos"); break;
case 8:ordena(cabeca,cauda); break;
case 9:sair(cabeca); break;
 
} 
}while(1)
}
ele corre mas nao consigo fazer aquela cena dos ficheiros nem fazer alteração do projecto nem fazer o procurar do projecto....
Agradecia que me ajudassem. E mesmo urgente...
cumprimentos
 
Back
Topo