|
Problems with char Grids Please save My Life!
Hey GID. I'm having the following error
1>d:\tp5\tp5part2\tp5part2\1.cpp(201) : error C2106: '=' : left operand must be l-value
1>d:\tp5\tp5part2\tp5part2\1.cpp(20  : error C2106: '=' : left operand must be l-value
1>d:\tp5\tp5part2\tp5part2\1.cpp(235) : error C2106: '=' : left operand must be l-value
the teacher say i MUST use the grids, namespace std and seekp/write functions...
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include "I:\Docs\cvm.h"
using namespace std;
// Variables Globales
const int NB_CLIENTS=50;
const int NB_LOC=3;
const int TempsRetard=2; //Temps de Retard en secondes
// STRUCTURES
struct Date_s
{
int Jour,
Mois,
Annee;
};
struct Films_s
{
int No;
char Titre[40];
time_t Temps;
Date_s Date;
};
struct Adresse_s
{
int No;
char Rue[40],Ville[40],Cp[20];
};
struct Client_s
{
char Nom[40],Prenom[40];
int Tel;
Adresse_s Adresse;
Films_s Films[NB_LOC];
int NbFilms;
float MntDu;
};
// PROTOTYPES
void NouveauClient(void);
void AfficherDossierClient(int NbClient);
void Location(int NbClient);
void Retour(int NbClient);
void ListeDesFilmsLoues(void);
void ListeClientsRetard(void);
void Ign(void);
void Menu(void); // Menu Principal
int LireNoClient(void);
// VARIABLES GLOBALES 2
struct Client_s Client;
int ProchainClientValide=0;
fstream FichierVideo;
//DÉFINITIONS
int LireNoClient(void)
{
int NOCL;
bool OK=false;
while(!OK)
{
clrscr();
gotoxy(1,1);
cout << "Entrez votre num\x82ro de client :";
cin >> NOCL;
cin.ignore( 80, '\n' );
if((NOCL-1)<ProchainClientValide)
{
return NOCL-1; // Car NbClient doit toujours égaler l'indice
OK=true;
}
else
{
cout << "\a";
}
}
}
/*void ListeDesFilmsLoues(void)
{
clrscr();
cout << "\n Liste des films lou\x82s";
for(int i=0;i<ProchainClientValide;i++) //Lister les clients
{
for(int j=0;j<Client[i].NbFilms;j++) // Lister la date des films loués
{
cout << "\n\n No :" << Client[i].Films[j].No;
cout << "\n Titre :" << Client[i].Films[j].Titre;
cout << "\n Date :" << Client[i].Films[j].Date.Jour << "/" << Client[i].Films[j].Date.Mois<< "/" << Client[i].Films[j].Date.Annee;
}
}
_getch();
}*/
/*void ListeClientsRetard(void)
{
clrscr();
cout << "\n Liste des clients en retard";
time_t start,finish;
bool Adone=false;
for(int i=0;i<ProchainClientValide;i++)
{
Adone=false;
for(int j=0;j<Client[i].NbFilms;j++)
{
time(&finish);
start=Client[i].Films[j].Temps;
if(difftime(finish, start)>TempsRetard)// vérifier si retard
{
while(!Adone)
{
cout << "\n\n Nom : " << Client[i].Prenom << " " << Client[i].Nom;
cout << "\n T\x82l\x82phone : " << Client[i].Tel <<"\n";
Adone=true;
}
// Client.Films[1].Date.Jour = Client.Films[2].Date.Jour;
//Client.Films[1].Date.Mois = Client.Films[2].Date.Mois;
//Client.Films[1].Date.Annee = Client.Films[2].Date.Annee;
cout << "\n Date : " << Client[i].Films[j].Date.Jour << "/" << Client[i].Films[j].Date.Mois<< "/" << Client[i].Films[j].Date.Annee;
}
}
}
_getch();
}*/
/*void ClientTest() // Client test pour tester le programme sans s'énerver!
{
Client.Prenom="Sacha";
Client.Nom="Lens";
Client.Tel=(int)5145184095;
Client.Adresse.No=7430;
Client.Adresse.Rue="Thibault";
Client.Adresse.Ville="Brossard";
Client.Adresse.Cp="J4W 2P3";
Client.NbFilms=3;
Client.MntDu=0;
Client.Films[0].No=1111111;
Client.Films[0].Titre="1111111111111";
time(&Client.Films[0].Temps);
Client.Films[1].No=222222;
Client.Films[1].Titre="22222222222";
time(&Client[0].Films[1].Temps);
Client.Films[2].No=33333;
Client.Films[2].Titre="3333333333333";
time(&Client.Films[2].Temps);
Client.Films.Date.Jour=25;
Client.Films.Date.Mois=03;
Client.Films[0].Date.Annee=1987;
Client.Films[1].Date.Jour=25;
Client.Films[1].Date.Mois=03;
Client.Films[1].Date.Annee=1987;
Client.Films[2].Date.Jour=25;
Client.Films[2].Date.Mois=03;
Client.Films[2].Date.Annee=1987;
FichierVideo.seekp((0*sizeof(Client)), ios::beg);
FichierVideo.write((char*)&Client, sizeof (Client));
//ProchainClientValide++;
}*/
void Retour(int NbClient)
{
clrscr();
FichierVideo.seekp(NbClient*sizeof(Client), ios::beg);
FichierVideo.read((char*)&Client, sizeof(Client));
time_t start,finish;
if(Client.NbFilms>0)
{
cout << " \n Quel film d\x82sirez-vous retourner? ";
for(int i=0;i<Client.NbFilms;i++)
{
cout << "\n\n " << i+1 << ".";
cout << "\n No : " << Client.Films[i].No;
cout << "\n Titre : " << Client.Films[i].Titre;
cout << "\n Date : " << Client.Films[i].Date.Jour << "/" << Client.Films[i].Date.Mois<< "/" << Client.Films[i].Date.Annee;
}
cout << "\n\n 4. Retourner au Menu";
switch(_getche())
{
case '1':
if(Client.NbFilms>=1)// Retour du film #1 et vérification si il existe
{
time(&finish);
start=Client.Films[0].Temps;
if(difftime(finish, start)>TempsRetard)// 1 seconde de retard
{
Client.MntDu+=5;
}
Client.Films[0].No=Client.Films[1].No;
strcpy_s(Client.Films[0].Titre, Client.Films[1].Titre);
Client.Films[0].Temps=Client.Films[1].Temps;
Client.Films[0].Date.Jour = Client.Films[1].Date.Jour;
Client.Films[0].Date.Mois = Client.Films[1].Date.Mois;
Client.Films[0].Date.Annee = Client.Films[1].Date.Annee;
Client.Films[1].No=Client.Films[2].No;
strcpy_s(Client.Films[1].Titre, Client.Films[2].Titre);
Client.Films[1].Temps=Client.Films[2].Temps;
Client.Films[1].Date.Jour = Client.Films[2].Date.Jour;
Client.Films[1].Date.Mois = Client.Films[2].Date.Mois;
Client.Films[1].Date.Annee = Client.Films[2].Date.Annee;
Client.NbFilms-=1;
Retour(NbClient);
}
else
{
cout << "\a";
Retour(NbClient);
}
break;
case '2':
if(Client.NbFilms>=2)// Retour du film #2 et vérification si il existe
{
time(&finish);
start=Client.Films[1].Temps;
if(difftime(finish, start)>TempsRetard)//1 seconde de retard
{
Client.MntDu+=5;
}
Client.Films[1].No=Client.Films[2].No;
strcpy_s(Client.Films[1].Titre, Client.Films[2].Titre);
Client.Films[1].Temps=Client.Films[2].Temps;
Client.Films[1].Date.Jour = Client.Films[2].Date.Jour;
Client.Films[1].Date.Mois = Client.Films[2].Date.Mois;
Client.Films[1].Date.Annee = Client.Films[2].Date.Annee;
Client.NbFilms-=1;
Retour(NbClient);
}
else
{
cout << "\a";
Retour(NbClient);
}
break;
case '3':if(Client.NbFilms>=3)// Retour du film #3 et vérification si il existe
{
time(&finish);
start=Client.Films[2].Temps;
if(difftime(finish, start)>TempsRetard)//1 seconde de retard 86400 pour 24h
{
Client.MntDu+=5;
}
Client.NbFilms-=1;
Retour(NbClient);
}
else
{
cout << "\a";
Retour(NbClient);
}
break;
case '4'://retour au menu
break;
default:cout << "\a";Retour(NbClient);
break;
}
}
else
{
clrscr();
gotoxy(24,10);
cout << "Il n'y a pas de films lou\x82s!";
_getch();
}
FichierVideo.seekp((NbClient*sizeof(Client)), ios::beg);
FichierVideo.write((char*)&Client, sizeof (Client));
}
void Location(int NbClient)
{
time_t Heure;
tm DateCreationClient;
FichierVideo.seekp(NbClient*sizeof(Client), ios::beg);
FichierVideo.read((char*)&Client, sizeof(Client));
Heure = time(NULL); // ou time(&Heure);
localtime_s(&DateCreationClient, &Heure);
if(Client.NbFilms<3)
{
cout << "\n\n Film #" << Client.NbFilms+1 ;
cout << "\n\n No :" ;
cin >> Client.Films[Client.NbFilms].No;
Ign();
cout << "\n Titre :" ;
cin >> Client.Films[Client.NbFilms].Titre;
Ign();
time(&Client.Films[Client.NbFilms].Temps);
cout << "\n\n No :" << Client.Films[Client.NbFilms].No; // Affichage du résultat
cout << "\n Titre :" << Client.Films[Client.NbFilms].Titre;
cout << "\n Date :" << DateCreationClient.tm_mday << "/" << DateCreationClient.tm_mon+1 << "/" << DateCreationClient.tm_year+1900;
//Enregistrement de la date
Client.Films[Client.NbFilms].Date.Jour = DateCreationClient.tm_mday;
Client.Films[Client.NbFilms].Date.Mois = DateCreationClient.tm_mon+1;
Client.Films[Client.NbFilms].Date.Annee = DateCreationClient.tm_year+1900;
Client.NbFilms++;
}
else
{
clrscr();
gotoxy(24,10);
cout << "Il n'y a plus de place dans la base de donn\x82" << "es!";
_getch();
}
_getch();
FichierVideo.seekp((NbClient*sizeof(Client)), ios::beg);
FichierVideo.write((char*)&Client, sizeof (Client));
}
void AfficherDossierClient(int NbClient)
{
FichierVideo.seekp(NbClient*sizeof(Client), ios::beg);
FichierVideo.read((char*)&Client, sizeof(Client));
clrscr();// COLONNE DE GAUCHE
cout << " Nom : " << Client.Prenom << " "<< Client.Nom;
cout << "\n\n T\x82l\x82phone : " << Client.Tel;
cout << "\n\n " << Client.Adresse.No << " " << Client.Adresse.Rue << "\n ";
cout << Client.Adresse.Ville << ", QC, Canada\n ";
cout << Client.Adresse.Cp;
cout << fixed <<"\n\n Argent d\x96 : " << setprecision(2) << Client.MntDu << " $";
cout << "\n\n Nombres de films lou\x82s : " << Client.NbFilms;
// Ligne de | au centre de L'affichage
for(int j=0;j<25;j++)
{
gotoxy(40,j);
cout << "\xdb";
}
// COLONNE DE DROITE
if(Client.NbFilms>0)
{
gotoxy(42,2); cout << "Film #1";
gotoxy(42,3);cout << "No :" << Client.Films[0].No;
gotoxy(42,4);cout << "Titre : " << Client.Films[0].Titre;
gotoxy(42,5);cout << "Date : " << Client.Films[0].Date.Jour << "/" << Client.Films[0].Date.Mois<< "/" << Client.Films[0].Date.Annee;
}
if(Client.NbFilms>1)
{
gotoxy(42,7); cout << "Film #2";
gotoxy(42,8);cout << "No :" << Client.Films[1].No;
gotoxy(42,9);cout << "Titre : " << Client.Films[1].Titre;
gotoxy(42,10);cout << "Date : " << Client.Films[1].Date.Jour << "/" << Client.Films[1].Date.Mois<< "/" << Client.Films[1].Date.Annee;
}
if(Client.NbFilms>2)
{
gotoxy(42,12); cout << "Film #3";
gotoxy(42,13);cout << "No : " << Client.Films[2].No;
gotoxy(42,14);cout << "Titre : " << Client.Films[2].Titre;
gotoxy(42,15);cout << "Date : " << Client.Films[2].Date.Jour << "/" << Client.Films[2].Date.Mois<< "/" << Client.Films[2].Date.Annee;
}
_getch();
}
void NouveauClient(void)
{
clrscr();
cout << "Client # " << ProchainClientValide+1 << "\n Votre Pr\x82nom : ";
cin >> Client.Prenom;
Ign();
cout << "\n Votre Nom : ";
cin >> Client.Nom;
Ign();
cout << "\n T\x82l\x82phone : : ";
cin >> Client.Tel;
Ign();
cout << "\n No Civique : ";
cin >> Client.Adresse.No;
Ign();
cout << "\n Rue : ";
cin >> Client.Adresse.Rue;
Ign();
cout << "\n Ville : ";
cin >> Client.Adresse.Ville;
Ign();
cout << "\n Code Postal : ";
cin >> Client.Adresse.Cp;
Ign();
Client.NbFilms=0;
Client.MntDu=0;
Client.Films[0].No=0;
Client.Films[0].Titre[40]='0';
Client.Films[0].Temps=0;
Client.Films[0].Date.Jour =0;
Client.Films[0].Date.Mois = 0;
Client.Films[0].Date.Annee = 0;
Client.Films[1].No=0;
Client.Films[1].Titre[40]='0';
Client.Films[1].Temps=0;
Client.Films[1].Date.Jour =0;
Client.Films[1].Date.Mois = 0;
Client.Films[1].Date.Annee = 0;
Client.Films[2].No=0;
Client.Films[2].Titre[40]='0';
Client.Films[2].Temps=0;
Client.Films[2].Date.Jour =0;
Client.Films[2].Date.Mois = 0;
Client.Films[2].Date.Annee = 0;
FichierVideo.seekp((ProchainClientValide*sizeof(Client)), ios::beg);
FichierVideo.write((char*)&Client, sizeof (Client));
ProchainClientValide++;
}
void Ign(void)//ben cin ignore :P
{
cin.ignore( 80, '\n' );
}
void Menu(void)
{
bool Correct=false;
while(!Correct)
{
clrscr();
gotoxy(1,1);
cout << "SuperClub VideoCon - La s\x82lection la plus \x82paisse \x85 montr\x82" << "al";
gotoxy(3,4);
cout << "1. Nouveau client";
gotoxy(3,6);
cout << "2. Dossier du client";
gotoxy(3,8);
cout << "3. Location de films";
gotoxy(3,10);
cout << "4. Retour des films";
gotoxy(3,12);
cout << "5. Liste des films lou\x82s";
gotoxy(3,14);
cout << "6. Liste des clients en retard";
gotoxy(3,16);
cout << "7. Quitter";
gotoxy(45,4);
cout << ProchainClientValide <<" Clients";
gotoxy(10,18);
cout << "Entrez votre choix : ";
switch(_getche())
{
case '1':NouveauClient();
Correct=true;Menu();break;
case '2':AfficherDossierClient(LireNoClient());
Correct=true;Menu();break;
case '3':Location(LireNoClient());
Correct=true;Menu();break;
case '4':Retour(LireNoClient());
Correct=true;Menu();break;
case '5':ListeDesFilmsLoues();
Correct=true;Menu();break;
case '6': ListeClientsRetard();
Correct=true;Menu();break;
case '7':
Correct=true;break;
default:
break;
}
}
}
void main(void)
{
// INITIALISATION
Client.Films[0].No=0;
Client.Films[0].Titre[40]='0';
Client.Films[0].Temps=0;
Client.Films[0].Date.Jour =0;
Client.Films[0].Date.Mois = 0;
Client.Films[0].Date.Annee = 0;
Client.Films[1].No=0;
Client.Films[1].Titre[40]='0';
Client.Films[1].Temps=0;
Client.Films[1].Date.Jour =0;
Client.Films[1].Date.Mois = 0;
Client.Films[1].Date.Annee = 0;
Client.Films[2].No=0;
Client.Films[2].Titre[40]='0';
Client.Films[2].Temps=0;
Client.Films[2].Date.Jour =0;
Client.Films[2].Date.Mois = 0;
Client.Films[2].Date.Annee = 0;
// ========= LECTURE DU FICHIER ou CRÉATION ==========
FichierVideo.open("C:\\VideoCon.bin", ios::in|ios::out|ios::binary);
if(!FichierVideo)
{
clrscr();
cout<<"Vous n'avez pas de base de donn\x82" << "es, elle à \x82"<<"t\x82" << " cr\x82"<<"\x82" <<"e!"<<endl;
FichierVideo.open("C:\\VideoCon.bin", ios::out|ios::binary);
_getch();
exit(EXIT_FAILURE);
}
//
cout<<"Lecture de la base de donnees: ATTENDEZ...";
ProchainClientValide=0;
FichierVideo.read((char*)&Client, sizeof(Client));
while(!FichierVideo.eof())
{
ProchainClientValide++;
FichierVideo.read((char*)&Client, sizeof(Client));
}
cout<<"\n\nIl y a "<<ProchainClientValide<<" etudiants.\n\n"
<<"\t\tAppuyez sur une touche pour continuer";
_getch();
FichierVideo.clear();//Si on veut acceder encore une fois au fichier(acces en ecriture ET lecture).
//ClientTest();
Menu();
// au revoir
clrscr();
FichierVideo.close();
exit(0); //Fournir la valeur 0 pour sortir
gotoxy(34,10);
cout << "Au Revoir!";
_getch();
}
and cvm.h contains
/***********************************************************************************
FONCTIONS DE MANIPULATION DE L'ÉCRAN DE SORTIE
************************************************************************************/
#include < windows.h >
// --- Prototypes des fonctions
void clrscr(void); // effacer l'écran de sortie
void clreol(void); // effacer le reste de la ligne courante
void clreoscr(void); // effacer le reste de l'écran de sortie
void gotoxy(int x,int y); // placer le curseur à la colonne x et à la ligne y ( l'origine est (0,0) )
int wherex(void); // retourner la colonne courante
int wherey(void); // retourner la ligne courante
// --- Définitions des fonctions
/*********************************************************************************/
void clrscr(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home = {0,0};
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y = 0;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
/*********************************************************************************/
void clreol(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home,pos;
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
Home = csbiInfo.dwCursorPosition;
pos.X = 80 - csbiInfo.dwCursorPosition.X;
FillConsoleOutputCharacter(hConsoleOut,' ',pos.X,Home,&dummy);
}
/*********************************************************************************/
void clreoscr(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home;
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
Home=csbiInfo.dwCursorPosition;
FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
}
/*********************************************************************************/
void gotoxy(int x,int y)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X = x;
csbiInfo.dwCursorPosition.Y = y;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
/*********************************************************************************/
int wherex(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
int X;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
X = csbiInfo.dwCursorPosition.X;
return X;
}
/*********************************************************************************/
int wherey(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
int Y;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
Y = csbiInfo.dwCursorPosition.Y;
return Y;
}
Thx in advance.
|