Agenda en C++ con clases
// Este es el cuerpo del programa
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include”creative.h”
char numero[6];
int Menu();
int Menuelim();
int Menumod();
int Menumos();
void main()
{
int op,op2,op4;
long numero;
arch = fopen(“Archivo.cs”, “r+b”);
if(!arch) arch = fopen(“Archivo.cs”, “w+b”);
do {
op = Menu();
switch(op) {
case 1:
do{
clrscr();
cs.nuevo();
cout<<”\n\nDesea añadir otro registro? (s/n): “;cin>>resp;
}while(resp== ‘S’ || resp== ‘s’);
break;
case 2:
do{
op4 = Menumos();
switch(op4) {
case 1:
do{
clrscr();
cout<<”Mostrar registro: “;cin>>numero;
cs.unreg(numero);
cout<<”\n\nDesea ver otro registro? (s/n): “;
cin>>resp;
}while(resp== ‘S’ || resp== ‘s’);
break;
case 2:
rewind(arch);
numero = 0;
clrscr();
cout<<”No de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
cout<<”\n”;
while(fread(&cs, sizeof(campos), 1, arch))
cs.todos(numero++,1);
getch();
h=0;
break;
case 3:
cs.Empaquetar(&arch);
cs.Ordenar(arch);
cout<<”\n\a Se han ordenado los registros”;
getch();
break;
}
} while(op4 != 0);
break;
case 3:
do{
op2 = Menuelim();
switch(op2) {
case 1:
do{
clrscr();//envia a papelera
cout<<”Eliminar registro: “;cin>>numero;
cs.elimina(numero);
cout<<”\n\nDesea eliminar otro registro? (s/n): “;
cin>>resp;
}while(resp== ‘S’ || resp== ‘s’);
break;
case 2:
do{
clrscr();
cout<<”Recuperar registro: “;cin>>numero;
cs.recupera(numero);
cout<<”\n\nDesea recuperar otro registro? (s/n): “;
cin>>resp;
}while(resp== ‘S’ || resp== ‘s’);
break;
case 3:
rewind(arch);
numero = 0;
clrscr();
cout<<”No de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
cout<<”\n”;
while(fread(&cs, sizeof(campos), 1, arch))
cs.todos(numero++,0);
getch();
h=0;
break;
case 4:
cs.Empaquetar(&arch);
cout<<”\a”;
cout<<”Se ha vaciado la papelera de reciclaje”;
getch();
break;
}
} while(op2 != 0);
break;
case 4:
clrscr();
int cc;
cout<<”Modificar registro No: “;cin>>numero;
cs.unreg(numero);
do{
cc=cs.modiop(numero);
fseek(arch, numero*sizeof(campos), SEEK_SET);
fwrite(&cs, sizeof(campos), 1, arch);
clrscr();
cout<<”\a”;
cs.unreg(numero);
} while(cc != 0);
break;
}
} while(op != 0);
fclose(arch);
}
int Menu()
{
int resp;
do {
clrscr();
gotoxy(15,1);cout<<”———————————–”;
gotoxy(15,2);cout<<” Teclea la opcion que deseas”;
gotoxy(15,3);cout<<”———————————–”;
gotoxy(15,4);cout<<”1 Insertar registro”;
gotoxy(15,5);cout<<”2 Mostrar registros”;
gotoxy(15,6);cout<<”3 Eliminar”;
gotoxy(15,7);cout<<”4 Modificar Registro”;
gotoxy(15,8);cout<<”0 Salir”;
gotoxy(15,9);cout<<”———————————–\n”;
cin>>resp;
} while(resp < 0 && resp > 4);
return resp;
}
int Menuelim()
{
int resp;
do {
clrscr();
gotoxy(15,1);cout<<”———————————–”;
gotoxy(15,2);cout<<” Teclea la opcion que deseas”;
gotoxy(15,3);cout<<”———————————–”;
gotoxy(15,4);cout<<”1 Enviar a la papelera de reciclaje”;
gotoxy(15,5);cout<<”2 Recuperar de la papelera”;
gotoxy(15,6);cout<<”3 Mostrar Papelera”;
gotoxy(15,7);cout<<”4 Vaciar papelera de reciclaje”;
gotoxy(15,8);cout<<”0 Menu anterior”;
gotoxy(15,9);cout<<”———————————–\n”;
cin>>resp;
} while(resp < 0 && resp > 4);
return resp;
}
int Menumos()
{
int resp;
do {
clrscr();
gotoxy(15,1);cout<<”———————————–”;
gotoxy(15,2);cout<<” Teclea la opcion que deseas”;
gotoxy(15,3);cout<<”———————————–”;
gotoxy(15,4);cout<<”1 Mostrar un registro”;
gotoxy(15,5);cout<<”2 Mostrar todos los registros”;
gotoxy(15,6);cout<<”3 Ordenar los registros”;
gotoxy(15,7);cout<<”0 Menu anterior”;
gotoxy(15,8);cout<<”———————————–\n”;
cin>>resp;
} while(resp < 0 && resp > 3);
return resp;
}
///////////Aqui empieza el archivo cabecera que corresponde a la clase esto se guarda en otro archivo con la extension “.h” en este caso lo nombre “creative.h”
class campos {
public:
campos();
// ~campos();
void nuevo();
void unreg(long x);
void todos(long n,int x);
void uno(int x);
char *Lee(FILE *arch, long n, char *buf);
void modi(long x);
void pide();
int modiop(long num);
void elimina(long x);
void recupera(long x);
void Empaquetar(FILE **arch);
void Ordenar(FILE *arch);
void Intercambia(FILE *arch, long iz, long de);
void asigna(FILE *arch, long inicio, long final);
private:
int valido;
char no[10];
char nombre[10];
char apellidop[12];
char apellidom[12];
char tel[12];
char cel[12];
};
FILE *arch;
campos::campos(){}
campos cs;
int i,h=0;
char resp;
int Menumod()
{
int resp;
do {
gotoxy(15,7);cout<<”———————————–”;
gotoxy(15,8);cout<<” Teclea la opcion que deseas”;
gotoxy(15,9);cout<<”———————————–”;
gotoxy(15,10);cout<<”1 No. de cuenta”;
gotoxy(15,11);cout<<”2 Nombre”;
gotoxy(15,12);cout<<”3 Apellido Paterno”;
gotoxy(15,13);cout<<”4 Apellido Materno”;
gotoxy(15,14);cout<<”5 Telefono”;
gotoxy(15,15);cout<<”6 Celular”;
gotoxy(15,16);cout<<”7 Todo”;
gotoxy(15,17);cout<<”0 Menu anterior”;
gotoxy(15,18);cout<<”———————————–”;
cout<<”\n”;cin>>resp;
} while(resp < 0 && resp > 7);
return resp;
}
void campos :: nuevo()
{
cout<<”No de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”==========================================================================”;
valido = 1;
pide();
fseek(arch, 0, SEEK_END);
fwrite(&cs, sizeof(campos), 1, arch);
}
void campos :: unreg(long x)
{
fseek(arch, x*sizeof(campos), SEEK_SET);
fread(&cs, sizeof(campos), 1, arch);
cout<<”No de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
uno(1);
}
void campos :: todos(long n,int x)
{
if(valido == x) {
h++;
gotoxy(1,h+2);cout<<n<<” “<<no;
gotoxy(14,h+2);cout<<nombre;
gotoxy(26,h+2);cout<<apellidop;
gotoxy(39,h+2);cout<<apellidom;
gotoxy(54,h+2);cout<<tel;
gotoxy(67,h+2);cout<<cel;
cout<<”\n”;
}
}
int campos :: modiop(long num){
int op3;
op3 = Menumod();
switch(op3) {
case 1:
cout<<”\nTeclea nuevo Numero de cuenta: “;cin>>no;
break;
case 2:
cout<<”\nTeclea nombre de cuenta: “;cin>>nombre;
break;
case 3:
cout<<”\nTeclea apellido paterno: “;cin>>apellidop;
break;
case 4:
cout<<”\nTeclea apellido materno: “;cin>>apellidom;
break;
case 5:
cout<<”\nTeclea telefono: “;cin>>tel;
break;
case 6:
cout<<”\nTeclea celular: “;cin>>cel;
break;
case 7:
clrscr();
modi(num);
break;
}
return op3;
}
void campos :: modi(long x)
{
fseek(arch, x*sizeof(campos), SEEK_SET);
fread(&cs, sizeof(campos), 1, arch);
valido = 1;
cout<<”No de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
pide();
}
void campos :: pide(){
gotoxy(3,3);fgets(no, 10, stdin);
for(i = strlen(no)-1; i && no[i] < ‘ ‘; i–)
no[i] = 0;
gotoxy(14,3);fgets(nombre, 10, stdin);
for(i = strlen(nombre)-1; i && nombre[i] < ‘ ‘; i–)
nombre[i] = 0;
gotoxy(26,3);fgets(apellidop, 12, stdin);
for(i = strlen(apellidop)-1; i && apellidop[i] < ‘ ‘; i–)
apellidop[i] = 0;
gotoxy(39,3);fgets(apellidom, 12, stdin);
for(i = strlen(apellidom)-1; i && apellidom[i] < ‘ ‘; i–)
apellidom[i] = 0;
gotoxy(54,3);fgets(tel, 12, stdin);
for(i = strlen(tel)-1; i && tel[i] < ‘ ‘; i–)
tel[i] = 0;
gotoxy(67,3);fgets(cel, 12, stdin);
for(i = strlen(cel)-1; i && cel[i] < ‘ ‘; i–)
cel[i] = 0;
}
void campos :: elimina(long x)
{
fseek(arch, x*sizeof(struct campos), SEEK_SET);
fread(&cs, sizeof(struct campos), 1, arch);
cout<<”\nNo de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
uno(1);
cout<<”\n\nDesea eliminar este registro? (s/n): “;
cin>>resp;
if (resp== ‘S’ || resp== ‘s’){
valido = 0;
fseek(arch, x*sizeof(campos), SEEK_SET);
fwrite(&cs, sizeof(campos), 1, arch);
cout<<”\n\n\t\t\a********Ha sido enviado a la papelera********”;
}
}
void campos :: recupera(long x)
{
fseek(arch, x*sizeof(campos), SEEK_SET);
fread(&cs, sizeof(campos), 1, arch);
cout<<”\nNo de cta. Nombre Apellido P Apellido M Telefono Celular\n”;
cout<<”=========================================================================”;
uno(0);
cout<<”\n\nDesea recuperar este registro? (s/n): “;
cin>>resp;
if (resp== ‘S’ || resp== ‘s’){
valido = 1;
fseek(arch, x*sizeof(campos), SEEK_SET);
fwrite(&cs, sizeof(campos), 1, arch);
cout<<”\n\n\t\t\a***********Registro recuperado***********”;
}
}
void campos :: uno(int x)
{
if(valido == x) {
gotoxy(3,5);cout<<no;
gotoxy(14,5);cout<<nombre;
gotoxy(26,5);cout<<apellidop;
gotoxy(39,5);cout<<apellidom;
gotoxy(54,5);cout<<tel;
gotoxy(67,5);cout<<cel;
}
}
void campos :: Empaquetar(FILE **arch)
{
FILE *ftemp;
ftemp = fopen(“Archivo.tmp”, “wb”);
rewind(*arch);
while(fread(&cs, sizeof(campos), 1, *arch))
if(valido == 1)
fwrite(&cs, sizeof(campos), 1, ftemp);
fclose(ftemp);
fclose(*arch);
remove(“Archivo.cs2″);
rename(“Archivo.cs”, “Archivo.cs2″);
rename(“Archivo.tmp”, “Archivo.cs”);
*arch = fopen(“Archivo.cs”, “r+b”);
}
void campos :: Ordenar(FILE *arch)
{
long nRegs;
fseek(arch, 0, SEEK_END);
nRegs = ftell(arch)/sizeof(campos);
asigna(arch, 0L, nRegs-1);
}
void campos :: asigna(FILE *arch, long inicio, long final)
{
long iz, de;
char mitad[34];
static char cad[34];
iz = inicio;
de = final;
strcpy(mitad, Lee(arch, (iz+de)/2, cad));
do {
while(strcmp(Lee(arch, iz, cad), mitad) < 0 && iz < final) iz++;
while(strcmp(mitad, Lee(arch, de, cad)) < 0 && de > inicio) de–;
if(iz < de) Intercambia(arch, iz, de);
if(iz <= de) {
iz++;
de–;
}
} while(iz <= de);
if(inicio < de) asigna(arch, inicio, de);
if(iz < final) asigna(arch, iz, final);
}
char *campos :: Lee(FILE *arch, long n, char *buf)
{
fseek(arch, n*sizeof(campos), SEEK_SET);
fread(&cs, sizeof(campos), 1, arch);
strcpy(buf, no);
return buf;
}
void campos :: Intercambia(FILE *arch, long iz, long de)
{
campos reg1, reg2;
fseek(arch, iz*sizeof(campos), SEEK_SET);
fread(®1, sizeof(campos), 1, arch);
fseek(arch, de*sizeof(campos), SEEK_SET);
fread(®2, sizeof(campos), 1, arch);
fseek(arch, iz*sizeof(campos), SEEK_SET);
fwrite(®2, sizeof(campos), 1, arch);
fseek(arch, de*sizeof(campos), SEEK_SET);
fwrite(®1, sizeof(campos), 1, arch);
}
///Guardenlo con el nombre creative.h y no hay errores, me sirvio muy bien, crea, lee, modifica, elimina y ordena los registros, espero que les sirva yo lo probe en Borland c++ 5.02
Se los mando por separado en .doc para que se les haga mas facil copiarlo ya estan separados. archivo creative
Codificad por: Cesar Omar Sagastegui Albor
