1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
| Departement::Departement(std::string const& dname,
std::string const& fname,size_t scount):
dname(dname),fname(fname),scount(scount)
{
}
std::ostream& operator<<(std::ostream& ofs, Departement const & dep)
{
ofs<<"Nom du Departement : "<<dep.dname<<std::endl
<<"Nom de la faculte : "<<dep.fname<<std::endl
<<"Nombre d'etudiant : "<<dep.scount<<std::endl;
return ofs;
}
Liste::Element::Element(Departement const& dep):mdep(dep),mnext(NULL)
{
}
Liste::Liste():mfirst(NULL),mlast(NULL),msize(0)
{
}
Liste::Liste(Liste const& rhs):mfirst(NULL),mlast(NULL),msize(0)
{
Element* temp = rhs.mfirst;
while(temp)
{
push_back(temp->departement());
temp = temp->mnext;
}
}
Liste& Liste::operator = (Liste const & rhs)
{
Liste temp(rhs);
std::swap(mfirst, temp.mfirst);
std::swap(mlast, temp.mlast);
std::swap(msize, temp.msize);
return *this;
}
Liste::~Liste()
{
Element* temp;
while(mfirst)
{
temp = mfirst->mnext;
delete mfirst;
mfirst = temp;
}
}
void Liste::clear()
{
Element* temp;
while(mfirst)
{
temp = mfirst->mnext;
delete mfirst;
mfirst = temp;
}
mlast = NULL;
msize = 0;
}
void Liste::push_back(Departement const & dep)
{
/* il nous faut un nouvel élément */
Element* toadd = new Element(dep);
/* Si nous avons un dernier élément officiel, il recoit le nouvel élément */
if(mlast)
mlast->mnext = toadd;
/* S'il n'y a pas de premier élément, le nouveau devient le premier de
* la liste
*/
if(!mfirst)
mfirst = toadd;
/* quoi qu'il en soit, le nouvel élément devient le dernier officiel
*/
mlast = toadd;
/* il n'y a plus qu'à mettre à jour la taille */
++msize;
}
void Liste::push_front(Departement const & dep)
{
/* il nous faut un nouvel élément */
Element* toadd = new Element(dep);
/* s'il n'y a pas de dernier élément officiel, le nouveau le devient
*/
if(!mlast)
mlast = toadd;
/* Le premier élément se rattache au nouvel élément pour le suivre
*/
toadd->mnext = mfirst;
/* quoi qu'il en soit, le nouvel élément devient le premier élément
* officiel
*/
mfirst = toadd;
/* il n'y a plus qu'à mettre à jour la taille */
++msize;
}
void Liste::insert(Element * const ref, Departement const& dep)
{
/* il nous faut un nouvel élement */
Element* toadd= new Element(dep);
/* ce qui suit l'élément de référence
* se ratache au nouvel élément pour le suivre
*/
toadd->mnext = ref->mnext;
/* le nouvel élément se ratache à l'élément de référence pour le suivre
*/
ref->mnext = toadd;
/* il n'y a plus qu'à mettre la taille à jour */
++msize;
}
/* et la surcharge pour la facilité */
void Liste::insert(std::string const& depname, Departement const & dep)
{
/* Cherchons dans la liste l'élément correspondant */
Element* temp = mfirst;
while(temp && temp->departement().departementName()!=depname)
++temp;
/* si nous l'avons trouvé, nous pouvons nous pouvons l'utiliser
* comme référence pour l'insertion
*/
if(temp)
insert(temp,dep);
}
void readFromFile(std::string const& filename, Liste & l)
{
/* j'ai considéré un format de fichier CSV pour la lecture
* ce qui permet d'avoir le departement des sports et loisir et
* la facutle du corps sain dans un esprit sain :D ;)
*/
std::ifstream ifs(filename.c_str());
std::string read;
while(std::getline(ifs, read))
{
std::string dname;
std::string fname;
char sep1;
char sep2;
size_t num;
std::stringstream ss;
ss<<read;
std::getline(ss,dname,',');
std::getline(ss,fname,',');
ss>>num;
Departement dep(dname, fname,num);
l.push_back(dep);
}
}
void saveToFile(std::string const & filename, const Liste & l)
{
/* ici aussi, le format de sauvegarde envisagé est CSV */
std::ofstream ofs(filename.c_str());
Liste::Element const * temp = l.begin();
while(temp)
{
Departement const & dep = temp->departement(); //pour la facilité d'écriture
ofs<<dep.departementName()<<","
<<dep.facutltyName()<<","
<<dep.studentCount()<<std::endl;
temp = temp->next();
}
}
void show(std::ostream& ofs, Liste const & l)
{
Liste::Element const * temp=l.begin();
while(temp)
{
ofs<<temp->departement()<<std::endl;
temp=temp->next();
}
} |
Partager