buscar en struct

Iniciado por angeljonh, 29 Abril 2017, 22:55 PM

0 Miembros y 1 Visitante están viendo este tema.

angeljonh

q tal me dejaron hacer una agenda de pacientes
mi error es como buscar en una estructura
adjunto mi proyecto

struct paciente{char nombre_p[20],app_p[10],apm_p[10],gen_p[15],ed_p[5],tel_p[15],tipos_p[10];}p[5];

gotoxy(35,3);printf("Captura del paciente %d.",i+1);fflush(stdin);
        gotoxy(35,5);printf("Nombre: ");gets(p[i].nombre_p);fflush(stdin);
        gotoxy(35,6);printf("apellido paterno: ");gets(p[i].app_p);fflush(stdin);
        gotoxy(35,7);printf("apellido materno: ");gets(p[i].apm_p);fflush(stdin);
        gotoxy(35,8);printf("Genero: ");gets(p[i].gen_p);fflush(stdin);
        gotoxy(35,9);printf("Edad: ");gets(p[i].ed_p);fflush(stdin);
        gotoxy(35,10);printf("Telefono: "); gets(p[i].tel_p);fflush(stdin);
        gotoxy(35,11);printf("Tipo Sangre: ");gets(p[i].tipos_p);fflush(stdin);
        gotoxy(38,13);printf("Captura terminada\n\n");


    int j;
    for (j=0; j<=i; j++){
    gotoxy(40,2);printf("Mostrar Pacientes.");
    gotoxy(42,4);printf("Paciente %d.\n",j+1);
    gotoxy(38,6);printf("Nombre: %s",p[j].nombre_p);
    gotoxy(38,7);printf("Apellido paterno: %s",p[j].app_p);
    gotoxy(38,8);printf("Apellido materno: %s",p[j].apm_p);
    gotoxy(38,9);printf("Genero: %s",p[j].gen_p);
    gotoxy(38,10);printf("Edad: %s",p[j].ed_p);
    gotoxy(38,11);printf("Telefono: %s",p[j].tel_p);
    gotoxy(38,12);printf("Tipo de sangre: %s",p[j].tipos_p);
    getch();
    system("cls");

    int j;
    char n[20];
    printf("Buscador de Pacientes.");
   
   printf("\t\t\nDigite el Nombre: ");
    scanf("%s",&n);
    for(j=0; j<=i; j++){
        if(strcmp(n,p[j].nombre_p)){
            printf("\t\t\nPACIENTE ENCONTRADO.\n\n");
            printf("\nNombre completo del paciente: %s %s %s\n",p[i].nombre_p,p[i].app_p, p[i].apm_p);
            printf("Genero del paciente: %s\n",p[i].gen_p);
            printf("Edad del paciente: %s\n",p[i].ed_p);
            printf("Telefono del paciente %s\n",p[i].tel_p);
            printf("Tipo de sangre del paciente: %s\n",p[i].tipos_p);
            return 0;
        }
        else{
            printf("No encontrado.");
        }



quiero saber cual es mi error o porque no me busca el paciente q yo quiero
ayudaaaaaaaaaaa

MAFUS

Por dos errores diferentes.
1: Capturas la el nombre del paciente con un gets, que incluye el salto de línea, y el nombre a buscar con un scanf, que descarta el salto de línea; por eso el strcmp va a retornar que las cadenas son diferentes.
2: Usas mal scanf. A la hora de capturar una cadena no debe usarse el operador &

Y eso es lo que he visto a simple vista.

angeljonh

ya lo revise y no es eso alguna otra opcion, solo me busca la ultima opcion y no la q digito como opcion

angeljonh

Me dejaron este programa.

En un consultorio médico trabajan 5 Doctores y la asistente de ellos. Dan consulta todos los días.
Se requiere una base de datos para el control de un consultorio médico, donde se tenga la información de los pacientes como número de paciente, nombre, domicilio y teléfono.
Los médicos tendrán código, nombre, cedula profesional, domicilio y teléfono.
Se manejarán las citas, donde se vinculará con el paciente y el medico, y se capturará la fecha, hora y precio de la consulta.
El medico podrá expedir una receta medica, con el nombre del paciente, medico, fecha y hora de expedición, los síntomas, diagnostico y tratamiento a seguir.
El sistema permitirá dar de alta mostrar, consultar (buscar) y modificar todos los datos que se han mencionado antes.
Se tendrán que hacer las siguientes validaciones:
 No se repitan los códigos de los pacientes
 No se repitan los códigos de los médicos
 Que existan médicos antes de dar de alta pacientes
 Que existan pacientes antes de dar citas
 Que exista cita antes de expedir una receta medica
 Que no se crucen las citas


este es mi código

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <time.h>

//Angel Jonathan Renteria Hernandez.

struct paciente{char nombre_p[20],app_p[10],apm_p[10],gen_p[15],ed_p[5],tel_p[15],tipos_p[10];
int idp;}p[5];
struct doctor{char nombre_c[50],app_d[10],apm_d[10],gen_d[15],ed_d[5],tel_d[15];}d[5];

int i=0,x,b,c=0,opc1,opc2,opc3,opc,opc10,opc11,paca;
char nombre_c[20],app_d[10],apm_d[10],gen_d[15],ed_d[5],tel_d[15],nombre_p[20],app_p[10],apm_p[10],gen_p[15],ed_p[5],tel_p[15],tipos_p[10];

void error(){
    tiempo();
    gotoxy(10.10);printf("\aError dato no valido.\n");
    getch();
}

void hopc1(){
    tiempo();
    FILE * doctor=fopen("Doctores.txt","w+");
    if(doctor==NULL){
        printf("Error al crear el archivo.");}
    else{
    for (i=0;i<5;i++){
    memset(&p[i],5,sizeof(struct paciente));
    printf("\t\t\tCaptura del doctor %d.\n\n",i+1);fflush(stdin);printf("\t\t\tNombre completo: ");gets(d[i].nombre_c);fflush(stdin);printf("\t\t\tGenero: ");gets(d[i].gen_d);fflush(stdin);printf("\t\t\tEdad: ");gets(d[i].ed_d);fflush(stdin);printf("\t\t\tTelefono: "); gets(d[i].tel_d); fflush(stdin);printf("\n\t\t\tCaptura terminada\n\n");
    system("cls");
    fwrite((char*)&d[i],sizeof(d[i]),sizeof(d[i]),doctor);}
    fclose(doctor);
}}

void hospital(){
tiempo();
printf("\t\t\t\tHOSPITAL.\n\n\t\t\tIngresar codigo. 1)\n\t\t\tSalir al menu principal. 2)\n\n\t\t\t\tOPCION: ");
opc1=getch();
system("CLS");
switch(opc1){
case '1': hopc1();
          break;
}}
int p1(){
    tiempo();
    FILE * paciente=fopen("Paciente.txt","w+");
    if(paciente==NULL){
        printf("Error al crear el archivo.");}
    else
        for (i=0; i<5; i++){
        gotoxy(25,1);printf("***********************************************");
        gotoxy(25,2);printf("**\t\t\t\t\t      **");
        gotoxy(25,3);printf("**\t\t\t\t\t      **");
        gotoxy(25,4);printf("**\t\t\t\t\t      **");
        gotoxy(25,5);printf("**\t\t\t\t\t      **");
        gotoxy(25,6);printf("**\t\t\t\t\t      **");
        gotoxy(25,7);printf("**\t\t\t\t\t      **");
        gotoxy(25,8);printf("**\t\t\t\t\t      **");
        gotoxy(25,9);printf("**\t\t\t\t\t      **");
        gotoxy(25,10);printf("**\t\t\t\t\t      **");
        gotoxy(25,11);printf("**\t\t\t\t\t      **");
        gotoxy(25,12);printf("**\t\t\t\t\t      **");
        gotoxy(25,13);printf("**\t\t\t\t\t      **");
        gotoxy(25,14);printf("**\t\t\t\t\t      **");
        gotoxy(25,15);printf("**\t\t\t\t\t      **");
        gotoxy(25,16);printf("**\t\t\t\t\t      **");
        gotoxy(25,17);printf("***********************************************");
        gotoxy(35,3);printf("Captura del paciente %d.",i+1);fflush(stdin);
        gotoxy(35,5);printf("Nombre: ");fgets(p[i].nombre_p,20,stdin);
        gotoxy(35,6);printf("apellido paterno: ");fgets(p[i].app_p,10,stdin);
        gotoxy(35,7);printf("apellido materno: ");fgets(p[i].apm_p,10,stdin);
        gotoxy(35,8);printf("Genero: ");fgets(p[i].gen_p,15,stdin);
        gotoxy(35,9);printf("Edad: ");fgets(p[i].ed_p,5,stdin);
        gotoxy(35,10);printf("Telefono: ");fgets(p[i].tel_p,15,stdin);
        gotoxy(35,11);printf("Tipo Sangre: ");fgets(p[i].tipos_p,10,stdin);
        gotoxy(38,13);printf("Captura terminada\n\n");
        gotoxy(30,15);printf("Deseas agregar otro Paciente(S/N): ");
        char sn=getch();
        if(sn=='s' || sn=='S'){
        fwrite((char*)&p[i],sizeof(p[i]),sizeof(p[i]),paciente);
        system("cls");
        continue;
        fclose(paciente);}
        if(sn=='n' || sn=='N'){
        fwrite((char*)&p[i],sizeof(p[i]),sizeof(p[i]),paciente);
        fclose(paciente);
        return 0;}
else{
    system("cls");
    error();
    fwrite((char*)&p[i],sizeof(p[i]),sizeof(p[i]),paciente);
    fclose(paciente);
    return 0;}}}

void mopc(){
    int j;
    for (j=0; j<=i; j++){
    tiempo();
    gotoxy(40,2);printf("Mostrar Pacientes.");
    gotoxy(42,4);printf("Paciente %d.\n",j+1);
    gotoxy(38,6);printf("Nombre: %s",p[j].nombre_p);
    gotoxy(38,7);printf("Apellido paterno: %s",p[j].app_p);
    gotoxy(38,8);printf("Apellido materno: %s",p[j].apm_p);
    gotoxy(38,9);printf("Genero: %s",p[j].gen_p);
    gotoxy(38,10);printf("Edad: %s",p[j].ed_p);
    gotoxy(38,11);printf("Telefono: %s",p[j].tel_p);
    gotoxy(38,12);printf("Tipo de sangre: %s",p[j].tipos_p);
    getch();
    system("cls");}
system("cls");
}

int paciente_a(){
colorpaciente_a();
system("CLS");
tiempo();
gotoxy(0,0);printf("\t  ****\n\t  *  *\n\t  *  *\n      *****  *****\n      *\t\t *\n      *****  *****\n\t  *  *\n\t  *  *\n\t  ****");
gotoxy(80,0); printf("\t  ****");gotoxy(80,1); printf("\t  *  *");gotoxy(80,2); printf("\t  *  *");gotoxy(79,3); printf("\t      *****  *****");gotoxy(79,4); printf("\t      *          *");gotoxy(79,5); printf("\t      *****  *****");gotoxy(80,6); printf("\t  *  *");gotoxy(80,7); printf("\t  *  *");gotoxy(80,8); printf("\t  ****");
gotoxy(25,7);printf("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
gotoxy(26,8);printf("************************************************");
gotoxy(25,8);printf("¯**\t\t\t\t\t\t**¯");
gotoxy(25,9);printf("¯**\t\t\t\t\t\t**¯");
gotoxy(25,10);printf("¯**\t\t\t\t\t\t**¯");
gotoxy(25,11);printf("¯**\t\t\t\t\t\t**¯");
gotoxy(25,12);printf("¯**\t\t\t\t\t\t**¯");
gotoxy(25,13);printf("¯************************************************¯");
gotoxy(25,14);printf("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
gotoxy(50,9);printf("\n\t\t\t\t\tAlta de pacientes 1)\n\t\t\t\t   Regresar al menu paciente. 2)\n\n");
paca=getch();
system("CLS");
switch (paca)
{
    case '1': p1();
              break;
    case '2': paciente();
              break;
    default: error();
}
}

int buscarp(){
    int j;
    char n[20];
    printf("Buscador de Pacientes.");
    /*FILE*paciente;
    paciente=fopen("Paciente.txt","a+");
    if(paciente==NULL)
    {
        printf("\n\n Error al abrir el archivo! ! !\n");
        return 0;
    }
    */
    printf("\t\t\nDigite el Nombre: ");
    gets(n);
    for(j=0; j<=i; j++){
        if(p[j].nombre_p!=n){
            printf("\t\t\nPACIENTE ENCONTRADO.\n\n");
            printf("\nNombre del paciente: %s\n",p[i].nombre_p);
            printf("Apelido paterno del paciente: %s\n",p[i].app_p);
            printf("Apellido materno del paciente: %s\n",p[i].apm_p);
            printf("Genero del paciente: %s\n",p[i].gen_p);
            printf("Edad del paciente: %s\n",p[i].ed_p);
            printf("Telefono del paciente %s\n",p[i].tel_p);
            printf("Tipo de sangre del paciente: %s\n",p[i].tipos_p);
            break;
        }
        else{
            printf("No encontrado.");
            break;
        }
}}

cruz1(){
    gotoxy(0,0);printf("\t  ****\n\t  *  *\n\t  *  *\n      *****  *****\n      *\t\t *\n      *****  *****\n\t  *  *\n\t  *  *\n\t  ****");
}
cruz2(){
    gotoxy(0,0);printf("\t  ****\n\t  *  *\n\t  *  *\n      *****  *****\n      *\t\t *\n      *****  *****\n\t  *  *\n\t  *  *\n\t  ****");
    gotoxy(80,0); printf("\t  ****");
    gotoxy(80,1); printf("\t  *  *");
    gotoxy(80,2); printf("\t  *  *");
    gotoxy(79,3); printf("\t      *****  *****");
    gotoxy(79,4); printf("\t      *          *");
    gotoxy(79,5); printf("\t      *****  *****");
    gotoxy(80,6); printf("\t  *  *");
    gotoxy(80,7); printf("\t  *  *");
    gotoxy(80,8); printf("\t  ****");
}

void colorpaciente(){
    system("color FC");
}
void colorpaciente_a(){
    system("color F8");
}
void colormenu(){
    system("color Fc");
}
void colordoctor(){
    system("color FC");
}
void colordoctor_a(){
    system("color FC");
}
void colorerror(){
    system("color CF");
}
void colorsalir(){
    system("color F3");
}
int paciente(){
                system("CLS");
                colorpaciente();
                cruz1();
                tiempo();
                gotoxy(43,1);printf("*****************");gotoxy(43,2);printf("**\t\t  **");gotoxy(43,3);printf("*****************");
                gotoxy(45,2);printf("MENU PACIENTE");
                gotoxy(40,5);printf("Captura de paciente(s). 1");
                gotoxy(40,6);printf("Mostrar paciente(s). 2");
                gotoxy(40,7);printf("Buscar paciente(s). 3");
                gotoxy(40,8);printf("Salir al menu principal. 4");
                opc2=getch();
                system("CLS");
                switch(opc2)
                {
                case '1': do{
                          paciente_a();
                          }while(paca!='2');
                          break;
                case '2': mopc();
                          break;
                case '3': buscarp();
                          system("pause");
                         break;
                case '4':
                         break;
                default: error();
                }
}

void salir(){
    colorsalir();
    gotoxy(39,8);printf("\t\t\\|||/", 150);
    gotoxy(39,9);printf("\t\t(o o)", 150);
    gotoxy(39,10);printf("------ooO-(_)-Ooo------");
    gotoxy(39,11);printf(" Saliendo del Programa.");
    tiempo();
    getch();
}

void gotoxy(int x, int y){
    HANDLE hCon;
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD dwPos;
    dwPos.X = x;
    dwPos.Y = y;
    SetConsoleCursorPosition(hCon,dwPos);
}

int tiempo(){
    time_t tiempo = time(0);
    struct tm *tlocal = localtime(&tiempo);

    char output[128];

    strftime(output, 128, "Fecha: %d/%m/%y Hora: %H:%M:%S", tlocal);
    gotoxy(69,27);printf("%s\n",output);
}
void sonido(){
}

void figura(){
system("color 03");
tiempo();
gotoxy(1,10);printf("########  #### ######## ##    ## ##     ## ######## ##    ## #### ########   #######   ######");
gotoxy(1,11);printf("##     ##  ##  ##       ###   ## ##     ## ##       ###   ##  ##  ##     ## ##     ## ##    ##");
gotoxy(1,12);printf("##     ##  ##  ##       ####  ## ##     ## ##       ####  ##  ##  ##     ## ##     ## ##");
gotoxy(1,13);printf("########   ##  ######   ## ## ## ##     ## ######   ## ## ##  ##  ##     ## ##     ##  ######");
gotoxy(1,14);printf("##     ##  ##  ##       ##  ####  ##   ##  ##       ##  ####  ##  ##     ## ##     ##       ##");
gotoxy(1,15);printf("##     ##  ##  ##       ##   ###   ## ##   ##       ##   ###  ##  ##     ## ##     ## ##    ##");
gotoxy(1,16);printf("########  #### ######## ##    ##    ###    ######## ##    ## #### ########   #######   ######.....\n");
}
void menu(){
    system("CLS");
    colormenu();
    tiempo();
    cruz2();
    gotoxy(40,1);printf("*******************\n\t\t\t\t\t** MENU PRINCIPAL**\n\t\t\t\t\t*******************");
    gotoxy(37,5);printf("Hospital Puerta del cielo.\n\n\t\t\t\t\t    DOCTORES. 1)\n\t\t\t\t\t    PACIENTE. 2)\n\t\t\t\t\t    SALIR. 3)\n\n\t\t\t\t\t");
    opc=getch();
    system("CLS");
    switch (opc)
    {
        case '1':do{
                hospital();
                }while(opc1!='2');
                break;
        case '2': do{
                paciente();
                }while(opc2!='4');
                break;
        case '3': salir();
                break;
        default: error();
}
}

int main()
{
SetConsoleTitle("Proyecto HOSPITAL");
figura();
getch();
do{
menu();
}while(opc!='3');
}




alguien me puede ayudar a terminarlo me kede truncado y no se q mas poner

MAFUS

Pon todo el código, a ver si el problema está en otro sitio.

MAFUS

#5
Este es el código completo del otro post?

CalgaryCorpus

#6
Sugiero que dejes de usar variables globales y retornes algo de las funciones.
Una posibilidad es que retornes el valor de la opcion que se eligio en cada menu.

Ademas, elige un nombre de variable que indique lo que esa variable lleva. Aparentemente la variable "i" contiene un tamano de algo, pues la usas para controlar los ciclos, por que no llamarla algo relacionado con numero_de_pacientes, nroPacientes, totalPacientes, o alguna variacion de esto?

Nombres de funciones que indiquen lo que hacen tambien hace el programa mas entendible, "paciente_a" es un mal nombre, p1 es otro mal nombre.

Pasar los pacientes completos en vez de usar un arreglo global tambien podria ayudar.

Cuando lees los pacientes y los escribes en un archivo, parece (porque es dificil entender con el codigo mal indentado) que estas cerrando el archivo por cada paciente, sin volver a abrir?

Otra sugerencia, haz funciones para los cuadros y cosas visuales, y llamas esas funciones desde las otras, con esto el codigo de leer paciente u otras no se ven contaminadas con esas instrucciones. Osea en vez de tener

instruccion para escribir una linea en la pantalla
otra instruccion para escribir una linea en la pantalla
otra instruccion para escribir una linea en la pantalla
otra instruccion para escribir una linea en la pantalla
...
otra instruccion para escribir una linea en la pantalla
codigo que realmente hace algo


tendrias

funcion_que_escribe_cuadritos()
codigo que realmente hace algo


que tal construir una funcion que se invoque asi: poner_linea( x, y, n )
que internamente hace gotoxy(x, y) y luego escribe n caracteres "*" ? o bien que tal construir una funcion que se invoque asi: poner_linea( x, y, n, caracter ) que internamente va  la posicion x, y y escribe n veces el caracter "caracter"? Que tal leer las distintas posiciones y lineas desde un archivo?

Tal como esta, el codigo es kilometrico y con pocas ayudas para entenderlo.

Ademas en el menu de opciones al editar estos mensajes puedes marcar el codigo con el tipo de lenguaje que es, seleccionas el codigo y eliges  "Codigo Geshi", queda asi

int main() {
  if( condicion ) {
     hello();
  }
}


y no solo asi

int main() {
  if( condicion ) {
     hello();
  }
}
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Ufff, titánico. Después de media hora intentando hacerlo funcionar me he rendido.

Además de lo que te han dicho pon al principio del fuete, debajo de definiciones de tipos y variables globales, los prototipos de las funciones. Una función, para que pueda ser usada, debe conocerse su firma.

También hay una función que comparte el nombre con una estructura.

angeljonh

#8
asi es, es el codigo que ahorita llevo, ayudenme no se q mas hacer
por mas que intento no lo logro, me da errores, alguien q tenga un programa parecido, es como una agenda o base de datos


· No hagas doble post
>aquí las reglas del foro
-Engel Lex

angeljonh

ya lo adjunte en otro post