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)
| | |-+  crear una base de datos en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: crear una base de datos en c  (Leído 27,723 veces)
super-marya

Desconectado Desconectado

Mensajes: 2


Ver Perfil
crear una base de datos en c
« en: 28 Agosto 2010, 19:41 pm »

Hola, estoy haciendo un programa que es una base de datos. No se me da muy bien programar pero más o menos lo llevo, aunque tengo el siguiente problema:
El programa tiene un menú de opciones y cada una está creada independiente de las demás. Entonces se ingresan los datos en un vector, pero no controlo la última posición ocupada del vector, lo que hace qe las distintas funciones no se ejecuten como deberían. Por ejemplo, ingreso una serie de nombres y luego le doy a "mostrar", hasta ahí bien, pero si vuelvo a ingresar otro nombre y le vuelvo a dar a "mostrar" lo coloca el primero de la lista y desaparece el que había antes. Igual me pasa con la función "poner notas", qe siempre me ofrece al primero de la lista para que le ponga notas, no pasa nunca por los demás.

Aquí dejo el código, a ver si alguien puede exarle un vistazo y exarme una mano, que llevo varios días con el programa y no consigo terminarlo.

SALUDOS!!!!  ;)

Código:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<conio.h>
int anterior;
void ordena (void);
void crear (void);
void mostrar (void);
void buscar (void);
void borrar (void);
void notas (void);

struct alumno{
char nombre[20];
char apellidos[20];
char DNI[9];
float T;
float P;
float final;
};
struct alumno curso[200];
int menu (void){
printf ("\t\t***MENU****\n");
printf ("\t1. Dar de alta un alumno.\n");
printf ("\t2. Borrar un alumno.\n");
printf ("\t3. Buscar un alumno.\n");
printf ("\t4. Ordenar.\n");
printf ("\t5. Poner notas.\n");
printf ("\t6. Mostrar lista de alumnos.\n");
printf ("\t7. SALIR\n\n");
printf ("Elija una opciOn:  ");
}
int main (){
int op;
int F=0;
op==menu();
scanf ("%d", &op);
printf ("\n\n");
while (op !=7){
if (op==1){
printf ("\nDar de alta\n");
crear ();
op==menu();
scanf ("%d", &op);
}
else{
if(op==2){
printf ("\nDar de baja\n");
borrar ();
op==menu();
scanf ("%d", &op);


}
else{
if(op==3){
buscar ();
op==menu();
scanf ("%d", &op);
}
else {
if(op==4){
printf ("\nOrdenar\n");
op==menu();
scanf ("%d", &op);
}
else{
if(op==5){
printf ("\n\nPoner notas\n");
notas ();

op==menu();
scanf ("%d", &op);
}
else{
if(op==6){
printf ("\nMostrar lista de alumnos\n");
mostrar();
op==menu();
scanf ("%d", &op);
}
}
}
}
}
}
}
}
void crear(){
int F=0;
int terminar;
anterior=0;
terminar=0;
for (F=anterior; F<200&&terminar!=1; F++){
printf ("Introducir APELLIDOS:\t");
fflush (stdin);
gets (curso[F].apellidos);
printf ("Introducir NOMBRE:\t");
fflush (stdin);
gets (curso[F].nombre);
printf ("Introducir DNI:\t");
scanf ("%s", curso[F].DNI);
printf ("¿Ha terminado de dar de alta alumnos?\n1=Si\t 2=No");
scanf ("%d", &terminar);
anterior==F;
printf ("\n\n");
}
if (anterior==200){
printf ("\nLa lista estA llena");
}
}
void mostrar (){
int F;
F=0;
anterior=0;
printf ("\n\nDNI        Apellidos             Nombre       TeorIa      PrActica       Final   \n---------  --------------------- ----------   ------      --------       -----   \n\n");
for (F=anterior; F<200; F++){
curso[F].final= (40*curso[F].T)/100+(60*curso[F].P)/100;
printf ("%s  ", curso[F].DNI);
printf ("%s ", curso[F].apellidos);
printf ("%s ", curso[F].nombre);
printf ("%f ", curso[F].T);
printf ("%f ", curso[F].P);
printf ("%f \n", curso[F].final);
anterior==F;
}
printf ("\n\n");
}
void buscar (){
int F;
char busco[30];
printf ("\n\nBuscar por apellidos:  ");
fflush (stdin);
gets (busco);
for (F=0; F<200; F++){
if (strcmp (busco, curso[F].apellidos)==0){
printf ("\n%s", curso[F].apellidos);
printf ("\n%s", curso[F].nombre);
printf ("\n%s", curso[F].DNI);
}
}
if (strcmp (busco, curso[F].apellidos)!=0){
printf ("\nNo se han encontrado coincidencias\n");
}
}
void borrar (){
int F;
char busco[30];
int i;
int k;
printf ("\n\nBuscar por apellidos:   ");
fflush (stdin);
gets (busco);
for (F=0; F<200; F++){
if (strcmp (busco, curso[F].apellidos)==0){
printf ("\n%s", curso[F].apellidos);
printf ("\n%s", curso[F].nombre);
printf ("\n%s", curso[F].DNI);

printf ("\n¿Desea dar de baja a este alumno?\t1=SI\t2=NO\t");
scanf ("%d", &k);
if (k=1){
for (i=F; i<200; i++){
curso[i]=curso[i+1];
anterior--;
}
}
else{
}
}
}
if (strcmp (busco, curso[F].apellidos)!=0){
printf ("\nNo se han encontrado coincidencias\n\n");
}
}
void notas (){
int F;
for (F=0; F<=anterior; F++){
printf ("\nAlumno: %s, %s", curso[F].apellidos, curso[F].nombre);
printf ("\nNota de teoria:  ");
scanf ("%f", &curso[F].T);
printf ("\nNota de practica:  ");
scanf ("%f", &curso[F].P);
printf ("\nNota final:  %f", (40*curso[F].T)/100+(60*curso[F].P)/100);
printf ("\n\n");
}
}


En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


Swif EME


Ver Perfil WWW
Re: crear una base de datos en c
« Respuesta #1 en: 28 Agosto 2010, 19:50 pm »

No entiendo esto,
Código
  1. void mostrar (){
  2. int F;
  3. F=0;
  4. anterior=0;
  5. printf ("\n\nDNI        Apellidos             Nombre       TeorIa      PrActica       Final   \n---------  --------------------- ----------   ------      --------       -----   \n\n");
  6. for (F=anterior; F<200; F++){
  7. curso[F].final= (40*curso[F].T)/100+(60*curso[F].P)/100;
  8. printf ("%s  ", curso[F].DNI);
  9. printf ("%s ", curso[F].apellidos);
  10. printf ("%s ", curso[F].nombre);
  11. printf ("%f ", curso[F].T);
  12. printf ("%f ", curso[F].P);
  13. printf ("%f \n", curso[F].final);
  14. anterior==F;
  15. }
  16. printf ("\n\n");
  17. }

Debería ser así,
Código
  1. void mostrar (){
  2.  int i = 0;
  3.  printf ("\n\nDNI        Apellidos             Nombre       TeorIa      PrActica       Final");
  4.  printf("\n---------  --------------------- ----------   ------      --------       -----\n\n");
  5.  for (i=0; i<200; i++){
  6.    curso[i].final= ( 40 * curso[i] . T ) / 100 + ( 60 * curso[i] . P ) / 100;
  7.    printf ("%s  ", curso[i].DNI);
  8.    printf ("%s ", curso[i].apellidos);
  9.    printf ("%s ", curso[i].nombre);
  10.    printf ("%f ", curso[i].T);
  11.    printf ("%f ", curso[i].P);
  12.    printf ("%f \n", curso[i].final);
  13.  }
  14.  printf ("\n\n");
  15. }



Para esa gran cantidad de IF's, usa mejor la sentencia switch


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
super-marya

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: crear una base de datos en c
« Respuesta #2 en: 29 Agosto 2010, 00:06 am »

aunqe le haga ese cambio a "mostrar" sigue teniendo los mismos fallos, sigue sin controlarse la última posición ocupada. Y lo de switch, es que solo utilizo las funciones qe me han eseñado, esa no la conozco.
De todas formas, gracias!!!  :)
En línea

clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: crear una base de datos en c
« Respuesta #3 en: 30 Agosto 2010, 15:37 pm »

concuerdo con shell root. por mas que else if sea lo mismo que switch en algun punto, es mucho mas conveniente y claro usar switch.

Por ejemplo...

vos pones:

Código
  1. switch (var){
  2.       case 1:{
  3.       sentencia
  4.       break;
  5. }
  6.       case 2:{
  7.       sentencia
  8.       break;
  9. }
  10.       default:{
  11.       sentencia
  12.       break;
  13. }
  14. }


Un ejemplo de como usarlo seria:

Código
  1. int main(){
  2. int x;
  3. printf ("Ingrese 1 o 2.");
  4. scanf ("%d",&x);
  5.  switch (x){  
  6.         case 1:{
  7.              int func1(x);
  8.              break;
  9.         }
  10.         case 2:{
  11.              int func2(x);
  12.              break;
  13.         }
  14.         case 1992:{
  15.              int func3(x);
  16.              break;
  17.         }        
  18.         default:{
  19.              printf("Opcion erronea");
  20.              getchar ();
  21.              return 0;
  22.         }
  23.  }
  24. }

ahi lo que diria es para el valor que le damos a x, switch se fija en el valor que tiene y si es 1, va a ir al caso 1, si es 2 va a ir al caso 2, si no es ninguno de los miles de casos que podes poner, al final se pone el default que seria la opcion en caso de que lo ingresador no haya sido especificada.
y dentro de los case, podes poner cualquier tipo de cosas, desde un llamado a una funcion hasta asignaciones o creaciones de nuevas variables, lo que quieras, dependiendo de lo que necesites.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Se puede crear una base de datos con WHM?
Bases de Datos
Pafate 1 3,634 Último mensaje 5 Marzo 2011, 02:09 am
por Nakp
crear una base de datos...
Programación General
Chazy Chaz 2 3,220 Último mensaje 13 Octubre 2011, 13:31 pm
por Chazy Chaz
No puedo crear base de datos
Bases de Datos
Zedmix 0 1,451 Último mensaje 24 Diciembre 2012, 18:42 pm
por Zedmix
Crear una base de datos local...
.NET (C#, VB.NET, ASP)
FacuM 2 1,520 Último mensaje 30 Junio 2014, 17:32 pm
por Eleкtro
Crear graficos dinamicos sin base de datos
PHP
archowl 0 957 Último mensaje 3 Diciembre 2016, 19:08 pm
por archowl
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines