В моем текущем классе программирования мне было поручено создать программу, которая принимает вводимый пользователем курс (состоящий из имени курса, оценки курса, переменных единиц курса) и сохранять их в динамически генерируемом массиве с максимальным размером 10.
Из-за моего незнакомого отношения с объектно-ориентированным программированием и классами, я нахожу что-то, кроме создания классов, очень сложным. Я выяснил способ создания записей, а также как редактировать их после того, как они были созданы с использованием функций друзей (я думаю, это имя?), Хранящихся в заголовочном файле моих программ.
Однако теперь, когда мне нужно было выполнить сортировку данных (по имени переменной каждой записи), а также затем искать их, я нахожу это очень трудным для продолжения. Я понимаю, как создавать функции, которые могут выполнять обе эти вещи (как я делал это для моего предыдущего класса), но делать это с участвующими классами оказывается сложной задачей.
Мой заголовочный файл:
#ifndef COURSE_H
#define COURSE_H
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <vector>
class Course
{
private:
char name[10] = ""; //name of course
char grade; //grade in course
int units; //units in course
public:
Course()
{
name;
grade;
units;
}
void read() //Initializes course and collects information from user
{
std::cout << "\nEnter course name: ";
std::cin.getline(name, 10, '\n');
std::cout << "\nEnter number of units: ";
std::cin >> units;
std::cout << "\nEnter grade received: ";
std::cin >> grade;
std::cin.ignore();
}
void display() const //Displays course to user
{
std::cout << name << ' ' << units << ' ' << grade << std::endl;
}
~Course() //Destructor frees allocated dynamic memory
{
std::cout << "\nDeleting any dynamically created object";
}
};
#endif // COURSE_H
Мой основной исходный файл:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <vector>
#include "courses.h"
int menu();
void add(Course* co_ptr[], int& size);
void edit(Course* co_ptr[], int size);
void swap_ptrs(Course*& pt1, Course*& pt2);
int main()
{
Course* courses[10] = {};
int selection;
int size = 0;
do
{
selection = menu();
if (selection == 1)
{
if (size < 10)
add(courses, size);
else
std::cout << "\nUnable to add more classes.";
}
else if (selection == 2)
{
edit(courses, size);
}
else if (selection == 3)
{
}
else if (selection == 4)
{
}
else if (selection == 5)
{
}
else if (selection == 6)
{
}
else if (selection == 7)
{
break;
}
else
{
std::cout << "\nInvalid selection.";
}
} while (selection != 7);
std::cout << "\nPress any key to exit.";
(void)_getch();
return 0;
}
Исходный файл моих функций:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <vector>
#include "courses.h"
int menu()
{
int selection;
std::cout << "\nSelect one of the following actions: " << std::endl
<< "1. Add new course" << std::endl
<< "2. Edit an existing course" << std::endl
<< "3. Display a course" << std::endl
<< "4. List all courses" << std::endl
<< "5. Display GPA" << std::endl
<< "6. Delete all courses" << std::endl
<< "7. Quit";
std::cout << "\nEnter selection number: ";
std::cin >> selection;
std::cin.ignore();
return selection;
}
void add(Course* co_ptr[], int& size)
{
co_ptr[size] = new Course;
co_ptr[size]->read();
size++;
}
void edit(Course* co_ptr[], int size)
{
int selection;
for (int i = 0; i < size; i++)
{
std::cout << std::endl << i << ". ";
co_ptr[i]->display();
}
std::cout << "Enter your selection: ";
std::cin >> selection;
std::cin.ignore();
co_ptr[selection]->read();
}
Моя последняя попытка создания функции сортировки (я пытался создать ее в заголовке поскольку всякий раз, когда я переносил свой старый сортировочный код как обычную функцию, он не мог получить доступ к необходимым данным из-за того, что эти переменные были «приватными»)
void Course::sort_name(Course* co_ptr[], int size) //has to be apart of the class (Course::) to have access to the name data
{
bool swap;
do
{
swap = false;
for (int i = 0; i < size - 1; i++)
{
if (strcmp(co_ptr[i]->name, co_ptr[i + 1]->name) > 0) //We're now comparing and swapping pointers
{
swap_ptrs(co_ptr[i], co_ptr[i + 1]);
swap = true;
}
}
} while (swap);
}
Наконец, моя функция swap_ptrs, которая также была в Исходный файл функции:
void swap_ptrs(Course*& pt1, Course*& pt2) //Passes the pointers by reference
{
Course* tmp = pt1;
pt1 = pt2;
pt2 = tmp;
}
Извините за такой длинный пост, но этот проект был настоящей борьбой, и я чувствую, что не продвигаюсь вперед.