48 { printf("ocorreu um erro o arquivo nao pode ser aberto\n");

Documentos relacionados
Fundamentos de Programação 1

O comando for permite que um certo trecho de programa seja executado um determinado número de vezes. A forma do comando for é a seguinte:

Computação 2. Aula 8. Profª. Fabiany Arquivos

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Manipulação de Arquivos

Linguagem C. Ponteiros. Alex Vidigal Bastos.

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:


TÉCNICAS DE PROGRAMAÇÃO

Computação 2. Aula 9. Diego Addan Arquivos

EPs 1 e 2. EP2: veja. EP1: veja

Arquivos em C Parte 2

Estruturas (Registros)

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

1 Escrita de Arquivos Binário

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

#include <stdio.h> #include <stdlib.h>

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

MESMO QUE ESTAS VARIÁVEIS TENHAM NOME IDÊNTICOS

struct LISTA item quant

9. Estruturas em C Registros

Manipulação de Arquivos

SSC304 Introdução à Programação Para Engenharias. Arquivos. GE4 Bio

#include <stdio.h> main () { short int desloca, byte, aux=1; printf("\n\ndigite um numero pertencente ao intervalo [0,255]: "); scanf("%hd", &byte);

Computação Informática

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

1/22 FICHEIROS BINÁRIOS

INF 1620 P3-02/07/02 Questão 1 Nome:

LINGUAGEM C Estrutura / Funções

Algoritmos e Programação

Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função.

21 - Estruturas em C (Novos Tipos) Registros

Laboratório de 13 de maio de 2019

Módulo 3 Controle de Fluxo

Linguagem C (estruturas condicionais)

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Linguagens de Programação I

Arquivos. Programação de Computadores I. Natália Batista.

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Arquivos em C

SSC304 Introdução à Programação Para Engenharias. Controle de Fluxo. GE4 Bio

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

ARQUIVOS DE DADOS EM C: UMA INTRODUÇÃO

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Caracteres e Cadeias de Caracteres

Básico: estrutura de programa, sintaxe Interface com linha de comando

Computação 2. Aula 6B. Profª. Fabiany Vetor de Estruturas (structs)

Linguagem C. Armazenamento de Dados em Arquivos - Continuação

INF 1620 P1-18/09/04 Questão 1 Nome:

INF 1620 P4-01/07/08 Questão 1 Nome:

INF 1620 P1-13/09/02 Questão 1 Nome:

INF 1620 P4 30/06/07 Questão 1 Nome:

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

13a. Aula Manipulação de arquivos

C Arquivos. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 2º Semestre 2013/2014

ponteiros INF Programação I Prof. Roberto Azevedo

Carlos Eduardo Batista. Centro de Informática - UFPB

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

INF 1620 P2-14/10/05 Questão 1 Nome:

Aula 18: Funções em C

INF 1620 P3-25/11/05 Questão 1 Nome:

Computação 2. Aula 5. Diego Addan Estrutura de Dados Registros (structs)

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Introdução a Programação. Manipulando Arquivos em Modo Texto

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Fundamentos de Arquivos. SCC203 Algoritmos e Estruturas de Dados II

CONTROLE DE FLUXO. Algoritmos e Programação. Prof. Alceu Britto Slides cedidos pelo Prof. Edson J. R. Justino (PUCPR) Aula 9 e 10

Linguagem de Programação C. Comandos de Seleção e Desvio

INF 1620 P4 11/12/06 Questão 1 Nome:

Introdução à Programação em C

Programação de Computadores II. Cap. 16 Ordenação

Tipos Abstratos de Dados - Exercício

Tipos de Dados Definidos Pelo Usuário. Estruturas Uniões Enumerações O Comando sizeof O Comando typedef

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

INF 1620 P1-04/10/03 Questão 1 Nome:

Linguagem de Programação C

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

Programação em C/C++ formas complexas. Carla Ventura

MAC-115 Introdução à Computação para Ciências Exatas e Tecnologia IO Terceiro Exercício-Programa Entregar até 09/11/2007

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Aula 24 Ponteiros, vetores e structs

Aula teórica: /6. Enunciado

INF 1007 Simulado P2 Nome: Instruções

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Programação II. Files Read & Write. Bruno Feijó Dept. de Informática, PUC-Rio

Structs, Ponteiros e Arquivos. Prof. Maurício Dias

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

prim = A ; prim = &A[0];

Estruturas de repetição

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 14 de junho de 2017

Programação Estruturada

Solução para os exercícios

Transcrição:

1 /*Exemplo: O programa abaixo faz a inclusão, consulta (por acesso seqüencial e acesso direto), 2 a alteração, a exclusão e a reorganização de um arquivo que contem o modelo, a marca e o preço de um veículo.*/ 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 7 struct veiculo { 8 char modelo[20]; 9 char marca[20]; 10 float preco; 11 }; 12 13 FILE *parq; //variavel ponteiro de arquivo 14 struct veiculo reg; //variavel para referenciar a struct 15 16 //prototipos das funcoes 17 void menu(); 18 void abre_arquivo1(); 19 void abre_arquivo2(); 20 void inclusao(); 21 void consulta_s(); 22 void consulta_d(); 23 void alteracao(); 24 void exclusao(); 25 void reorganizar(); 26 char resposta(); 27 28 void main(){ 29 abre_arquivo1(); 30 menu(); 31 fclose(parq); 32 } 33 34 /********************ABERTURA DE ARQUIVO***********************/; 35 36 void abre_arquivo1() // abertura para inclusao 37 { 38 parq=fopen("t3.dad","ab+"); //devolve o ponteiro do arquivo 39 if (parq==null) 40 { printf("ocorreu um erro o arquivo nao pode ser aberto\n"); 41 exit(1); //volta para o editor do turbo C ou para o S.O. 42 } 43 } 44 void abre_arquivo2() //abertura para alteracao e exclusao 45 { 46 parq=fopen("t3.dad","rb+"); //devolve o ponteiro do arquivo 47 if (parq==null) 48 { printf("ocorreu um erro o arquivo nao pode ser aberto\n"); 49 exit(1); //volta para o editor do turbo C ou para o S.O. 50 } 51 } 52 53 /**************************MENU**********************/; 54 void menu() 55 { int op; 56 do{ 57 system("cls"); 58 printf("\n<<< M E N U D E O P C O E S >>>"); 59 printf("\n1 - INCLUSAO "); 60 printf("\n2 - CONSULTA SEQUENCIAL"); 61 printf("\n3 - CONSULTA DIRETA");

62 printf("\n4 - ALTERACAO"); 63 printf("\n5 - EXCLUSAO"); 64 printf("\n6 - FIM "); 65 printf("\ndigite a opcao <1-6>?"); 66 do 67 { 68 scanf("%d",&op); 69 } while (op<1 op>6); 70 if (op!=6) 71 { 72 switch (op){ 73 case 1:inclusao();break; 74 case 2:consulta_s();break; 75 case 3:consulta_d();break; 76 case 4:alteracao();break; 77 case 5:exclusao();break; 78 } 79 } 80 }while (op!=6); 81 } 82 83 /**************************INCLUSAO**********************/; 84 85 void inclusao() 86 { char op; 87 int x; 88 long N; 89 fseek(parq,sizeof(reg),seek_end);//aponta para o inicio dos registros 90 N=(ftell(parq)/sizeof(reg)-1); //-1 porque comecou do zero 91 do { 92 93 getchar(); 94 printf( "\no NUMERO DO REGISTRO : %ld",n); 95 printf("\nmodelo: "); 96 gets(reg.modelo); 97 printf("\nmarca: "); 98 gets(reg.marca); 99 printf("\npreco: "); 100 scanf("%f",&reg.preco); 101 fseek(parq,n*sizeof(reg),seek_cur);//posiciona no local para gravar 102 fwrite(&reg,sizeof(reg),1,parq); //grava o registro 103 op=resposta(); //chamada a uma funcao resposta 104 N++; 105 }while(op!='n'); 106 107 } 108 109 /**************************CONSULTA ACESSO SEQUENCIAL****************/; 110 111 void consulta_s(){ 112 int num,lin=8; 113 rewind(parq); // posiciona no inicio do arquivo 114 fread(&reg,sizeof(reg),1,parq); 115 while (!feof(parq)){ 116 printf("\nmodelo.: %s",reg.modelo); 117 printf("\nmarca..: %s",reg.marca); 118 printf("\npreco..: %.2f\n---------------------------------\n",reg.preco); 119 fread(&reg,sizeof(reg),1,parq); 120 lin++; 121 } 122 getch(); 123 } 124

125 /**************************CONSULTA ACESSO DIRETO*****************/; 126 void consulta_d(){ 127 int num; 128 long tam; 129 char op; 130 fseek(parq,sizeof(reg),seek_end); 131 tam=(ftell(parq)/sizeof(reg))-2; // -2 porque come a do zero e o SEEK_END da o n mero do proximo registro 132 do{ 133 printf("\nqual REGISTRO DESEJA CONSULTAR? "); 134 do{ 135 scanf("%d",&num); 136 }while (num<0 num>tam); 137 fseek(parq,num*sizeof(reg),seek_set);// posiciona no registro a ser consultado 138 fread(&reg,sizeof(reg),1,parq); 139 printf("\nmodelo.: %s",reg.modelo); 140 printf("\nmarca..: %s",reg.marca); 141 printf("\npreco..: %.2f",reg.preco); 142 op=resposta(); 143 }while(op!='n'); 144 } 145 146 147 /**************************ALTERACAO ACESSO DIRETO******************/; 148 149 void alteracao() 150 { int num; 151 long tam; 152 char op, resp[20]=""; 153 fclose(parq); 154 abre_arquivo2(); 155 fseek(parq,sizeof(reg),seek_end); 156 tam=(ftell(parq)/sizeof(reg))-2; 157 158 do{ 159 printf("\nqual REGISTRO DESEJA ALTERAR?"); 160 do{ 161 scanf("%d",&num); 162 }while (num<0 num>tam); 163 fseek(parq,num*sizeof(reg),seek_set); 164 fread(&reg,sizeof(reg),1,parq); 165 printf("\nmodelo.: %s",reg.modelo); 166 printf("\nmarca..: %s",reg.marca); 167 printf("\npreco..: %.2f",reg.preco); 168 getchar(); 169 gets(resp); //variavel para receber a alteracao 170 if (strcmp(resp,"")!=0) 171 { strcpy(reg.modelo,resp); 172 printf("\nmodelo: %s",reg.modelo); 173 } 174 gets(resp); 175 if (strcmp(resp,"")!=0) 176 { strcpy(reg.marca,resp); 177 printf("\nmarca: %s",reg.marca); 178 } 179 do{ 180 gets(resp); 181 if (strcmp(resp,"")!=0) 182 { reg.preco=atof(resp); //conversao de uma string em um float 183 printf("\npreco: %.2f",reg.preco); 184 } 185 }while (reg.preco <=0);

186 fseek(parq,num*sizeof(reg),seek_set); 187 fwrite(&reg,sizeof(reg),1,parq); 188 op=resposta(); 189 }while(op!='n'); 190 fclose(parq); 191 abre_arquivo1(); 192 } 193 194 195 /**************************EXCLUSAO LOGICA - ACESSO DIRETO**********/; 196 197 void exclusao() 198 { int num,cont=0; 199 long tam; 200 char op; 201 202 fclose(parq); 203 abre_arquivo2(); 204 fseek(parq,sizeof(reg),seek_end); 205 tam=(ftell(parq)/sizeof(reg))-2; 206 do{ 207 208 printf("\nqual REGISTRO DESEJA CONSULTAR?"); 209 do{ 210 scanf("%d",&num); 211 }while (num<0 num>tam); 212 fseek(parq,num*sizeof(reg),seek_set); 213 fread(&reg,sizeof(reg),1,parq); 214 if (strcmp(reg.modelo,"***") == 0) 215 { printf("\nregistro ja excluido!!"); 216 217 } 218 else 219 { 220 printf("\n%s",reg.modelo); 221 printf("\n%s",reg.marca); 222 printf("\n%10.2f",reg.preco); 223 printf("\nconfirma Exclusao?"); 224 op=resposta(); 225 if (op=='s') 226 { strcpy(reg.modelo,"***"); 227 fseek(parq,num*sizeof(reg),seek_set); 228 fwrite(&reg,sizeof(reg),1,parq); 229 cont++; 230 printf("\nregistro Excluido!!"); 231 } 232 } 233 234 op=resposta(); 235 }while(op!='n'); 236 fclose(parq); 237 abre_arquivo1(); 238 //********************* reorganizar - exclusao fisica ***************** 239 if (cont > 0) reorganizar(); // so reorganiza se tiver registros excluidos 240 } 241 242 void reorganizar() 243 { 244 FILE *parq2; 245 parq2=fopen("t3.bak","wb+"); //devolve o ponteiro do arquivo 246 fclose(parq); 247 abre_arquivo2(); 248 rewind(parq);

249 while (! feof(parq)) 250 { 251 if (fread(&reg,sizeof(reg),1,parq) >=1) // retorna 1 quando leu registro e 0 casocontrario 252 if (strcmp(reg.modelo,"***")!=0) 253 fwrite(&reg,sizeof(reg),1,parq2); 254 } 255 fclose(parq); 256 fclose(parq2); 257 remove("t3.dad"); 258 rename("t3.bak","t3.dad"); 259 abre_arquivo1(); 260 } 261 262 263 /**************************FUNCAO RESPOSTA**********************/; 264 char resposta() 265 { char op; 266 printf("\ndeseja Continuar <S/N>?"); 267 do{ 268 scanf("%c",&op); 269 op=toupper(op); 270 }while (op!='n' && op!='s'); 271 return(op); 272 } 273