I need someone to correct anithing that is wrong in this code... and i want to know how to create a non determined number of lists, something like we put a new list and we can add more lists when we want...
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #define NUM 9 typedef struct{ int dia,mes; } Data; typedef struct{ int x,y; } Coords; typedef struct{ char nome[50], morada[75], email[40], comida[80], telefone[10], observacoes[120]; Coords coordenadas; int dia_descanso; Data inicio_ferias, fim_ferias; }Restaurante; typedef struct lnode *List; typedef struct lnode { Restaurante info; List next; } List_node; int fputrestaurante(Restaurante *rest) { FILE *fp = fopen("data.dat", "wb"); int cnt = -1; if (fp != NULL) cnt = fwrite((void *)rest, sizeof(rest), NUM, fp); fclose(fp); return cnt; /* número de elementos escritos ou -1 */ } int testames(int mes) { int diames; lab: switch (mes) { case 1: diames=31; break; case 3: diames=31; break; case 5: diames=31; break; case 7: diames=31; break; case 8: diames=31; break; case 10: diames=31; break; case 12: diames=31; break; case 2: diames=28; break; case 4: diames=30; break; case 6: diames=30; break; case 9: diames=30; break; case 11: diames=30; break; default: printf("Erro de leitura do mês"); goto lab; } return diames; } List cria_lista (void){ List aux; Restaurante rest; aux = (List) malloc (sizeof (List_node)); if (aux != NULL) { aux->info = rest; aux->next = NULL; } return aux; } Restaurante criarrestaurante(Restaurante *resta) { int i=1,diames; printf("Nome do restaurante:"); scanf("%s", &resta->nome); scanf("%*[^\n]"); printf("Morada do restaurante:"); scanf("%s", &resta->morada); scanf("%*[^\n]"); printf("E-mail do restaurante:"); scanf("%s", &resta->email); scanf("%*[^\n]"); printf("Tipo de comida do restaurante:"); scanf("%s", &resta->comida); scanf("%*[^\n]"); printf("No de telefone do restaurante:"); scanf("%s", &resta->telefone); scanf("%*[^\n]"); printf("Observacoes sobre o restaurante:"); scanf("%s", &resta->observacoes); scanf("%*[^\n]"); printf("Coordenada X, seguida de Y do restaurante:"); do { printf("\nX:"); i=scanf("%d", &resta->coordenadas.x); scanf("%*[^\n]"); }while (i!=1); do { printf("\nY:"); i=scanf("%d", &resta->coordenadas.y); scanf("%*[^\n]"); }while (i!=1); printf("Dia de descanso do restaurante:\n"); printf("1=Domingo; 2=Segunda-Feira; 3=Terca-Feira; 4=Quarta-Feira; 5=Quinta-Feira; 6=Sexta-Feira; 7=Sabado.\n"); do { printf("Dia:"); i=scanf("%d", &resta->dia_descanso); scanf("%*[^\n]"); }while (i!=1 || resta->dia_descanso<1 || resta->dia_descanso>7); printf("Ferias do restaurante: (MM/DD)"); printf("\nMes seguido do Dia do ínicio das ferias:"); do { printf("\nMes:"); i=scanf("%d", &resta->inicio_ferias.mes); scanf("%*[^\n]"); }while (i!=1 || resta->inicio_ferias.mes<1 || resta->inicio_ferias.mes>12); diames=testames(resta->inicio_ferias.mes); /*testa se o mes tem 29, 30 ou 31 dias (Consideramos que fevereiro tem sempre 28, uma vez que nao usamos anos*/ do { printf("\nDia:"); i=scanf("%d", &resta->inicio_ferias.dia); scanf("%*[^\n]"); }while (i!=1 || resta->inicio_ferias.dia<1 || resta->inicio_ferias.dia>diames); printf("Mes seguido do Dia do Fim das ferias:"); do { printf("\nMes:"); i=scanf("%d", &resta->fim_ferias.mes); scanf("%*[^\n]"); }while (i!=1 || resta->fim_ferias.mes<1 || resta->fim_ferias.mes>12); diames=testames(resta->fim_ferias.mes); /*testa se o mes tem 29, 30 ou 31 dias (Consideramos que fevereiro tem sempre 28, uma vez que nao usamos anos*/ do { printf("Dia:"); i=scanf("%d", &resta->fim_ferias.dia); scanf("%*[^\n]"); }while (i!=1 || resta->fim_ferias.dia<1 || resta->fim_ferias.dia>diames); return resta[1]; } char imprime_restaurante(Restaurante *rest) { printf("\nNome: %s", rest->nome); printf("\nMorada: %s", rest->morada); printf("\nE-Mail: %s", rest->email); printf("\nTipo de Comida: %s", rest->comida); printf("\nNumero de Telefone: %s", rest->telefone); printf("\nObservações: %s", rest->observacoes); printf("\nCoordenadas: %d,%d", rest->coordenadas.x, rest->coordenadas.y); switch (rest->dia_descanso) { case 1: printf("\nDia de descanso semanal: Domingo"); break; case 2: printf("\nDia de descanso semanal: Segunda-Feira"); break; case 3: printf("\nDia de descanso semanal: Terça-Feira"); break; case 4: printf("\nDia de descanso semanal: Quarta-Feira"); break; case 5: printf("\nDia de descanso semanal: Quinta-Feira"); break; case 6: printf("\nDia de descanso semanal: Sexta-Feira"); break; case 7: printf("\nDia de descanso semanal: Sábado"); break; default: printf("\n\nErro na leitura do dia de descanso!\n\n"); break; } printf("\nInicio das ferias: %d/%d", rest->inicio_ferias.dia, rest->inicio_ferias.mes); printf("\nFim das ferias: %d/%d\n", rest->fim_ferias.dia, rest->fim_ferias.mes); } int main() { Restaurante rest; int i=1,k; Menu: printf("MENU\n"); printf("1)Adicionar restaurante\n"); printf("2)Ler lista de restaurantes\n"); do { i=scanf("%d",&k); scanf("%*[^\n]"); } while(i!=1); switch (k) { case 1: {criarrestaurante(&rest); break; } case 2: break; default: { printf("Opção inválida!"); goto Menu; } } List aux=cria_lista(); fputrestaurante(&rest); imprime_restaurante(&rest); system("PAUSE"); }



LinkBack URL
About LinkBacks


