161 lines
4.5 KiB
C++
161 lines
4.5 KiB
C++
#include <conio.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
FILE *maes, *mov, *maestmp, *historico;
|
|
struct clientes{
|
|
char nombre[11], apellidos[21], direccion[21], telefono[11];
|
|
int codigo;
|
|
};
|
|
struct maestro {
|
|
int codigo;
|
|
char nombre[11], apellidos[21];
|
|
char direccion[21], telefono[11];
|
|
}regmaes;
|
|
struct movi {
|
|
char tipo;
|
|
int codigo;
|
|
char nombre[10], apellidos[20];
|
|
char direccion[20], telefono[10];
|
|
}regmov;
|
|
|
|
void limpiar1(), limpiar2();
|
|
|
|
void main(void){
|
|
struct clientes cli;
|
|
mov=fopen("k:\\files\\clientes.mov","r+b");
|
|
if ((maes=fopen("k:\\files\\clientes.dat","r+b"))==NULL){
|
|
//fclose(maes);
|
|
maes=fopen("k:\\files\\clientes.dat","w+b");
|
|
while (!feof(mov)){
|
|
limpiar1();limpiar2();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
if (regmov.tipo=='A') {
|
|
strcpy (regmaes.apellidos,regmov.apellidos);
|
|
strcpy (regmaes.nombre,regmov.nombre);
|
|
regmaes.codigo=regmov.codigo;
|
|
strcpy (regmaes.direccion,regmov.direccion);
|
|
strcpy (regmaes.telefono,regmov.telefono);
|
|
clrscr();
|
|
printf ("%d \n%s \n%s \n%s \n%s", regmaes.codigo, regmaes.nombre,regmaes.apellidos, regmaes.direccion, regmaes.telefono);
|
|
getch();
|
|
fwrite (®maes,sizeof(struct maestro),1,maes);
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
fclose(maes);
|
|
system("rename k:\\files\\clientes.dat clientes.tmp");
|
|
maes=fopen("k:\\files\\clientes.dat","w+b");
|
|
maestmp=fopen("k:\\files\\clientes.tmp","rb");
|
|
historico=fopen("k:\\files\\clientes.log","a+b");
|
|
limpiar1();limpiar2();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
while (!feof(mov) && !feof(maestmp)){
|
|
if (regmaes.codigo==regmov.codigo){
|
|
if(regmov.tipo=='A'){
|
|
printf("Error cliente duplicado.");getch();
|
|
fwrite(®maes,sizeof(regmaes),1,maes);
|
|
limpiar1();limpiar2();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
}
|
|
else{
|
|
if (regmov.tipo=='B'){
|
|
printf("Dando de baja...");
|
|
fwrite(®maes,sizeof(regmaes),1,historico);
|
|
limpiar1();limpiar2();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
}
|
|
else{
|
|
fwrite(&(regmov.codigo),2,1,maes);
|
|
fwrite(&(regmov.nombre),11,1,maes);
|
|
fwrite(&(regmov.apellidos),21,1,maes);
|
|
fwrite(&(regmov.direccion),21,1,maes);
|
|
fwrite(&(regmov.telefono),11,1,maes);
|
|
limpiar1();limpiar2();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(regmov.codigo>regmaes.codigo){
|
|
fwrite(®maes,sizeof(regmaes),1,maes);
|
|
limpiar2();
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
}
|
|
else{
|
|
if (regmov.tipo=='A'){
|
|
fwrite(&(regmov.codigo),2,1,maes);
|
|
fwrite(&(regmov.nombre),10,1,maes);
|
|
fwrite(&(regmov.apellidos),20,1,maes);
|
|
fwrite(&(regmov.direccion),20,1,maes);
|
|
fwrite(&(regmov.telefono),10,1,maes);
|
|
}
|
|
else{
|
|
printf("Error: El cliente no existe.");getch();
|
|
}
|
|
limpiar1();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
}
|
|
}
|
|
} // fin del while
|
|
|
|
|
|
if (!feof(mov)){
|
|
while(!feof(mov)){
|
|
if(regmov.tipo=='A'){
|
|
strcpy (regmaes.apellidos,regmov.apellidos);
|
|
strcpy (regmaes.nombre,regmov.nombre);
|
|
regmaes.codigo=regmov.codigo;
|
|
strcpy (regmaes.direccion,regmov.direccion);
|
|
strcpy (regmaes.telefono,regmov.telefono);
|
|
clrscr();
|
|
printf ("%d \n%s \n%s \n%s \n%s", regmaes.codigo, regmaes.nombre,regmaes.apellidos, regmaes.direccion, regmaes.telefono);
|
|
getch();
|
|
fwrite (®maes,sizeof(struct maestro),1,maes);
|
|
}
|
|
else{
|
|
printf("Error: El cliente no existe.");getch();
|
|
}
|
|
limpiar1();
|
|
fread(®mov,sizeof(regmov),1,mov);
|
|
}
|
|
}
|
|
else{
|
|
if(!feof(maestmp)){
|
|
while(!feof(maestmp)){
|
|
fwrite(®maes,sizeof(regmaes),1,maes);
|
|
limpiar2();
|
|
fread(®maes,sizeof(regmaes),1,maestmp);
|
|
}
|
|
}
|
|
}
|
|
fcloseall();
|
|
}
|
|
unlink("k:\\files\\clientes.mov");
|
|
unlink("k:\\files\\clientes.tmp");
|
|
}
|
|
|
|
void limpiar1(){
|
|
regmov.tipo=NULL;regmov.codigo=0;
|
|
for (int n=0;n<21;n++){
|
|
regmov.apellidos[n]=NULL;regmov.direccion[n]=NULL;
|
|
}
|
|
for(n=0;n<11;n++){
|
|
regmov.nombre[n]=NULL;regmov.telefono[n]=NULL;
|
|
}
|
|
}
|
|
void limpiar2(){
|
|
for (int n=0;n<21;n++){
|
|
regmaes.apellidos[n]=NULL;regmaes.direccion[n]=NULL;
|
|
}
|
|
for (n=0;n<11;n++){
|
|
regmaes.nombre[n]=NULL;regmaes.telefono[n]=NULL;
|
|
}
|
|
regmaes.codigo=0;
|
|
} |