Alphabetically sorting items problem

Hi everyone,
I have this "Address Book" code. I am trying to get it to sort items alphabetically. I looked up how to do it but really did not find anything helpful. I like programming but I'm really bad at it. The program wont read items from disk either.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

struct Person
{
 			string name;
 			string addr;
 			string phone;
 			string email;
				};

const int MAX_SIZE = 8; // max number of contacts

// functin prototypes
void addData(Person list[], int& size);
void dispData(const Person list[], int size); 
void saveFile(const Person list[], int size);
void openFile(Person list[], int& size);
char getMenuResponse();			 
int main(int argc, char *argv[])
{
  Person contactList[MAX_SIZE];
  int numOfRecs = 0;
  bool run = true;
  do
  {
    cout << "Address Book - " << numOfRecs << " Number of Contacts" << endl;
  	switch ( getMenuResponse() ) 
  	{
  		case 'A': addData(contactList, numOfRecs); break;
  		case 'D': dispData(contactList, numOfRecs); break;
  		case 'O': openFile(contactList, numOfRecs); break;
  		case 'S': saveFile(contactList, numOfRecs); break;
  		case 'Q': run = false; break;
  		default : cout << "That is NOT a valid choice" << endl;
  	}
  } while (run);
  cout << endl << "Program Terminated" << endl;
  
  // system("PAUSE"); // Commented out so the program exits upon request
  return EXIT_SUCCESS;
}

void addData(Person list[], int& size)
{
  Person tmp; // declare a temp contact that we will load before putting in the array
  char response;
  char str[256]; // needed for cin.getline; we are going to use a char array
  if (size < MAX_SIZE) {
    system("cls");
    cout << "Enter Contact Information" << endl << endl;
    cout << "Name: ";
    // Get up to 256 characters from the keyboard including white space.
    // Stop reading if encounter the \n first. If there's any chance of 
    // more than 256 characters you will have to clean up cin with
    // cin.ignore before the next input.
    cin.getline(str, 256, '\n'); // for char arrays; different from the other getline
    tmp.name = str;
    cout << endl;
		cout << "Address: ";
    cin.getline(str, 256, '\n');
    tmp.addr = str;
    cout << endl;
    cout << "Phone Number: ";
    cin.getline(str, 256, '\n');
    tmp.phone = str;
    cout << endl;
    cout << "E-mail Address: ";
    cin.getline(str, 256, '\n');
    tmp.email = str;
    cout << endl;
		// see if this record should be added to the array
    cout << "Add Contact to Address Book? (y/n) ";
    cin >> response;
    if (toupper(response) == 'Y') 
      list[size++] = tmp;
  } else {
    cout << "Sorry, Address Book is currently full." << endl;
    system("pause");
  }
  system("cls");
}

void dispData(const Person list[], int size)
{
  system("cls");
  
  if(size < 1) {
    cout << "Nothing to display" << endl;
  } else {
    cout << "Contacts :" << endl << endl;
    cout << fixed << setprecision(2);   
    cout << "Contact Name     Address       Phone No.  Email     " << endl;
    cout << "*************************************************************" << endl;
        
    cout << left;     
    for (int i = 0; i < size; i++) {
      cout << setw(15) << list[i].name << right
           << setw(15) << list[i].addr << right 
					 << setw(11) << list[i].phone << right
					 << setw(20) << list[i].email << right <<endl;
		
		}
    
    
    cout << "*************************************************************" << endl;
    cout << right << setw(3) << size;
    cout << " Contacts"<< endl;
  }
  
  system("PAUSE");
  system("cls");
}

// Save records to disc
void saveFile(const Person list[], int size) {
     string fileName;
  ofstream outfi;
  cout<<"Enter file name: ";
  getline(cin,fileName);
  outfi.open(fileName.c_str());
  
  // to make sure the file stream is open before doing IO
  if (!outfi.fail()) { 
    system("cls");  
    cout << "Saving Address Book to the disc ";
    
    for(int i = 0; i < size; i++) {
      outfi << list[i].name << ';' 
            << list[i].addr<< ';';
      // Start a new line after all but the last record
      // Simplifies reading the file as EOF is at end of last line
      if (i < size-1) outfi << endl;
    }
    cout << endl << size << " Address Book written to the disc." << endl;
    outfi.close();
    system("PAUSE");
    system("cls");
  } 
  else {
    cout << "ERROR: problem with file" << endl;
    system("PAUSE");
    system("cls");
  }
}

// Open file and load array
void openFile(Person list[], int& size)
{
  ifstream infi("AddressBook.txt");
  string str;
  stringstream strstrm;
  
  // make sure the file stream is open before doing IO
  if (!infi.fail()) { 
  
    system("cls");
    cout << "Reading Address Book from the disc ";
    
    size = 0; // overwrite any existing records
    while(!infi.eof() && size < MAX_SIZE) {
      // get and store the name
      getline(infi, str, ';'); 
      list[size].name = str;
      
      // get, convert and store the quantity
      getline(infi, str, ';');
      strstrm.str(""); strstrm.clear(); // empty and clear the stringstream
      strstrm << str; 
      strstrm >> list[size].addr;
  
    }
    cout << endl << size << " Contacts read from the disc." << endl;

  
    system("PAUSE");
    system("cls");
  }
  else { // something went wrong with opening the file
    cout << "ERROR: problem with file" << endl;
    system("PAUSE");
    system("cls");
  }

}

char getMenuResponse()
// Does not modify anything. Gets users response only
{
	char response;
	cout << endl << "Choose one of the following options: " << endl
		 << "(A)dd contact, (D)isplay contact, (O)pen File, (S)ave File, (Q)uit" << endl
		 << "> ";
	cin >> response;
	cin.ignore(256, '\n');	
	// clean-up up to 256 chars including the delimiter specified (\n, the endl) 
	// OR stop when the \n is encountered after removing it.
	return toupper(response);
	
}
Topic archived. No new replies allowed.