elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con un programa de estructura de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con un programa de estructura de datos  (Leído 2,098 veces)
windic

Desconectado Desconectado

Mensajes: 34



Ver Perfil
problema con un programa de estructura de datos
« en: 10 Enero 2014, 12:43 pm »

Buenas a todos.
Os traigo un problema a ver si alguien me puede ayudar. Estoy haciendo un programa de una base de datos de un restaurante(es un trabajo de la uni) este es el codigo fuente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 100
  4. #define TRUE 1
  5. #define FALSE 0
  6. //ESTRUCTURAS
  7. typedef struct reservas
  8. {
  9. int mes;
  10. int dia;
  11. int hora;
  12. char nombre[30];
  13. }reservas;
  14. typedef struct mesa{
  15. int Numero;
  16. int NumeroMaximoDeComensales;
  17. int Categoria;
  18. int Piso;
  19. char Camarero[30];
  20. reservas Reserva[TAM];
  21. }Mesa;
  22. Mesa lista[TAM];
  23. int n=0;
  24. int m[TAM];
  25. //MODULOS AUXILIARES
  26. int posicion(int Nmesa) //modulo para ecncontrar la posicion de una mesa indicando su numero
  27. {
  28. int pos,i;
  29. for(i=0;i<n;i++)
  30. {
  31. if (lista[i].Numero==Nmesa)
  32. {
  33. pos=i;
  34. return pos;
  35. }
  36. else
  37. {
  38. //acota el error de que no exista ninguna mesa con ese numero
  39. system("cls");
  40. system("color 0C");
  41. printf("NO HAY NINGUNA MESA CON EL NUMERO %i",Nmesa);
  42. system("pause >nul");
  43. system("color 0F");
  44. menu(); //fallo por llamar una funcion que todavía no ha sido definida pero que no influye en ejecuccion del programa
  45. }
  46. }
  47. }
  48. //MODULOS PRINCIPALES
  49. void Reserva(int Nmesa,Mesa Nueva) //modulo  para hacer una reserva
  50. {
  51. int pos,validacion=TRUE,i;
  52. pos=posicion(Nmesa);
  53. system("cls");
  54. printf("A nombre de quien quiere realizar la reserva.? ");
  55. fflush(stdin);
  56. gets(Nueva.Reserva[m[pos]].nombre);
  57. printf("Para cuando desea realizar la reserva:\n");
  58. printf("Mes(del 1 al 12): ");
  59. scanf("%i",&Nueva.Reserva[m[pos]].mes);
  60. printf("dia(del 1 al 31): ");
  61. scanf("%i",&Nueva.Reserva[m[pos]].dia);
  62. printf("hora(desde 0 a 24): ");
  63. scanf("%i",&Nueva.Reserva[m[pos]].hora);
  64. for (i=0;i<n;i++)
  65. {
  66. if (lista[pos].Reserva[i].mes==Nueva.Reserva[m[pos]].mes && lista[pos].Reserva[i].dia==Nueva.Reserva[m[pos]].dia && lista[pos].Reserva[i].hora==Nueva.Reserva[m[pos]].hora)
  67. {
  68. validacion=FALSE;
  69. system("cls");
  70. system("color 0C");
  71. printf("Ya hay una reserva hecha en esa mesa en esa fecha");
  72. system("pause > nul");
  73. system("color 0F");
  74. }
  75.  
  76. }
  77. if (validacion!=FALSE)
  78. {
  79. lista[pos].Reserva[m[pos]]=Nueva.Reserva[m[pos]];
  80. m[pos]=m[pos]+1;
  81. system("cls");
  82. system("color 0A");
  83. printf("Reserva Completada");
  84. system("pause > nul");
  85. system("color 0F");
  86. }
  87. }
  88. void EliminarMesa(int Nmesa) //Eliminar una mesa del registro
  89. {
  90. int pos,i;
  91. pos=posicion(Nmesa);
  92. if(pos<n && pos>=0)
  93. {
  94. n--;
  95. for(i=pos;i<n;i++){
  96. lista[i]=lista[i+1];  
  97. }
  98. }
  99. }
  100. void MostrarReservas(int Nmesa) //Muestra las reservas hechas a una mesa indicada
  101. {
  102. int i,pos;
  103. pos=posicion(Nmesa);
  104. printf("LAS RESERVAS DE ESA MESA SON [hora/dia/mes]\n\n");
  105. for (i=0;i<m[pos];i++)
  106. {
  107. printf("%i\\%i\\%i\t\t%s\n",lista[pos].Reserva[i].hora,lista[pos].Reserva[i].dia,lista[pos].Reserva[i].mes,lista[pos].Reserva[i].nombre);
  108. }
  109. system("Pause > nul");
  110. }
  111. void Aumentar(int Nmesa,int AumentoComensales) //Modulo que aumenta el numero de comensales de una mesa
  112. {
  113. int pos;
  114. pos=posicion(Nmesa);
  115. lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales+AumentoComensales;
  116.  
  117. }
  118. void Disminuir(int Nmesa,int DisminucionComensales)//Modulo que dismuye el numero de comensales de una mesa
  119. {
  120. int pos;
  121. pos=posicion(Nmesa);
  122. if (DisminucionComensales>=lista[pos].NumeroMaximoDeComensales)
  123. {
  124. system("cls");
  125. system("color 0C");
  126. printf("ERROR LA DISMINUCION ES MAYOR AL MAXIMO DE NUMERO DE COMENSALES");
  127. system("pause >nul");
  128. system("color 0F");
  129. }
  130. else
  131. lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales-DisminucionComensales;
  132.  
  133. }
  134. int Adjuntar(Mesa Nueva)//Modulo que se asegura de que se puede puede introducir la mesa a la lista de mesa y la incluye
  135. {
  136. int i,validacion1;
  137. for (i=0;i<n;i++)
  138. {
  139. if (lista[i].Numero==Nueva.Numero)
  140. {
  141. validacion1=FALSE;
  142. }
  143. }
  144. if(n<TAM && validacion1!=FALSE)
  145. {
  146. lista[n]=Nueva;
  147. n++;
  148. return TRUE;
  149. }
  150. else
  151. return FALSE;
  152. }
  153. void listado() // muestra por pantalla todas las mesas del registro
  154. {
  155. int i;
  156. system("cls");
  157. printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MESAS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> \n\n");
  158. for (i=0;i<n;i++)
  159. {
  160. printf("\nel numero de la mesa es: %i\n",lista[i].Numero);
  161. printf("el numero maximo de comensales es: %i\n",lista[i].NumeroMaximoDeComensales);
  162. printf("la categoria es: %i\n",lista[i].Categoria);
  163. printf("el piso en la que esta la mesa es: %i\n",lista[i].Piso);
  164. printf("el camarero en de la mesa es: %s\n",lista[i].Camarero);
  165.  
  166. }
  167. system("Pause >nul");
  168. }
  169. ModificarMesa(Nmesa)// modifica los datos de una mesa
  170. {
  171. int opcion,pos;
  172. pos=posicion(Nmesa);
  173. do{
  174. system("cls");
  175. printf("1. Modificar Numero\n");
  176. printf("2. Modificar Numero Maximo de Comensales\n");
  177. printf("3. Modificar Categoria\n");
  178. printf("4. Modificar Piso\n");
  179. printf("5. Modificar Camarero\n");
  180. printf("6. salir\n");
  181. printf("Que deseas modificar.? ");
  182. scanf("%i",&opcion);
  183. switch (opcion)
  184. {
  185. case 1:
  186. printf("Introduzca el nuevo numero de la mesa: ");
  187. scanf("%i",&lista[pos].Numero);
  188. break;
  189. case 2:
  190. printf("Introduzca el nuevo numero maximo de comensales: ");
  191. scanf("%i",&lista[pos].NumeroMaximoDeComensales);
  192. break;
  193. case 3:
  194. printf("Introduzca la nueva categoria: ");
  195. scanf("%i",&lista[pos].Categoria);
  196. break;
  197. case 4:
  198. printf("Introduzca el nuevo piso: ");
  199. scanf("%i",&lista[pos].Piso);
  200. break;
  201. case 5:
  202. printf("Introduzca el nuevo camarero: ");
  203. fflush(stdin);
  204. gets(lista[pos].Camarero);
  205. case 6:
  206. system("cls");
  207. system("color 0A");
  208. printf("Datos Modificados correctamente");
  209. system("pause >nul");
  210. system("color 0F");
  211. break;
  212. default:
  213. system("cls");
  214. system("color 0C");
  215. printf("ERROR NUMERO NO ASIGNADO");
  216. system("pause >nul");
  217. system("color 0F");
  218. break;
  219. }
  220. }while(opcion!=6);
  221.  
  222. }
  223. void Guardar()//guarda los todas las mesas y reservas en un archivo txt
  224. {
  225. int i,j;
  226. FILE *fichero;
  227. fichero=fopen("Restaurante.txt","w");
  228. fprintf(fichero,"%i\n",n);
  229. for (i=0;i<n;i++)
  230. {
  231. fprintf(fichero,"%i\n",lista[i].Numero);
  232. fprintf(fichero,"%i\n",lista[i].NumeroMaximoDeComensales);
  233. fprintf(fichero,"%i\n",lista[i].Categoria);
  234. fprintf(fichero,"%i\n",lista[i].Piso);
  235. fprintf(fichero,"%s\n",lista[i].Camarero);
  236. fprintf(fichero,"%i\n",m[i]);
  237. for (j=0;j<m[i];j++)
  238. {
  239. fprintf(fichero,"%i\n",lista[i].Reserva[j].mes);
  240. fprintf(fichero,"%i\n",lista[i].Reserva[j].dia);
  241. fprintf(fichero,"%i\n",lista[i].Reserva[j].hora);
  242. fprintf(fichero,"%s\n",lista[i].Reserva[j].nombre);
  243. }
  244. }
  245. fclose(fichero);
  246. system("cls");
  247. system("color 0A");
  248. printf("Datos Guardados correctamente");
  249. system("pause > nul");
  250. system("color 0F");
  251. }
  252. void Cargar()//carga todas las mesas y reservas que esten guardadas en el archivo restaurante.txt
  253. {
  254. int i,j;
  255. FILE *fichero;
  256. fichero=fopen("Restaurante.txt","r");
  257. fscanf(fichero,"%i",&n);
  258. for (i=0;i<n;i++)
  259. {
  260. fscanf(fichero,"%i",&lista[i].Numero);
  261. fscanf(fichero,"%i",&lista[i].NumeroMaximoDeComensales);
  262. fscanf(fichero,"%i",&lista[i].Categoria);
  263. fscanf(fichero,"%i",&lista[i].Piso);
  264. fscanf(fichero,"%s",&lista[i].Camarero);
  265. fscanf(fichero,"%i",&m[i]);
  266. for (j=0;j<m[i];j++)
  267. {
  268. fscanf(fichero,"%i",&lista[i].Reserva[j].mes);
  269. fscanf(fichero,"%i",&lista[i].Reserva[j].dia);
  270. fscanf(fichero,"%i",&lista[i].Reserva[j].hora);
  271. fscanf(fichero,"%s",&lista[i].Reserva[j].nombre);
  272. }
  273. }
  274. fclose(fichero);
  275. system("cls");
  276. system("color 0A");
  277. printf("Datos Cargados correctamente");
  278. system("pause >nul");
  279. system("color 0F");
  280. }
  281. void menu()//menu del programa
  282. {
  283. int opcion,res,AumentoComensales,DisminucionComensales,Nmesa;
  284. Mesa Nueva;
  285. system("color 0F");
  286. do
  287. {
  288. system("cls");
  289. printf("\n1. Introduce nueva mesa en el restaurante\n");
  290. printf("2. Elimina una mesa del restaurante\n");
  291. printf("3. Aumentar numero de comensales de una mesa\n");
  292. printf("4. Disminuir numero de comensales de una mmesa\n");
  293. printf("5. Reservar una mesa\n");
  294. printf("6. listar reservas de una mesa\n");
  295. printf("7. Modificar datos de una mesa\n");
  296. printf("8. Guardar datos en Fichero\n");
  297. printf("9. Cargar datos en un Fichero\n");
  298. printf("10. Mostrar Mesas\n");
  299. printf("11. Salir");
  300. printf("\n Que deseas hacer.? ");
  301. scanf("%i",&opcion);
  302. printf("\n");
  303. switch(opcion)
  304. {
  305. case 1:
  306. system("cls");
  307. printf("Numero de la mesa: ");
  308. scanf("%i",&Nueva.Numero);
  309. printf("Numero Maximo de comensales: ");
  310. scanf("%i",&Nueva.NumeroMaximoDeComensales);
  311. printf("Categoria: ");
  312. scanf("%i",&Nueva.Categoria);
  313. printf("Piso: ");
  314. scanf("%i",&Nueva.Piso);
  315. printf("Camarero: ");
  316. fflush(stdin);
  317. gets(Nueva.Camarero);
  318.  
  319. res=Adjuntar(Nueva);
  320. system("cls");
  321. if (res==TRUE)
  322. {
  323. system("color 0A");
  324. printf("La mesa se ha adjuntado correctamente\n");
  325. }
  326. else
  327. {
  328. system("color 0C");
  329. printf("la mesa no se ha adjuntado correctamente es posible que ya exista una mesa con ese numero\nvuelve a intentarlo\n");
  330. }
  331. system("Pause >nul");
  332. system("color 0F");
  333. break;
  334. case 2:
  335. system("cls");
  336. printf("Introduce el numero de la mesa: ");
  337. scanf("%i",&Nmesa);
  338. EliminarMesa(Nmesa);
  339. break;
  340. case 3:
  341. system("cls");
  342. printf("Introduce el numero de la mesa: ");
  343. scanf("%i",&Nmesa);
  344. printf("En cuanto deseas aumentar el numero de comensales.?");
  345. scanf("%i",&AumentoComensales);
  346. Aumentar(Nmesa,AumentoComensales);
  347. break;
  348. case 4:
  349. system("cls");
  350. printf("Introduce el numero de la mesa: ");
  351. scanf("%i",&Nmesa);
  352. printf("En cuanto deseas aumentar el numero de comensales.?");
  353. scanf("%i",&DisminucionComensales);
  354. Disminuir(Nmesa,DisminucionComensales);
  355. break;
  356. case 5:
  357. system("cls");
  358. printf("Introduce el numero de la mesa: ");
  359. scanf("%i",&Nmesa);
  360.  
  361. Reserva(Nmesa,Nueva);
  362. break;
  363. case 6:
  364. system("cls");
  365. printf("Introduce el numero de la mesa: ");
  366. scanf("%i",&Nmesa);
  367. MostrarReservas(Nmesa);
  368. break;
  369. case 7:
  370. system("cls");
  371. printf("Introduce el numero de la mesa: ");
  372. scanf("%i",&Nmesa);
  373. ModificarMesa(Nmesa);
  374. break;
  375. case 8:
  376. Guardar();
  377. break;
  378.  
  379. case 9:
  380. Cargar();
  381. break;
  382. case 10:
  383. listado();
  384. break;
  385. case 11:
  386. break;
  387. default:
  388. system("cls");
  389. system("color 0C");
  390. printf("ERROR NUMERO NO ASIGNADO");
  391. system("pause >nul");
  392. system("color 0F");
  393. break;
  394.  
  395. }
  396. }while (opcion!=11);
  397. system("cls");
  398. system("color 0D");
  399. printf("Gracias por utilizar nuestra aplicacion");
  400. system("Pause >nul");
  401. system("exit");
  402.  
  403. }
  404. main()
  405. {
  406. menu();
  407. }
  408.  

el problema que tengo es en el modulo posicion. Este modulo lo que hace es que en la lista de mesas encuentra la posicion en la que se encuentra la mesa con el numero introducido anteriormente, este numero es el numero de la mesa (no se si me explico).Mi problema es que si se introduce un numero de mesa y no hay ninguna mesa que tenga ese numero quiero que vaya  al modulo menu y no continue, pero al invocar el modulo menu como esta puesto da un error ya que llamo a la funcion menu antes de definirla. Como se podria solucionar eso?


En línea

windic

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: problema con un programa de estructura de datos
« Respuesta #1 en: 10 Enero 2014, 14:43 pm »

vale ya lo resolvi, restructurando el programa y con ciclos while. Por si a alguien le interesa esta fue mi solucion:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 100
  4. #define TRUE 1
  5. #define FALSE 0
  6. //ESTRUCTURAS
  7. typedef struct reservas
  8. {
  9. int mes;
  10. int dia;
  11. int hora;
  12. char nombre[30];
  13. }reservas;
  14. typedef struct mesa{
  15. int Numero;
  16. int NumeroMaximoDeComensales;
  17. int Categoria;
  18. int Piso;
  19. char Camarero[30];
  20. reservas Reserva[TAM];
  21. }Mesa;
  22. Mesa lista[TAM];
  23. int n=0;
  24. int m[TAM];
  25. //MODULOS AUXILIARES
  26. int posicion(int Nmesa) //modulo para ecncontrar la posicion de una mesa indicando su numero
  27. {
  28. int pos,i;
  29. for(i=0;i<n;i++)
  30. {
  31. if (lista[i].Numero==Nmesa)
  32. {
  33. pos=i;
  34. return pos;
  35. }
  36. else
  37. {
  38. //acota el error de que no exista ninguna mesa con ese numero
  39. system("cls");
  40. system("color 0C");
  41. printf("NO HAY NINGUNA MESA CON EL NUMERO %i",Nmesa);
  42. system("pause >nul");
  43. system("color 0F");
  44. return 101;
  45. }
  46. }
  47. }
  48. //MODULOS PRINCIPALES
  49. void Reserva(Mesa Nueva,int pos) //modulo  para hacer una reserva
  50. {
  51. int validacion=TRUE,i;
  52. int romper=FALSE;
  53. system("cls");
  54. printf("A nombre de quien quiere realizar la reserva.? ");
  55. fflush(stdin);
  56. gets(Nueva.Reserva[m[pos]].nombre);
  57. do{
  58. system("cls");
  59. printf("Para cuando desea realizar la reserva:\n");
  60. printf("Mes(del 1 al 12): ");
  61. scanf("%i",&Nueva.Reserva[m[pos]].mes);
  62. printf("dia(del 1 al 31): ");
  63. scanf("%i",&Nueva.Reserva[m[pos]].dia);
  64. printf("hora(desde 0 a 24): ");
  65. scanf("%i",&Nueva.Reserva[m[pos]].hora);
  66. if (Nueva.Reserva[m[pos]].mes>12 || Nueva.Reserva[m[pos]].mes<0 || Nueva.Reserva[m[pos]].dia>31 || Nueva.Reserva[m[pos]].dia<0 || Nueva.Reserva[m[pos]].hora>24 || Nueva.Reserva[m[pos]].hora<0)
  67. {
  68. system("cls");
  69. system("color 0C");
  70. printf("Fecha incorrecta");
  71. system("pause >nul");
  72. system("color 0F");
  73. romper=FALSE;
  74. }
  75. else
  76. {
  77. romper=TRUE;
  78. }
  79. }while(romper!=TRUE);
  80. for (i=0;i<n;i++)
  81. {
  82. if (lista[pos].Reserva[i].mes==Nueva.Reserva[m[pos]].mes && lista[pos].Reserva[i].dia==Nueva.Reserva[m[pos]].dia && lista[pos].Reserva[i].hora==Nueva.Reserva[m[pos]].hora)
  83. {
  84. validacion=FALSE;
  85. system("cls");
  86. system("color 0C");
  87. printf("Ya hay una reserva hecha en esa mesa en esa fecha");
  88. system("pause > nul");
  89. system("color 0F");
  90. }
  91.  
  92. }
  93. if (validacion!=FALSE)
  94. {
  95. lista[pos].Reserva[m[pos]]=Nueva.Reserva[m[pos]];
  96. m[pos]=m[pos]+1;
  97. system("cls");
  98. system("color 0A");
  99. printf("Reserva Completada");
  100. system("pause > nul");
  101. system("color 0F");
  102. }
  103. }
  104. void EliminarMesa(int pos) //Eliminar una mesa del registro
  105. {
  106. int i;
  107. if(pos<n && pos>=0)
  108. {
  109. n--;
  110. for(i=pos;i<n;i++){
  111. lista[i]=lista[i+1];  
  112. }
  113. }
  114. }
  115. void MostrarReservas(int pos) //Muestra las reservas hechas a una mesa indicada
  116. {
  117. int i;
  118. system("cls");
  119. printf("LAS RESERVAS DE ESA MESA SON [hora/dia/mes]\n\n");
  120. for (i=0;i<m[pos];i++)
  121. {
  122. printf("%i\\%i\\%i\t\t%s\n",lista[pos].Reserva[i].hora,lista[pos].Reserva[i].dia,lista[pos].Reserva[i].mes,lista[pos].Reserva[i].nombre);
  123. }
  124. system("Pause > nul");
  125. }
  126. void Aumentar(int AumentoComensales,int pos) //Modulo que aumenta el numero de comensales de una mesa
  127. {
  128. lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales+AumentoComensales;
  129.  
  130. }
  131. void Disminuir(int DisminucionComensales,int pos)//Modulo que dismuye el numero de comensales de una mesa
  132. {
  133. if (DisminucionComensales>=lista[pos].NumeroMaximoDeComensales)
  134. {
  135. system("cls");
  136. system("color 0C");
  137. printf("ERROR LA DISMINUCION ES MAYOR AL MAXIMO DE NUMERO DE COMENSALES");
  138. system("pause >nul");
  139. system("color 0F");
  140. }
  141. else
  142. lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales-DisminucionComensales;
  143.  
  144. }
  145. int Adjuntar(Mesa Nueva)//Modulo que se asegura de que se puede puede introducir la mesa a la lista de mesa y la incluye
  146. {
  147. int i,validacion1;
  148. for (i=0;i<n;i++)
  149. {
  150. if (lista[i].Numero==Nueva.Numero)
  151. {
  152. validacion1=FALSE;
  153. }
  154. }
  155. if(n<TAM && validacion1!=FALSE)
  156. {
  157. lista[n]=Nueva;
  158. n++;
  159. return TRUE;
  160. }
  161. else
  162. return FALSE;
  163. }
  164. void listado() // muestra por pantalla todas las mesas del registro
  165. {
  166. int i;
  167. system("cls");
  168. printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MESAS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> \n\n");
  169. for (i=0;i<n;i++)
  170. {
  171. printf("\nel numero de la mesa es: %i\n",lista[i].Numero);
  172. printf("el numero maximo de comensales es: %i\n",lista[i].NumeroMaximoDeComensales);
  173. printf("la categoria es: %i\n",lista[i].Categoria);
  174. printf("el piso en la que esta la mesa es: %i\n",lista[i].Piso);
  175. printf("el camarero en de la mesa es: %s\n",lista[i].Camarero);
  176.  
  177. }
  178. system("Pause >nul");
  179. }
  180. ModificarMesa(int pos)// modifica los datos de una mesa
  181. {
  182. int opcion;
  183. do{
  184. system("cls");
  185. printf("1. Modificar Numero\n");
  186. printf("2. Modificar Numero Maximo de Comensales\n");
  187. printf("3. Modificar Categoria\n");
  188. printf("4. Modificar Piso\n");
  189. printf("5. Modificar Camarero\n");
  190. printf("6. salir\n");
  191. printf("Que deseas modificar.? ");
  192. scanf("%i",&opcion);
  193. switch (opcion)
  194. {
  195. case 1:
  196. printf("Introduzca el nuevo numero de la mesa: ");
  197. scanf("%i",&lista[pos].Numero);
  198. break;
  199. case 2:
  200. printf("Introduzca el nuevo numero maximo de comensales: ");
  201. scanf("%i",&lista[pos].NumeroMaximoDeComensales);
  202. break;
  203. case 3:
  204. printf("Introduzca la nueva categoria: ");
  205. scanf("%i",&lista[pos].Categoria);
  206. break;
  207. case 4:
  208. printf("Introduzca el nuevo piso: ");
  209. scanf("%i",&lista[pos].Piso);
  210. break;
  211. case 5:
  212. printf("Introduzca el nuevo camarero: ");
  213. fflush(stdin);
  214. gets(lista[pos].Camarero);
  215. case 6:
  216. system("cls");
  217. system("color 0A");
  218. printf("Datos Modificados correctamente");
  219. system("pause >nul");
  220. system("color 0F");
  221. break;
  222. default:
  223. system("cls");
  224. system("color 0C");
  225. printf("ERROR NUMERO NO ASIGNADO");
  226. system("pause >nul");
  227. system("color 0F");
  228. break;
  229. }
  230. }while(opcion!=6);
  231.  
  232. }
  233. void Guardar()//guarda los todas las mesas y reservas en un archivo txt
  234. {
  235. int i,j;
  236. FILE *fichero;
  237. fichero=fopen("Restaurante.txt","w");
  238. fprintf(fichero,"%i\n",n);
  239. for (i=0;i<n;i++)
  240. {
  241. fprintf(fichero,"%i\n",lista[i].Numero);
  242. fprintf(fichero,"%i\n",lista[i].NumeroMaximoDeComensales);
  243. fprintf(fichero,"%i\n",lista[i].Categoria);
  244. fprintf(fichero,"%i\n",lista[i].Piso);
  245. fprintf(fichero,"%s\n",lista[i].Camarero);
  246. fprintf(fichero,"%i\n",m[i]);
  247. for (j=0;j<m[i];j++)
  248. {
  249. fprintf(fichero,"%i\n",lista[i].Reserva[j].mes);
  250. fprintf(fichero,"%i\n",lista[i].Reserva[j].dia);
  251. fprintf(fichero,"%i\n",lista[i].Reserva[j].hora);
  252. fprintf(fichero,"%s\n",lista[i].Reserva[j].nombre);
  253. }
  254. }
  255. fclose(fichero);
  256. system("cls");
  257. system("color 0A");
  258. printf("Datos Guardados correctamente");
  259. system("pause > nul");
  260. system("color 0F");
  261. }
  262. void Cargar()//carga todas las mesas y reservas que esten guardadas en el archivo restaurante.txt
  263. {
  264. int i,j;
  265. FILE *fichero;
  266. fichero=fopen("Restaurante.txt","r");
  267. fscanf(fichero,"%i",&n);
  268. for (i=0;i<n;i++)
  269. {
  270. fscanf(fichero,"%i",&lista[i].Numero);
  271. fscanf(fichero,"%i",&lista[i].NumeroMaximoDeComensales);
  272. fscanf(fichero,"%i",&lista[i].Categoria);
  273. fscanf(fichero,"%i",&lista[i].Piso);
  274. fscanf(fichero,"%s",&lista[i].Camarero);
  275. fscanf(fichero,"%i",&m[i]);
  276. for (j=0;j<m[i];j++)
  277. {
  278. fscanf(fichero,"%i",&lista[i].Reserva[j].mes);
  279. fscanf(fichero,"%i",&lista[i].Reserva[j].dia);
  280. fscanf(fichero,"%i",&lista[i].Reserva[j].hora);
  281. fscanf(fichero,"%s",&lista[i].Reserva[j].nombre);
  282. }
  283. }
  284. fclose(fichero);
  285. system("cls");
  286. system("color 0A");
  287. printf("Datos Cargados correctamente");
  288. system("pause >nul");
  289. system("color 0F");
  290. }
  291. void menu()//menu del programa
  292. {
  293. int opcion,res,AumentoComensales,DisminucionComensales,Nmesa,pos;
  294. Mesa Nueva;
  295. system("color 0F");
  296. do
  297. {
  298. system("cls");
  299. printf("\n1. Introduce nueva mesa en el restaurante\n");
  300. printf("2. Elimina una mesa del restaurante\n");
  301. printf("3. Aumentar numero de comensales de una mesa\n");
  302. printf("4. Disminuir numero de comensales de una mmesa\n");
  303. printf("5. Reservar una mesa\n");
  304. printf("6. listar reservas de una mesa\n");
  305. printf("7. Modificar datos de una mesa\n");
  306. printf("8. Guardar datos en Fichero\n");
  307. printf("9. Cargar datos en un Fichero\n");
  308. printf("10. Mostrar Mesas\n");
  309. printf("11. Salir");
  310. printf("\n Que deseas hacer.? ");
  311. scanf("%i",&opcion);
  312. printf("\n");
  313. switch(opcion)
  314. {
  315. case 1:
  316. system("cls");
  317. printf("Numero de la mesa: ");
  318. scanf("%i",&Nueva.Numero);
  319. printf("Numero Maximo de comensales: ");
  320. scanf("%i",&Nueva.NumeroMaximoDeComensales);
  321. printf("Categoria: ");
  322. scanf("%i",&Nueva.Categoria);
  323. printf("Piso: ");
  324. scanf("%i",&Nueva.Piso);
  325. printf("Camarero: ");
  326. fflush(stdin);
  327. gets(Nueva.Camarero);
  328.  
  329. res=Adjuntar(Nueva);
  330. system("cls");
  331. if (res==TRUE)
  332. {
  333. system("color 0A");
  334. printf("La mesa se ha adjuntado correctamente\n");
  335. }
  336. else
  337. {
  338. system("color 0C");
  339. printf("la mesa no se ha adjuntado correctamente es posible que ya exista una mesa con ese numero\nvuelve a intentarlo\n");
  340. }
  341. system("Pause >nul");
  342. system("color 0F");
  343. break;
  344. case 2:
  345. do{
  346. system("cls");
  347. printf("Introduce el numero de la mesa: ");
  348. scanf("%i",&Nmesa);
  349. pos=posicion(Nmesa);
  350. }while(pos==101);
  351. EliminarMesa(pos);
  352. break;
  353. case 3:
  354. do{
  355. system("cls");
  356. printf("Introduce el numero de la mesa: ");
  357. scanf("%i",&Nmesa);
  358. pos=posicion(Nmesa);
  359. }while(pos==101);
  360. printf("En cuanto deseas aumentar el numero de comensales.?");
  361. scanf("%i",&AumentoComensales);
  362. Aumentar(AumentoComensales,pos);
  363. break;
  364. case 4:
  365. do{
  366. system("cls");
  367. printf("Introduce el numero de la mesa: ");
  368. scanf("%i",&Nmesa);
  369. pos=posicion(Nmesa);
  370. }while(pos==101);
  371. printf("En cuanto deseas aumentar el numero de comensales.?");
  372. scanf("%i",&DisminucionComensales);
  373. Disminuir(DisminucionComensales,pos);
  374. break;
  375. case 5:
  376. do{
  377. system("cls");
  378. printf("Introduce el numero de la mesa: ");
  379. scanf("%i",&Nmesa);
  380. pos=posicion(Nmesa);
  381. }while(pos==101);
  382. Reserva(Nueva,pos);
  383. break;
  384. case 6:
  385. do{
  386. system("cls");
  387. printf("Introduce el numero de la mesa: ");
  388. scanf("%i",&Nmesa);
  389. pos=posicion(Nmesa);
  390. }while(pos==101);
  391. MostrarReservas(pos);
  392. break;
  393. case 7:
  394. do{
  395. system("cls");
  396. printf("Introduce el numero de la mesa: ");
  397. scanf("%i",&Nmesa);
  398. pos=posicion(Nmesa);
  399. }while(pos==101);
  400. ModificarMesa(pos);
  401. break;
  402. case 8:
  403. Guardar();
  404. break;
  405.  
  406. case 9:
  407. Cargar();
  408. break;
  409. case 10:
  410. listado();
  411. break;
  412. case 11:
  413. break;
  414. default:
  415. system("cls");
  416. system("color 0C");
  417. printf("ERROR NUMERO NO ASIGNADO");
  418. system("pause >nul");
  419. system("color 0F");
  420. break;
  421.  
  422. }
  423. }while (opcion!=11);
  424. system("cls");
  425. system("color 0D");
  426. printf("Gracias por utilizar nuestra aplicacion");
  427. system("Pause >nul");
  428. system("exit");
  429.  
  430. }
  431. main()
  432. {
  433. menu();
  434. }
  435.  
Basicamente lo que hecho ha sido antes de entrar en los modulos desde el modulo menu evaluar si existe o no una mesa con el numero introducido sino existe te vuelve a preguntar el numero de la mesa y si existe entonces pasa a la funcion que vayas a realizar


En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: problema con un programa de estructura de datos
« Respuesta #2 en: 10 Enero 2014, 15:02 pm »

Pues esta claro que menu debe ir antes XD
Una de las reglas de c/cpp es que para utilizar una variable, función o lo que sea esta debe de existir antes.

Ve arriba del todo y pon la declaración:
En la linea 25 mas o menos pones eso:

void menu ();

No hace falta mover toda la función solo hace falta que este declarado.

Imaginas que te vas al banco XD
Allí hay una cola interminable.
Tu no puedes estar en 2 lugares a la vez, entonces pides a alguien que te aguante la vez mientras te vas a la carnicería.
Entonces llega tu vez en el banco, tu no estas ahi pero alguien que te esta guardando la posición grita ¡OYE QUE TE TOCAAAA!  :laugh:

Eso es lo que hace: void menu();

No hace falta que este la función solo dejar ahí el nombre de la función tal cual pero que lleva punto y coma.

cuando llegue ahí y no encuentra la función, void menu(); le dice al compilador que busque una función en otro lugar con ese nombre.
« Última modificación: 10 Enero 2014, 15:11 pm por vangodp » En línea

windic

Desconectado Desconectado

Mensajes: 34



Ver Perfil
Re: problema con un programa de estructura de datos
« Respuesta #3 en: 10 Enero 2014, 18:00 pm »

No lo sabia muchas gracias por la explicacion y la metafora  :xD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructura de datos
Programación General
EFEX 1 2,585 Último mensaje 27 Junio 2011, 14:25 pm
por EFEX
¿Alguién conoce un buen curso/libro de minería de datos y estructura de datos?
Programación General
Aikanáro Anário 0 1,918 Último mensaje 30 Agosto 2012, 23:06 pm
por Aikanáro Anário
Estructura de datos
Programación C/C++
juanks92 0 1,411 Último mensaje 22 Abril 2013, 23:20 pm
por juanks92
problema estructura de datos tipo cola
Programación C/C++
charlyvaron 0 1,686 Último mensaje 23 Mayo 2015, 00:30 am
por charlyvaron
Ayuda con un problema de Estructura de Datos
Programación C/C++
Beginner Web 2 1,768 Último mensaje 12 Junio 2018, 07:53 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines