Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Pieshna

#1
Programación C/C++ / Re: Ayuda urgente !!!
24 Junio 2018, 21:03 PM
Sinceramente dudo que alguien se ponga a hacer el programa mientras tu haces nada ya que este no es un grupo para hacer tareas de los demas, te recomiendo que pongas atencion y que intentes hacerlo tu mismo y si no te funciona puedes venir y pedir ayuda mostrando tu codigo para que encontremos el error y puedas hacer que funcione.
Saludos ;D
#2
Hola amigo, te recomendaria que usaras la cabecera iostream en vez de stdio ya que es mucho mas facil pero para gustos colores jejeje

Mira el problema esta aqui
Código (cpp) [Seleccionar]

if(max<arr.promedio)
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio

Se te olvido abrir llaves des pues del parentesis y ejecutar
Código (cpp) [Seleccionar]

if(max<arr.promedio){
max=arr.promedio;
pos=i;// se guarda la posición del alumno con el mejor promedio
}

Pero si gustas aqui esta el ejercicio
Código (cpp) [Seleccionar]
#include <iostream>//entrada y salida estandar
#include <conio.h>//para el getch(); que es pausar pantalla

using namespace std;//evitamos escribir std::cout y std::cin cada vez... Ojo si te marca error aqui puedes eliminar esta linea

struct alumnos
{
    char nombre[20];
    int edad;
    int promedio;
}alumnos[100];//creamos 100 estructuras ya que no se sabe cuantas va a ingresar el usuario

void promedio();
int cantidad;//la hacemos variante universal para que todos los void puedan usar el dato ingresado

int main()
{
    cout<<" Cuantos alumnos desea agregar? ";
    cin>>cantidad;//ingresamos a la variante universal
    for(int i=0; i<cantidad; i++){
    cout<<" Nombre alumno: ";
    cin>>alumnos[i].nombre;
    cout<<" Edad: ";
    cin>>alumnos[i].edad;
    cout<<" Promedio: ";
    cin>>alumnos[i].promedio;
}
promedio();//mandamos a llamar el void
cout<<" Presione cualquier tecla para salir...";
getch();
}

void promedio()
{
     int i, pos,max=0;

    for(i=0;i<cantidad;i++)
    {
        if(max<alumnos[i].promedio){
        max=alumnos[i].promedio;
            pos=i;// se guarda la posición del alumno con el mejor promedio
}
}
      cout<<"\n El alumno con mejor nota es:\n";
      cout<<" Nombre: "<<alumnos[pos].nombre<<endl;
      cout<<" Edad: "<<alumnos[pos].edad<<endl;
      cout<<" Promedio: "<<alumnos[pos].promedio<<endl;

}
#3
Cita de: ThunderCls en  8 Junio 2018, 20:09 PM
C++ no tiene soporte nativo para la impresion de documentos (al menos que yo sepa), la impresión está condicionada por el sistema operativo que uses, en este caso windows tiene sus drivers y un sistema de spooling, etc. Aqui tienes alguna informacion

https://msdn.microsoft.com/en-us/library/windows/desktop/dd162861(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ff819270(v=vs.85).aspx

De cualquier forma necesitas usar las APIs que te brinda tu sistema operativo y hacer las llamadas desde tu codigo c++. He encontrado este codigo por ahi pero no se si funcionara del todo, igual te podria servir

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
#include <string.h>

void printer(char text[])
{

// Bring up a dialog to choose the printer
PRINTDLG pd = {0};
pd.lStructSize = sizeof( pd );
pd.Flags = PD_RETURNDEFAULT | PD_RETURNDC;
pd.nCopies=1;

// Show the printer Dialog
PrintDlg( &pd );


// Zero and then initialize the members of a DOCINFO structure.
DOCINFO di = {0};
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Scribble Printout";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;

// Begin a print job by calling the StartDoc function.
StartDoc(pd.hDC, &di);

// Inform the driver that the application is about to begin sending data.
StartPage(pd.hDC);

//here we put images\text or other DC things;)

//send some text
TextOut(pd.hDC,800,800,text, strlen(text));


//Lets close  the printer
// Inform the driver that the page is finished.
EndPage(pd.hDC);

// Inform the driver that document has ended.
EndDoc(pd.hDC);
}

int main ()
{
printer("Hello world");
return 0;
}


Igual puedes buscarte la vida con alguna libreria, estas por ejemplo:

https://www.gtkmm.org/es/index.html
https://developer.gnome.org/gtkmm-tutorial/unstable/sec-printing-example.html.en#sec-printing-example-simple
https://www.codeproject.com/Articles/89/Printing-Class-Library

Saludos y buena suerte

Muchas gracias lo probare y gracias también por los links con la información ;) ;-)
#4
Cita de: SrMcLister en  7 Junio 2018, 14:07 PM
Buenas Pieshna.
¿Podrías dar mas detalles? SO por ejemplo, marca de impresora, puerto al que está conectada...
Un Saludo.

Hola, saludos SrMcLister
Estoy usando Windows 10 y estoy programando con dev-c++, la impresora es canon (MP 280), puertos LPT1-3, USB002
#5
Hola buenos dias, tardes o noches...

Queria saber si alguien me puede ayudar con un codigo para imprimir (con impresora) ya que he estado buscando pero no encuentro uno funcional para c++ :-(
Es para un proyecto final de programacion y solo me falta el que se pueda imprimir los datos, ayuda! ;)
#6
Programación C/C++ / Ayuda para hacer filtro
1 Junio 2018, 00:34 AM
Necesito ayuda para aplicar filtro por departamentos, no se me ocurre la manera para hacerlo, ya que no logro ordenarlos :-( espero puedan ayudarme...
Es mi proyecto de final de semestre  :(
Posdata: es de un hospital y aun esta en proceso, llevo mas o menos 1 semana y no logro hacer el filtro
aqui abajo dejo el codigo, estoy usando dev-c++
Código (cpp) [Seleccionar]


#include <iostream>
#include <conio.h>
#include <string.h>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

struct datos{
long long cui; //la funcion long long sirve para ingresar un numero extremadamente grande, que supere los 10 numeros
char nombre[254];
char apellido[254];
struct fecha{
int dia;
int mes;
int año;
}fecha;
char tipos[254];
int cel;
char nfamiliar[254];
struct direccion{
char departamento[254];
char municipio[254];
char zona[254];
}direccion;
}datos;

struct rp{ //rp = Registro de paciente
long long cui;
struct fecha{ //fecha de ingreso
int dia;
int mes;
int año;
}fecha;
int nufam;
char ti[254];
char descripcion[1000]; //descripcion del por que ingresa
char medico[254]; //medico tratante
int hingreso; //hora ingreso
int mingreso;//minutos ingreso
char diagnostico[1000]; //diagnostico medico
char rmedica[600];//receta medica
char titulo[254];
struct fechas{ //fecha salida
int dia;
int mes;
int año;
}fechas;
int hsalida; //hora salida
int msalida;//minutos salida
}rp;

void principio();//contiene el primer menu en el que pregunta si se ha usado el programa anteriormente
void menu();//Contiene el menu de inicio
void crear();//void para crear el archivo de texto
void ingresar();//Ingresar pacientes
void mini(); //mini busqueda
void registro();
void breporte();
void mini2();//mini busqueda en el void ingresar
void rgpaciente(); //Registro general de paciente
/*void rgpfecha(); //Registro general de pacientes filtrado por rango y fecha
void rpsangre(); //Registro de paciente por tipo de sangre
void diagnostico(); //Reporte de paciente por diagnostico*/
void pdepartamento(); //Reporte de pacientes por departamento
/*void ddepartamento(); //Reporte de diagnostico por departamento
void historial(); //Historial clinico del paciente
void rdt(); //Reporte de descendente de total de ingreso de pacientes por día
void pmedico(); //Reporte de pachiente por medico
*/
long long auxccui=0;
void ingresar(){
char c[254],ddia[254],mes[254],cel[254],corr[254],año[254];
int m=0,dia=0,ce=0,x=0,dc=0,aanio=0,xx=0;
int vn=0,va=0,vs=0,vnf=0,vd=0,vm=0,vz=0;//validaciones para los bucles while en la variable nombre,apellido.
long long a; //la funcion long long sirve para ingresar un numero extremadamente grande, que supere los 10 numeros
cout<<"\t\t\tINGRESE LA SIGUIENTE INFORMACION "<<endl;
cout<<"________________________________________________________________________________________"<<endl;
cout<<" CUI del paciente: ";
cin>>c;
a= atof(c);// la funcion atoi(variable) sirve para convertir a variable tipo "int" caracteres ingresados en una variable tipo "char"
if (a<1000000000000){//si la variable a es menor a 13 digitos que muestre un error
cout<<" El cui es invalido, ingreselo nuevamente";
getch();
system ("cls"); //limpiar pantalla
ingresar();//empezar de nuevo el programa

}else{
if (a>9999999999999){//Si la variable a es mayor a 13 digitos que muestre error
cout<<" El cui es invalido, ingreselo nuevamente";
getch();
system ("cls"); //limpiar pantalla
ingresar();//empezar de nuevo el programa
}
}
auxccui=a;
if(datos.cui==auxccui){
mini2();
}

datos.cui=a;//Si la variable a contiene 13 digitos que se guarde en la estructura datos en cui
cin.ignore();//Para evitar que omita el ingresar nombre
do{
cout<<" Nombre del paciente: ";
// cin.ignore();
cin.getline(datos.nombre,254,'\n');
strupr(datos.nombre);
vn=0;//inpedimos que el while sea infinito
if((*datos.nombre==NULL) || (*datos.nombre==' ') ){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vn=1;//activamos el while
}
}while(vn==1);

// cin.ignore();//Para evitar que omita el ingresar apellido, eliminar "//" para activar la funcion
do{
cout<<" Apellido del paciente: ";
cin.getline(datos.apellido,254,'\n');
strupr(datos.apellido);
va=0;//inpedimos que el while sea infinito
if((*datos.apellido==NULL) || (*datos.apellido==' ')){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
va=1;//activamos el while
}
}while(va==1);


cout<<"\t\t\tFECHA DE NACIMIENTO:\t\t\t\t\t\t EJEMPLO: 01/01/2000"<<endl;
do{
cout<<" Ingrese la fecha:\n";
xx=0;
cin.getline(ddia,254,'/');
cin.getline(mes,254,'/');
cin.getline(año,254,'\n');
dia=atoi(ddia);
m=atoi(mes);
aanio=atoi(año);
if((dia==0) || (dia>31)){
cout<<" DIA INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((m==0) || (m>12)){
cout<<" MES INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((aanio<1950) || (aanio>2018)){
cout<<" año INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((dia>29) && (m=2)){
cout<<" RECUERDE QUE FEBRERO SOLO TIENE 29 DIAS EN AÑO BISIESTO\n";
xx=1;
}
}
}
}

}while(xx==1);
datos.fecha.dia=dia;
datos.fecha.mes=m;
datos.fecha.año=aanio;


// cin.ignore();
do{

cout<<" Ingrese el tipo de sangre: ";
vs=0;//inpedimos que el while sea infinito
cin.getline(datos.tipos,254,'\n');
strupr(datos.tipos);
if((*datos.tipos=='A') || (*datos.tipos=='AB') || (*datos.tipos=='B') || (*datos.tipos=='O')){

}else{
cout<<" TIPO DE SANGRE NO VALIDO, VUELVA A INTENTARLO.\n\n";
cout<<" Recuerde que solo hay tipos de sangre a+,a-,b+,b-,ab+,ab-,o+,o-.\n";
vs=1;
}
}while(vs==1);

do{
do{
do{
cout<<" Ingrese el Numero celular de un familiar del paciente: ";
cin.getline(cel,254,'\n');
ce=atoi(cel);
if (ce==0){
cout<<" El numero ingresado es invalido, intente nuevamente."<<endl;
ce=0;
}else{

if (ce<29999999){
cout<<" El numero ingresado es invalido, intente nuevamente. "<<endl;
ce=0;
}else{
if (ce>60000000){
cout<<" El numero ingresado es invalido, intente nuevamente. "<<endl;
ce=0;
}
}
}
}while(ce>60000000);
}while(ce==0);
}while(ce<29999999);
datos.cel=ce;

// cin.ignore(); //Si en caso llega a omitir la parte de ingresar este dato solo borrar las "//" del inicio
do{
cout<<" Ingrese el Nombre de un familiar del cliente: ";
cin.getline(datos.nfamiliar,40,'\n');
strupr(datos.nfamiliar);
vnf=0;//inpedimos que el while sea infinito
if((*datos.nfamiliar==NULL) || (*datos.nfamiliar==' ') /*|| (*datos.nfamiliar=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vnf=1;//activamos el while
}
}while(vnf==1);

// cin.ignore(); //Si en caso llega a omitir la parte de ingresar este dato solo borrar las "//" del inicio
do{
cout<<" Departamento: ";
cin.getline(datos.direccion.departamento,30,'\n');
strupr(datos.direccion.departamento);
vd=0;//inpedimos que el while sea infinito
if((*datos.direccion.departamento==NULL) || (*datos.direccion.departamento==' ') /*|| (*datos.nfamiliar=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vd=1;//activamos el while
}
}while(vd==1);

// cin.ignore(); //Si en caso llega a omitir la parte de ingresar este dato solo borrar las "//" del inicio
do{
cout<<" Municipio: ";
cin.getline(datos.direccion.municipio,30,'\n');
strupr(datos.direccion.municipio);
vm=0;//inpedimos que el while sea infinito
if((*datos.direccion.municipio==NULL) || (*datos.direccion.municipio==' ') /*|| (*datos.nfamiliar=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vm=1;//activamos el while
}
}while(vm==1);

// cin.ignore(); //Si en caso llega a omitir la parte de ingresar este dato solo borrar las "//" del inicio
do{
cout<<" Zona: ";
cin.getline(datos.direccion.zona,30,'\n');
vz=0;//inpedimos que el while sea infinito
if((*datos.direccion.zona==NULL) || (*datos.direccion.zona==' ') /*|| (*datos.nfamiliar=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vz=1;//activamos el while
}
}while(vz==1);
system("cls");
cout<<"\t\t\t DATOS INGRESADOS:\n";
cout<<"_______________________________________________________________________________________________"<<endl;
cout<<" CUI del paciente: "<<datos.cui<<endl;
cout<<" Nombre del paciente: "<<datos.nombre<<endl;
cout<<" Apellido del paciente: "<<datos.apellido<<endl;
cout<<" Fecha de nacimiento:"<<datos.fecha.dia<<"/"<<datos.fecha.mes<<"/"<<datos.fecha.año<<endl;
cout<<" Tipo de sangre: "<<datos.tipos<<endl;
cout<<" Numero celular del familiar: "<<datos.cel<<endl;
cout<<" Nombre de un familiar del cliente: "<<datos.nfamiliar<<endl;
cout<<" Departamento: "<<datos.direccion.departamento<<endl;
cout<<" Municipio: "<<datos.direccion.municipio<<endl;
cout<<" Zona: "<<datos.direccion.zona<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;

cout<<" LOS DATOS SON CORRECTOS?\n";
cout<<" 1. SI.\t\t 2. NO.\n OPCION[ ]\b\b";
cin.getline(corr,254,'\n');
strupr(corr);
dc=atoi(corr);
if((dc==2)||(corr=="NO")||(corr=="NO.")){
system("cls");
ingresar();
}

FILE*archivo;
archivo=fopen("hospital.txt","at+"); //abrimos el archivo
fwrite(&datos,sizeof(datos),1,archivo); //escribimos los datos ingresados en el archivo
fclose(archivo);//cerramos el archivo
cout<<" DATOS INGRESADOS CORRECTAMENTE"; //Mensaje para corroborar que se ingresaron los archivos
getch();
menu();

}

void breporte(){
FILE*archivo;
archivo=fopen("registro.txt", "r+");
while(fread(&rp,sizeof(rp),1,archivo)==1)
{
if((datos.cui==rp.cui) /*&& (rp.fecha.dia!=0)*/ && (datos.cel==rp.nufam)){
cout<<"_______________________________________________________________________________________________"<<endl;
cout<<"\t\t\tREPORTE\n";
cout<<"_______________________________________________________________________________________________"<<endl;
cout<<" Fecha de ingreso: "<<rp.fecha.dia<<"/"<<rp.fecha.mes<<"/"<<rp.fecha.año<<".\n";
cout<<" Descripcion de ingreso: "<<rp.ti<<endl;
cout<<" Hora de ingreso: "<<rp.hingreso<<":"<<rp.mingreso<<".\n";
cout<<" Medico tratante:"<<rp.medico<<endl;
cout<<" Diagnostico medico: \n\t\t\t"<<rp.titulo<<endl<<rp.diagnostico<<endl;
cout<<" Receta medica: "<<rp.rmedica<<endl;
cout<<" Fecha de salida: "<<rp.fechas.dia<<"/"<<rp.fechas.mes<<"/"<<rp.fechas.año<<".\n";
cout<<" Hora de salida: "<<rp.hsalida<<":"<<rp.msalida;
cout<<"\n_______________________________________________________________________________________________"<<endl;
cout<<"\n Presione cualquier tecla para continuar.";
getch();


}
}
fclose(archivo);


}

void rgpaciente(){
FILE*archivo;
FILE*archivo2;
archivo2=fopen("registro.txt", "r+");
archivo=fopen("hospital.txt", "r+");

int opc=0,opco=0,x=0;
char opci[254];

cout<<"\t\t\tREPORTE GENERAL DE PACIENTES:"<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;


while(fread(&datos,sizeof(datos),1,archivo)==1)
{

fread(&rp,sizeof(rp),1,archivo2);


cout<<" CUI del paciente: "<<datos.cui<<endl;
cout<<" Nombre del paciente: "<<datos.nombre<<endl;
cout<<" Apellido del paciente: "<<datos.apellido<<endl;
cout<<" Fecha de nacimiento:"<<datos.fecha.dia<<"/"<<datos.fecha.mes<<"/"<<datos.fecha.año<<endl;
cout<<" Tipo de sangre: "<<datos.tipos<<endl;
cout<<" Numero celular del familiar: "<<datos.cel<<endl;
cout<<" Nombre de un familiar del cliente: "<<datos.nfamiliar<<endl;
cout<<" Departamento: "<<datos.direccion.departamento<<endl;
cout<<" Municipio: "<<datos.direccion.municipio<<endl;
cout<<" Zona: "<<datos.direccion.zona<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;
// getch();


do{
x=0;
if((datos.cui==rp.cui ) && (datos.cel==rp.nufam) ){
cout<<" Desea ver el reporte?\n";
cout<<" 1. SI\t\t2. NO\n";
cout<<" OPCION [ ]\b\b";
cin>>opci;
x=0;
opco=atoi(opci);
if ((opco==0) || (opco>2)){
cout<<" OPCION NO VALIDA VUELVA A INTENTARLO.\n";

x=1;
}else{
opc=opco;
}

}else{
cout<<" NO TIENE REPORTE CLINICO.\n";
cout<<"_______________________________________________________________________________________________"<<endl;
getch();
}
}while(x==1);

if((opc==1)){
breporte();



}

// getch();

//}  

}
fclose(archivo);
fclose(archivo2);


getch();
}

void pdepartamento(){ //falta aplicar el filtro
FILE*archivo;
archivo=fopen("hospital.txt", "r+");
string auxdep;
cout<< "\t\t\tFILTRAR POR DEPARTAMENTO: "<<endl;
cout<<"_______________________________________________________________________________________________"<<endl<<endl;

system("cls");
while(fread(&datos,sizeof(datos),1,archivo)==1)
{
auxdep=datos.direccion.departamento;
if(datos.direccion.departamento==auxdep)
{
cout<< "\t\t\tDEPARTAMENTO: "<<datos.direccion.departamento<<endl;
cout<<"_______________________________________________________________________________________________"<<endl<<endl;
cout<<" CUI del paciente: "<<datos.cui<<endl;
cout<<" Nombre del paciente: "<<datos.nombre<<endl;
cout<<" Apellido del paciente: "<<datos.apellido<<endl;
cout<<" Fecha de nacimiento:"<<datos.fecha.dia<<"/"<<datos.fecha.mes<<"/"<<datos.fecha.año<<endl;
cout<<" Tipo de sangre: "<<datos.tipos<<endl;
cout<<" Numero celular del familiar: "<<datos.cel<<endl;
cout<<" Nombre de un familiar del cliente: "<<datos.nfamiliar<<endl;
cout<<" Municipio: "<<datos.direccion.municipio<<endl;
cout<<" Zona: "<<datos.direccion.zona<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;
auxdep=datos.direccion.departamento;
}else{
cout<<" Se ha producido un error a la hora de buscar por ese departamento, intentelo nuevamente."<<endl;
getch();

}

}
fclose(archivo);
getch();


}

void menu(){
crear();
char opci[254];
int opc=0,opco=0;
while (opc!= 12){
system("cls");
cout<<"________________________________________________________________________________________"<<endl;
cout<<"\n\t\t\t\t\tMENU "<<endl;
cout<<"________________________________________________________________________________________"<<endl;
cout<<"\n\t\t\tENUMERE LA OPCION QUE DESEA UTILIZAR: "<<endl<<endl;
cout<<"\t1. Ingresar paciente."<<endl;
cout<<"\t2. Registrar paciente."<<endl;
cout<<"\t3. Reporte general de pacientes."<<endl;
cout<<"\t4. Reporte general de pacientes filtrado por fecha."<<endl;
cout<<"\t5. Reporte general de pacientes por tipo de sangre."<<endl;
cout<<"\t6. Reporte general de pacientes por diagnostico."<<endl;
cout<<"\t7. Reporte general de pacientes por departamento."<<endl;
cout<<"\t8. Reporte de diagnostico por departamento."<<endl;
cout<<"\t9. Reporte de historial clinico por paciente."<<endl;
cout<<"\t10. Reporte decendente de total de ingreso de pacientes por dia."<<endl;
cout<<"\t11. Reporte de pacientes por medico."<<endl;
cout<<"\t12. Salir."<<endl;
cout<<"________________________________________________________________________________________"<<endl;
cout<<"\n\t OPCION:[  ]\b\b\b";
cin>>opci;
opco=atoi(opci);
if((opco==0) || (opco>12)){
cout<<" OPCION NO VALIDA, INTENTELO DE NUEVO.";
getch();
menu();
}else{
opc=opco;
}

switch(opc){
case 1:
system("cls");
ingresar();
break;

case 2:
registro();
break;

case 3:
system("cls");
rgpaciente(); //Registro general de paciente
break;

/* case 4:
rgpfecha(); //Registro general de pacientes filtrado por rango y fecha
break;

case 5:
rpsangre(); //Registro de paciente por tipo de sangre
break;

case 6:
diagnostico(); //Reporte de paciente por diagnostico
break;
*/
case 7:
pdepartamento(); //Reporte de paciente por departamento
break;
/*
case 8:
ddepartamento(); //Reporte de diagnostico por departamento
break;

case 9:
historial(); //Historial clinico del paciente
break;

case 10:
rdt(); //Reporte de descendente de total de ingreso de pacientes por día
break;

case 11:
pmedico(); //Reporte de pachiente por medico
break;
*/
case 12:
cout<<"\tQUE TENGA UN LINDO DIA!"<<endl;
break;

default:
cout<<"\tOPCION NO VALIDA, INTENTELO DE NUEVO. ";
getch();
menu();
break;


}


}

}

void crear(){
FILE*archivo;
FILE*archivo2;
archivo=fopen("hospital.txt","a+");
archivo2=fopen("registro.txt","a+");
fclose(archivo);
fclose(archivo2);
}

void principio(){
int a=1;
int b=0;
system("cls");
cout<<" Es primera vez que utiliza este programa? \n 1. Si. \t\t\t\t 2. No."<<endl;
cin>>b;
if(b>2){
cout<<" OPCION NO VALIDA, INTENTELO NUEVAMENTE.";
getch();
principio();
}
if(a=b){
crear();
menu();
}else{

menu();
}

}

int main(){
menu();
}

void mini(){
FILE*archivo;
FILE*archivo2;
archivo=fopen("hospital.txt", "r+");
system("cls");
long long auxcui;
int xn=0,vw=0;
cout<<"_______________________________________________________________________________________________"<<endl<<endl;
cout<<"\tIngrese el CUI del paciente: ";
cin>>auxcui;
cout<<"\n_______________________________________________________________________________________________"<<endl<<endl;


while((fread(&datos,sizeof(datos),1,archivo)==1)&&(vw!=1))
{

if (datos.cui==auxcui){
system("cls");
cout<<"_______________________________________________________________________________________________"<<endl<<endl;
cout<<" CUI del paciente: "<<datos.cui<<endl;
cout<<" Nombre del paciente: "<<datos.nombre<<" "<<datos.apellido <<". "<<endl;
cout<<" Fecha de nacimiento:"<<datos.fecha.dia<<"/"<<datos.fecha.mes<<"/"<<datos.fecha.año<<endl;
cout<<" Tipo de sangre: "<<datos.tipos<<endl;
cout<<" Numero celular del familiar: "<<datos.cel<<endl;
cout<<" Nombre de un familiar del cliente: "<<datos.nfamiliar<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;
}
do{
int res;
char respuesta[254];
cout<<" Es el paciente correcto? "<<endl;
cout<<"1. SI. \t\t 2. NO."<<endl;
cin>>respuesta;
res=atoi(respuesta);
if (res==1){
rp.cui=datos.cui;
vw=1;
rp.nufam=datos.cel;
// cout<<rp.nufam;
// getch();
}else{
if(res==2){
xn=0;
}else{
cout<<" OPCION NO VALIDA, VUELVA A INTENTARLO.";
getch();
xn=1;
}
}
}while(xn==1);
}

archivo2=fopen("registro.txt","at+");
fwrite(&rp,sizeof(rp),1,archivo2);
fclose(archivo);

fclose(archivo2);
// cout<<" Guardado";

}

void registro(){
int dia=0,m=0,aanio=0,xx=0,h=0,min=0,hir=0,min2=0,h2=0,hir2=0,dia2=0,m2=0,aanio2=0,xx2=0;
char ddia[254],mes[254],año[254],ho[5],mi[5];
char ddia2[254],mes2[254],anio2[254],ho2[5],mi2[5];
int vme,vt,vd,vi,vm,vit;

mini();
system("cls");
cout<<"\t\t\t INGRESE LA SIGUIENTE INFORMACION: "<<endl;
do{
cout<<" Fecha de ingreso:\n";
xx=0;
cin.getline(ddia,254,'/');
cin.getline(mes,254,'/');
cin.getline(año,254,'\n');
dia=atoi(ddia);
m=atoi(mes);
aanio=atoi(año);
if((dia==0) || (dia>31)){
cout<<" DIA INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((m==0) || (m>12)){
cout<<" MES INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((aanio<1950) || (aanio>2018)){
cout<<" año INVALIDO, VUELVA A INTENTARLO\n";
xx=1;
}else{
if((dia>29) && (m==2)){
cout<<" RECUERDE QUE FEBRERO SOLO TIENE 29 DIAS EN AÑO BISIESTO\n";
xx=1;
}else{
rp.fecha.dia=dia;
rp.fecha.mes=m;
rp.fecha.año=aanio;
}
}
}
}

}while(xx==1);

cout<<"\t\t\tDESCRIPCION DE INGRESO: "<<endl;
do{

cout<<" Encabezado/titulo:\t\t";
cin.getline(rp.ti,254,'\n');
strupr(rp.ti);
vit=0;//inpedimos que el while sea infinito
if((*rp.ti==NULL) || (*rp.ti==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vit=1;//activamos el while
}
}while(vit==1);

do{
cout<<" Descripcion:\n";
cin.getline(rp.descripcion,1000,'\n');
strupr(rp.descripcion);
vi=0;//inpedimos que el while sea infinito
if((*rp.descripcion==NULL) || (*rp.descripcion==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vi=1;//activamos el while
}
}while(vi==1);

do{
cout<<" Hora de ingreso: "<<endl;
cin.getline(ho,5,':');
cin.getline(mi,5,'\n');
min=atoi(mi);
h=atoi(ho);
if (h>23){
cout<<" Hora invalida, vuelva a intentarla."<<endl;
h=0;min=0;
hir=1;
}else{

if(min>59){
cout<<" Minutos invalidos, vuelva a ingresar la hora"<<endl;
h=0;min=0;
hir=1;
}else{
rp.hingreso=h;
rp.mingreso=min;
}


}
}while(hir==1);

do{
vme=0;
cout<<" Medico tratante: ";
cin.getline(rp.medico,254,'\n');
strupr(rp.medico);
vme=0;//inpedimos que el while sea infinito
if((*rp.medico==NULL) || (*rp.medico==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vme=1;//activamos el while
}
}while(vme==1);

cout<<"\t\t\tDIAGNOSTICO MEDICO: "<<endl;

do{
cout<<" Encabezado/Titulo:\t\t";
cin.getline(rp.titulo,254,'\n');
strupr(rp.titulo);
vt=0;//inpedimos que el while sea infinito
if((*rp.titulo==NULL) || (*rp.titulo==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vt=1;//activamos el while
}
}while(vt==1);

do{
cout<<" Diagnostico:\n";
cin.getline(rp.diagnostico,1000,'\n');
strupr(rp.diagnostico);
vd=0;//inpedimos que el while sea infinito
if((*rp.diagnostico==NULL) || (*rp.diagnostico==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vd=1;//activamos el while
}
}while(vd==1);

do{
cout<<" RECETA MEDICA:\n";
cin.getline(rp.rmedica,600,'\n');
strupr(rp.rmedica);
vm=0;//inpedimos que el while sea infinito
if((*rp.rmedica==NULL) || (*rp.rmedica==' ') /*|| (*datos.nombre=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vm=1;//activamos el while
}
}while(vm==1);



cout<<"\t\t\tFECHA DE SALIDA\n";
do{
cout<<" FECHA: ";
xx2=0;
cin.getline(ddia2,254,'/');
cin.getline(mes2,254,'/');
cin.getline(anio2,254,'\n');
dia2=atoi(ddia2);
m2=atoi(mes2);
aanio2=atoi(anio2);
if((dia2==0) || (dia2>31)){
cout<<" DIA INVALIDO, VUELVA A INTENTARLO\n";
xx2=1;
}else{
if((m2==0) || (m2>12)){
cout<<" MES INVALIDO, VUELVA A INTENTARLO\n";
xx2=1;
}else{
if((aanio2<1950) || (aanio2>2018)){
cout<<" año INVALIDO, VUELVA A INTENTARLO\n";
xx2=1;
}else{
if((dia2>29) && (m2==2)){
cout<<" RECUERDE QUE FEBRERO SOLO TIENE 29 DIAS EN AÑO BISIESTO\n";
xx=1;
}else{
rp.fechas.dia=dia2;
rp.fechas.mes=m2;
rp.fechas.año=aanio2;
}
}
}
}

}while(xx2==1);

do{
cout<<" Hora de salida: "<<endl;
cin.getline(ho2,5,':');
cin.getline(mi2,5,'\n');
min2=atoi(mi2);
h2=atoi(ho2);
if (h2>23){
cout<<" Hora invalida, vuelva a intentarla."<<endl;
h2=0;min2=0; cout<<" Hora de ingreso: "<<endl;
cin.getline(ho2,5,':');
cin.getline(mi2,5,'\n');
min2=atoi(mi2);
h2=atoi(ho2);
hir2=1;
}else{

if(min2>59){
cout<<" Minutos invalidos, vuelva a ingresar la hora"<<endl;
h2=0;min2=0; cout<<" Hora de ingreso: "<<endl;
cin.getline(ho2,5,':');
cin.getline(mi2,5,'\n');
min2=atoi(mi2);
h2=atoi(ho2);
hir2=1;
}else{
rp.hsalida=h2;
rp.msalida=min2;
}


}
}while(hir2==1);




FILE*archivo2;
archivo2=fopen("registro.txt","at+"); //abrimos el archivo
fwrite(&rp,sizeof(rp),1,archivo2); //escribimos los datos ingresados en el archivo
fclose(archivo2);//cerramos el archivo
cout<<" DATOS INGRESADOS CORRECTAMENTE"; //Mensaje para corroborar que se ingresaron los archivos
getch();
menu();

}

void mini2(){
FILE*archivo;
FILE*archivo2;
archivo=fopen("hospital.txt", "r+");
int ce,vnf=0;
char cel[254];
long long auxcui;
cout<<"_______________________________________________________________________________________________"<<endl<<endl;
auxcui=auxccui;


while(fread(&datos,sizeof(datos),1,archivo)==1)
{

if (datos.cui==auxcui){
system("cls");
cout<<"\t\t\t DATOS INGRESADOS:\n";
cout<<"_______________________________________________________________________________________________"<<endl;
cout<<" CUI del paciente: "<<datos.cui<<endl;
cout<<" Nombre del paciente: "<<datos.nombre<<endl;
cout<<" Apellido del paciente: "<<datos.apellido<<endl;
cout<<" Fecha de ingreso:"<<datos.fecha.dia<<"/"<<datos.fecha.mes<<"/"<<datos.fecha.año<<"."<<endl;
cout<<" Tipo de sangre: "<<datos.tipos<<endl;
cout<<" Departamento: "<<datos.direccion.departamento<<endl;
cout<<" Municipio: "<<datos.direccion.municipio<<endl;
cout<<" Zona: "<<datos.direccion.zona<<endl;
cout<<"_______________________________________________________________________________________________"<<endl;
}

}
int respuesta;
cout<<" Es el paciente correcto? "<<endl;
cout<<"1. SI. \n 2. NO."<<endl;
cin>>respuesta;
if (respuesta==1){
rp.cui=datos.cui;
}else{
mini2();
}

cin.ignore();
do{
do{
do{
cout<<" Ingrese el Numero celular de un familiar del paciente: ";
cin.getline(cel,254,'\n');
ce=atoi(cel);
if (ce==0){
cout<<" El numero ingresado es invalido, intente nuevamente."<<endl;
ce=0;
}else{

if (ce<29999999){
cout<<" El numero ingresado es invalido, intente nuevamente. "<<endl;
ce=0;
}else{
if (ce>60000000){
cout<<" El numero ingresado es invalido, intente nuevamente. "<<endl;
ce=0;
}
}
}
}while(ce>60000000);
}while(ce==0);
}while(ce<29999999);
datos.cel=ce;

// cin.ignore(); //Si en caso llega a omitir la parte de ingresar este dato solo borrar las "//" del inicio
do{
cout<<" Ingrese el Nombre de un familiar del cliente: ";
cin.getline(datos.nfamiliar,40,'\n');
strupr(datos.nfamiliar);
vnf=0;//inpedimos que el while sea infinito
if((*datos.nfamiliar==NULL) || (*datos.nfamiliar==' ') /*|| (*datos.nfamiliar=='\n')*/){
cout<<" NO PUEDE DEJAR ESTE CAMPO EN BLANCO, INTENTELO NUEVAMENTE."<<endl;
vnf=1;//activamos el while
}
}while(vnf==1);

archivo2=fopen("hospital.txt","at+");
fwrite(&datos,sizeof(datos),1,archivo2);
fclose(archivo);

fclose(archivo2);
cout<<" DATOS ACTUALIZADOS.";
getch();
menu();
}