Este es el enunciado del ejercicio:
Crea una clase Nif que se usará para mantener DNIs con su correspondiente letra. Los atributos de la clase serán el número de DNI (entero largo) y la letra que le corresponde.
La clase dispondrá de los siguientes métodos:
- Inicializador que reciba el número de DNI y establezca automáticamente la letra que le corresponde.
- Accedentes y mutador para el número de DNI (ajustando automáticamente la letra).
- Leer() : que pida el número de DNI (ajustando automáticamente la letra).
- Método que nos permita mostrar el NIF (DNI, un guión y la letra en mayúsculas; por ejemplo: 395469-F).
La letra se calculará con un método auxiliar (privado) de la siguiente forma:
se obtiene el resto de la división entera del número de DNI entre 23 y
se usa la siguiente tabla para obtener la letra correspondiente:
0 - T 12 - N
1 - R 13 - J
2 - W 14 - Z
3 - A 15 - S
4 - G 16 - Q
5 - M 17 - V
6 - Y 18 - H
7 - F 19 - L
8 - P 20 - C
9 - D 21 - K
10 - X 22 - E
11 - B
Me lo han pedido en forma de proyecto, como no puedo adjuntar archivos comprimidos (que yo sepa) os los copio aquí:
1r archivo.
Guardado como: "main.cpp"
#include <stdlib.h>
#include <iostream>
#include "Nif.h"
using namespace std;
int main(){
Nif p
;
char l, resp;
long int d;
p.setDni(d);
p.setLetra(l);
do{
p.Leer(d);
p.Letra(d,l);
p.show();
cout<<endl;
cout<<"Quieres introducir otro numero? si<s> no<n>"<<endl;
cin>>resp;
}while(resp=='s');
system("pause");
return 0;
}
2o archivo.
Guardado como: "Nif.h"
#ifndef NIF_H
#define NIF_H
#include <iostream>
using namespace std;
class Nif
{
private:
long int dni;
char letra;
public:
Nif(){dni=0; letra='nada';}
Nif(long int d, char l){dni=d; letra=l;}
~Nif(){cout<<"Destructor invocado.\n";};
void setDni(long int d){dni=d;}
void setLetra(char l){letra=l;}
long int getDni()const {return dni;}
char getLetra()const {return letra;}
void Leer(long int d);
void Letra(long int d, char l);
void show();
};
#endif
3r archivo.
Guardado como: "Nif.cpp"
#include "Nif.h"
using namespace std;
void Nif::Leer(long int dni){
cout<<endl;
cout<<"Introduzca el numero del DNI(8 car): "<<endl;
cin>>dni;
}
void Nif::Letra(long int dni, char letra){
int resto;
resto=dni%23;
switch(resto){
case 0:
letra=='T';
break;
case 1:
letra=='R';
break;
case 2:
letra=='W';
break;
case 3:
letra=='A';
break;
case 4:
letra=='G';
break;
case 5:
letra=='M';
break;
case 6:
letra=='Y';
break;
case 7:
letra=='F';
break;
case 8:
letra=='P';
break;
case 9:
letra=='D';
break;
case 10:
letra=='X';
break;
case 11:
letra=='B';
break;
case 12:
letra=='N';
break;
case 13:
letra=='J';
break;
case 14:
letra=='Z';
break;
case 15:
letra=='S';
break;
case 16:
letra=='Q';
break;
case 17:
letra=='V';
break;
case 18:
letra=='H';
break;
case 19:
letra=='L';
break;
case 20:
letra=='C';
break;
case 21:
letra=='K';
break;
case 22:
letra=='E';
break;
}
}
void Nif::show(){
cout<<"-------------------------------------------"<<endl;
cout<<endl;
cout<<"La letra correspondiente a tu DNI es: <"<<getLetra()<<endl;
cout<<endl;
cout <<"El NIF es: " <<getDni()<<"-"<<getLetra()<<endl;
cout<<endl;
cout<<"-------------------------------------------"<<endl;
cout<<endl;
}
El programa me compila pero a la hora de escribir (en la función "show") no me sale el numero del dni ni la letra bien...no sé donde esta el problema! Podrían ayudarme por favor????
Gracias,
LGG
Mod: los códigos deben ir en etiquetas GeSHi