Sunteți pe pagina 1din 34

Programacin en c++ #include<stdio.h> #include<stdlib.

h> //Creacin y manipulacin de vectores en C++ //Ejemplo de programacin I Virtual main() { int A[3], B[3], i; puts("Creacin de Vectores o Arrays en C++\n"); puts("=======================================\n"); for(i=1;i<=3;++i) { printf("\nIngresar el Valor del vector A[%d] : ", i); scanf("%d", &A[i]); printf("\nIngresar el Valor del vector B[%d] : ", i); scanf("%d", &B[i]); } puts("\nContendio del Vector A\n"); puts("========================\n"); for(i=1;i<=3;++i) { printf("El Valor del Elemento [%d] es : %d\n", i, A[i]); } puts("\nContenido del Vector B\n"); puts("========================\n"); for(i=1; i<=3; ++i) { printf("El valor del Elemento [%d] es : %d\n", i, B[i]); } puts("\nLa suma de los dos Vectores es : \n"); puts("================================="); for(i=1; i<=3; ++i) { printf("La suma de A[%d] + B[%d] es : %d\n", i,i,A[i]+B[i]); } system("\npause"); return 0; } #include <stdio.h> #include <string.h> #include <stdlib.h> //Creacin y manipulacin de vectores de tipo char en C++ //Separando en caracteres la cadena digitada - Ejemplo de programacin I Virtual main() { char nombre[35]; int i; puts("Ingresar su Nombre : "); gets(nombre); printf("Su Nombre es : %s\n", nombre); for(i=0; i<strlen(nombre); i++) { printf("Caracter %d es : %c \n", i, nombre[i]); } system("pause"); return 0; } JACE 1

Programacin en c++ #include <stdio.h> #include <string.h> #include <stdlib.h> //Creacin y manipulacin de vectores de tipo char en C++ //Sustituimos todas las vocales por * de la cadena digitada //Ejemplo de programacin I Virtual main() { char cadena[30]; int l, i; puts("Digite su Nombre Completo : "); gets(cadena); l=strlen(cadena); printf("Numero de caracteres : %d",l); for(i=0;i<strlen(cadena);i++) { if(cadena[i]=='a') cadena[i]='*'; else if(cadena[i]=='e') cadena[i]='*'; else if(cadena[i]=='i') cadena[i]='*'; else if(cadena[i]=='o') cadena[i]='*'; else if(cadena[i]=='u') cadena[i]='*'; } printf("\n\n%s",cadena); puts("\n"); system("pause"); return 0; }

#include <stdio.h> #include <conio.h> #include <stdlib.h> //Creacin y manipulacin de vectores de tipo char en C++ //Ejemplo de programacin I Virtual /* Rellenamos un vector char */ main() { char cadena[100]; int i; puts("Digite su Nombre Completo : "); for(i=0;;i++) { cadena[i]=getche( ); if(cadena[i]==13) { cadena[i]='\0'; break; } } printf("\n\n%s",cadena); JACE 2

Programacin en c++ puts("\n"); system("pause"); return 0; }

#include <stdio.h> #include <stdlib.h> //Creacin y manipulacin de matrices en C++ //Sumando las filas y columnas de la matriz - Ejemplo de programacin I Virtual main() { int matriz[3][3],i, j, sumf, sumc; puts("Suma de elementos de una matriz de 3 X 3"); for(i=1; i<=3; i++) { for(j=1; j<=3; j++) { printf("Digite el numero para [%d][%d] : ", i,j); scanf("%d", &matriz[i][j]); } } puts("\nContenido de la Matriz"); for(i=1;i<=3;i++) { puts("\n"); for(j=1;j<=3;j++) { printf("%d \t", matriz[i][j]); } } puts("\n\nEl resultado de la suma de las filas de la matriz :"); for(i=1;i<=3;i++) { sumf=0; for(j=1;j<=3;j++) { sumf+=matriz[i][j]; } printf("\nSuma fila %d es : %d", i, sumf); } puts("\n\nEl resultado de la suma de las columnas de la matriz :"); for(i=1;i<=3;i++) { sumc=0; for(j=1;j<=3;j++) { sumc+=matriz[j][i]; } printf("\nSuma columna %d es : %d", i, sumc); } puts("\n"); system("pause"); return 0; } JACE 3

Programacin en c++ #include <stdio.h> #include <stdlib.h> //Creacin de matrices en C++ //Matriz Identidad es una matriz cuadrada de orden m //en la cual todos los elementos son cero excepto los de la diagonal principal, que son 1. //Ejemplo de programacin I Virtual main() { int matriz[4][4], i, j; puts("Matriz Identidad"); for(i=0; i<4; i++) { puts("\n"); for(j=0; j<4; j++) { if(i==j) { matriz[i][j]=1; printf("%d \t",matriz[i][j]); } else { matriz[i][j]=0; printf("%d \t", matriz[i][j]); } } } puts("\n"); system("pause"); return 0; }

#include <stdio.h> #include <stdlib.h> //Creacin y manipulacin de matrices en C++ //matriz transpuesta se obtiene al intercambiar los elementos //por medio de su posicin dentro de la matriz. main() { char car[4][3]; int i, j; puts("Matriz de caracteres (normal) :"); puts("============================="); for(i=1; i<=4; i++) { printf("\n"); for(j=1; j<=3; j++) { car[i][j]=65+i; printf("%c \t", car[i][j]); } } puts("\n\nMatriz de caracter (transpuesta) :"); JACE 4

Programacin en c++ puts("=================================="); for(i=1;i<=3;i++) { printf("\n"); for(j=1; j<=4; j++) { car[j][i]=65+j; printf("%c \t", car[j][i]); } } puts("\n"); system("pause"); } #include<stdio.h> #include<stdlib.h> //Creacin de funciones en C++ //Ejemplo de programacin I virtual double media(double x1, double x2) { return (x1 + x2)/2; } main() { double n1, n2, med; printf("Ingresar dos Numeros reales : "); scanf("%lf %lf", &n1, &n2); med=media(n1,n2); printf("El Valor Medio es %.2lf \n", med); system("pause"); return 0; } #include<stdio.h> //Creacin de funciones en C++ //Ejemplo de programacin I virtual long cubo(long x); long val, result; main() { do { printf("Ingresar un valor entero : "); scanf("%d", &val); result = cubo(val); printf("El cubo de %ld es : %d\n\n", val, result); }while(val != 0); return 0; } long cubo(long x) { long x_cubo; x_cubo = x * x * x; return x_cubo; } JACE 5

Programacin en c++ #include <stdio.h> #include <stdlib.h> //Creacin de funciones en C++ //y el uso de parmetros por valor //Ejemplo de programacin I virtual int funcion(int n, int m); main() { int a, b; a = 10; b = 20; printf("Parametros por Valor\n"); printf("Primer llamado a la funcin\n"); printf("=============================\n"); printf("a,b -> %d, %d \n", a, b); printf("a,b -> %d, %d \n", a, b); printf("funcion(a,b) -> %d \n", funcion(a, b)); printf("a,b -> %d, %d \n\n", a, b); printf("Segundo llamado a la funcin\n"); printf("=============================\n"); printf("funcion(30,50) -> %d \n", funcion(30, 50)); system("pause"); return 0; } int funcion(int n, int m) { n = n + 5; m = m - 5; return n+m; } #include <stdio.h> #include <stdlib.h> //Creacin de funciones en C++ //y el uso de parmetros por Referencia //Ejemplo de programacin I virtual int funcion(int &n, int &m); main() { int a, b; a = 10; b = 20; printf("Parametros por Referencia\n"); printf("Primer llamado a la funcin\n"); printf("=============================\n"); printf("a -> %d \n", a); printf("b -> %d \n", b); printf("funcion(a,b) -> %d \n", funcion(a, b)); printf("\nNuevos Valores de a y b\n"); printf("========================\n"); printf("a -> %d \n", a); printf("b -> %d \n\n", b); system("pause"); return 0; JACE 6

Programacin en c++ } int funcion(int &n, int &m) { n = n + 5; m = m - 5; return n+m; }

#include <stdio.h> #include <stdlib.h> //Creacin de estructuras en C++ //Ejemplo de programacin I virtual struct personas { char nombres[25]; char apellidos[25]; char direccion[45]; int edad; }datos; main() { printf("Digite sus Nombres : "); gets(datos.nombres); printf("Ditige sus Apellidos : "); gets(datos.apellidos); printf("Digite su Direccin : "); gets(datos.direccion); printf("Digite su Edad : "); scanf("%d", &datos.edad); puts("\nDatos Digitados :"); puts("============================"); printf("\nNombres : %s",datos.nombres); printf("\nApellidos : %s",datos.apellidos); printf("\nDireCcion : %s",datos.direccion); printf("\nEdad : %d",datos.edad); system("\npause"); return 0; }

JACE

Programacin en c++ #include<stdio.h> #include<string.h> #include<conio.h> #define Y 1 #define N 0 #define M 100 struct personas { char codigo[6]; char nombres[20]; char apellidos[20]; }datos[M]; int reg = 0; void ingresar(void); void buscar(void); void imprimir(void); int contin(void); void limpiar(void); main(void) { int cont = Y; int ch; while (cont == Y) { printf("\n\n\tMENU"); printf("\n\t---------------------------"); printf("\n\tIntroducir Datos \t(1)"); printf("\n\tBuscar \t\t(2)"); printf("\n\tImprimir \t\t(3)"); printf("\n\tSalir \t\t(4)"); printf("\n\t---------------------------\n"); printf("\n\n\tIntrodusca la Opcion: "); ch = getche(); clrscr(); switch (ch) { case '1': ingresar(); break; case '2': buscar(); break; case '3': imprimir(); break; case '4': printf("\n\n\n\n\n\n\t\tGracias por usar este Programa!!!!"); cont = N; break; default: printf("\n\n\n\n\t\tIncorrecta eleccion por favor seleccione 1 a 4"); 8

//

JACE

Programacin en c++ break; } } } void ingresar(void) { int cont; for (cont = Y; reg<M && cont == Y; reg++) { // clrscr(); printf("\n\n\t\t\t DATOS # %d", reg+1); printf("\n\t\t========================================="); flushall(); printf("\n\nCodigo LL-000 : "); gets(datos[reg].codigo); printf("\nNombres : "); gets(datos[reg].nombres); printf("\nApellidos : "); gets(datos[reg].apellidos); cont = contin(); if (reg == M) printf("\n\nNurmero Maximo de Datos!!!!!\n"); } } int contin(void) { char ch; do { printf("\n\n Desea Introducir Nuevos Datos? Y/N : "); ch = getche(); }while(ch!='n' && ch != 'N'&& ch!='y' && ch !='Y'); limpiar(); if(ch == 'n' || ch == 'N') return (N); else return (Y); } void limpiar(void) { char desecho[200]; gets (desecho); } void buscar(void) { int i; char ch, y, nue[10], busc[6]; JACE 9

//

Programacin en c++ printf("\n\n\t\t\tBUSCAR DATOS"); printf("\n\t\t\t=============="); printf("\n\n\t\t Digite Codigo : "); scanf("%s", busc); if(strlen(busc)==5) //clrscr(); for(i=0; i<reg; i++) if(strcmp(strupr(busc), datos[i].codigo) == 0) { printf("\nDATOS PERSONALES \n---------------- \n"); printf("Codigo : %s \nNombres : %s \nApellidos : %s", strupr(datos[i].codigo),strupr(datos[i].nombres),strupr(datos[i].apellidos)); printf("\nPresione cualquier tecla para retornar al menu"); getch(); clrscr(); } // clrscr();

//

} void imprimir(void) { int y; printf("\n\n"); printf("\n\t\t\t LISTADO DE DATOS"); printf("\n\t\t\t ======================"); for(y=0; y<reg; y++) { printf("\nCodigo:%s \nNombre:%s \nApellidos:%s", strupr(datos[y].codigo), strupr(datos[y].nombres), strupr(datos[y].apellidos)); } printf("\n\nTotal de Datos:%d", y); printf("\n\n*******************Fin del Listado******************"); printf("\n\npresione cualquier tecla para retornar al menu"); getche(); //clrscr(); }

JACE

10

Programacin en c++ #include<stdio.h> #include<stdlib.h> main() { FILE *archivo; printf("Creacion de Archivos\n"); printf("====================\n"); archivo=fopen("d:/miarchi.txt", "wt+"); if(archivo!=NULL) puts("El archivo fue creado\n"); else puts("el archivo no fue creado\n"); system("pause"); return 0; }

#include <stdio.h> #include <stdlib.h> main() { FILE *archivo; char datos[]="hola mundo"; archivo = fopen("d:/miarchivo.txt", "wt+"); if(archivo != NULL) { fwrite(datos, sizeof(datos), 1, archivo); puts("Operacin con xito\n"); } else { printf("Archivo no existe\n"); } system("pause"); return 0; }

#include <stdio.h> #include <string.h> #include <stdlib.h> struct { char noms[25]; char apells[25]; char direc[100]; }d; main() { FILE *archivo; archivo = fopen("d:/miarchivo.txt", "a+t"); puts("Escribiendo en un archivo de texto"); puts("====================================="); if(archivo != NULL) { JACE 11

Programacin en c++ printf("Ingresar nombres : "); gets(d.noms); printf("Ingresar apellidos : "); gets(d.apells); printf("Ingresar direccion : "); gets(d.direc); fprintf(archivo,"%s \t %s \t %s\n",strupr(d.noms),strupr(d.apells),strupr(d.direc)); } else { printf("Archivo no existe\n"); } fclose(archivo); system("pause"); return 0; } #include <stdio.h> #include <stdlib.h> struct { char noms[25]; char apells[25]; char direc[100]; }d; main() { FILE *archivo; archivo = fopen("d:/miarchivo.txt", "at+"); if(archivo != NULL) { printf("Nombres \t Apellidos \t Direccion \n"); while(!feof(archivo)) { fgets(d.noms,25,archivo); fgets(d.apells,25,archivo); fgets(d.direc,100,archivo); printf("%s%s%s", d.noms, d.apells, d.direc); } } else { printf("Archivo no existe\n"); } fclose(archivo); system("pause"); return 0; }

JACE

12

Programacin en c++ Funciones y clases usados frecuentemente con ficheros (archivos) Funciones y tipos C estndar: Tipo FILE: C define la estructura de datos FILE en el fichero de cabecesa "stdio.h" para el manejo de ficheros. Nosotros siempre usaremos punteros a estas estructuras. La definicin de sta estructura depende del compilador, pero en general mantienen un campo con la posicin actual de lectura/escritura, un buffer para mejorar las prestaciones de acceso al fichero y algunos campos para uso interno. Funcin fopen: Sintaxis: FILE *fopen(char *nombre, char *modo); sta funcin sirve para abrir y crear ficheros en disco. El valor de retorno es un puntero a una estructura FILE. Los parmetros de entrada son: 1. nombre: una cadena que contiene un nombre de fichero vlido, esto depende del sistema operativo que estemos usando. El nombre puede incluir el camino completo. 2. modo: especifica en tipo de fichero que se abrir o se crear y el tipo de datos que puede contener, de texto o binarios: o r: slo lectura. El fichero debe existir. o w: se abre para escritura, se crea un fichero nuevo o se sobreescribe si ya existe. o a: aadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea. o r+: lectura y escritura. El fichero debe existir. o w+: lectura y escritura, se crea un fichero nuevo o se sobreescribe si ya existe. o a+: aadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea. o t: tipo texto, si no se especifica "t" ni "b", se asume por defecto que es "t" o b: tipo binario. Funcin fclose: Sintaxis: int fclose(FILE *fichero); Es importante cerrar los ficheros abiertos antes de abandonar la aplicacin. Esta funcin sirve para eso. Cerrar un fichero almacena los datos que an estn en el buffer de memoria, y actualiza algunos datos de la cabecera del fichero que mantiene el sistema operativo. Adems permite que otros programas puedan abrir el fichero para su uso. Muy a menudo, los ficheros no pueden ser compartidos por varios programas. Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha habido algn error, el valor de retorno es la constante EOF. El parmetro es un puntero a la estructura FILE del fichero que queremos cerrar. Funcin fgetc: Sintaxis: int fgetc(FILE *fichero); Esta funcin lee un carcter desde un fichero. El valor de retorno es el carcter ledo como un unsigned char convertido a int. Si no hay ningn carcter disponible, el valor de retorno es EOF. El parmetro es un puntero a una estructura FILE del fichero del que se har la lectura. Funcin fputc: Sintaxis: int fputc(int caracter, FILE *fichero); Esta funcin escribe un carcter a un fichero. JACE 13

Programacin en c++ El valor de retorno es el carcter escrito, si la operacin fue completada con xito, en caso contrario ser EOF. Los parmetros de entrada son el carcter a escribir, convertido a int y un puntero a una estructura FILE del fichero en el que se har la escritura. Funcin feof: Sintaxis: int feof(FILE *fichero); Esta funcin sirve para comprobar si se ha alcanzado el final del fichero. Muy frecuentemente deberemos trabajar con todos los valores almacenados en un archivo de forma secuencial, la forma que suelen tener los bucles para leer todos los datos de un archivo es permanecer leyendo mientras no se detecte el fin de fichero. Esta funcin suele usarse como prueba para verificar si se ha alcanzado o no ese punto. El valor de retorno es distinto de cero slo si no se ha alcanzado el fin de fichero. El parmetro es un puntero a la estructura FILE del fichero que queremos verificar. Funcin rewind: Sintaxis: void rewind(FILE *fichero) Es una funcin heredada de los tiempos de las cintas magnticas. Literalmente significa "rebobinar", y hace referencia a que para volver al principio de un archivo almacenado en cinta, haba que rebobinarla. Eso es lo que hace sta funcin, sita el cursor de lectura/escritura al principio del archivo. El parmetro es un puntero a la estructura FILE del fichero que queremos rebobinar. Ejemplos: // ejemplo1.c: Muestra un fichero dos veces. #include <stdio.h> int main() { FILE *fichero; fichero = fopen("ejemplo1.c", "r"); while(!feof(fichero)) fputc(fgetc(fichero), stdout); rewind(fichero); while(!feof(fichero)) fputc(fgetc(fichero), stdout); fclose(fichero); getchar(); return 0; }

Funcin fgets: Sintaxis: char *fgets(char *cadena, int n, FILE *fichero); Esta funcin est diseada para leer cadenas de caracteres. Leer hasta n-1 caracteres o hasta que lea un retorno de lnea. En este ltimo caso, el carcter de retorno de lnea tambin es ledo. El parmetro n nos permite limitar la lectura para evitar derbordar el espacio disponible en la cadena. El valor de retorno es un puntero a la cadena leda, si se ley con xito, y es NULL si se detecta el final del fichero o si hay un error. Los parmetros son: la cadena a leer, el nmero de caracteres mximo a leer y un puntero a una estructura FILE del fichero del que se leer. Funcin fputs: Sintaxis: int fputs(const char *cadena, FILE *stream); JACE 14

Programacin en c++ La funcin fputs escribe una cadena en un fichero. No se aade el carcter de retorno de lnea ni el carcter nulo final. El valor de retorno es un nmero no negativo o EOF en caso de error. Los parmetros de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde se realizar la escritura. Funcin fread: Sintaxis: size_t fread(void *puntero, size_t tamao, size_t nregistros, FILE *fichero); Esta funcin est pensada para trabajar con registros de longitud constante. Es capaz de leer desde un fichero uno o varios registros de la misma longitud y a partir de una direccin de memoria determinada. El usuario es responsable de asegurarse de que hay espacio suficiente para contener la informacin leda. El valor de retorno es el nmero de registros ledos, no el nmero de bytes. Los parmetros son: un puntero a la zona de memoria donde se almacenarn los datos ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la estructura FILE del fichero del que se har la lectura. Funcin fwrite: Sintaxis: size_t fwrite(void *puntero, size_t tamao, size_t nregistros, FILE *fichero); Esta funcin tambin est pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una direccin de memoria determinada. El valor de retorno es el nmero de registros escritos, no el nmero de bytes. Los parmetros son: un puntero a la zona de memoria donde se almacenarn los datos ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la estructura FILE del fichero del que se har la lectura. Ejemplo: // copia.c: Copia de ficheros // Uso: copia <fichero_origen> <fichero_destino> #include <stdio.h> int main(int argc, char **argv) { FILE *fe, *fs; unsigned char buffer[2048]; // Buffer de 2 Kbytes int bytesLeidos; if(argc != 3) { printf("Usar: copia <fichero_origen> <fichero_destino>\n"); return 1; } // Abrir el fichero de entrada en lectura y binario fe = fopen(argv[1], "rb"); if(!fe) { printf("El fichero %s no existe o no puede ser abierto.\n", argv[1]); return 1; } // Crear o sobreescribir el fichero de salida en binario fs = fopen(argv[2], "wb"); if(!fs) { printf("El fichero %s no puede ser creado.\n", argv[2]); fclose(fe); return 1; } // Bucle de copia: JACE 15

Programacin en c++ while((bytesLeidos = fread(buffer, 1, 2048, fe))) fwrite(buffer, 1, bytesLeidos, fs); // Cerrar ficheros: fclose(fe); fclose(fs); return 0; }

Funcin fprintf: Sintaxis: int fprintf(FILE *fichero, const char *formato, ...); La funcin fprintf funciona igual que printf en cuanto a parmetros, pero la salida se dirige a un fichero en lugar de a la pantalla. Funcin fscanf: Sintaxis: int fscanf(FILE *fichero, const char *formato, ...); La funcin fscanf funciona igual que scanf en cuanto a parmetros, pero la entrada se toma de un fichero en lugar del teclado. Funcin fflush: Sintaxis: int fflush(FILE *fichero); Esta funcin fuerza la salida de los datos acumulados en el buffer de salida del fichero. Para mejorar las prestaciones del manejo de ficheros se utilizan buffers, almacenes temporales de datos en memoria, las operaciones de salida se hacen a travs del buffer, y slo cuando el buffer se llena se realiza la escritura en el disco y se vaca el buffer. En ocasiones nos hace falta vaciar ese buffer de un modo manual, para eso sirve sta funcin. El valor de retorno es cero si la funcin se ejecut con xito, y EOF si hubo algn error. El parmetro de entrada es un puntero a la estructura FILE del fichero del que se quiere vaciar el buffer. Si es NULL se har el vaciado de todos los ficheros abiertos. Funciones C especficas para ficheros de acceso aleatorio Funcin fseek: Sintaxis: int fseek(FILE *fichero, long int desplazamiento, int origen); Esta funcin sirve para situar el cursor del fichero para leer o escribir en el lugar deseado. El valor de retorno es cero si la funcin tuvo xito, y un valor distinto de cero si hubo algn error. Los parmetros de entrada son: un puntero a una estructura FILE del fichero en el que queremos cambiar el cursor de lectura/escritura, el valor del desplazamiento y el punto de origen desde el que se calcular el desplazamiento. El parmetro origen puede tener tres posibles valores: 1. SEEK_SET el desplazamiento se cuenta desde el principio del fichero. El primer byte del fichero tiene un desplazamiento cero. 2. SEEK_CUR el desplazamiento se cuenta desde la posicin actual del cursor. 3. SEEK_END el desplazamiento se cuenta desde el final del fichero.

JACE

16

Programacin en c++ Funcin ftell: Sintaxis: long int ftell(FILE *fichero); La funcin ftell sirve para averiguar la posicin actual del cursor de lectura/excritura de un fichero. El valor de retorno ser esa posicin, o -1 si hay algn error. El parmetro de entrada es un puntero a una estructura FILE del fichero del que queremos leer la posicin del cursor de lectura/escritura.

JACE

17

Programacin en c++

REPRESENTACIN GRAFICA DEL USO DE ARCHIVOS EN C++

JACE

18

Programacin en c++

JACE

19

Programacin en c++

JACE

20

Programacin en c++

JACE

21

Programacin en c++

JACE

22

Programacin en c++

JACE

23

Programacin en c++

JACE

24

Programacin en c++

JACE

25

Programacin en c++

JACE

26

Programacin en c++

JACE

27

Programacin en c++

APLICACIN EN C++ DEL MANEJO DE ARCHIVOS


En una biblioteca se necesita un programa para almacenamiento y consulta de informacin de libros. La informacin que se maneja por libro es: Folio, Titulo, Autor, Materia, Estatus, Lugar. El resultado puede ser: R Reservado, P Prestado, D Disponible. El programa deber manejar las siguientes opciones: 1. Introducir los datos de un nuevo libro. 2. Generar un reporte de todos los libros que se encuentran en reserva. 3. Generar un reporte de todos los libros que se encuentran en determinado lugar y cuyo folio esta entre determinado rango. 4. Dar de baja los datos de un libro dado su folio.

JACE

28

Programacin en c++

CDIGO FUENTE
#include #include #include #include <stdio.h> <conio.h> <string.h> <ctype.h>

// estructura a usar struct { char titulo[20]; char autor[30]; char materia[15]; int lugar; int status; int folio; int reload; // regresar al men } datos; // declaro todos los mtodos a utilizar void salir(void); void ingresar(void); void reserva(void); void lugar_folio(void); void borrar(void); void limpiar(void); void main() { int opcion; // para elegir la opcin en el men clrscr(); datos.reload=2; while(datos.reload==2){ clrscr(); gotoxy(10,4); printf("==================Control de Biblioteca ==================\n\n\n"); gotoxy(5,7); printf ("1. - Agregar nuevo libro.\n"); gotoxy(5,8); printf ("2. - Ver Reporte de libros en Reserva .\n"); gotoxy(5,9); printf ("3. - Ver libros por Lugar.\n"); gotoxy(5,10); printf ("4. - Borrar un libro por lugar y folio.\n"); gotoxy(5,11); printf ("5. - Limpiar el registro.\n"); gotoxy(5,12); printf ("0. - Salir del programa.\n"); printf("=================================================\n\n\n"); gotoxy(9,14); printf ("Que desea hacer?: "); scanf ("%d",&opcion); switch (opcion) { case (0): salir(); break; case (1): ingresar(); break; case (2): reserva(); break; case (3): lugar_folio(); break; case (4): borrar(); break; case (5): limpiar(); break; JACE 29

Programacin en c++ default: clrscr(); gotoxy(25,8); printf ("============No es valido============="); gotoxy(18,9); printf ("---Presione cualquier tecla para regresar al menu---"); getch(); break; }//fin switch }//fin while }//fin main //=========================================================== void salir(void) { char op; clrscr(); do { gotoxy(20,8); printf("Seguro que quiere salir(S / N)???"); gotoxy(35,9); op=toupper(getche());getch(); clrscr(); }while(op!='S' && op!='N'); if(op=='S') { clrscr(); gotoxy(25,8); printf ("============Programa Finalizado============="); datos.reload=0; } //fin if else datos.reload=2; }//fin void salir //===========================================================

void ingresar(void) { clrscr(); printf("=====================Nuevo Libro======================\n\n"); getchar(); printf("Titulo del libro:\t\t"); gets(datos.titulo); printf("Nombre del Autor:\t\t"); gets(datos.autor); printf("Materia del Libro:\t\t"); gets(datos.materia); printf("\nLugar donde se encuentra:\n"); gotoxy(18,9);printf("1.Primer Piso\t\t"); printf("2.Segundo Piso\n"); gotoxy(18,10);printf("3.Tercer Piso\t\t"); printf("4.Cuarto Piso\n"); scanf("%d", &datos.lugar); gotoxy(35,12); printf("Folio del libro:\t\t"); JACE 30

Programacin en c++ gotoxy(35,15); scanf("%d", &datos.folio); printf("\nEstatus del libro:\n \t 1- Reservado \n \t 2- Prestado \n \t 3- Disponible:\t\t\t"); gotoxy(35,21); scanf("%d", &datos.status); //escribiendo en el archivo FILE *libros; libros = fopen("info.txt","at+"); // at+ lectura y escritura fwrite(&datos,sizeof(datos),1,libros); fclose(libros); datos.reload=2; clrscr(); //aviso de guardado gotoxy(25,8);printf ("============Guardado============="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); }//fin void ingresar

//=========================================================== void reserva(void) { clrscr(); FILE *libros; gotoxy(25,3);printf(" Listado de libros Reservados"); libros=fopen("info.txt","rt"); //rt solo lectura if(libros==NULL) { gotoxy(15,20);printf("=========No hay Ningun Registro en el Archivo==========="); gotoxy(15,21);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); datos.reload=2; return; } //fin if gotoxy(5,4);printf("++-------------------------------=========-------------------------++"); gotoxy(5,5);printf("Titulo"); gotoxy(32,5);printf("Lugar"); gotoxy(50,5);printf("Folio"); gotoxy(68,5);printf("Estado"); gotoxy(5,6);printf("++-------------------------------=========-------------------------++"); fread(&datos,sizeof(datos),1,libros); while(!feof(libros)) { if(datos.status==1) { printf("\n \t %s \t\t %d .Piso \t %d \t Reserva " ,datos.titulo, datos.lugar, datos.folio); fread(&datos,sizeof(datos),1,libros); } //fin if fread(&datos,sizeof(datos),1,libros); } //fin while

JACE

31

Programacin en c++ fclose(libros); // Cierra el archivo gotoxy(20,20);printf ("============Finalizado============="); gotoxy(15,21);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); datos.reload=2; return; } //fin void reserva //=========================================================== void borrar(void) { int nof; // numero de folio a eliminar char op; nof=5; clrscr(); FILE *libros; gotoxy(25,3);printf(" ---Eliminar un libro--- "); gotoxy(5,2);printf("++--------------------------=========-------------------------++"); libros=fopen("info.txt","rt+"); // rt+ abre en modo lectura y escritura if(libros==NULL) { clrscr(); gotoxy(25,8);printf ("=========No Hay ningun Registro en el Archivo=========="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); datos.reload=2; return; } //fin if gotoxy(30,10);printf("Numero de folio?: "); scanf("%d" , &nof); fread(&datos,sizeof(datos),1,libros); while(!feof(libros)) { if(datos.folio==nof) { datos.folio=-1; datos.status=-1; datos.lugar=-1; strcpy(datos.titulo," "); strcpy(datos.autor," "); strcpy(datos.materia," "); do { gotoxy(25,13);printf("Seguro que desea eliminarlo?[S/N] "); op=toupper(getche());getch(); }while(op!='S' && op!='N'); if(op=='S') { clrscr(); fseek(libros,ftell(libros)-sizeof(datos),SEEK_SET); fwrite(&datos,sizeof(datos),1,libros); // graba la modificacion JACE 32

Programacin en c++ gotoxy(25,8);printf ("============Eliminado============="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); } // fin if (S) fclose(libros); //Cerrar el archivo getch(); datos.reload=2; return; }//fin if (comparacion) fread(&datos,sizeof(datos),1,libros); } //fin while feof clrscr(); gotoxy(25,8);printf ("============No se encontro============="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); fclose(libros); // Cerrar el archivo getch(); datos.reload=2; return; } //fin void borrar //=========================================================== void lugar_folio(void) { int op; int fol; op=5; fol=0; clrscr(); FILE *libros; gotoxy(5,1);printf("----------------------------=========-------------------------"); gotoxy(25,2);printf(" Listado de libros por lugar"); libros=fopen("info.txt","rt"); //rb solo lectura if(libros==NULL) { gotoxy(25,8);printf ("=========No hay ningun Registro en el archivo==========="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); datos.reload=2; return; } //fin if gotoxy(18,3);printf(" Escriba el lugar donde desea buscar el libro"); gotoxy(5,4);printf("++--------------------------=========-------------------------++"); gotoxy(2,5);printf("1._Primer piso"); gotoxy(20,5);printf("2._Segundo piso"); gotoxy(40,5);printf("3._Tercer piso"); gotoxy(60,5);printf("4._Cuarto piso"); gotoxy(5,6);printf("++--------------------------=========-------------------------++"); gotoxy(40,7); scanf("%d", &op); clrscr(); gotoxy(5,1);printf("----------------------------=========-------------------------"); gotoxy(20,2);printf(" Escriba el folio en el que desea buscar:"); JACE 33

Programacin en c++ gotoxy(40,7);scanf("%d", &fol); clrscr(); printf("\t Titulo \t Lugar \t\t Estado \t\t Folio\n"); fread(&datos,sizeof(datos),1,libros); while(!feof(libros)) { if((datos.lugar==op)&&(datos.folio==fol)) { gotoxy(5,2);printf("++--------------------------=========-------------------------++"); printf("\n \t %s \t %d .Piso \t %d \t\t %d" ,datos.titulo, datos.lugar, datos.status, datos.folio); fread(&datos,sizeof(datos),1,libros); } //fin if fread(&datos,sizeof(datos),1,libros); } //fin while fclose(libros); // Cierra el archivo gotoxy(20,8);printf ("============Finalizado============="); gotoxy(12,9);printf ("---Presione cualquier tecla para regresar al menu---"); getch(); datos.reload=2; return; } //fin void lugar_folio //=========================================================== void limpiar(void) { FILE *temporal; //crea un registro temporal FILE *libros; clrscr(); libros=fopen("info.txt","rt"); if(libros==NULL) { gotoxy(25,8);printf ("========No Hay ningun Registro en el Archivo=========="); gotoxy(18,9);printf ("---Presione cualquier tecla para regresar al menu---"); datos.reload=2; getch(); return; } temporal=fopen("temporal.txt","wt"); // Crea el archivo temporal fread(&datos,sizeof(datos),1,libros); while(!feof(libros)) // Ciclo mientras no se encuentre el final del archivo { if((datos.folio!=-1) && (datos.status!=-1)) fwrite(&datos,sizeof(datos),1,temporal); //Graba el registro valido en el archivo temporal fread(&datos,sizeof(datos),1,libros); } fcloseall(); // Cierra todos los archivos abiertos remove("info.txt"); //Elimina el archivo original rename("temporal.txt","info.txt"); //Renombra el archivo temporal con el nombre del archivo original return; }//fin void limpiar

JACE

34

S-ar putea să vă placă și