//same employee struct as before struct employee { string name; int emp_num; int dept; float salary; }; //array of employees. //Each element is an employee struct variable. employee company[max_employees]; int num_employees; //virtual size //element indexed by 2 company[2].emp_num = 37; company[2].dept = 6; company[2].salary = 30000; company[2].name = "Smith"; if (company[i].dept == 8) cout << "Department 8 employee: " << company[i].name; //jth employee in same department as ith employee company[j].dept = company[i].dept; //struct to struct copy company[k] = company[i]; //initialize salaries of all employees to 0 for (i=0; i< num_employees; i++) //loop over all employees company[i].salary = 0; ... //find largest salaried employee largest = 0; //index of largest salaried employee for (i=1; i< num_employees; i++) if (company[i].salary > company[largest].salary) largest = i; cout << "Employee is " << company[largest].name; //function to search an array of employees argument for a name //returns index of element, else returns -1 if not found int search_name (employee E[], int size, string name){ int i=0; //loop while within bounds and not match while (i< size && E[i].name!=name) i++; if (i < size) //found name in array at index i return i; else return -1; } Prototype: int search_name (employee [], int, string); employee company[max_employees]; employee LA_branch[max_branch]; ... ind = search_name(company,num_employees,"Smith"); if (ind != -1) cout << "We have a Smith"; else cout << "No Smiths here"; string name; cout << "Enter name to search for: "; cin >> name; if ((ind=search_name(LA_branch,LA_size,name)) != -1) cout << "Employee information: " << display_employee(LA_branch[ind]); else cout << "No such employee in LA"; //function to display an employee void display_employee (employee emp) { cout << emp.name << "\t" << setw(6) << emp.emp_num << setw(4) << emp.dept << setw(8) << emp.salary << endl; } //display all employees in the company array: for (i=0; i< num_employees; i++) display_employee(company[i]); //element is an employee struct //function to count the number of employees whose // salary is above a threshold value int high_salary_count(employee workforce[], int num_employees, float salary){ int i, count=0; for (i=0; i< num_employees; i++) if (workforce[i].salary > salary) count++; return count; } Prototype: int high_salary_count(employee [], int, float); cout << "Enter figure: "; cin >> salary; cout << "Number of employees whose salary is above " << salary << " is " << high_salary_count(company,num_employees,salary); //Department x employees are going to LA. //Copy their records from company array to LA branch array. cout << "Which department to copy: "; cin >> dept; LAsize=copy_dept(company,num_employees,LA_branch,dept); cout << "There are " << LAsize << " department " << dept << " employees"; int copy_dept (employee src[], int src_size, employee dest[], int dept) { int i, j=0; for (i=0; i< src_size; i++) //go thru src array if (src[i].dept == dept) { //a dept x employee dest[j] = src[i]; //copy to dest array j++; //increment count of x employees } return j; //return size of dest array == #dept x employees } //function to delete dept x employees from an array of employees cout << "Enter department to be terminated: "; cin >> dept; delete_dept(company,num_employees,dept); //now company array has no more dept x employees. Its size is that //much smaller. void delete_dept (employee E[], int &size, int dept) { int i=0; while (i < size) //until end of array if (E[i].dept == dept) { //a dept x employee //logically remove by overwriting with the struct // at the end of the array E[i] = E[size-1]; //the last employee size--; //since just moved the last one, //decrement the size } //since it may also be a dept x employee, // it needs to be looked at else //not a dept x employee i++; //so go to next employee in array } --------------------------------------------------------------- Structure suitable for celebrities: struct celeb { string name; string sign; date birthday; //A member can be any type, //including another struct. }; celeb c1; cin >> c1.name; cl.birthday.year = 1960; get_date(c1.birthday); //array of celeb structs celeb stars[max_stars]; cout << "Enter number of celebrities: "; cin >> num_stars; for (i=0; i< num_stars; i++) { cout << "Enter name: "; cin >> stars[i].name; cout << "Enter sign: "; cin >> stars[i].sign; get_date(stars[i].birthday); //date reference argument } //count number of Pisces pisces = 0; for (i=0; i< num_stars; i++) if (stars[i].sign=="Pisces") pisces++; cout << "Number of Pisces is " << pisces; //count number of stars older than me date my_birthday; cout << "Enter your birthday: "; get_date(my_birthday); older = 0; for (i=0; i< num_stars; i++) if (datecmp(my_birthday,stars[i].birthday) == 1) older++; cout << "Number of stars older than you is " << older; ------------- //function to count number of celebrities of a particular sign int num_starsigns (celeb stars[], int size, string sign) { int i, count = 0; for (i=0; i< size; i++) if (stars[i].sign == sign) count++; return count++; } Exercise: function to count number of each sign. Use array of signcounts and array of sign strings. --------------------------------------------------------------- //Structure suitable for parts database struct part { int part_id; string description; float price; int quantity; char reorder; //Y or N flag }; part bolt37, nut, nail; part parts[max_parts]; get_part_info(nut); //part reference argument get_part_info(parts[i]); //2D array of part structs. Row is a site/branch part corporate[max_branches][max_parts]; get_part_info(corporate[3][5]); get_part_info(corporate[site][i]); void get_part_info (part &item) { cout << "Enter part id: "; cin >> item.part_id; cout << "Enter description: "; cin >> item.description; cout << "Enter price: "; cin >> item.price; cout << "Enter quantity in inventory: "; cin >> item.quantity; } //reorder is calculated getline (char_array, max_number_of_chars_to_input_from_line) part struct field sizes: part_id 4 bytes, say average description is 80 bytes, price 4 bytes, quantity 4 bytes, reorder 1 byte. So a part variable is 93 bytes. Use sizeof to determine to actual size, which may be larger due to padding. Say max_parts is 1000, then parts array is 1000*93=93000 bytes Say max_branches is 100, then corporate 2D array is 100*1000*93=9,300,000 bytes=9 MB --------------------------------------------------------------- Structure for playing cards: struct card { int face; //1=Ace, 2,3,...10,11=Jack,12=Queen,13=King char suit; //C, D, H, S }; //deck of cards card deck[52]; init_deck(deck); //the 52 different cards shuffle(deck); //repeatedly swap random pairs card hand[hand_size]; deal_hand(deck,hand); //copy/move from deck to hand arrays display_hand(hand); //convert internal to external score_hand(hand); //poker: straight, full house, etc --------------------------------------------------------------- struct date { int year; int month; int day; }; struct personal { string name; date birthday; }; struct student { personal pers; int id; char grades[max_grades]; }; student stu1; //Examples of accessing members: stu1.id = 12345; stu1.grades[3] = 'B'; stu1.pers.name = "Smith"; get_date(stu1.pers.birthday); stu1.pers.birthday.year = 1960; cout << "How many grades for this student? "; cin >> num; for (i=0; i> num_students; //less than max_pupils for (i=0; i< num_students; i++) cin >> school[i].pers.name;
//function to write array of employee structs to a file void write_employees (employee E[], int size, string fname) { int i; ofstream empf; empf.open(fname.c_str()); if (!empf) cerr << "ERROR opening " << fname << endl; else for (i=0; i< size; i++) empf << E[i].emp_num << setw(maxname+2) << E[i].name << setw(4) << E[i].dept << " " << E[i].salary << endl; empf.close(); } File will have format: 493 Smith 6 30000 62 Jones 21 25000 ... //function to read "records" from file with same format to // array of employees void read_employees (employee E[], int &size, string fname) { ifstream empf; empf.open(fname.c_str()); if (!empf) cerr << "ERROR opening " << fname << endl; else { empf >> E[size].emp_num >> E[size].name >> E[size].dept >> E[size].salary; while (empf) { size++; empf >> E[size].emp_num >> E[size].name >> E[size].dept >> E[size].salary; } empf.close(); }Program to maintain dictionary of words diction.cpp
The end.
See you in 240.