Advertisement
Pedromaia26

Ex_global_Ficheiros

Feb 17th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. typedef struct dados{
  7. int num;
  8. char local[30];
  9. char maquina[30];
  10. int ano;
  11. char tipo[30];
  12. }exemplo;
  13.  
  14. FILE *fx;
  15.  
  16. FILE *fn;
  17.  
  18. exemplo fotos;
  19.  
  20. int verifica(int numero){
  21. fx = fopen("fotos.dat","r");
  22. fread(&fotos,sizeof(fotos),1,fx);
  23. while (!feof(fx) && fotos.num!=numero){
  24. fread(&fotos,sizeof(fotos),1,fx);
  25. }
  26. fclose(fx);
  27. if (fotos.num==numero){
  28. return 0;
  29. }
  30. else{
  31. return 1;
  32. }
  33. }
  34.  
  35. void inserir(){
  36. int c=1, n;
  37.  
  38. while (c==1){
  39. printf("---------- Inserir dados ----------\n");
  40. printf("Numero da foto: ");
  41. scanf("%d",&n);
  42. if (verifica(n)==1){
  43. fotos.num = n;
  44. printf("Local da foto: ");
  45. scanf("%s",fotos.local);
  46. printf("Maquina: ");
  47. scanf("%s",fotos.maquina);
  48. printf("Ano da foto: ");
  49. scanf("%d",&fotos.ano);
  50. printf("Tipo: ");
  51. scanf("%s",fotos.tipo);
  52. fx = fopen("fotos.dat","a+");
  53. fwrite(&fotos,sizeof(fotos),1,fx);
  54. printf("Pretende continuar? (S-1/N-0)\nResposta do utilizador:");
  55. scanf("%d",&c);
  56. fclose(fx);
  57. }
  58. else {
  59. printf("---------- Ja existe ----------\n");
  60. printf("Pretende continuar? (S-1/N-0)\nResposta do utilizador:");
  61. scanf("%d",&c);
  62. }
  63. }
  64.  
  65. }
  66.  
  67. void listaranos(){
  68. int ano1, ano2, p=0, c=0, j=0;
  69. printf("Ano 1: ");
  70. scanf("%d",&ano1);
  71. printf("Ano 2: ");
  72. scanf("%d",&ano2);
  73. printf("----------\n");
  74. fx = fopen("fotos.dat","r");
  75. fread(&fotos,sizeof(fotos),1,fx);
  76. while (!feof(fx)){
  77. if (fotos.ano >= ano1 && fotos.ano <= ano2){
  78. printf("Numero: %d\nLocal: %s\nMaquina: %s\nAno: %d\nTipo: %s\n",fotos.num,fotos.local,fotos.maquina,fotos.ano,fotos.tipo);
  79. printf("----------\n");
  80. p++;
  81. }
  82. fread(&fotos,sizeof(fotos),1,fx);
  83. }
  84. printf("---------- Numero de fotos por ano ----------\n");
  85. if (p>0){
  86. fseek(fx,0,0);
  87. fread(&fotos,sizeof(fotos),1,fx);
  88. for (int i=ano1;i<=ano2;i++){
  89. j++;
  90. fseek(fx,0,0);
  91. fread(&fotos,sizeof(fotos),1,fx);
  92. while (!feof(fx)){
  93. if (fotos.ano==i){
  94. c++;
  95. }
  96. fread(&fotos,sizeof(fotos),1,fx);
  97. }
  98. printf("Ano %d - %d fotos\n",i,c);
  99. fseek(fx,j*sizeof(fotos),1);
  100. fread(&fotos,sizeof(fotos),1,fx);
  101. c=0;
  102. }
  103. }
  104. else{
  105. printf("---------- Nao existe fotos entre estes dois anos ----------\n");
  106. }
  107. fclose(fx);
  108. }
  109.  
  110. void remover(){
  111. printf("---------- Funcao indisponivel ----------\n");
  112. }
  113.  
  114. void alterarlo(){
  115. char local[30], novo[30];
  116. int c=0;
  117. printf("Local 1: ");
  118. scanf("%s",local);
  119. printf("Local 2: ");
  120. scanf("%s",novo);
  121. fx = fopen("fotos.dat","r+");
  122. fread(&fotos,sizeof(fotos),1,fx);
  123. while (!feof(fx)){
  124. if (strcmp(fotos.local,local)==0){
  125. strcpy(fotos.local,novo);
  126. fseek(fx,-sizeof(fotos),1);
  127. fwrite(&fotos,sizeof(fotos),1,fx);
  128. fseek(fx,sizeof(fotos),1);
  129. c++;
  130. }
  131. fread(&fotos,sizeof(fotos),1,fx);
  132. }
  133. if (c==0){
  134. printf("---------- Local nao encontrado ---------\n");
  135. }
  136. fclose(fx);
  137. }
  138.  
  139. void consulta(){
  140. fx = fopen("fotos.dat","r");
  141. fread(&fotos,sizeof(fotos),1,fx);
  142. printf("----------\n");
  143. while (!feof(fx)){
  144. printf("Numero: %d\nLocal: %s\nMaquina: %s\nAno: %d\nTipo: %s\n",fotos.num,fotos.local,fotos.maquina,fotos.ano,fotos.tipo);
  145. fread(&fotos,sizeof(fotos),1,fx);
  146. printf("----------\n");
  147. }
  148. fclose(fx);
  149. }
  150.  
  151. void limpar(){
  152. fx=fopen("fotos.dat","w");
  153. printf("---------- Ficheiro limpo ----------\n");
  154. fclose(fx);
  155. }
  156.  
  157. void importar(){
  158. char velho[30];
  159. printf("Nome do ficheiro velho: ");
  160. scanf("%s",velho);
  161. while (fopen(velho,"r")==NULL){
  162. printf("---------- Ficheiro nao encontrado ----------\n");
  163. printf("Nome do ficheiro velho: ");
  164. scanf("%s",velho);
  165. }
  166. fn = fopen(velho,"r");
  167. fx = fopen("fotos.dat","a+");
  168. fread(&fotos,sizeof(fotos),1,fn);
  169. while (!feof(fn)){
  170. fwrite(&fotos,sizeof(fotos),1,fx);
  171. fread(&fotos,sizeof(fotos),1,fn);
  172. }
  173. fclose(fn);
  174. fclose(fx);
  175. }
  176.  
  177. void exportar(){
  178. char novo[30];
  179. printf("Nome do novo ficheiro: ");
  180. scanf("%s",novo);
  181. while (fopen(novo,"r")!=NULL){
  182. printf("---------- Ficheiro ja existente ----------\n");
  183. printf("Nome do novo ficheiro: ");
  184. scanf("%s",novo);
  185. }
  186. fx = fopen("fotos.dat","r");
  187. fn = fopen(novo,"a+");
  188. fread(&fotos,sizeof(fotos),1,fx);
  189. while (!feof(fx)){
  190. fwrite(&fotos,sizeof(fotos),1,fn);
  191. fread(&fotos,sizeof(fotos),1,fx);
  192. }
  193. fclose(fx);
  194. fclose(fn);
  195. }
  196.  
  197. void alteracao(){
  198. int numero, c=0;
  199. printf("Numero a pesquisar: ");
  200. scanf("%d",&numero);
  201. fx = fopen("fotos.dat","r+");
  202. fread(&fotos,sizeof(fotos),1,fx);
  203. while (!feof(fx)){
  204. if (fotos.num==numero){
  205. printf("---------- Numero encontrado ----------\n");
  206. printf("Local da foto: ");
  207. scanf("%s",fotos.local);
  208. printf("Maquina: ");
  209. scanf("%s",fotos.maquina);
  210. printf("Ano da foto: ");
  211. scanf("%d",&fotos.ano);
  212. printf("Tipo da foto: ");
  213. scanf("%s",fotos.tipo);
  214. fseek(fx,-sizeof(fotos),1);
  215. fwrite(&fotos,sizeof(fotos),1,fx);
  216. fseek(fx,sizeof(fotos),1);
  217. c++;
  218. }
  219. fread(&fotos,sizeof(fotos),1,fx);
  220. }
  221. if (c==0){
  222. printf("---------- Numero nao encontrado ----------\n");
  223. }
  224. fclose(fx);
  225. }
  226.  
  227. int main(){
  228. int op;
  229. if (fopen("fotos.dat","r")==NULL){
  230. fx = fopen("fotos.dat","w");
  231. fclose(fx);
  232. printf("---------- Ficheiro criado ----------\n");
  233. }
  234. else{
  235. printf("---------- Ficheiro ja existente ----------\n");
  236. }
  237. do{
  238. printf("1 - Inserir dados no ficheiro c/ AUTOINCREMENT\n");
  239. printf("2 - Listar fotos entre dois anos\n");
  240. printf("3 - Remover dados de uma foto dado o seu numero\n");
  241. printf("4 - Alterar as fotos de um dado local\n");
  242. printf("5 - Consulta global\n");
  243. printf("6 - Limpar ficheiro\n");
  244. printf("7 - Importar ficheiro\n");
  245. printf("8 - Exportar ficheiro\n");
  246. printf("9 - Alterar registo dado um numero\n");
  247. printf("10 - Sair\n");
  248. printf("Escolha do utilizador: ");
  249. scanf("%d",&op);
  250. switch(op){
  251. case 1: inserir();
  252. break;
  253. case 2: listaranos();
  254. break;
  255. case 3: remover();
  256. break;
  257. case 4: alterarlo();
  258. break;
  259. case 5: consulta();
  260. break;
  261. case 6: limpar();
  262. break;
  263. case 7: importar();
  264. break;
  265. case 8: exportar();
  266. break;
  267. case 9: alteracao();
  268. break;
  269. }
  270. }while (op!=10);
  271.  
  272. return 0;
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement