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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con este codigo!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este codigo!!  (Leído 3,039 veces)
an_war

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con este codigo!!
« en: 25 Noviembre 2010, 03:22 am »

Me he encontrado en un lio al intentar separar los datos unos de otros pues despues de un rato todo esta tan amontonado que ni se entiende y no logro separarlos, ademas aveces se salta algunos datos y por mas que me compila bien, no funciona como deberia y no logro saber porque agradecería de antemano su gran ayuda...

Código:

#include <stdio.h>
#include <string.h>
#include <conio.h>

typedef struct alumno{
   char carne[32];
   char nombre[20];
   int  nota1;
   int  nota2;
   int  nota3;
   int  nota4;
   int  tot;
   }Alumno;


Alumno alumnos[40];

int total = 0;

void cargar(), guardar(), insertar(Alumno info);
void ingresar(), buscar(), modificar(), eliminar(), ordenar(), mostrar(), ayuda();
char menu(void);

main()
{


   cargar();
   char op;

   for(;;)
   {
     switch(op=menu())
     {
     
        case '1':
           ingresar();
           getch();
           break;
        case '2':
           buscar();
           getch();
           break;
        case '3':
           modificar();
           getch();
           break;
        case '4':
           eliminar();
           getch();
           break;
        case '5':
           ordenar();
           getch();
           break;
        case '6':
           mostrar();
           getch();
           break;
        case '7':
           break;
        default :
           printf("Opcion no valida");
           getch();
           break;
     }

     if(op=='7') break;

   }

   printf("Presione (g) para guardar los cambios: ");

   if(getche()=='g')
      guardar();
}


void insertar(Alumno info)
{
   strcpy(alumnos[total].carne, info.carne);
   strcpy(alumnos[total].nombre, info.nombre);
   alumnos[total].nota1 = info.nota1;
   alumnos[total].nota2 = info.nota2;
   alumnos[total].nota3 = info.nota3;
   alumnos[total].tot = info.tot;
   total++;
}

void cargar()
{
   Alumno info;
   FILE *fp;

   fp=fopen("alumnos.txt","r");
   if(fp==NULL)
   {
      printf("No se puede abrir el archivo\n");
      return;
   }

   while(!feof(fp))
   {
      if(fread(&info, sizeof(Alumno), 1, fp)!=1) break;
      insertar(info);
   }

   fclose(fp);
}

void guardar()
{
   Alumno info;
   FILE *fp;

   fp=fopen("alumnos.txt","w");
   if(fp==NULL)
   {
      printf("No se puede abrir el archivo\n");
      return;
   }

   for(int i=0; i<total; i++)
     fwrite(&alumnos[i], sizeof(Alumno), 1, fp);

   fclose(fp);
}

void ingresar()
{
   Alumno info;

   printf("Ingrese carne: "); gets(info.carne);
   printf("Ingrese nombre: "); gets(info.nombre);
   printf("Ingrese Parcial No 1: "); scanf("%d", &(info.nota1));
   printf("Ingrese Parcial No 2: "); scanf("%d", &(info.nota2));
   printf("Ingrese Parcial No 3: "); scanf("%d", &(info.nota3));
   insertar(info);
   printf("Alumno ingresado exitosamente\n");
}

void buscar()
{
   char carne[32];
   int i;

   printf("Ingrese carne a buscar: ");
   gets(carne);



   for(i=0; i<total; i++)
      if(!strcmp(alumnos[i].carne, carne))
      {
printf("--- Datos del alumno ---\n");
printf("Num.: %d\n", i+1);
    printf("Carné: %s\n", alumnos[i].carne);
printf("Nombre: %s\n", alumnos[i].nombre);
printf("Nota1: %d", alumnos[i].nota1);
    printf("Nota2: %d", alumnos[i].nota2);
    printf("Nota3: %d", alumnos[i].nota3);
    printf("nota definitiva: %d", alumnos[i].nota1+alumnos[i].nota2+alumnos[i].nota3);
    break;
      }

   if(i==total)
      printf("Alumno no encontrado");
}

void modificar()
{
   char nombre[20];
   int i;

   printf("Ingrese nombre a modificar: ");
   gets(nombre);

   for(i=0; i<total; i++)
      if(!strcmp(alumnos[i].nombre, nombre))
      {
printf("--- Datos actuales del alumno ---\n");
printf("Num.: %d\n", i+1);
    printf("Carné: %s\n", alumnos[i].carne);
printf("Nombre: %s\n", alumnos[i].nombre);
  printf("Nota1: %d\n\n", alumnos[i].nota1);
     printf("Nota2: %d\n\n", alumnos[i].nota2);
     printf("Nota3: %d\n\n", alumnos[i].nota3);
         printf("--- Nuevos datos del alumno ---\n");
         printf("Carné: %s\n", alumnos[i].carne);
         printf("Ingrese nombre: "); gets(alumnos[i].nombre);
         printf("Ingrese nota1: "); scanf("%d", &(alumnos[i].nota1));
         printf("Ingrese nota2: "); scanf("%d", &(alumnos[i].nota2));
         printf("Ingrese nota3: "); scanf("%d", &(alumnos[i].nota3));
   
         printf("\n\nDatos actualizados exitosamente!");

         break;
      }

   if(i==total)
      printf("Alumno no encontrado");
}

void eliminar()
{
   char nombre[20];
   int i;

   printf("Ingrese nombre a eliminar: ");
   gets(nombre);

   for(i=0; i<total; i++)
      if(!strcmp(alumnos[i].nombre, nombre))
      {
         /* Recorre registros posteriores */
         for(int j=i+1; j<total; j++)
         {
            strcpy(alumnos[j-1].carne, alumnos[j].carne);
            strcpy(alumnos[j-1].nombre, alumnos[j].nombre);
            alumnos[j-1].nota1 = alumnos[j].nota1;
            alumnos[j-1].nota2 = alumnos[j].nota2;
            alumnos[j-1].nota3 = alumnos[j].nota3;
         }

         printf("Alumno eliminado");
         total--;
         break;
      }

   if(i==total)
      printf("Alumno no encontrado");
}

void ordenar()
{
   int i, j;
   Alumno temp;

   for(i=0; i<total-1; i++)
   {
      for(j=i+1; j<total; j++)
      if(strcmp(alumnos[i].nombre, alumnos[j].nombre)>0)
      {
         /* Copia en variable temporal datos actuales */
         strcpy(temp.carne, alumnos[i].carne);
         strcpy(temp.nombre, alumnos[i].nombre);
         temp.nota1 = alumnos[i].nota1;
         temp.nota2 = alumnos[i].nota2;
         temp.nota3 = alumnos[i].nota3;
         /* Intercambia informacion */
         strcpy(alumnos[i].carne, alumnos[j].carne);
         strcpy(alumnos[i].nombre, alumnos[j].nombre);
         temp.nota1 = alumnos[i].nota1;
         temp.nota2 = alumnos[i].nota2;
         temp.nota3 = alumnos[i].nota3;
   
         strcpy(alumnos[i].carne, alumnos[j].carne);
         strcpy(alumnos[j].nombre, temp.nombre);
         temp.nota1 = alumnos[i].nota1;
         temp.nota2 = alumnos[i].nota2;
         temp.nota3 = alumnos[i].nota3;
      }
   }
   printf("Se han ordenado los registros");
}

void mostrar()
{

   for(int i=0; i<total; i++)
   {
      printf("Num: %d\n", i+1);
      printf("carne: %s\n", alumnos[i].carne);
      printf("nombre: %s\n", alumnos[i].nombre);
      printf("parcial No 1: %d\n", alumnos[i].nota1);
      printf("parcial No 2: %d\n", alumnos[i].nota2);
      printf("parcial No 3: %d\n", alumnos[i].nota3);
      printf("nota definitiva: %d", alumnos[i].nota1+alumnos[i].nota2+alumnos[i].nota3+alumnos[i].nota4);
         }
}


char menu(void)
{
   char c;
   printf("(1)Ingresar, (2)Buscar, (3)Modificar, (4)Eliminar, (5)Ordenar, (6)Mostrar lista\n, ( (7)Salir\n");

   printf("\nSeleccion: ");
   c=getche();
   printf("\n");
   return(c);
}




En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Ayuda con este codigo!!
« Respuesta #1 en: 25 Noviembre 2010, 04:05 am »

Citar
Me he encontrado en un lio al intentar separar los datos unos de otros pues despues de un rato todo esta tan amontonado que ni se entiende y no logro separarlos

Para que querés separarlos?, es decir de que forma ?

Lo probé y funcionó mas o menos bien.
Le cambié un par de cosas para el ingreso no mas.


En línea

an_war

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con este codigo!!
« Respuesta #2 en: 25 Noviembre 2010, 04:24 am »

lo que pasa es que no se como generar espacios entre los menus para que todo no se amontone seguido y pues es que no se si notaste algunos errores que no se porque a ratos no funciona bien. 
En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Ayuda con este codigo!!
« Respuesta #3 en: 25 Noviembre 2010, 04:40 am »

lo que pasa es que no se como generar espacios entre los menus para que todo no se amontone seguido y pues es que no se si notaste algunos errores que no se porque a ratos no funciona bien. 

Por qué no lo ponés asi?:
Código
  1. printf(" (1)Ingresar \n (2)Buscar \n (3)Modificar \n (4)Eliminar \n (5)Ordenar \n (6)Mostrar lista \n (7)Salir\n");

Y tal vez quieras limpiar la pantalla.
En linux es system("clear"); y en Window$ system("cls");
Así no se te amontona tanto.

La primera vez que lo ejecute no me había encontrado un dato.
Pero después lo ejecute varias veces y no encontré error todavía.

Le cambie los get por cin>>
En línea

an_war

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con este codigo!!
« Respuesta #4 en: 25 Noviembre 2010, 04:53 am »

gracias.... genial, tenes razon con el limpiar pantalla "cls" asi cada menu se da en una pantalla en limpio, pero pues intente hacer lo de los cin>> pero me sacaba error ala hora de compilar, como hiciste vos, y al pues no es lo mismo, pues me acaba de dar la duda seria muy bueno si me explicas un poco su diferencia.
En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Ayuda con este codigo!!
« Respuesta #5 en: 25 Noviembre 2010, 05:14 am »

Bien.
El cin>> y el cou<< son del C++.
Vos estas con C.

Para que te funcionen en el encabezado tenes que poner la librería <iostream>. Yo lo puse de esta forma.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. //#include <conio.h> //esta no porque no es estandar
  4. #include<iostream> //para lo que necesitás
  5.  
  6. using namespace std; //es muy importante
  7.  
  8.  

entonces después solo tenes que poner algo asi;
Código
  1. char cadena[10];
  2.  
  3. cin >> cadena; //ingresa la cadena
  4.  
  5. cout << cadena <<endl; //muestra la cadena
  6.  

el "endl" va en lugar de '\n'

PD: perdoná si te expliqué todo esto y vos ya lo sabías.
En línea

an_war

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con este codigo!!
« Respuesta #6 en: 25 Noviembre 2010, 06:02 am »

No pude colocar los cin me saca error y el error del que hablaba es que despues de meter el primer estudiante  ya no pide el carne al registrar el siguiente estudiante

En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Ayuda con este codigo!!
« Respuesta #7 en: 25 Noviembre 2010, 06:16 am »

Oka.
Puede ser que pase de largo por el último caracter ingresado.

Mira, así cambié la función para ingresar.
Código
  1. void ingresar()
  2. {
  3.   Alumno info;
  4.  
  5.   printf("Ingrese carne: ");
  6.  
  7.   //gets(info.carne);
  8.   cin >> info.carne;
  9.  
  10.   printf("Ingrese nombre: ");
  11.  
  12.   //gets(info.nombre);
  13.   cin >> info.nombre;
  14.  
  15.   printf("Ingrese Parcial No 1: "); scanf("%d", &(info.nota1));
  16.   printf("Ingrese Parcial No 2: "); scanf("%d", &(info.nota2));
  17.   printf("Ingrese Parcial No 3: "); scanf("%d", &(info.nota3));
  18.   insertar(info);
  19.   printf("Alumno ingresado exitosamente\n");
  20. }
  21.  

¿ Qué error te saca ?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con este codigo
Programación Visual Basic
5v5 2 2,709 Último mensaje 31 Mayo 2005, 22:56 pm
por 5v5
ayuda con este codigo
Programación Visual Basic
<housedir> 3 2,106 Último mensaje 17 Noviembre 2007, 03:05 am
por mos-k
AYUDA CON ESTE CODIGO
Programación Visual Basic
70N1 0 1,091 Último mensaje 2 Febrero 2008, 10:06 am
por 70N1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines