Vous êtes sur la page 1sur 6

TP2

b.b 

#include<iostream>
#include<string>
using namespace std;
/*
===============================
start les type
===============================
*/
typedef struct Liver{
long num;
string titre;
string auteur;
string edieur;
int annee;
double prix;
int NExmplaires;
}Liver;
typedef struct Maillon
{
Liver liver;
struct Maillon *Next;
}Maillon;

typedef struct ListeLiver


{
Maillon *head;
}ListeLiver;
/*
===============================
start les function
===============================
*/
Liver CreerLiver(){
Liver liver;
cout << "donner num : ";
cin >> liver.num;
cin.ignore();
cout << "donner le titre : ";
getline(cin,liver.titre);
cout << "donner le auteur : ";
getline(cin,liver.auteur);
cout << "donner le edieur : ";
getline(cin,liver.edieur);
cout << "donner annee : ";
cin >> liver.annee;
cout << "donner prix : ";
cin >> liver.prix;
cout << "donner le nomber de stock : ";
cin >> liver.NExmplaires;
return liver;
}

Liver CreerLiver(long num, string titre, string auteur, string editeur, int annee,
double prix, int NExemplaires) {
Liver livre;
livre.num = num;
livre.titre = titre;
livre.auteur = auteur;
livre.edieur = editeur;
livre.annee = annee;
livre.prix = prix;
livre.NExmplaires = NExemplaires;
return livre;
}
Maillon *CreerMaillon(Liver liver){
Maillon *Mliver = new Maillon;
Mliver->liver = liver;
Mliver->Next = NULL;
return Mliver;
}
ListeLiver *CreerListe(){
ListeLiver *list = new ListeLiver;
list->head = NULL;
return list;
}
int AjouterLiver(ListeLiver *liste,Liver liver){
Maillon *Mliver = CreerMaillon(liver);
if(Mliver == NULL) return 0;
Maillon *ptr = liste->head;
liste->head = Mliver;
Mliver->Next = ptr;
return 1;
}
int ExiteLiver(ListeLiver *liste,Liver liver){
Maillon *ptr= liste->head;
int counter = 0;
while (ptr != NULL)
{
counter++;
if(ptr->liver.num == liver.num){
return counter;
}
ptr = ptr->Next;
}
return 0;
}
int suppreLiver(ListeLiver *liste,Liver liver){
if(!ExiteLiver(liste,liver))return 0;
Maillon *ptr= liste->head;
if (liver.num == liste->head->liver.num)
{
liste->head = liste->head->Next;
return 1;
}
Maillon *ptrPre = NULL;
while (ptr != NULL)
{
if(ptr->liver.num == liver.num){
ptrPre->Next = ptr->Next;
return 1;
}
ptrPre = ptr;
ptr = ptr->Next;
}
return 0;
}
int NbrLivresEditeur(ListeLiver lst, string editeur) {
int nombre = 0;
Maillon* ptr = lst.head;
while (ptr != NULL) {
if (ptr->liver.edieur == editeur) {
nombre++;
}
ptr = ptr->Next;
}
return nombre;
}

Liver LivrePlusCher(ListeLiver *lst) {


Maillon* maillon = lst->head;
Maillon* livre_cher = lst->head;
while (maillon != NULL) {
if (maillon->liver.prix > livre_cher->liver.prix) {
livre_cher = maillon;
}
maillon = maillon->Next;
}
return livre_cher->liver;
}
Liver LivreMoinCher(ListeLiver *lst) {
Maillon* maillon = lst->head;
Maillon* livre_cher = maillon;
while (maillon != NULL) {
if (maillon->liver.prix < livre_cher->liver.prix) {
livre_cher = maillon;
}
maillon = maillon->Next;
}
return livre_cher->liver;
}
ListeLiver* LivresAuteur(ListeLiver lst,string auteur) {
ListeLiver *liste_auteur = CreerListe();
Maillon* maillon = lst.head;
while (maillon != NULL) {
if (maillon->liver.auteur == auteur) {
AjouterLiver(liste_auteur, maillon->liver);
}
maillon = maillon->Next;
}
return liste_auteur;
}

ListeLiver* LivresEpuises(ListeLiver lst) {


ListeLiver *liste_epuisee = CreerListe();
Maillon* maillon = lst.head;
while (maillon != NULL) {
if (maillon->liver.NExmplaires == 0) {
AjouterLiver(liste_epuisee, maillon->liver);
}
maillon = maillon->Next;
}
return liste_epuisee;
}
int longList(ListeLiver list){
int count=0;
Maillon *maillon = list.head;
if (maillon ==NULL)return 0;
while (maillon!=NULL)
{
count++;
maillon = maillon->Next;
}
return count;

}
ListeLiver *TrierLivresPrix(ListeLiver *list) {
ListeLiver *nouvelle_liste = CreerListe();
Liver liver;
int taile = longList(*list);
for (int i = 0; i < taile; i++)
{
liver = LivreMoinCher(list);
liver.num=taile-i;
AjouterLiver(nouvelle_liste,liver);
suppreLiver(list,liver);
}
list = nouvelle_liste;
return nouvelle_liste;
}

void Vendre(ListeLiver *lst, int num, int nbre) {


Maillon* maillon = lst->head
;
while (maillon != nullptr) {
if (maillon->liver.num == num) {
maillon->liver.NExmplaires -= nbre;
if (maillon->liver.NExmplaires < 0) {
maillon->liver.NExmplaires = 0;
}
break;
}
maillon = maillon->Next;
}
}
long numLiver(ListeLiver *lst,string titre ,string auteur){
Maillon* ptr = lst->head;
while (ptr != NULL) {
if (ptr->liver.titre == titre && ptr->liver.auteur == auteur) {
return ptr->liver.num;
}
ptr = ptr->Next;
}
return 0;
}
void affiche(ListeLiver list){
Maillon *M = list.head;
while (M!=NULL)
{
cout<<"titre : "<<M->liver.titre<<" annee : "<<M->liver.annee<<" numm : "<<M-
>liver.num<<" prix : "<<M->liver.prix <<endl;
M = M->Next;
}

}
/*
===============================
start app principale
===============================
*/
int main()
{
ListeLiver *biblio =CreerListe();
Liver lvr1 = CreerLiver(2,"Best Programer","badie","dar naxr",2022,20,0);
AjouterLiver(biblio,lvr1);
Liver lvr2 = CreerLiver(1,"Fan al la mobalat","john doe","dar sika",2020,30,0);
AjouterLiver(biblio,lvr2);
Liver lvr3 = CreerLiver(3,"SECREIR","Xiwahd","anajah",2012,10,0);
AjouterLiver(biblio,lvr3);
affiche(*biblio);
cout <<"#####################"<<endl;
biblio = TrierLivresPrix(biblio);
affiche(*biblio);
return 0;
}

Vous aimerez peut-être aussi