Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - rubrica con le liste. problema con ordinamento.
Forum - C/C++ - rubrica con le liste. problema con ordinamento.

Avatar
bomberino92 (Normal User)
Newbie


Messaggi: 1
Iscritto: 13/02/2011

Segnala al moderatore
Postato alle 12:39
Domenica, 13/02/2011
Questo topic è stato chiuso dal moderatore


Codice sorgente - presumibilmente C++

  1. // Rubrica telefonica
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <string>
  5. #include "conio.h"
  6.  
  7.  
  8. using namespace std;
  9. void SetColor(short Color)
  10. {
  11. HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); // oppure system("COLOR E9");
  12. SetConsoleTextAttribute(hCon,Color);
  13. }
  14. struct nodo
  15. {
  16.  
  17. string nome, cognome, email, residenza,telefono;
  18. nodo*succ;
  19. };
  20.  
  21.  
  22. typedef struct rubrica{
  23.  
  24. string nome,cognome,telefono,email,residenza;
  25. };
  26.  
  27.  
  28.  
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32. //Programma principale
  33. int scelta,numero,i,j,k; //k contatorre
  34. string nominativo,codice,pasword,nuovocodice;
  35. bool errato=false;
  36. nodo *testa;
  37. nodo *inpiu;
  38. nodo *punt;
  39. testa=NULL;
  40. pasword="info";
  41. rubrica pippo[1000]; //vettore di strutture per ordinare
  42.  
  43. char mail[100];
  44.  
  45. rubrica app;
  46.  
  47. do{
  48. SetColor(2);
  49. cout<<"Digitare 0 per uscire dal programma "<<endl;
  50. cout<<"Digitare 1 per inserire un nuovo utente "<<endl;
  51. cout<<"Digitare 2 per stampare l'intera rubrica telefonica "<<endl;
  52. cout<<"Digitare 3 per ordinare la rubrica telefonica "<<endl;
  53. cout<<"Digitare 4 per inserire un nome e per verificare se e' presente all'interno della lista e se lo e' c'e' la stampa della lista "<<endl;
  54. cout<<"Digitare 5 per cancellare l'intera rubrica telefonica dopo la richiesta di password "<<endl;
  55. cout<<"Digitare 6 per fare il controllo dell'email "<<endl;
  56. cout<<"Digitare 7 per far salvare la rubrica in un file "<<endl;
  57. cin>>scelta;
  58. cout<<endl;
  59. switch(scelta){
  60. case 1://Inserimento di un nuovo utente.
  61. SetColor(3);
  62. if(testa==NULL){
  63. cout<<"La lista vouta "<<endl;
  64. testa=new nodo;//Creazione di un nuovo nodo.
  65. testa->succ=NULL;
  66. cout<<"Inserire il cognome --> "<<endl;
  67. cin>>testa->cognome;
  68. cout<<"Inserire il nome --> "<<endl;
  69. cin>>testa->nome;
  70. cout<<"Inserire la residenza "<<endl;
  71. cin>>testa->residenza;
  72. cout<<"Inserire l'email "<<endl;
  73. cin>>testa->email;
  74. cout<<"Inserire il numero telefonico "<<endl;
  75. cin>>testa->telefono;
  76. }
  77. else
  78. if(testa->succ==NULL){//Con un solo elemento.
  79. inpiu=new nodo;
  80. inpiu->succ=NULL;
  81. cout<<"Inserire il cognome --> "<<endl;
  82. cin>>inpiu->cognome;
  83. cout<<"Inserire il nome --> "<<endl;
  84. cin>>inpiu->nome;
  85. cout<<"Inserire la residenza --> "<<endl;
  86. cin>>inpiu->residenza;
  87. cout<<"Inserire l'email --> "<<endl;
  88. cin>>inpiu->email;
  89. cout<<"Inserire il numero telefonico --> "<<endl;
  90. cin>>inpiu->telefono;
  91. cout<<endl;
  92. testa->succ=inpiu; }
  93. else{
  94. inpiu=testa;
  95. while(inpiu->succ!=NULL){
  96. inpiu=inpiu->succ;
  97. }
  98. punt=new nodo;
  99. punt->succ=NULL;
  100. cout<<"Inserire il cognome --> "<<endl;
  101. cin>>punt->cognome;
  102. cout<<endl<<"inserisci nome --> "<<endl;
  103. cin>>punt->nome;
  104. cout<<"Inserire la residenza --> "<<endl;
  105. cin>>punt->residenza;
  106. cout<<endl<<"Inserire l'email --> "<<endl;
  107. cin>>punt->email;
  108. cout<<endl<<"Inserire il numero di telefono--> "<<endl;
  109. cin>>punt->telefono;
  110. cout<<endl;
  111. inpiu->succ=punt;
  112. }
  113.  
  114. break;
  115. case 2://Stampa dell'intera rubrica telefonica.
  116. SetColor(6);
  117. if(testa==NULL)//Lista è vuota.
  118. cout<<"La lista e' vuota "<<endl;
  119. else
  120. if(testa->succ==NULL)
  121. cout<<" La lista ha uno solo elemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
  122. else{
  123. inpiu=testa;
  124. do{
  125. cout<<"La lista ha piu' di un elemento: Cognome: "<<inpiu->cognome<<endl<<"Nome: "<<inpiu->nome<<endl<<"Telefono "<<inpiu->telefono<<endl<<"Residenza "<<inpiu->residenza<<endl<<"Email "<<inpiu->email<<endl;
  126. inpiu=inpiu->succ;
  127. }while(inpiu!=NULL);
  128. }
  129. break;
  130. case 3://Ordinamento della rubrica telefonica.
  131.  
  132. SetColor(3);
  133. //Scorrere tutta la lista e salvarla nel vettore.
  134. if(testa==NULL)//Lista è vuota.
  135. cout<<"La lista e' vuota non posso ordinare"<<endl;
  136. else
  137. if(testa->succ==NULL)
  138. cout<<" La lista ha un solo lemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
  139. else{
  140. inpiu=testa;
  141. k=-1;
  142. do{
  143. k++;
  144. pippo[k].cognome=inpiu->cognome;
  145. pippo[k].nome=inpiu->nome;
  146. pippo[k].telefono=inpiu->telefono;
  147. pippo[k].residenza=inpiu->residenza;
  148. pippo[k].email=inpiu->email;
  149. inpiu=inpiu->succ;
  150. }while(inpiu!=NULL);
  151. }
  152.  
  153. for(i=0;i<k-1;i++)
  154. for(j=i+1;j<k;j++)
  155. if(pippo[i].cognome>pippo[j].cognome){
  156. app=pippo[i];
  157. pippo[i]=pippo[j];
  158. pippo[j]=app;
  159. }
  160. //Stampa vettore
  161. for(i=0;i<k;i++){
  162. cout<<"Cognome :"<<pippo[i].cognome<<endl;
  163. cout<<"Nome: "<<pippo[i].nome<<endl;
  164. cout<<"Residenza: "<<pippo[i].residenza<<endl;
  165. cout<<"Email: "<<pippo[i].email<<endl;
  166. cout<<"Telefono: "<<pippo[i].telefono<<endl;
  167.  
  168. }
  169.  
  170.  
  171.  
  172.  
  173. break;
  174.  
  175. }
  176. }while(scelta!=0);
  177. cout<<"Fine del programma "<<endl;
  178. system("PAUSE");
  179. return EXIT_SUCCESS;
  180. }




come vedete io ho usato una typedef per sfruttare un vettore di strutture. ho usato un contatore "k" per fare si che si incrementava ad ogni nome che trova in rubrica e poi ho ordinato. se mi potete gentilmente dire cosa devo modificare. unica condizione è che l'ordinamento deve essere fatto con i vettori.

GRAZIE A TUTTI

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 12:55
Domenica, 13/02/2011
Questo topic è in violazione di una o più norme del regolamento: http://www.pierotofy.it/pages/extras/forum/9/3839-regolame ... .
    
Dopo averlo letto riapri un nuovo topic assicurandoti di aver rispettato le regole. Grazie per la tua pazienza.

PM