Advertisement
Guest User

Untitled

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