00001 00007 #include<iostream> 00008 00009 struct ficheLogin { 00010 std::string Nom; 00011 std::string Prenom; 00012 std::string Telephone; 00013 std::string Login; 00014 }; 00015 00016 struct Validator{ 00017 virtual bool isValid(const std::string& t) const = 0; 00018 virtual void correctForm() const = 0; 00019 }; 00020 00021 struct registerLogin { 00022 const Validator &v; 00023 registerLogin(const Validator &v) : v(v) {} 00024 00025 ficheLogin newLogin(){ 00026 ficheLogin f; 00027 std::cout << "Nom:" << std::endl; 00028 std::cin >> f.Nom; 00029 std::cout << "Prénom:" << std::endl; 00030 std::cin >> f.Prenom; 00031 std::cout << "Telephone:" << std::endl; 00032 do{ 00033 v.correctForm(); 00034 std::cin >> f.Telephone; 00035 } while(!v.isValid(f.Telephone)); 00036 std::cout << "Login:" << std::endl; 00037 std::cin >> f.Login; 00038 return f; 00039 } 00040 }; 00041 00042 struct StandardValidator : public Validator{ 00043 bool isValid(const std::string& t) const{ 00044 if(t.length()!=10) 00045 return false; 00046 for(int i=0;i<10;i++) 00047 if(t[i]<'0' || t[i]>'9') 00048 return false; 00049 return true; 00050 } 00051 void correctForm() const{ 00052 std::cout << "10 chiffres sans espace" << std::endl; 00053 } 00054 00055 static const StandardValidator& getInstance(){ 00056 static StandardValidator instance; 00057 return instance; 00058 } 00059 00060 private: 00061 StandardValidator() {} 00062 StandardValidator(const StandardValidator&) {} 00063 }; 00064 00065 int main() { 00066 registerLogin r(StandardValidator::getInstance()); 00067 ficheLogin f=r.newLogin(); 00068 }