#include<iostream>
#include<windows.h>//Utiliser avec system("cls"); pour réaliser l'opération d'effacement d'écran
#include <fstream>//Le fichier d'en-tête inclus dans l'opération de fichier
#include<stdio.h > //Le fichier d'en-tête qui doit être inclus lors de l'utilisation de Sleep()
#include <cstring>
#include<iomanip>
en utilisant l'espace de noms std ;
const unsigned short MAX =11 ;
class book
{ private: string bookEntrynumber;//book registration number string bookname;// Nom du livre string authorname;//nom de l'auteur string booktype;//classification du livre string publishaddress;//unité d'édition du livre string publishtime;//heure de publication du livre string bookprice;//prix du livre public: book* next; chaîne getbookEntrynumber()//la fonction get réalise que les données privées sont appelées en dehors de la classe {
retourner le numéro d'entrée du livre ;
}
string getbookname()
{ return bookname; } string getauthorname() { renvoie le nom de l'auteur ; } string getbooktype() { return booktype; } string getpublishaddress() { renvoie l'adresse de publication ; } string getpublishtime() { renvoie l'heure de publication ; } string getbookprice() { return bookprice ; }
ami istream & opérateur>>(istream& in, book& p);book& p);//overload output
void m_bookEntrynumber()//input book data book_Entry_number
{ cin >> bookEntrynumber; } void m_bookname()//input book data book_name { cin >> bookname; } void m_authorname()//input Book data author_name { cin >> authorname; } void m_booknumber()// input book data book_number { cin >> booktype; } void m_publishaddress()// input book data publish_address { cin >> publishaddress; }
void m_publishtime()// données de livre d'entrée temps de publication
{ cin >> heure de publication ; } void m_bookprice()// données de livre d'entrée prix_livre { cin >> prix de livre ; } void Exchangebook (livre* q);//échange d'informations sur le livre } ; istream& operator>>(istream& in, book& p)//Implement surcharged input { in >> p.bookEntrynumber >> p.bookname >> p.authorname >> p.booktype >> p.publishaddress >> p.publishtime > > p .bookprice; return in; } ostream& operator<<(ostream& out, book& p)//Réaliser une sortie surchargée (la largeur de données de sortie fixe est MAX, alignée à gauche, { out << setw (MAX) << setiosflags(ios :: gauche) << p.bookEntrynumber << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.bookname << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.authorname << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.booktype << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.publishaddress << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.publishtime << "\t\t" ;
out << setw(MAX) << setiosflags(ios::left) << p.bookprice << endl;
revenir;
}
class LibraryManager//图书馆管理类
{ public :
void showbook(book* q);//Afficher les informations du livre
void Deletebook(book** q);//Supprimer les informations du livre
void amendbook(book* q);//Modifier les informations du livre
void FINDbook(book* q);// Rechercher des informations sur le livre
void sortbook(book* q);//Trier par prix du livre
void Exchangebook(book* q);//Utiliser pour l'échange d'informations lors du tri
void SaveData(book* q);//Enregistrer les données du livre dans un nouveau fichier Medium
int initbook(book** q);//Lire les informations du livre à partir du fichier
private:
book* abook;//Le pointeur de classe de livre pointe vers l'en-tête de la liste chaînée
book* zbook;//Le pointeur de classe de livre pointe vers la fin de la liste chaînée
};
LibraryManager:: LibraryManager()//Constructeur de la classe de gestion de bibliothèque
{ abook = NULL; initbook(&abook);//Transmettre l'adresse principale de la liste chaînée à init_book } int LibraryManager::initbook (book** q)//Lit depuis le fichier Book information { int j = 0;// utilisé pour compter le nombre d'informations lues
ifstream infile("Book information.txt", ios::in);//Lire les données du fichier information.txt du livre
if (!infile)
{ cout << "Le chargement du livre a échoué" << endl; // Échec du chargement du livre Sleep(200); system("cls"); return 0; } while (!infile.eof()) { book* temp; temp = new book; infile >> (*temp); if (infile. eof() ) { break; }//Lire jusqu'à la fin du fichier, end j++; if (*q == NULL)//Vérifier si la liste chaînée est une liste chaînée vide { temp->next = NULL; *q = temp ; } else { temp->suivant = NULL;
(zbook)->next = temp;
}
zbook = temp;
}
if (j == 0) { cout << "Le fichier livre est vide" << endl; Sleep(200); system("cls"); } else { cout << "Lire les données du fichier" << endl; Sleep(300); system("cls"); } infile.close(); return 1; } void LibraryManager ::Menu() { cout << "------------Bienvenue dans le système de gestion des informations de la bibliothèque ------------------" << endl; cout << " 1---Augmenter les informations sur le livre 2---Afficher les informations sur le livre" << endl; cout << " 3---Supprimer les informations sur le livre 4---Modifier les informations sur le livre" << endl;
cout << " 5---Rechercher des informations sur le livre 6---Trier par prix" << endl;
cout << " 7--Enregistrer les données du livre dans un nouveau fichier et quitter le système" << endl;
cout << " - ------------------------------------------------- - ---" << endl;
cout << "Veuillez entrer votre choix--->";
char m;
try
{ cin >> m; if (m < '1' || m>'8') throw - 1; } catch (int) { cout << "Saisie incorrecte, veuillez ré-entrer" << endl; cin >> m; } switch (m)//Réalisation de la fonction selon le choix de l'utilisateur { case '1' :Addbook(&abook); break;//Add book information case '2': showbook(abook); break;//Display book information case '3': Deletebook(&abook); break;//Delete book information
case '4': amendbook(abook); break;//Modify book information
case '5': FINDbook(abook); break;//Find book information
case '6': sortbook(abook); break;//Selon login Numéro
de cas de tri '7' : SaveData(abook); cout << "Bienvenue à utiliser la prochaine fois" << endl; exit(0); break;//Enregistrer les données du livre dans un nouveau cas de fichier '
8' : initbook( &abook ); break;
}
}//Lire les informations sur le livre à partir du fichier
void LibraryManager ::Addbook(book** q)//Add book information
{ char m; cout << "Please enter book information" << endl; book* p;//Define book class pointer p = new book;//Apply for storage for p Espace cout <<"numéro du livre nom du livre nom de l'auteur du livre classification du livre unité d'édition du livre heure de publication du livre prix du livre" << endl; cin >> *p; if (*q == NULL) //vérifier si la liste chaînée est vide {
p->next = NULL;
*q = p;
}//Si la liste chaînée est vide, pointez l'en-tête de la liste chaînée vers p
else
{ p->next = NULL;//p est l'avant-dernier nœud, et le le pointeur suivant enregistre la queue La valeur d'adresse du nœud, p pointe vers le nœud final (zbook)->next = p;//Si la liste chaînée n'est pas vide, pointez la fin de la liste chaînée vers p } zbook = p ; cout << "Ajout réussi, si vous souhaitez continuer l'ajout : oui c, non d : " << endl; cin >> m; while (m != 'c' && m != 'd') { cout << "Erreur de saisie, veuillez saisir à nouveau :" << endl; cin >> m; } if (m == 'c') { Addbook(&abook); exit(0); } else { cout << "Retour au menu, veuillez ne pas opérer" << endl; Sleep(200);
system("cls");//Effacer
le menu de l'écran();
exit(0);
}
}
void LibraryManager::showbook(book* q)//Afficher les informations sur le livre
{ book* m = q;//Définir le pointeur de classe de livre Pointez sur l'adresse de la liste chaînée int k = 0, j = 0;//k contrôle le saut de ligne, j enregistre le livre livre cout << "numéro du livre nom du livre nom de l'auteur du livre classification du livre unité d'édition du livre heure de publication du livre livre prix du livre" << endl; tandis que (m != NULL) { cout << *m << endl; k++; j++; if (k > 10)//Chaque 11 sauts de ligne de données { cout << endl << endl; k = k - 11; } m = m- >suivant } cout << "affichage total" << j << "ce livre" << endl;
system("pause");
cout << "Retour au menu, veuillez ne pas opérer" << endl;
Sleep(200);
system("cls");
Menu();
exit(0);
}
void LibraryManager: : amendbook(book* q)//Modify book information
{ string mp; char h; book* p, ctemp; p = q; cout << "Veuillez saisir le numéro d'accession du livre à modifier : saisissez NON pour revenir à le menu" << endl ; cin >> mp; if (mp == "NO") { system("cls"); Menu(); exit(0); }//revenir au menu while (p != NULL) { if (p->getbookEntrynumber() == mp)break;//found else { p = p->next; } } if (p == NULL)//not found { cout << "Aucun tel livre" << endl;
Sleep(300);
amendbook(q);
exit(0);
}
else
{ system("cls"); ctemp = *p; cout << "Voici les informations sur le livre : " << endl; cout << "Numéro du livre, titre du livre, nom de l'auteur du livre, classification du livre, unité d'édition du livre, heure de publication du livre, prix du livre" << endl; cout << *p << endl ; cout << " ********************************" << endl; cout << "Numéro de livre 0" < < endl; cout << "Nom du livre 1" << endl; cout << "Nom de l'auteur du livre 2" << endl; cout << "Catégorie du livre 3" << endl; cout << "Unité d'édition du livre 4" << endl; cout << "Temps de publication du livre 5" << endl;cout << "Temps de publication du livre 5" << endl;cout << "Temps de publication du livre 5" << endl;
p->m_bookEntrynumber(); casser; case '1':p->m_bookname(); casser; case '2':p->m_authorname(); casser;
case '3':p->m_booknumber(); casser;
case '4':p->m_publishaddress(); casser;
case '5':p->m_publishtime(); casser;
case '6':p->m_bookprice(); casser;
cas '7' :
Menu();
exit(0);
}
};
void LibraryManager::SaveData(book* q)//Enregistrer les données du livre dans un nouveau fichier ((si le fichier n'existe pas, en créer un nouveau) { book*
m = q; livre* btemp ; fstream outfile("Informations sur le livre.txt", ios::out);// Informations sur le livre.txt if (!outfile) { cout << "Échec de l'enregistrement du fichier du livre" << endl; exit( 0); } while ( m != NULL)//La liste chaînée n'est pas vide { outfile << *m;//Enregistrer les données dans la liste chaînée en tant que fichier d'entrée et en publier un btemp = m; m = m ->next; delete btemp;//Release Linked list space } outfile.close();//Fermer le fichier } void LibraryManager::FINDbook(book* q)//Find book information {
char p;
cout << "Rechercher des livres par nom d'auteur (veuillez saisir n)" << endl;
cout << "Rechercher des livres par nom de livre (veuillez saisir s)" << endl;
cout << "Retour au menu (veuillez saisir entrez f)" << endl;
essayez
{ cin >> p; if (p!='n'&&p!='s'&&p!='f') throw - 1 ; } catch (int) { cout << "Erreur de saisie, veuillez ré-entrer" << endl; cin >> p; } if (p == 'n') { string j; livre* z; z = q; int i = 0; cout << "Veuillez saisir le nom de l'auteur du livre à rechercher" << endl; cin >> j; while (z != NULL) {
if (z->getauthorname() == j)//Ce livre a été trouvé
{ cout << "Les informations sur le livre sont les suivantes" << endl; cout << "ID du livre Nom du livre Nom de l'auteur du livre Catégorie du livre Éditeur de ce livre Heure de publication de ce livre Prix du livre" << endl; cout << *z; z = z->next; i++; } else { z = z->next; }//Not found, continue to search } if (z == NULL)//Finalement introuvable { cout << "Aucun livre de ce type" << endl; Sleep(200); FINDbook(q); exit(0); }sinon {
system("pause");
system("cls");
Menu();
sortie(0);
}
}
else if(p=='s')// Recherche par titre de livre
{ string j; livre* z; z = q; int i = 0; cout << "Veuillez saisir le titre du livre que vous souhaitez rechercher" < < endl; cin >> j; tandis que (z != NULL) { if (z->getbookname() == j)//Ce livre a été trouvé { cout << "Les informations sur le livre sont les suivantes" << endl; cout << "Numéro du livre nom du livre nom de l'auteur du livre Classification des livres Unité d'édition du livre Heure de publication du livre Prix du livre" << endl; cout << *z; z = z->next; i++; } else { z = z->next; }//not found, keep looking
}
if (z == NULL)//Finalement introuvable
{ cout << "Aucun tel livre" << endl; Sleep(200); FINDbook(q); exit(0); } else { system("pause") ; system("cls"); Menu(); exit(0); } } else if (p == 'f') { system("pause"); system("cls"); Menu(); exit( 0); } } void LibraryManager::Deletebook(book** q)//Delete book information {
string m;//Le numéro d'enregistrement du livre à saisir
book* w; book* ww;
w = *q;
cout << "Veuillez saisir le numéro d'enregistrement du livre à supprimer" << endl;
cin >> m;
if (w ->getbookEntrynumber() == m)//Trouver le livre à partir de la tête de la liste chaînée
{ cout << "Les informations d'origine du livre sont les suivantes" << endl; cout <<"Livre number Nom du livre Nom du livre Nom de l'auteur du livre Classification du livre Unité d'édition de ce livre Date de publication de ce livre Prix du livre de ce livre" << endl; cout << *w; (*q) = (*q)->next;/ /Déplacer l'en-tête de la liste chaînée vers la position suivante delete w;// Libérer l'adresse d'en-tête de la liste chaînée d'origine cout << "Les informations sur le livre ont été supprimées" << endl; Sleep(300); system("cls "); Menu(); sortie(0); <ai=17> if (w == NULL)//finally not found {
sortie(0); } tandis que (w != NULL)
{ if (w->getbookEntrynumber() == m)break; else { ww = w;//Verrouiller l'adresse suivante du livre cible w = w->next; } } if (w == NULL) { cout < < "Le livre est introuvable" << endl << "Returning" << endl; Sleep(500); Deletebook(q); exit(0); } } Sleep(200); system("cls"); Menu (); exit(0); } void LibraryManager::sortbook(book* q)//Trier par prix (trier toute la liste chaînée) { book* p = q,* m = q;
int Long = 0, i, j;
char k;
cout << "1. Trier par prix croissant 2. Trier par prix décroissant" << endl;
try
{ cin >> k; if (k < '1' || k >'2') throw - 1; } catch (int) { cout << "Erreur de saisie, veuillez ré-entrer" << endl; cin >> k; } while (m != NULL)//Si la liste chaînée est vide { Long++;//Calculer la longueur de la liste chaînée m = m->next; } m = q; for (i = 0; i < Long - 1; i++) { p = m; pour ( j = 0; j < Long - 1; j++) { si (k == '1') {
if (p->getbookprice() > p->next->getbookprice())//Trier par croissance des prix
{ p->Exchangebook(p->next); } } if (k == '2') { if (p->getbookprice() < p->next->getbookprice())//Trier par prix dans l'ordre décroissant { p->Exchangebook(p->next); } } p = p->next; } } cout << "Les livres sont en cours de tri, veuillez patienter" << endl; Sleep(200); system("cls"); Menu(); exit(0); }void book::Exchangebook(book* q)//changer les paramètres du livre
{ chaîne book_Entry_number = this->getbookEntrynumber(); chaîne nom_livre = this->getbookname(); chaîne nom_auteur = this->getnom_auteur(); chaîne book_number = this->getbooktype(); string publish_address = this->getpublishaddress(); chaîne publier_heure = this->getpublishtime(); string book_price = this->getbookprice(); this->bookEntrynumber = q->getbookEntrynumber(); this->bookname = q->getbookname(); this->authorname = q->getauthorname(); this->booktype = q->getbooktype(); this->publishaddress = q->getpublishaddress(); this->publishtime = q->getpublishtime();
this->bookprice = q->getbookprice();
q->bookEntrynumber = book_Entry_number ;
q->bookname = book_name ;
q->nom_auteur = nom_auteur ;
q->booktype = book_number ;
q->adresse_publiée = adresse_publiée ;
q->publier l'heure = publier_heure ;
q->bookprice = book_price ;
}
int main()
{ Gestionnaire de LibraryManager ; manager.Menu();//调用菜单 return 0; }