4D SIA: C++ usare la struct, i void e il menu - Esercizio Rubrica
Esercizio rubrica con menu e singole opzioni collegate ai void.
#include<iostream>
#include<string>
using namespace std;
struct persone {
char cognome[50];
char nome[20];
char indirizzo[150];
char contatto[50];
char numtel[13];
char email[50];
};
persone rubrica[20];
int n,i,trovato,pos,p ;
string cerca;
void visualMenu (){ //--la funzione espone le possibili scelte
cout<< "\n\nscegliere tra :\t i - creazione - inserimento\n";
cout<< "\t\t s - stampa\n";
cout<< "\t\t r - ricerca\n";
cout<< "\t\t o - modifica\n";
cout<< "\t\t c - cancella\n";
cout<< "\t\t n - nuovo inserimento\n";
cout<< "\t\t a - stampa aggiornata\n";
cout<< "\t\t u - USCITA\n";
cout<< "digitare scelta: ";
}
void creatabella(){
for(int i=0; i<n; i++){
cout<<"Inserisci il cognome : "<<endl;
cin>>rubrica[i].cognome;
cout<<"Inserisci il nome : "<<endl;
cin>>rubrica[i].nome;
cout<<"Inserisci l'indirizzo: "<<endl;
cin>>rubrica[i].indirizzo;
cout<<"Inserisci il contatto : "<<endl;
cin>>rubrica[i].contatto;
cout<<"Inserisci il numero di telefono: "<<endl;
cin>>rubrica[i].numtel;
cout<<"Inserisci l'email: "<<endl;
cin>>rubrica[i].email;
}
}
void stampatabella (){
cout<<"elenco degli utenti in rubrica "<<endl;
for(i=0; i<n; i++){
cout<<"cognome : "<<rubrica[i].cognome<<endl;
cout<<"nome : "<<rubrica[i].nome<<endl;
cout<<"indirizzo : "<<rubrica[i].indirizzo<<endl;
}
}
void ricerca_cognome() {
cout<<"Inserisci il cognome da cercare: "<<endl;
cin>>cerca;
trovato=0;
for(i=0;i<n;i++){
if(rubrica[i].cognome==cerca) {
cout<<"persona cercata si trova in posizione "<<i<< " "<<rubrica[i].cognome << " "<< rubrica[i].nome<<" " <<rubrica[i].indirizzo<<" " <<rubrica[i].email<<endl;
trovato=1;
}
}
if(trovato==0){
cout<<"l'utente in rubrica non esiste " <<endl;
}
}
void modifica () {
cout<<"Inserisci il cognome per cercare il record e modificarlo : "<<endl;
cin>>cerca;
trovato=0;
for(i=0;i<n;i++){
if(rubrica[i].cognome==cerca) {
cout<<"Inserisci il cognome : "<<endl;
cin>>rubrica[i].cognome;
cout<<"Inserisci il nome : "<<endl;
cin>>rubrica[i].nome;
cout<<"Inserisci l'indirizzo: "<<endl;
cin>>rubrica[i].indirizzo;
cout<<"Inserisci il contatto : "<<endl;
cin>>rubrica[i].contatto;
cout<<"Inserisci il numero di telefono: "<<endl;
cin>>rubrica[i].numtel;
cout<<"Inserisci l'email: "<<endl;
cin>>rubrica[i].email;
trovato=1;
}
}
if(trovato==0){
cout<<"l'utente da modificare in rubrica non esiste " <<endl;
}
}
void cancella_elemento (){
do {
cout << "Indica la posizione da cancellare sul vettore: ";
cin >> pos;
if (pos >= n) cout << "Posizione non ammissibile." << endl;
} while (pos >= n);
// ciclo di spostamento degli elementi (shift verso sinistra di una posiz.)
i = pos;
while (i < (n - 1))
{
rubrica[i] = rubrica[i + 1];
i++;
}
n--;
}
void stampa_aggiornata (){
// stampa del vettore - permette di monitorare il suo contenuto
if (n > 0)
{
cout<<"rubrica aggiornata"<<endl;
for (i = 0; i < n; i++)
{cout << rubrica[i].cognome <<endl;
cout << rubrica[i].nome <<endl;
}
cout << endl;
}
else
cout << "[vettore vuoto]" << endl;
}
void inserimento_nuovo_record (){
// inserimento nuovo elemento
do {
cout << "Indica la posizione da inserire sul vettore: ";
cin >> pos;
if (pos > n) {
cout << "Posizione non ammissibile." << endl;
}
} while (pos > n);
// lettura del valore da inserire nella data posizione
cout << "Inserisci il nuovo cognome in rubrica : ";
cin >> rubrica[i].cognome;
cout << "Inserisci il nuovo nome in rubrica : ";
cin >> rubrica[i].nome;
// shift a destra degli elementi da posizione (n - 1) a posizione pos
i = n - 1;
while (i >= pos)
{
rubrica[i + 1] = rubrica[i];
i--;
}
n++;
}
void stampa_finale (){
for (i = 0; i < n; i++) {
cout << rubrica[i].cognome<< " ";
cout << endl;
}
}
int main() {
do{
cout<<"Inserisci il numero massimo di persone in rubrica : "<<endl;
cin>>n;
} while(n<1 || n>20);
char sce;
cout<< "---Gestione completa crea/INS/Stanp/CAN/RIC elementi array";
do {
visualMenu();
cin >> sce;
switch (sce) {
case 'i': { creatabella(); break; }
case 's': { stampatabella(); break; }
case 'r': { ricerca_cognome(); break; }
case 'o': { modifica(); break; }
case 'c': { cancella_elemento(); break; }
case 'n': { inserimento_nuovo_record(); break; }
case 'a': { stampa_finale(); break; }
case 'u': return 0; //--chiusura del programma
}
} while (1); //--ciclo infinito
// stampa_aggiornata();
}
Commenti
Posta un commento