Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. /*
  2. * File: main.c
  3. * Author: pmargreff
  4. *
  5. * Created on 6 de Novembro de 2014, 00:25
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #define MAX 100
  10.  
  11. struct end {
  12. char nome[100];
  13. char rua[100];
  14. char cidade[100];
  15. char estado[100];
  16. unsigned long int cep;
  17. } *info;
  18.  
  19. /*
  20. * struct para conseguir comparar
  21. * dois nomes em diversas funções
  22. */
  23. struct compara {
  24. char nome[100];
  25. } busca;
  26. int flag = 0; // flag sinaliza é ativada quando o cadastro é acessado pela primeira vez
  27. int tam = 0; //cria uma váriavel para que guardar o tamanho do vetor
  28. void cria_lista(void);
  29. void insere(void);
  30. void apaga(void);
  31. void pesquisa(void);
  32. void imprime(void);
  33. int menu(void);
  34. int busca_nome(void);
  35. void ler_string(char palavra[100], int tamanho);
  36. void salva_texto(void);
  37. void le_texto(void);
  38.  
  39. int main(void) {
  40. int escolha;
  41. cria_lista();
  42. for (;;) {
  43. escolha = menu();
  44. switch (escolha) {
  45. case 1: insere();
  46. break;
  47. case 2: apaga();
  48. break;
  49. case 3: imprime();
  50. break;
  51. case 4: pesquisa();
  52. break;
  53. case 5: salva_texto();
  54. break;
  55. case 6: le_texto();
  56. break;
  57. default: return 0;
  58. break;
  59. }
  60. }
  61. }
  62. //aloca o suficiente para uma váriavel e armazena /0 na mesma
  63.  
  64. void cria_lista(void) {
  65. info = malloc(sizeof (struct end));
  66. }
  67.  
  68. int menu(void) {
  69. int c = 0;
  70. do {
  71. printf("-- MENU:n");
  72. printf("t 1. Inserir um nomen");
  73. printf("t 2. Excluir um nomen");
  74. printf("t 3. Listar o arquivon");
  75. printf("t 4. Pesquisar um nomen");
  76. printf("t 5. Salvar em arquivon");
  77. printf("t 6. Abrir arquivon");
  78. printf("t 7. Sairn");
  79. printf("-- Digite sua escolha: ");
  80. scanf("%d", &c);
  81. } while (c <= 0 || c > 8);
  82. getchar();
  83. return c;
  84. }
  85.  
  86. void ler_string(char palavra[100], int tamanho) {
  87. int i = 0;
  88. char c;
  89. c = getchar();
  90. while ((c != 'n') && (i < tamanho)) {
  91. palavra[i++] = c;
  92. c = getchar();
  93. }
  94. palavra[i] = '';
  95. if (c != 'n') {
  96. c = getchar();
  97. while ((c != 'n') && (c != EOF)) {
  98. c = getchar();
  99. }
  100. }
  101. }
  102.  
  103. void insere(void) {
  104. int aux;
  105. int posicao = tam;
  106. if (flag == 1) {
  107. printf("-- Registro %d:n", posicao + 1);
  108. } else {
  109. printf("-- Registro %d:n", posicao);
  110. }
  111. printf("t Nome: ");
  112. ler_string(busca.nome, 30);
  113. aux = busca_nome(); /*confere se já existe nome */
  114. if (aux != -1) { /*caso exista apenas volta ao menu anterior */
  115. return;
  116. }
  117. /*
  118. * quando a flag está ativa, aloca memória de acordo com o número de vezes que passa no vetor
  119. */
  120. if (flag == 1) {
  121. tam++;
  122. posicao = tam;
  123. info = realloc(info, tam + 1 * sizeof (struct end));
  124. }
  125. strcpy(info[posicao].nome, busca.nome);
  126. printf("t Rua: ");
  127. ler_string(info[posicao].rua, 40);
  128. printf("t Cidade: ");
  129. ler_string(info[posicao].cidade, 20);
  130. printf("t Estado: ");
  131. ler_string(info[posicao].estado, 2);
  132. printf("t CEP: ");
  133. scanf("%lu", &info[posicao].cep);
  134. flag = 1; //ativa a flag
  135. }
  136.  
  137. /*
  138. * chama a funçao busca_nome que retorna o indice
  139. * para a variavel posicão que devera ser apagado
  140. * se nenhum nome igual for encontrado retorna -1
  141. */
  142. void apaga(void) {
  143. int posicao;
  144. int confirma;
  145. ler_string(busca.nome, 30);
  146. posicao = busca_nome();
  147. if (posicao >= 0 && posicao < tam) {
  148. printf("Você realmente deseja apagar %s?n0-nãon1-sim", info[posicao].nome);
  149. scanf("%d", &confirma);
  150. if (confirma == 1) {
  151. info[posicao] = info[tam];
  152. tam--;
  153. }
  154. }
  155. }
  156.  
  157. void imprime(void) {
  158. int i;
  159. for (i = 0; i <= tam; i++)
  160. if (info[i].nome[0] != '') {
  161. printf("-- Registro %d:n", i);
  162. printf("t Nome: %s", info[i].nome);
  163. printf("t Rua: %s", info[i].rua);
  164. printf("t Cidade: %s", info[i].cidade);
  165. printf("t Estado: %sn", info[i].estado);
  166. printf("t CEP: %lun", info[i].cep);
  167. }
  168. }
  169.  
  170. /*
  171. * função que faz a busca de um nome no programa
  172. * le o nome que está localizado na struct busca.nome
  173. * e retorna o indice se encontrar nome igual ou
  174. * -1 se não encontrar nome como aquele
  175. */
  176. int busca_nome(void) {
  177. int i;
  178. for (i = 0; i <= tam; i++) {
  179. if (strcmp(busca.nome, info[i].nome) == 0) {
  180. return i;
  181. }
  182. }
  183. return -1;
  184. }
  185.  
  186. /* função para procurar e exibir apenas o nome desejado
  187. * chama o função busca_nome que devolve o indice para
  188. * a variavel i se for válido e se não existir devolve
  189. * menos um, o a exibição só é feita quando o indice é
  190. * diferente de menos um e menor que o máximo pré estabelecido
  191. */
  192. void pesquisa(void) {
  193. int i;
  194. ler_string(busca.nome, 30);
  195. i = busca_nome();
  196. if (i >= 0 && i <= tam) {
  197. printf("-- Registro %d:n", i);
  198. printf("t Nome: %s", info[i].nome);
  199. printf("t Rua: %s", info[i].rua);
  200. printf("t Cidade: %s", info[i].cidade);
  201. printf("t Estado: %sn", info[i].estado);
  202. printf("t CEP: %lun", info[i].cep);
  203. } else {
  204. printf("Nome não encontrado na lista!! nn");
  205. }
  206. }
  207.  
  208. /*
  209. void salva_bin(void) {
  210. FILE *arquivo;
  211. int i;
  212. arquivo = fopen("dados.bin", "w");
  213. for (i = 0; i <= tam; i++) {
  214. fwrite(&i, sizeof (int), 1, arquivo);
  215. fwrite(&info[i], sizeof (struct end), 1, arquivo);
  216. }
  217. //fwrite(&info, MAX*sizeof(struct end), 1, arquivo);
  218. fclose(arquivo);
  219. }
  220. void abre_arq(void) {
  221. FILE *arquivo;
  222. int i;
  223. arquivo = fopen("dados.bin", "r");
  224. while (!feof(arquivo)) {
  225. fread(&i, sizeof (int), 1, arquivo);
  226. fread(&info[i], sizeof (struct end), 1, arquivo);
  227. }
  228. tam = i;
  229. //fread(&info, MAX*sizeof(struct end), 1, arquivo);
  230. fclose(arquivo);
  231. }
  232. */
  233. void salva_texto() {
  234. FILE *arquivo;
  235. int i;
  236. arquivo = fopen("dados.txt", "w");
  237. for (i = 0; i <= tam; i++) {
  238. fprintf(arquivo, "%dn", i);
  239. fprintf(arquivo, "%sn", info[i].nome);
  240. fprintf(arquivo, "%sn", info[i].rua);
  241. fprintf(arquivo, "%sn", info[i].cidade);
  242. fprintf(arquivo, "%sn", info[i].estado);
  243. fprintf(arquivo, "%lun", info[i].cep);
  244. }
  245. fclose(arquivo);
  246. }
  247.  
  248. void le_texto() {
  249. int flag = 0;
  250. FILE *arquivo;
  251. int i;
  252. free(info);
  253. info = malloc(sizeof (struct end));
  254. arquivo = fopen("dados.txt", "r");
  255. tam = 0;
  256. while (!feof(arquivo)) {
  257. if (flag != 0)
  258. tam++;
  259. info = realloc(info, tam + 1 * sizeof (struct end));
  260. fscanf(arquivo, "%d", &i);
  261. fscanf(arquivo, "%[^n]%*c", info[i].nome);
  262. fscanf(arquivo, "%[^n]%*c", info[i].rua);
  263. fscanf(arquivo, "%[^n]%*c", info[i].cidade);
  264. fscanf(arquivo, "%[^n]%*c", info[i].estado);
  265. fscanf(arquivo, "%lu", &info[i].cep);
  266. flag = 1; //altera a flag para na próxima vez começar a alocação de memória
  267. }
  268. fclose(arquivo);
  269. tam = i;
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement