Advertisement
alyne071092

Untitled

Apr 21st, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include <string.h>
  4. #include<conio.h>
  5. #define MAX 3
  6. #define block 3
  7.  
  8. //struct para contatos
  9. struct name
  10. {
  11. char nome[50];
  12. int telefone;
  13. char email[20];
  14. };
  15. typedef struct name name_t;
  16. //ponteiro pra ponteiro pra um conjunto de elementos da struct
  17. name_t **ptr;
  18. name_t temp[10];
  19. int num_n = 0; // variavel pra controle da alocacao
  20. int num = 0 ; // variavel pra controle numeros de contato.
  21.  
  22. //Prototipos das funcoes;
  23.  
  24.  
  25.  
  26. void inserir(void)
  27. {
  28. int i;
  29. int j;
  30. int resp;
  31. int value_novo;
  32. if((num != 0) &&((num%block) == 0))
  33. {
  34. if (num_n >= MAX)
  35. {
  36. printf("\nAgenda cheia");
  37. return;
  38. }
  39. ptr = (name_t**)realloc(ptr,(num_n + 1) * block * (sizeof(name_t*)));
  40. num_n++;
  41.  
  42. }
  43.  
  44.  
  45. ptr[num]= (name_t*) malloc(sizeof(name_t));
  46.  
  47. printf("\nEntre com o nome: ");
  48. gets(ptr[num]->nome);
  49. printf("Entre com o Email: ");
  50. gets(ptr[num]->email);
  51.  
  52. printf("Digite o telefone: ");
  53.  
  54. scanf("%d",&ptr[num]->telefone);
  55.  
  56.  
  57. num++;
  58.  
  59.  
  60.  
  61.  
  62.  
  63. }
  64. void sort(void)
  65. {
  66. int m,n;
  67. name_t temp;
  68.  
  69.  
  70. for(m = 0; m < num;m++)
  71. {
  72.  
  73. for(n = m+1; n< num; n++)
  74. {
  75. if(strcmp(ptr[m]->nome,ptr[n]->nome) > 0 )
  76. {
  77. // strcpy(temp,ptr[m]);
  78. // strcpy(ptr[m],ptr[n]);
  79. //strcpy(ptr[m],temp);
  80. }
  81. }
  82. }
  83.  
  84. }
  85.  
  86.  
  87. void imprimir(void)
  88. {
  89. int i;
  90. int k;
  91. int n;
  92. int j;
  93. int lim;
  94.  
  95. printf("Informacoes:\n");
  96. if(num ==0){
  97. printf("Agenda Vazia");
  98. }
  99. for(i=0; i<num;++i){
  100.  
  101. //Se a lista ta vazia, como e que eu vou mostrar vazio
  102. printf("*** Contato %d ***\n",i+1);
  103. printf("Nome: %s\n",ptr[i]->nome);
  104. printf("Email: %s\n",ptr[i]->email);
  105. printf("Telefone: %d\n",ptr[i]->telefone);
  106.  
  107.  
  108. }
  109.  
  110. void sort(void);
  111.  
  112. printf("\n*****************************\n");
  113. printf (" Nomes em ordem alfabetica \n");
  114. printf("\n*****************************\n");
  115. /* Display the sorted names */
  116. for(lim=0;lim<num;++lim)
  117. {
  118. printf("*** Contato %d ***\n",lim+1);
  119. printf("Nome: %s\n",ptr[lim]->nome);
  120. printf("Email: %s\n",ptr[lim]->email);
  121. printf("Telefone: %d\n",ptr[lim]->telefone);
  122.  
  123.  
  124. }
  125. printf("\n*****************************\n");
  126.  
  127. }
  128.  
  129.  
  130. void consulta(void)
  131. {
  132. int m;
  133. int achei=0;
  134. char nome[30];
  135. printf("Informe o nome que queria consulta ?\n");
  136. scanf("%s",&nome);
  137. for(m=0; m<num; ++m)
  138. {
  139. if(strcmp(nome, ptr[m]->nome)==0)
  140. {
  141. printf("Nome: %s\n",ptr[m]->nome);
  142. printf(" Telefone: %d\n",ptr[m]->telefone);
  143. printf("Email: %s\n",ptr[m]->email);
  144. achei =1;
  145. }
  146. }
  147.  
  148. if(achei==0)
  149. {
  150. printf("Não tem Contato! ");
  151. }
  152.  
  153. }
  154. void alterar(void)
  155. {
  156. int o;
  157. char nome[30];
  158. int alterado;
  159. printf("Informe o nome que queria alterar ?\n");
  160. scanf("%s",&nome);
  161.  
  162. for(o=0; o<num ;++o)
  163. {
  164. if(strcmp(nome, ptr[o]->nome)==0)
  165. {
  166. printf("Entre com o nome:\n");
  167. scanf("%s",&ptr[o]->nome);
  168. printf("Entre com o telefone:\n");
  169. scanf("%d",&ptr[o]->telefone);
  170. printf("entre com o email:\n");
  171. scanf("%s",&ptr[o]->email);
  172. alterado =1;
  173. }
  174. }
  175.  
  176. if(alterado==0)
  177. {
  178. printf("Não tem =/ ");
  179. }
  180.  
  181. }
  182. void deletar(void)
  183. {
  184.  
  185. int l;
  186. char nome[30];
  187. int j;
  188.  
  189. printf("Informe o nome que queria deletar ?\n");
  190. scanf("%s",&nome);
  191. for(l=0; l<num; l++){
  192. if (strcmp(ptr[l]->nome,nome)==0){
  193. for(j=l+1; j<num; j++){
  194. strcpy(ptr[j-1]->nome,ptr[j]->nome);//copia uma string //
  195. ptr[j-1]->telefone = ptr[j]->telefone;
  196. }
  197. num--;
  198. l=num;
  199. }
  200. //tem que ter uma opcao pra apagar a agenda toda...
  201.  
  202. }
  203.  
  204. }
  205. void apagarporindice(void){
  206.  
  207. int ind;
  208. char nomecontato[10];
  209. //Se a agenda estiver vazia...
  210. if (num == 0)
  211. {
  212. printf("\nAgenda vazia\n");
  213. return;
  214. }
  215. if(num > 1){
  216. printf("\nEntre com o no. do contato: ");
  217. gets(nomecontato);
  218. ind = atoi(nomecontato);
  219. free (ptr[ind-1]);
  220. ptr[ind-1] = ptr[num -1 ];
  221. num --;
  222.  
  223. if(ind > num){
  224. printf("Numero invalido");
  225. return 0;
  226.  
  227. }
  228. }
  229.  
  230.  
  231.  
  232.  
  233. //se ficou um bloco inteiro livre, libera
  234. if (num <(num_n * block))
  235. {
  236. ptr = (name_t **)realloc (ptr,(num_n - 1)*block* sizeof(name_t *));
  237. num_n--;
  238. }
  239.  
  240.  
  241. }
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249. int item_menu(void)
  250. {
  251. char s[80];
  252. int c;
  253.  
  254. printf("\n");
  255. printf("1. Inserir um contato\n");
  256. printf("2. Imprimir Contatos\n");
  257. printf("3. Consultar Contatos\n");
  258. printf("4. Alterar Contato\n");
  259. printf("5. Deletar Contato\n");
  260. printf("6. Apagar por indice\n");
  261. printf("7. Sort\n");
  262. printf("8. Sair\n");
  263.  
  264. do
  265. {
  266. printf("\nEntre com sua escolha: ");
  267. gets(s);
  268. c = atoi(s);
  269. }
  270. while(c<0 || c>7);
  271.  
  272. return c;
  273. }
  274.  
  275. int main()
  276. {
  277.  
  278. int i,n;
  279.  
  280. // alocando pra um numero de blocks 2
  281. ptr = (name_t**)malloc(block*sizeof(name_t*)); //Alocar pra capacidade inicial!
  282. num_n = 1;
  283.  
  284.  
  285.  
  286. if(ptr==NULL){
  287. printf("Erro de alocacao!");
  288.  
  289. }
  290.  
  291. int item;
  292. for(;;)
  293. {
  294. item = item_menu();
  295. switch(item)
  296. {
  297. case 1:
  298. inserir();
  299. break;
  300. case 2:
  301. imprimir();
  302. break;
  303. case 3:
  304. consulta();
  305. break;
  306. case 4:
  307. alterar();
  308. break;
  309. case 5:
  310. deletar();
  311. //tem que deletar a lista toda..nao um elemento so !
  312. break;
  313. case 6:
  314. apagarporindice();
  315. break;
  316. case 7:
  317. sort();
  318. break;
  319. case 8:
  320. exit(0);
  321. }
  322. }
  323.  
  324.  
  325.  
  326. return 0;
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement