Первый опыт написания полноценной программы
Время на прочтение
17 мин
Количество просмотров 14K
Каждый начинающий программист мечтает реализовать свой собственный проект. Не написать простенький код, по заданию преподавателя, а воплотить в жизнь свои идеи. Так и я, изучая C++ 3-4 месяца, решился попробовать разработать макет электронного журнала для преподавателей.
Определившись с темой, приступил к определению необходимых функций программы. Для этого я провел анализ уже существующих сервисов, выполняющих похожие задачи.
По итогу, пришел к выводу, что в программе потребуется реализовать:
-
Регистрацию (Reg),
-
Авторизацию (Authon),
-
Выбор группы (GroupSelection),
-
Возможность выставлять оценки (Grades),
-
Возможность выставлять посещаемость (Attendance),
-
Возможность писать комментарии к датам (Comment),
-
Возможность устанавливать dedlin’ы (Deadline).
Для понимания логики работы программы, отражения принципов взаимодействия с ней, упрощения дальнейшего написания кода, была создана полная блок-схема.
Аналогично, были созданы блок схемы для каждой функции.
Написание кода программы
Первым шагом написания программы является добавления необходимых заголовочных файлов, а именно:
-
iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода.
-
string – это заголовочный файл для взаимодействия с
классами string (строками). -
fstream – заголовочный файл, включающий набор классов, методов и функций, которые предоставляют интерфейс для чтения/записи данных из/в файл.
Далее была добавлена глобальная переменная, то есть переменная, область действия которой охватывает всю программу. Использование такой переменной потребовалось для реализации удобного взаимодействия с информацией.
std::string nameofgroup;
Чтобы удобно группировать данных в одной переменной для каждого объекта, который оперирует этими данными, мною было объявлено несколько классов, а именно:
Класс данных о преподавателе – DataofTeature.
class DataofTeature
{
public:
std::string name; //имя преподавателя
std::string surname; //фамилия преподавателя
std::string patronymic; //отчество преподавателя
std::string login; //логин преподавателя
std::string password; //пароль преподавателя
};
Класс данных о студенте – DataofStudent.
class DataofStudent
{
public:
std::string group; //название группы студента
std::string name; //имя студента
std::string surname; //фамилия студента
};
Основываясь на ранее представленных блок схемах, был написан код для всех функций. Разберемся с каждой функций подробнее.
Reg
Функция Reg реализует полноценную регистрацию, с записью данных о пользователе в текстовый файл.
В ходе выполнения функции, пользователю предлагается ввести ФИО, логин и пароль. После получения программой логина, проверяется его наличие в системе, если логин совпадает с ранее записанным в базу логинов, то пользователя предлагается ввести логин повторно. Как только программа получает ФИО, пароль и уникальный логин, происходит запись логина в базу для логинов (при открытие базы данных используется режим открытия ios_base::app, позволяющий открыть файл для записи в конец файла, при этом, сохраняя ранее записанные данные), создание специализированного файла для регистрационных данных пользователя, и запись в него ФИО, аналогично создается специальный файл для хранения логина и пароля конкретного пользователя. Формирования уникальных файлов происходит по принципу сложения строк. Например, path=path+teature1.login+txt, где path-путь к директории, в которой хранятся файлы программы, teature1.login – уникальный логин пользователя, txt- строка, хранящая в себе “.txt”.
void Reg()
{
std::string path = "C:\journal\regdata", datalog = "C:\journal\logdata.txt", txt = ".txt", user = "C:\journal\", delfile = "C:\journal\delfile.txt"; //объявление переменных типа string
bool flag = 1; //объявление переменной типа bool
DataofTeature teature1; //объявление переменной класса DataofTeature
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "tttРегистрация:n"; //ввод даных, необходимых для регистрации
std::cout << "Введите фамилию: ";
std::cin >> teature1.surname;
std::cout << "Введите имя: ";
std::cin >> teature1.name;
std::cout << "Введите отчество: ";
std::cin >> teature1.patronymic;
std::cout << "Введите логин: ";
std::cin >> teature1.login;
while (flag)
{
bool flag2 = 0;
fin.open(datalog);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (teature1.login == data) //проверка на существование данного логина в файле
{
flag2 = 1;
flag = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Данный логин уже существует, придумайте другой логин: "; //прозьба ввести логин повторно, если введенный до этого уже существует
std::cin >> teature1.login;
flag = 1;
}
else
{
flag = 0; //изменение булевой переменной для выхода из цыкла
}
fin.close();
}
path = path + teature1.login + txt; //формирование пути, для создания файла с ФИО аккаунта
fout.open(path);
if (fout.is_open())
{
fout << teature1.surname << "n";
fout << teature1.name << "n"; //запись данных в файл
fout << teature1.patronymic << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
std::cout << "Введите пароль: ";
std::cin >> teature1.password; //ввод пароля
fout.open(datalog, std::ios_base::app); //открыть файл для записи в конец файла
if (fout.is_open())
{
fout << teature1.login << "n"; //запись данных в файл
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
user = user + teature1.login + txt; //формирование пути хранения логина и пароля
fout.open(user); //открытия файла
if (fout.is_open())
{
fout << teature1.login << "n";
fout << teature1.password << "n"; //запись данных в файл
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fout.close();
}
Authon
Функция Authon реализует авторизацию пользователя в программу.
В ходе выполнения функции, пользователю предлагается ввести логин и пароль. Следом идет проверка наличия логина в базе логинов, если логина в базе нет, пользователю
предлагается ввести логин повторно. Получив логин, программа открывает
специализированный файл пользователя, получая к нему путь, методом сложения
строк. В этом файле проверяется верность пароля, если пароль не совпадает, то
предлагается ввести пароль повторно. Как только все данные проверены, программа
открывает файл с ФИО пользователя и выводит на экран приветствие, используя ФИО
пользователя.
void Authon()
{
std::string path = "C:\journal\regdata", datalog = "C:\journal\logdata.txt", txt = ".txt", user = "C:\journal\", delfile = "C:\journal\delfile.txt", login, password, filelog = ""; //объявление переменных типа string
DataofTeature teature1; //объявление переменной класса DataofTeature
std::ifstream fin; //объявление переменной класса ifstream
bool flag = 1; //объявление переменной типа bool
std::cout << "tttАвторизация:n";
std::cout << "Введите логин: ";
std::cin >> login; //ввод логина
while (flag)
{
bool flag2 = 0;
fin.open(datalog); //проверка наличия логина в базе логинов
if (fin.is_open())
{
while (!fin.eof())
{
std::getline(fin, filelog);
if (login == filelog)
{
flag = 0;
flag2 = 0;
break;
}
else
{
flag2 = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Такого логина не существует, введите логин повторно: n"; //просьба ввести логин повторно
std::cin >> login;
}
fin.close();
}
user = user + login + txt; //формирования пути нахождения файла с логинами и паролями
flag = 1;
std::cout << "Введите пароль: "; //ввод пароля
std::cin >> password;
while (flag)
{
bool flag2 = 0;
fin.open(user);
if (fin.is_open())
{
while (!fin.eof())
{
std::getline(fin, filelog);
if (password == filelog)
{ //проверка верности пароля
flag = 0;
flag2 = 0;
break;
}
else
{
flag2 = 1;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть//
}
if (flag2)
{
std::cout << "Пароль введен не верно, попробуйте еще раз: n"; //просьба ввести пароль повторно
std::cin >> password;
}
fin.close();
}
std::cout << "Добро пожаловать ";
path = path + login + txt;
fin.open(path);
if (fin.is_open())
{
std::string data = ""; //вывод приветствия на экран
while (!fin.eof())
{
std::getline(fin, data);
std::cout << data << " ";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
std::cout << "n";
}
GroupSelection
Функция реализует полноценный выбор группы в программе.
В ходе выполнения функции на экран выводится полный список групп, содержащихся в системе. Пользователю предоставляется возможность ввести название необходимой ему группы. После получения программой наименования, происходит проверка на наличие данной группы в списке групп, если такая группа отсутствует, то пользователю предлагается ввести название группы повторно. Как только проверка пройдена, название группы передается в глобальную переменную, для дальнейшего использования в других функциях.
void GroupSelection()
{
DataofStudent stud1; //объявление переменных класса DataofStudent
std::string allgroup = "", path = "C:\journal\allgroup\allgroup.txt", delfile = "C:\journal\allgroup\delfile.txt", path2 = "C:\journal\allgroup\", txt = ".txt", choice = ""; //объявление переменных типа string
bool flag = 1; //объявление переменных типа bool
std::ifstream fin; //объявление переменной класса ifstream
std::ofstream fout; //объявление переменной класса ofstream
std::cout << "Полный список групп: n";
fin.open(path);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод а экран полного списка групп
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть//
}
fin.close();
std::cout << "Введите название группы, которую хотите открыть: ";
std::cin >> stud1.group; //ввод название необходимой группы
while (flag)
{
bool flag2 = 1;
fin.open(path);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (stud1.group == data) //проверка на наличие введенной группы в списке групп
{
flag2 = 0;
flag = 0;
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Данной группы не существует, введите другую группу: ";
std::cin >> stud1.group; //просьба ввести название группы повторно
flag = 1;
}
else
{
flag = 0; //изменение буливой переменной для выхода из цыкла
}
fin.close();
}
nameofgroup = stud1.group; //присваивание названия группы в глобальную переменную
}
Grades
Функция Grades реализует, простановку оценок студентам.
В ходе выполнения функции, пользователю предлагается ввести дату, за которую он хочет выставить оценку. После получения программой даты, происходит проверка на существование файла с оценками на данную дату. Если файл существует, то происходит его запись в специализированный промежуточный файл, это происходит для реализации корректной и органичной записи в файл отметок, без потерь данных. Если файл не существует, то программа копирует данные из файла со списком группы в промежуточный файл. Следом, на экран выводится полный список группы с отметками (если они есть). Пользователю предлагается ввести фамилию и имя студента, которому он хочет выставить оценку. Как только программа получает эти данные, происходит проверка на наличие данного студента в группе, если его нет, то пользователю предлагается ввести фамилию и имя повторно. После получения данных программой, происходит создание файла для оценок на данную дату (принцип нахождения пути файла и формирования его название – сложение строк). Следом, идет поиск данного студента в промежуточном файле. Принцип поиска и записи таков: если фамилия и имя не совпадает с введенными пользователем, то происходит запись этих данных в файл с оценками, если ФИ совпали, то пользователю предлагается ввести студенту оценку, полученная строчка записывается в файл с оценками. В конце работы функции, на экран выводится список группы с внесенными изменениями.
void Grades()
{
DataofStudent student1; //объявление переменных класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\grade", choice = ""; //объявление переменных типа string
bool flag = 0, flag2 = 1; //объявление переменных типа bool
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату за которую вы хотите проставить оценки: ";
std::cin >> choice; //ввод даты
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
flag = 1; //проверка наличия файла с оценками на данную дату
}
fin.close();
if (flag)
{
fin.open(way + nameofgroup + attendance + choice + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof()) //запись данных существующего файла в специализированный файл
{
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
}
else
{
fin.open(way + nameofgroup + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{ //запись в специализированный файл списка группы
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
}
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof()) //вывод списка группы на экран
{
std::getline(fin, data);
std::cout << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
std::cout << "Введите фамилию и имя студента. которому вы хотите выставить оценку: " << std::endl;
std::cin >> student1.name; //ввод фамили и имени студента
while (flag2)
{
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
flag2 = 0; //проверка наличия данно ФИ в списке группы
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
if (flag2)
{
std::cout << "Такого студента не существует, повторите ввод фамилии и имени: "; //повторный ввод ФИ студента
std::cin >> student1.name;
}
fin.close();
}
fin.open(way + delfile);
fout.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
bool flag3 = 1;
for (int i = 0; i < data.length(); i++)
{ //процесс нахождения ФИ студента в файле
if (flag3 and data[i] != 't')
{
fout << data[i]; //запись данных в файл с оценками
}
else
{
flag3 = 0;
}
}
std::string choice2;
std::cout << "Введите оценку: "; //ввод оценки
std::cin >> choice2;
fout << "t" << choice2 << "n"; //запись данных в файл с оценками
}
else
{
fout << data << "n"; //запись данных в файл с оценками
}
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
fout.close();
std::cout << "n";
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << "ttt" << data << "n"; //вывод измененных данных на экран
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Attendance
Функция Attendance реализует простановку посещаемости студентов с последующей записью в файл.
В ходе выполнения функции, пользователю предлагается ввести дату, за которую он хочет выставить посещаемость. После получения программой даты, происходит проверка на существование файла с посещаемостью на данную дату. Если файл существует, то происходит его запись в специализированный промежуточный файл, это происходит для реализации корректной и органичной записи в файл посещаемости, без потерь данных. Если файл не существует, то программа копирует данные из файла со списком группы в промежуточный файл. Следом, на экран выводится полный список группы с посещаемостью (если она есть). Пользователю предлагается ввести фамилию и имя студента, которому он хочет выставить посещаемость. Как только программа получает эти данные, происходит проверка на наличие данного студента в группе, если его нет, то пользователю предлагается ввести фамилию и имя повторно. После получения данных программой, происходит создание файла для посещаемости на данную дату (принцип нахождения пути файла и формирования его название – сложение строк). Следом, идет поиск данного студента в промежуточном файле. Принцип поиска и записи таков: если фамилия и имя не совпадает с введенными пользователем, то происходит запись этих данных в файл с оценками, если ФИ совпали, то пользователю предлагается ввести посещаемость студента, полученная строчка записывается в файл с посещаемостью. В конце работы функции, на экран выводится список группы с внесенными изменениями.
void Attendance()
{
DataofStudent student1; //объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\attendance", choice = "";//объявление переменных типа string
bool flag = 0, flag2 = 1; //объявление переменной типа bool
std::ofstream fout; //объявление пременной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату за которую вы хотите проставить посещаемость: ";
std::cin >> choice; //ввод даты
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
flag = 1; //проверка на наличие файла
}
fin.close();
if (flag)
{
fin.open(way + nameofgroup + attendance + choice + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof()) //запись данных файла в промежуточный файл
{
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
}
else
{
fin.open(way + nameofgroup + txt);
fout.open(way + delfile);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{ //запись списка группы в промежуточный файл
std::getline(fin, data);
fout << data << "n";
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
}
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << data << "n"; //ввывод списка группы на экран
}
}
else
{
std::cout << "EROR";
}
fin.close();
std::cout << "Введите фамилию и имя студента. которому вы хотите выставить посещаемость: " << std::endl;
std::cin >> student1.name; //ввод фамили и имени студента
while (flag2)
{
fin.open(way + delfile);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name) //проверка на наличие данного студента в группе
{
flag2 = 0;
}
}
}
else
{
std::cout << "EROR";
}
if (flag2)
{
std::cout << "Такого студента не существует, повторите ввод фамилии и имени: "; //повторный ввод ФИ студента
std::cin >> student1.name;
}
fin.close();
}
fin.open(way + delfile);
fout.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open() and fout.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
if (data == student1.name)
{
bool flag3 = 1;
for (int i = 0; i < data.length(); i++)
{
if (flag3 and data[i] != 't')
{
fout << data[i]; //процесс нахождения студента в файле
}
else
{
flag3 = 0;
}
}
std::string choice2;
std::cout << "Введите посещаемость: ";
std::cin >> choice2; //ввод посещаемости
fout << "t" << choice2 << "n";
}
else
{
fout << data << "n";
}
}
}
else
{
std::cout << "EROR";
}
fin.close();
fout.close();
std::cout << "n";
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод измененных данных на экран
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Comment
Функция Comment реализует в программе написание комментария к дате.
В ходе выполнения функции, пользователю предлагается ввести дату, для которой он хочет написать комментарий. При получении программой даты, происходит открытие файла с режимом открытия ios_base::app (открыть файл для записи в конец файла). Наименование файла и путь его нахождения формируется, путем сложения строк. Пользователю предлагается ввести комментарий. Происходит запись данных в файл. После на экран выводятся изменённые данные файла.
void Comment()
{
DataofStudent student1;//объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\comment", choice = ""; //объявление переменнх типа string
std::ofstream fout;//объявление переменной класса ofstream
std::ifstream fin;//объявление переменной класса ifstream
std::cout << "Введите дату для которой вы хотите оставить коментарий: ";
std::cin >> choice; //ввод даты
fout.open(way + nameofgroup + attendance + choice + txt, std::ios_base::app);
if (fout.is_open())
{
std::string choice2;
std::cout << "Введите коментарий: "; //ввод коментария
std::cin >> choice2;
fout << choice2 << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
std::cout << "n";
fout.close();
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data); //вывод изменненных данных на экран
std::cout << "ttt" << data << "n";
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Deadline
Функция Deadline реализует в программе создание dedlin’а и комментария к нему, с записью этих данных в файл.
В ходе выполнения функции, пользователю предлагается ввести дату, на которую он хочет установить deadline. При получении программой даты, происходит открытие файла с режимом открытия ios_base::app (открыть файл для записи в конец файла). Наименование файла и путь его нахождения формируется, путем сложения строк. Пользователю предлагается ввести комментарий. Происходит запись данных в файл. После на экран выводятся изменённые данные файла.
void Deadline()
{
DataofStudent student1; //объявление переменной класса DataofStudent
std::string way = "C:\journal\allgroup\", delfile = "delfile.txt", txt = ".txt", attendance = "\deadline", choice = ""; //объявление переменной типа string
std::ofstream fout; //объявление переменной класса ofstream
std::ifstream fin; //объявление переменной класса ifstream
std::cout << "Введите дату на которую вы хотите установить deadline: ";
std::cin >> choice; //ввод даты
fout.open(way + nameofgroup + attendance + choice + txt, std::ios_base::app);
if (fout.is_open())
{
std::string choice2;
std::cout << "Введите коментарий к deadlin'у: "; //ввод коментария
std::cin >> choice2;
fout << choice2 << "n";
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
std::cout << "n";
fout.close();
fin.open(way + nameofgroup + attendance + choice + txt);
if (fin.is_open())
{
std::string data = "";
while (!fin.eof())
{
std::getline(fin, data);
std::cout << "ttt" << data << "n"; //вывод измененных данных на экран
}
}
else
{
std::cout << "ERROR"; //Файл не удалось создать или открыть
}
fin.close();
}
Main
Аналогично, основываясь на блок схеме, был написан код основной части программы.
В ходе выполнения программы, на экран выводится меню. Пользователю предлагается выбрать один из пунктов. При выборе пункта 1, вызывается функция Reg, а затем функция Authon; При выборе пункта 2, вызывается функция Authon; При выборе пункта 3 происходит выход из программы. После успешной авторизации вызывается функция GroupSelection. После выбора группы на экран выводится меню дальнейших действий. Пользователю предлагается выбрать один из пунктов. При выборе пункта 1 вызывается функция Grades; При выборе пункта 2 вызывается функция Attendance; При выборе пункта 3 вызывается функция Deadline; При выборе пункта 4 вызывается функция Comment; При выборе пункта 5 происходит выход из программы.
void main()
{
std::string choice = ""; //объявление переменной типа string
bool flag = 1; //объявление переменной типа bool
setlocale(0, ""); //установка языкового стандарта для яязыка
std::cout << "tttДобро пожаловать в электронный журналn"; //вывод меню на экран
std::cout << "tttЕсли вы ходите зарегистрироваться введите 1ntttЕсли выхотите авторизоваться введите 2ntttЕсли вы хотите закрыть программу введите 3n";
std::cin >> choice;//ввод символа, отвечающего за выбор пункта меню
if (choice == "3")
{
return; //выход из программы
}
while (flag)
{
if (choice == "1")
{
flag = 0;
Reg(); //регистрация
Authon();//авторизация
}
else
{
if (choice == "2" and flag)
{
Authon(); //авторизация
flag = 0;
}
else
{
std::cout << "Сделайте выбор повторно: ";
std::cin >> choice; //повторное осуществленеи выбора пункта меню
}
}
}
GroupSelection(); //выбор группы
std::cout << "ntttВыберете дальнейшее действие:n"; //вывод меню выбора дальнейших действий
std::cout << "tttЕсли вы хотите поставить оценку студенту, введите 1ntttЕсли проставить посещаемость, введите 2ntttЕсли вы хотите установить дату конца дедлайна, введите 3ntttЕсли вы хотите написать коментарий, введите 4ntttЕсли вы хотите закрыть программу введите 5n";
std::cin >> choice; // ввод символа, отвечающего за выбор пункта меню
flag = 1;
while (flag)
{
if (choice == "1")
{
flag = 0;
Grades(); //простанока оценки
}
if (choice == "2")
{
flag = 0;
Attendance(); //простановка посещаемости
}
if (choice == "3")
{
flag = 0;
Deadline(); //установка deadlin'a
}
if (choice == "4")
{
flag = 0;
Comment(); //написание комментария
}
if (choice == "5")
{
return; //выход из программы
}
if (choice != "1" and choice != "2" and choice != "3" and choice != "4" and choice != "5")
{
flag = 1;
std::cout << "Повторите ввод: ";
std::cin >> choice; //повторное осуществление выбора пункта меню
}
}
}
Для реализации полноценной работоспособности моей программы необходимо создать несколько текстовых файлов и директорий согласно диаграмме.
В файл allgroup.txt необходимо записать название группы. Также папке allgroup нужно создать папку с название группы и текстовый документ с названием группы, в который необходимо занести список группы.
Тестирование и отладка программы
Для проведения корректного и полного тестирования следует поставить несколько тест кейсов, а именно.
В ходе тестирования программы критических ошибок выявлено не было.
Заключение
По итогу у меня получилось разработать макет электронного журнала для преподавателей, содержащий следующие компоненты:
-
Класс DataofTeature, хранящий в себе информацию о преподавателе.
-
Класс DataofStudent, хранящий в себе информацию о студенте.
-
Функция Reg, реализующая регистраци.
-
Функцию Authon, реализующая авторизацию в программу.
-
Функция GroupSelection, реализующая выбор группы.
-
Функция Grades, реализующая простановку оценок.
-
Функция Attendance, реализующая простановку посещаемости.
-
Функция Comment, отвечающая за возможность написания комментария к дате.
-
Функция Deadline, дающая возможность установить дэдлайн и написать к нему комментарий.
-
Функция main, в которой реализовано основное взаимодействие пользователя с программой (меню и т.д.).
Весь код программы был написан в среде разработки Visual Studio 2022. Суммарный объем строк в тексте программы составляет 724.
Загрузить PDF
Загрузить PDF
Итак, у вас появилась идея для отличной программы, однако вы и понятия не имеете, как ее реализовать? Не беда, поможем. Правда, придется потратить немало времени на то, чтобы выучить язык программирования, но это нормально. Скажем даже более, многие успешные программисты — самоучки. Выучив основы, вы сможете создавать простые программы, тратя на это минимум времени. Создание более сложных программ, конечно, является более серьезной задачей, но, как говорится, терпение и труд все перетрут!
-
1
Определитесь с тем, какой язык программирования вы выучите первым. Если раньше вы не программировали, то начинать надо с чего-то простого, рассчитанного на новичков — тем не менее позволяющего добиться поставленных целей. Есть десятки языков программирования, у каждого из них свои области применения, свои задачи и особенности. Вот несколько из них:[1]
- C — один из самых старых языков программирования. Знакомство с С позволит упростить изучение C++ и Java.
- C++ — один из самых популярных языков программирования в наши дни, особенно в плане разработки программного обеспечения. Правда, на то, чтобы выучить С++, уйдет время, а на то, чтобы еще и научиться им пользоваться, уйдет еще больше… Но это окупит себя!
- Java — еще один очень популярный язык программирования, который может работать почти что в любой операционной системе.
- Python — один из простейших языков программирования, чьи основы можно выучить за пару дней. Тем не менее это весьма мощный язык, задействованный для создания множества серверных и веб-приложений.
-
2
Подготовьте среду разработки. Чтобы начать программировать, вам нужно не так уж и много — и это «среда разработки». Впрочем, что именно под этим понимается, зависит от выбранного языка программирования.
- Редактор кода — почти что любому программисту будет удобнее работать в специальном текстовом редакторе — редакторе кода. Можно, конечно, и в «Блокноте» работать, но без подсветки синтаксиса и подстановок это будет весьма печальный опыт. Среди популярных редакторов кода можно назвать Notepad++, TextMate и JEdit.
- Компилятор — при работе со многими языками программирования (С, Java и так далее) код программы сначала надо «собрать» — скомпилировать, только потом его можно будет запустить. Соответственно, придется установить компилятор, если в выбранном вами языке программирования без него не обойтись. К слову, большинство компиляторов поможет вам отлавливать «баги» — ошибки программы.
- IDE (Integrated Development Environment, интегрированная среда разработки) — в некоторых языка программирования и редактор кода, и компилятор, и модуль отладки — все объединено в одну-единственную интегрированную среду разработки. Скачать IDE можно, как правило, с сайта языка программирования.
-
3
Почитайте учебники. Если раньше вы не программировали вообще, то начинать надо с малого. Так, стоит найти учебники или курсы, хотя бы онлайн-курсы, в которых даны основы основ выбранного языка, рассказано про его синтаксис, переменные, функции и все остальное, а также про то, как это все между собой связано.
- Заинтересовались? Зайдите на Udemy, Khan Academy, Codecademy, Code.org и другие аналогичные ресурсы.[2]
- Заинтересовались? Зайдите на Udemy, Khan Academy, Codecademy, Code.org и другие аналогичные ресурсы.[2]
-
4
Загрузите образцы и программы с открытым кодом. Вам будет куда проще учиться на примере, работая с образцами, благо что их в сети доступно предостаточно. Начните с простых программ, которые хоть как-то относятся к той программе, которую вы хотите сделать.
-
5
Чтобы выучить основы, создавайте простые программы. Раз уж вы начали писать код сами, то начните с азов. Напишите несколько программ, скажем, на вывод строки или подсчет простенького уравнения. Отрабатывайте все это — пригодится позже, во время работы над более сложными программами. Экспериментируйте, старайтесь сломать даже собственные программы.
-
6
Присоединитесь к сообществам программистов. Возможность задать вопросы состоявшемуся программисту — бесценна. На сайтах, где собираются программисты, вы найдете множество единомышленников, причем вне зависимости от того, на каком языке вы пишете. Не бойтесь спрашивать, но никогда не просите помощи, не испробовав перед этим все доступные вам средства.
-
7
Не забывайте, что на изучение языка программирования уходит много времени. Вы не сумеете написать программу (сложную), когда впервые сядете за компьютер с учебником программирования. Впрочем, чем больше вы будете учиться и практиковаться, тем лучше будете программировать.[3]
Реклама
-
1
Подготовьте «дизайн-документ». Дизайн-документ — это детальное описание разрабатываемой программы, и именно его необходимо сделать первым делом, чтобы потом, уже по ходу работы, вы могли сверяться с ним и заложенными в нем целями. Именно дизайн-документ позволит вам сделать то, что вы хотели, а не что-либо иное.
- Все, что вы хотите реализовать в программе, должно быть перечислено на страницах дизайн-документа.
- Кроме того, дизайн-документ должен учитывать и пользователя, точнее то, как он будет работать с программой.
-
2
Сделайте блок-схему вашей программы. Это будет своего рода карта, показывающая, как пользователь будет переходить от одной части программы к другой. На этом этапе ничего сложнее простой блок-схемы вам не нужно.
-
3
Определитесь с архитектурой программы. Цели будут определять средство… то есть архитектуру. Если знать и понимать, каким задачам какая архитектура соответствует, то процесс разработки пойдет куда эффективнее.[4]
-
4
Начните с программы по схеме «1-2-3». Это простейший тип программ, их задача — позволить вам адаптироваться к языку программирования. Если в общем, то программы «1-2-3» запускают, спрашивают у пользователя какие-нибудь данные, затем выводят результат, на чем и заканчиваются.
- Следующим шагом в схеме «1-2-3» будет так называемый REPL (Read-Execute-Print Loop). Проще говоря, это возврат к первому шагу программы после вывода результата вычислений.
- Подумайте о программах типа Pipeline. Они характеризуются тем, что трансформируют вводимые пользователем данные и работают последовательно. Данный тип подходит для программ, которые требуют минимум взаимодействия с пользователем — скажем, RSS-ридеры. Такая программа будет представлять собой несколько классов с общим циклом.
Реклама
-
1
Сделайте акцент на какой-то одной функции программы. Точнее сказать, прототип — это всегда основная функция программы. Допустим, вы создаете программу-органайзер — тогда основной функцией будет календарь и возможность добавлять события.
-
2
Добейтесь того, чтобы прототип работал без сбоев. Прототип должен быть таким, чтобы им можно было пользоваться вместо разрабатываемой программы. Прототип станет основой, фундаментом всему, так что работать он должен соответственно. Иными словами, каждая функция прототипа должна работать безукоризненно.
- В прототип можно вносить срочные изменения и тестировать их.
- Разумеется, задача тестирования прототипа требует участия сразу многих людей.
- Прототип может и будет меняться, это факт.
-
3
Не бойтесь перерабатывать прототип снова и снова. В этом его суть — сначала эксперименты, потом релиз. Именно на примере прототипа вы сможете увидеть, все ли работает так, как надо. Если же прототип оказывается неудачным — не беда, просто перепишите его с нуля, начните все заново. Лучше так, поверьте.
Реклама
-
1
Создайте базу псевдокода. Это станет своего рода скелетом вашего проекта и основой для будущей работы. Псевдокод отличается от обычного кода тем, что… не «компилится» (не обрабатывается в компиляторе), зато прекрасно читается программистами и помогает понять, что должно происходить на том или ином шаге работы программы.
- Псевдокод, впрочем, использует тот же синтаксис, что и обычный код, поэтому писать псевдокод надо так же, как и программу.
-
2
Усовершенствуйте прототип. Можете взять сам прототип, можете взять псевдокод — в любом случае суть в том, чтобы сделать прототип лучше, совершеннее, быстрее!
-
3
Начните работу над кодом программы. Вот, собственно, мы и добрались до сути. Именно работа над кодом программы и займет бо́льшую часть времени, не говоря уже про бесчисленные компиляции, не менее бесчисленные тесты и поиски багов… Если над вашей программой работает целая команда, то стоит начать с псевдокода, чтобы все шло равномерно.
-
4
Не забывайте комментировать код. Описывайте функции и особенности, которые вы реализуете в коде. Это нужно не только для того, чтобы кто-то другой, открыв ваши исходники, сумел разобраться, что к чему, но и для того, чтобы вы сами не запутались в собственном коде, если вернетесь к нему, скажем, через год.
Реклама
-
1
Тестируйте весь новый функционал. Все, что вы добавили в программу, должно быть протестировано, оттестировано и перетестировано. И чем больше людей приложат к этому руку, тем лучше, тем больше ошибок можно будет найти. Тестеры, разумеется, должны знать, что работают с далеко не финальной версией, а потому возможны ошибки.
- Этот этап работы над программой часто называют «альфа-тестированием».
-
2
Протестируйте финальную версию программы. Итак, все функции, какие только должно были быть в программе, в нее добавлены. Что теперь? Теперь снова тесты. Долгие, придирчивые, тщательные тесты — и работа над ошибками, разумеется. Сейчас вашу программу должно тестировать даже большее количество человек, чем ранее.
- Часто данный процесс называют бета-тестированием.
-
3
Протестируйте релиз-версию. Продолжая вносить в программу исправления и дополнительные материалы, не забывайте все тестировать.
Реклама
-
1
Подумайте, что вам нужно. Это будет зависеть от программы, так что подумайте, нужны ли вам, скажем, аудиозаписи? Графика? Контент? Задумайтесь об этом до релиза.
-
2
Подумайте, не стоит ли отдать все это на аутсорсинг. Если вам нужно много всего, но вы или никто в вашей команде не умеет рисовать или заниматься звукозаписью, то стоит вспомнить про аутсорсинге. Вы без проблем найдете фрилансеров, которые смогут подготовить для вас все необходимое.
-
3
Добавьте в программу все необходимые дополнительные материалы. Опять же, они не должны портить функционал программы. Добавление дополнительных материалов знаменует собой начало финального этапа работы над программой, если только, конечно, дополнительные материалы не являются неотъемлемой и внутренней частью самой программы (как, скажем, бывает при создании видеоигр).
Реклама
-
1
Подумайте, не стоит ли выпустить вашу программу под лицензией открытого кода. Тогда и другие люди смогут получить доступ к исходному коду программы, вносить в него изменения и улучшения. Правда, по такой лицензии вы вряд ли получите доход от программы — вы же не сможете ее продавать, код-то открытый. В чем же резон? В помощи сообщества, которое, если заинтересуется вашей программой, может превратить ее в истинный шедевр.
-
2
Подготовьтесь к продажам вашей программы. Для этого вам нужен интернет-магазин типа «витрина», чтобы покупатели могли, заплатив, скачать программу и начать ею пользоваться. Учтите, впрочем, что программы, за которые платят деньги, должны работать идеально!
- В зависимости от того, что у вас за программа, вы можете продавать еще множество услуг.
-
3
Продолжайте поддерживать выпущенную программу обновлениями. Скорее всего, после релиза вы увидите поток сообщений о всевозможных ошибках и багах. Это нормально. Вам нужно ранжировать эти сообщения по степени важности и начать решать соответствующие проблемы, а затем выпускать обновления для программы — так называемые «патчи».
- Хотите не растерять покупателей и стяжать себе добрую славу? Выпускайте патчи почаще.
-
4
Займитесь рекламой вашей программы. Если о ней никто не будет знать, то никто ей и пользоваться не будет. Отправляйте сообщения на тематические сайты, раздавайте бесплатную пробную версию, напишите пресс-релиз, делайте все необходимое, чтобы о вашей программе узнали!
Реклама
Об этой статье
Эту страницу просматривали 121 557 раз.
Была ли эта статья полезной?
Новичков часто интересует вопрос — с чего начать. Ведь задача написать программу представляет собой не простой процесс, к которому нужно отнестись ответственно и потратить на него немало сил.
Определение идеи
Чтобы написать программу, которая работает, нужно хорошо продумать, что она должна делать и как. Для этого следует разобраться с целями, которые она должна решать, а затем разобраться с будущим функционалом. Для этого лучше записать ответы на следующие вопросы:
- Что должна делать написанная программа.
- Чем будет полезна.
- Как может помочь пользователям, чем упростит работу.
- Чем отличается от конкурентов, похожих программ.
- Где можно написать программу.
- На какой платформе написать прогу.
После ответа на эти вопросы должна сформироваться чёткая картинка того, как будет выглядеть продукт и что он будет делать.
Выбор языка программирования
В первую очередь решается, где можно написать программу. Языков огромное множество, и каждый из них индивидуален, отвечает разным запросам пользователей. Какой-то — полегче, другой — сложнее, третий — функциональнее. Среди профессиональных программистов уже давно гуляют разговоры о том, где лучше писать программы, перечисляя преимущества и недостатки каждого из возможных вариантов.
C (Си)
Си — это классика, которую должен знать каждый программист, но подходит он для написания далеко не каждой программы. Как правило, его используют, чтобы написать низкоуровневые программы. Если изучить Си, можно свободно начать писать на Си++.
Новым пользователям, которые хотят заняться написанием одной программы и бросить программирование, Си совсем не подойдёт. Его сложно изучить из-за того, как мало по нему материалов в сети и учебниках, а пользователей, которые пишут на нём — немного, поэтому знатоков в языке ещё нужно поискать. Но если мир программирования затянет пользователей — его изучение рекомендуется.
C++
Один из популярных языков среди программистов. Написать на нём можно всё — от простой программки до сложного продукта со множеством функций. Материалов по изучению языка предостаточно в свободном доступе — в интернете, учебниках по программированию, на форумах многие обсуждают куски кода и рассказывают о том, что придумали. Несмотря на то, что сначала он может показаться сложным, в дальнейшем, когда пользователь научится полностью им управлять, это принесёт немало преимуществ.
Python
Классика, которая навсегда останется любимой среди программистов. Язык — основа, которую изучают как любители, так и профессионалы. Как и Си++, Python подойдёт для того, чтобы писать программы на простом уровне, отвечающие за базовые функции или для более сложных продуктов.
Python, сколько бы ни спорили пользователи интернета, остаётся первым в списке рекомендаций, когда спрашивают: «С какого языка начать программировать». Он — прост в использовании, а обучающих курсов, учебников, материалов — более, чем достаточно, чтобы каждый нашёл то, что поможет ему изучить язык лучше.
Java
Такая же классика, как и Python, рекомендуемая к изучению. Это — улучшенная версия C++, с большим функционалом. С помощью Java происходит написание программ для игр, бизнеса, менее масштабных целей. Запускается на Операционных системах любого типа, что делает его любимым, помогает использовать и проверять везде.
Для каждого понадобится установить специальный текстовый редактор, желательно — вместе с компилятором. В отличие от написания в блокноте, специальные редакторы выделяют функции цветами и выделяют их по уровням, чтобы было удобнее ориентироваться.
Изучение языка
После выбора, на каком языке писать, необходимо потратить время на его обучение. И здесь речь не о паре дней, а о неделях за учебниками и обучающими ресурсами. Для обучения также лучше использовать куски кода от людей, которые делятся ими на форумах. Чем больше пользователь изучит и потратит времени, тем лучше будет понимать принципы работы и сможет реализовать любую идею.
Для изучения могут быть использованы:
- Учебники.
- Курсы.
- Открытые Интернет-ресурсы.
- Форумы для программистов.
Написание программы
После долгого изучения стоит приступить к работе над самим продуктом. Первым делом, стоит написать мини-программу, которая будет показывать функционал, интерфейс продукта, который создатель видит в финале. В дальнейшем эта программа — прототип, изменится ещё не один раз, из-за невозможности реализации некоторых функций.
Для того, чтобы упростить написание, также необходимо использовать немаловажную функцию комментирования. По умолчанию комментарий начинается с символов «//», но может отличаться в зависимости от выбранного языка. Комментарии — строчки, которые не учитываются при компиляции кода, программисты используют их, чтобы отметить, что делает функция или строка. Комментарии упростят работу, когда строчек будет более 500 или 1 000, и поиск чего-то станет сложнее.
Стоит приготовиться к тому, что написание кода — нелёгкое дело. Для него понадобится много нервов, удаления лишних строчек, исправления того, в чём пользователь был уверен с самого начала. Если дело идёт слишком сложно, а принципы программирования — непонятны даже после десяти учебников, стоит обратиться к специалистам, которые знают, что делать. Обращение к профессионалам актуально для тех, кто хочет написать бизнес-программы — иногда для их написания новичкам нужна помощь.
Это текст для тех, кто решил написать программу для людей — сервис, приложение или что-то подобное. То есть не просто «Хеллоу ворлд», а что-то полезное, функциональное и потенциально пользующееся спросом. Может быть, вы на этом даже планируете зарабатывать. Вот на что обратить внимание на старте: подводные камни, ошибки и нюансы.
Нужно ли это писать?
Вот простой способ понять, нужно ли писать эту программу. Задайте себе вопрос: «Делают ли сейчас вручную то, что я хочу зашить в программу?»
В этом вопросе сразу два компонента:
- Люди уже делают то, что будет улучшать ваша программа. То есть существует некоторый спрос на эту работу.
- Люди делают это руками, а значит, они хотели бы это автоматизировать.
Распространенная ошибка — делать программу для того, что люди сейчас не делают в принципе.
🤔 Например, вы придумали программу для ведения бюджета: туда нужно вводить данные о ваших покупках по категориям, а она бы складывала траты за месяц. Делают ли это люди? Вроде делают, но до поры. Обычно человек начинает вести бюджет, два месяца что-то пишет, а потом забрасывает, потому что денег от этого больше не становится. А еще есть приложения банков, которые сами считают статистику трат. Маловероятно, что очередной менеджер личного бюджета как-то изменит ситуацию.
✅ А вот что люди часто делают руками, так это регулярно оплачивают разные счета: за связь, интернет и коммуналку. И многие не любят настраивать автоплатежи, чтобы никто не смог с них списать ничего лишнего. Еще они регулярно подают сведения по коммуналке. И наверняка есть еще какие-то дела, которые они делают раз в месяц, раз в квартал или раз в год. Можно было бы поставить себе напоминание в календарь, но его легко проглядеть и забыть. Вот бы была напоминалка, которая ходит за тобой, пока ты не сделаешь дело, — был бы кайф.
Полезное ядро
Как часто делают: в голове рождается задумка программы, автор садится её писать и начинает буквально с начала — с экрана логина, первого интерфейса, первого экрана, в общем, чего-то первого. Необязательно на этом экране будет происходить основная работа программы. Просто по задумке этот экран должны увидеть первым.
Как лучше: понять, что будет полезным ядром программы, и сначала убедиться, что вы можете его реализовать. Потом завернуть это ядро в модуль или функцию и уже поверх него написать интерфейс, окна, экраны и всё что угодно.
✅ Например, в приложении для напоминаний полезное ядро — само напоминание, которое вываливается в нужный момент. Потом, может быть, нужно дать напоминанию статус «Я это уже сделал в этом месяце» или «Напомни мне через…» и опцию повторного срабатывания через какое-то время.
🤔 А вот интерфейс установки напоминания и инфраструктура для хранения напоминаний не так важны на первом этапе.
💡 Часто такое же полезное ядро уже реализовал кто-то другой в виде бесплатной библиотеки. Это большая удача: взяли, изучили, допилили — быстро выпустили свой продукт.
На каком языке?
Есть технологии и языки, которые совсем не подходят для вашей задачи: например, Python совсем не нужен для десктопных приложений. В остальном большинство популярных языков мало-мальски могут всё.
На старте обычно рекомендуют не гоняться за идеальным языком, а, наоборот, взять тот язык, которым вы уже владеете, и попробовать реализовать задумку на нём. И, если это точно не подходит, искать другие технологии.
Не подменяйте программирование поиском идеальной технологии.
Составьте схему или план
Когда у вас появится функциональное ядро, прикиньте на листочке, как будет устроен проект целиком:
- из каких модулей он будет состоять, включая всякие вспомогательные системы типа логина или восстановления пароля;
- как они могут влиять друг на друга;
- какие могут возникнуть ошибки;
- какие ещё технологии понадобятся для реализации — например, уведомлять можно с помощью пуша, а можно почтой, а можно в самом приложении.
Задача — собрать в голове всю функциональную картину приложения. Это поможет избежать ситуации, когда половина кода уже написана, но вдруг выясняется, что данные нужно всё время синхронизировать с сервером и придётся переписывать логику.
❌ Часто проекты делают так: рисуют полную схему с подробнейшими выкладками, а потом пытаются написать по ней код за один присест. К середине проекта приходит понимание, что всё как-то сложно. В итоге руки опускаются и проект ставится на паузу, чаще всего навсегда.
✅ Вместо этого можно использовать метод быстрых версий:
- Выбрать самое простое действие, которое можно сделать прямо сейчас. Например, вывести стартовую картинку или отправить на сервер строчку «Привет, это тестовый запрос!». Убедиться, что всё работает.
- Выбрать следующее действие, которое добавляем в проект, например отрисовку главной страницы или сохранение JSON-запроса в файл. Написать код и проверить, как всё работает.
- Если работает — перейти к следующему действию, если нет — исправить и потом всё равно перейти.
Так мелкими перебежками и небольшими итерациями можно сделать практически любой проект. Хитрость в том, что мы не замахиваемся на всё сразу, а делаем маленькими порциями, параллельно изучая новое и проверяя знания на практике.
Всё, за дело
- Убедитесь, что это кому-то нужно (даже если это только вы).
- Возьмите тот язык, которым владеете (а не идеальный).
- Реализуйте центральный модуль (хотя бы базово).
- Нарисуйте схему работы всего остального (не держите в голове).
- Прописывайте мелкие действия и тут же тестируйте (а не пишите сразу всю кодовую базу за один раз).
Этого хватит, чтобы собрать личный проект. А там и до совместного недалеко, но совместный — это немного более сложная история.
Корректор:
Екатерина Череповицына
Вёрстка:
Кирилл Климентьев
#Руководства
- 1 июн 2020
-
16
Разбираемся, как устроен язык программирования C++, что такое программы и как научиться их писать.
vlada_maestro / shutterstock
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Чтобы научиться программировать с нуля, нужно только уметь пользоваться компьютером, устанавливать программы, создавать папки и файлы. Это первая статья из серии «Глубокое погружение в C++», с помощью которой вы сделаете первые шаги в профессии разработчика серверных приложений и игр.
Не пугайтесь большого объёма информации: чем больше вы будете знать, тем лучше сможете программировать. Это особенно важно, если вы выбрали C++, потому что на этом языке невозможно без хорошей теоретической базы написать высокопроизводительный код.
Внимание! В следующих разделах информация сильно упрощена.
Компьютер — это бесполезный кусок железа, который ни с чем не может справиться самостоятельно. И чтобы получить какой-то результат, нужно написать для него программу — подробный набор инструкций.
Компьютер понимает только машинный код — специальный язык, который очень сложно изучить. Вот как выглядит вывод на экран надписи «Hello, World!» на машинном коде (в шестнадцатеричном представлении):
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Чтобы упростить разработку, были созданы языки программирования — с их помощью пишут инструкции для компьютера, которые понятны и человеку. Одним из первых был язык ассемблера. Вот как на нём выглядит вывод надписи «Hello, World!»:
Всё равно достаточно сложно, да? В результате человечество создало более понятные языки программирования, на которых гораздо быстрее писать программы. А чтобы они потом запускались, код переводится в машинный или какой-нибудь промежуточный язык — этот процесс называется компиляцией.
Если язык похож на машинный код, то его называют низкоуровневым. Если же он больше понятен человеку, то — высокоуровневым. C++ сочетает в себе свойства и того, и другого.
Любая программа работает с данными: она их получает, обрабатывает, а потом возвращает результат обработки. Данные могут быть переданы пользователем, считаны из файла или записаны в самом коде.
Например, браузер получает текст из адресной строки, который ввёл пользователь, отправляет адрес на сервер, а потом выводит ответ в виде страницы.
Также программа может состоять из других подпрограмм — наборов инструкций. Обработка запроса пользователя, отправка данных на сервер, получение ответа, вывод страницы — всё это подпрограммы.
Вот пример логики такой подпрограммы:
Можно вернуть данные пользователю, записать их в файл или передать другой подпрограмме. Вот ещё один пример использования программы:
Эта команда запускает программу в ОС Linux, которая конвертирует изображение img.jpg в другой формат, а потом сохраняет в файл img.png.
Сейчас слово «подпрограмма» встречается редко — вместо него используют слова «функция», «процедура» или «метод».
По традиции программистов первая программа, написанная на изучаемом языке, должна выводить на экран надпись «Hello, World!».
В C++ такой код будет выглядеть так:
#include <iostream>
int main()
{
std::cout << "Hello, World! n";
}
Попробуем его запустить, а потом разберём, как он работает.
Самый простой вариант — зайти на сайт repl.it. На главной странице нажмите Start Coding, выберите C++ и нажмите Create Repl.
У вас откроется следующая страница:
Слева — менеджер файлов, в центре — текстовый редактор, где уже введён нужный нам код, а справа — консоль, в которой выводится результат. Чтобы запустить программу, нажмите Run.
Если же вы хотите компилировать код на своём компьютере, то установите компилятор. Я пользуюсь G++, его и вам рекомендую.
- Установщик для Windows.
- Название пакета для Linux: gcc.
После установки компилятора создайте отдельную папку для кода, а в ней — файл hello.cpp (это расширение для файлов с командами на C++). Желательно, чтобы путь к папке состоял из латинских символов и был написан без пробелов.
Откройте hello.cpp с помощью любого блокнота или редактора кода (например, Sublime text или VS Code) и вставьте в него код, указанный выше. Теперь откройте терминал с помощью инструкции ниже.
Windows | Linux |
---|---|
1. Нажмите Win + R, введите cmd и нажмите Enter. | 1. Нажмите Ctrl + Alt + t. Если не помогло, то подходящий способ можно найти в этой статье. |
2. Введите команду cd [путь]. Например, cd projectscpp1, если ваша папка находится по адресу c:projectscpp1. | 2. Введите команду cd [путь]. Например: cd ~/projects/cpp1 |
3. Если папка находится не на системном диске, то команду нужно изменить: cd /D [диск:][путь]. Например: cd /D d:projectscpp1 |
Затем введите следующую команду:
Эта команда скажет компьютеру, что нужно скомпилировать код из файла hello.cpp и сохранить результат в файл hello (или hello.exe в Windows).
После этого запустите скомпилированную программу, и вы увидите, что всё работает:
Теперь, когда мы смогли запустить программу, разберёмся в ней.
Начнём с самой первой строчки:
С помощью языка программирования можно:
- писать условия;
- работать с памятью;
- создавать подпрограммы;
- работать с классами, структурами и объектами;
- выполнять базовые математические операции и так далее.
Но чтобы получить больше возможностей, программе нужно как-то взаимодействовать с операционной системой. Писать код, который будет отправлять команды ОС, достаточно сложно, но нам и не придётся — всё уже написано другими разработчиками и помещено в специальную библиотеку.
Одна из таких библиотек, iostream, позволяет запрашивать пользовательский ввод или выводить что-то в консоли.
Есть и другие библиотеки, которые помогают работать с графикой, отправлять запросы через интернет, воспроизводить звук и так далее. В будущем вы научитесь самостоятельно писать свои собственные библиотеки.
Вернёмся к коду:
main () — это подпрограмма (функция), с которой начинается выполнение любой программы на C++. Её также называют точкой входа.
Подробнее подпрограммы мы разберём в следующих статьях. Сейчас нужно знать только то, что все команды записывают в тело функции.
Настало время понять, как работают команды:
Команда cout говорит компьютеру о том, что нужно вывести определённый текст в консоли. В нашем случае — Hello, World!. Любой текст должен быть в кавычках, иначе компилятор воспримет его как идентификатор, то есть имя команды, функции, переменной и так далее. Поэкспериментируйте с текстом, запустите программу и посмотрите, что изменится.
После каждой команды должна стоять точка с запятой — она говорит компилятору, что это конец инструкции и нужно переходить к следующей.
Пространства имён (например, std) относятся к библиотекам, и их мы рассмотрим в следующих статьях.
Изучая C++, подготовьтесь к большому объёму информации. В следующий раз мы также подробно разберём ввод и хранение информации.
Листая дальше, вы перейдете на страницу курса
Научитесь: Профессия Разработчик на C++ с нуля
Узнать больше