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:
Código:
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"
Código
#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"
Código
#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"
Código
#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