Fórum Utilização de Struct e gerar arquivo TXT em C #609181
21/04/2020
0
Alguem ai poderia me ajudar a concluir esse codigo?
Morri na praia aqui, tentei de tudo porem não sei mais para onde ir, fiz isso baseado em pesquisas.
Eu tenho que digitar via TECLADO mas não sei por onde estruturar isso.
"Elaborar um programa utilizando os conceitos de vetores e estruturas mostrados até agora. O programa deverá utilizar estruturas que atendam ao modelo de dados abaixo:
O usuário deverá informar 'n' registros via teclado e o resultado final deverá ser salvo em um arquivo texto conforme modelo abaixo:
#Cliente
Id: 1;
Nome: Cliente 1
##Telefone
Id: 1;
Telefone: 61-99999-9999;
Tipo: Celular;
Id: 2;
Telefone: 61-88888-8888;
Tipo: Residencial;
##Endereco
Id: 1;
Logradouro: Rua dois, 2, Brasilia, DF;
CEP: 70000-000;
#Cliente
Id: 2;
Nome: Cliente 2
##Telefone
Id: 3;
Telefone: 61-99999-9999;
Tipo: Celular;
Id: 4;
Telefone: 61-88888-8888;
Tipo: Residencial;
##Endereco
Id: 2;
Logradouro: Rua dois, 2, Brasilia, DF;
CEP: 70000-000;"
Morri na praia aqui, tentei de tudo porem não sei mais para onde ir, fiz isso baseado em pesquisas.
Eu tenho que digitar via TECLADO mas não sei por onde estruturar isso.
"Elaborar um programa utilizando os conceitos de vetores e estruturas mostrados até agora. O programa deverá utilizar estruturas que atendam ao modelo de dados abaixo:
O usuário deverá informar 'n' registros via teclado e o resultado final deverá ser salvo em um arquivo texto conforme modelo abaixo:
#Cliente
Id: 1;
Nome: Cliente 1
##Telefone
Id: 1;
Telefone: 61-99999-9999;
Tipo: Celular;
Id: 2;
Telefone: 61-88888-8888;
Tipo: Residencial;
##Endereco
Id: 1;
Logradouro: Rua dois, 2, Brasilia, DF;
CEP: 70000-000;
#Cliente
Id: 2;
Nome: Cliente 2
##Telefone
Id: 3;
Telefone: 61-99999-9999;
Tipo: Celular;
Id: 4;
Telefone: 61-88888-8888;
Tipo: Residencial;
##Endereco
Id: 2;
Logradouro: Rua dois, 2, Brasilia, DF;
CEP: 70000-000;"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned short Numero;
struct e_cli
{
Numero Id;
char Nome[50]; // 100
};
typedef struct e_cli Cliente;
struct e_end
{
Numero IdEndereco;
char Logradouro[50]; // 500
char Cep[8];
};
typedef struct e_end Endereco;
struct e_tel
{
Numero IdTelefone;
char Telefone[20];
};
typedef struct e_tel Telefone;
struct e_tipo
{
Numero IdTipoTelefone;
Numero Tipo;
};
typedef struct e_tipo TipoTelefone;
Cliente f_Cliente(); // cria um cliente
Endereco f_Endereco(); // cria um endereco
Telefone f_Telefone(); // cria um telefone
TipoTelefone f_TipoTelefone(); // cria um tipo
int main(int argc, char** argv)
{
// quantos vou gerar de cada:
int ncli = 5;
int nend = 5;
int ntel = 5;
int ntip = 5;
// um lugar para arrumar o registro
char preparo[600]; // tem qu caber todo mundo
int n = 0;
// ncli clientes
const char* fcli = "clientes.txt";
FILE* arquivo = fopen(fcli, "w");
for (int i = 1; i <= ncli; i += 1)
{
Cliente cl = f_Cliente();
// limpa a area
// cli: 4 id 100 nome: 104 por linha
// mas so 50 no nome por enquanto
memset(preparo, ' ', 120); // tudo em branco
sprintf(preparo, "%04d", cl.Id); // so Id e Nome
memcpy(preparo + 4, cl.Nome, strlen(cl.Nome)); // copia o nome
preparo[54] = '\n'; // um por linha pra facilitar
int n = fwrite(preparo, 55, 1, arquivo);
};
fclose(arquivo);
// nend enderecos
const char* fend = "enderecos.txt";
arquivo = fopen(fend, "w");
for (int i = 1; i <= nend; i += 1)
{
Endereco en = f_Endereco();
// limpa a area
// endereco: 4 id 500 logradouro 8 CEP: 512 por linha
// mas so 50 no logradouro por enquanto
memset(preparo, ' ', 520); // tudo em branco
sprintf(preparo, "%04d", en.IdEndereco); // so Id e Nome
memcpy(preparo + 4, en.Logradouro, strlen(en.Logradouro));
memcpy(preparo + 54, en.Cep, strlen(en.Cep));
preparo[62] = '\n'; // um por linha pra facilitar
int n = fwrite(preparo, 63, 1, arquivo);
};
fclose(arquivo);
// ntel telefones
const char* ftel = "telefones.txt";
arquivo = fopen(ftel, "w");
for (int i = 1; i <= ntel; i += 1)
{
Telefone te = f_Telefone();
// limpa a area
// telefone: 4 id 20 Telefone: 24 por linha
memset(preparo, ' ', 30); // tudo em branco
sprintf(preparo, "%04d", te.IdTelefone);
memcpy(preparo + 4, te.Telefone, strlen(te.Telefone));
preparo[24] = '\n'; // um por linha pra facilitar
int n = fwrite(preparo, 25, 1, arquivo);
};
fclose(arquivo);
// ntip tipos
const char* ftip = "tipos.txt";
arquivo = fopen(ftip, "w");
for (int i = 1; i <= ntip; i += 1)
{
TipoTelefone tp = f_TipoTelefone();
// limpa a area
// tipo de telefone: 4 id 4 tipo: 8 por linha
memset(preparo, ' ', 10); // tudo em branco
sprintf(preparo, "%04d%04d", tp.IdTipoTelefone, tp.Tipo);
preparo[8] = '\n'; // um por linha pra facilitar
int n = fwrite(preparo, 9, 1, arquivo);
};
fclose(arquivo);
// pra dar uma segurança, vamos ler uns enderecos. E igual
// so que ao contrario, logico
arquivo = fopen(fend, "r");
Endereco e;
int l = 0;
// enquanto nao acabar o arquivo le os caras
// nao precisa fazer nada
// la tem 4 id 50 logradouro 8 cep
while( ! feof(arquivo))
{
fgets(preparo, 130, arquivo); // le uma linha inteira
n = strlen(preparo);
printf("Leu %d de 'fend'\n",n);
if (feof(arquivo)) break; // deve ter acabado
//
// IdEndereco que e um numero
//
l = l + 1; // leu uma linha
printf("\n***** %03d\n", l);
char id_end[5];
memcpy(id_end, preparo, 4);
id_end[4] = 0; // temos o Id no formato certo
printf("Id: %s\n", id_end);
e.IdEndereco = atoi(id_end); // o simples: converte para int
//
// Rua com 50 [500 na verdade]
//
char Rua[51]; // uma string para imprimir
Rua[50] = 0;
memcpy(e.Logradouro, preparo + 4, 50);
memcpy(Rua, preparo + 4, 50);
printf("Logradouro: %s\n", Rua);
//
// CEP com 8
//
char CEP[10]; // uma string para imprimir, com '-'
CEP[9] = 0;
memcpy(e.Cep, preparo + 54, 8);
memcpy(CEP, preparo + 54, 5);
CEP[5] = '-';
memcpy(CEP+6, preparo + 59, 3); // frescura, claro
printf("CEP: %s\n", CEP);
}; // while()
fclose(arquivo);
return 0;
}; // main()
Cliente f_Cliente()
{
//
// vai criando N clientes com nome ClienteNNNN e Id N
// a cada chamada
//
static int n = 1;
Cliente cl;
cl.Id = n;
sprintf(cl.Nome, "Cliente%04d", n);
n = n + 1;
return cl;
}; // f_Cliente()
Endereco f_Endereco()
{
Endereco e;
char cep[9];
static int n = 1;
e.IdEndereco = n;
sprintf(e.Logradouro, "Rua Via%04d", n);
sprintf(cep, "%05d000", n+20000);
memcpy(e.Cep, cep, 8);
n = n + 1;
return e;
}; // f_Endereco()
Telefone f_Telefone()
{
Telefone tel;
static int n = 1;
tel.IdTelefone = n;
sprintf(tel.Telefone, "+55 (11) 9%04d%04d", n+3000, n);
n = n + 1;
return tel;
}; // f_Telefone()
TipoTelefone f_TipoTelefone()
{
TipoTelefone tipo;
static int n = 1;
tipo.IdTipoTelefone = n;
tipo.Tipo = n;
n = n + 1;
return tipo;
} // f_TipoTelefone()
Rafael
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)