Задание:
- Создать файл, содержащий ФИО сотрудника, год, месяц, длительность командировки в днях, город, в который осуществляется выезд, выездная сумма командировочных расходов.
- Определить общие выплаты командировочных за указанный месяц.
- Вывести список наиболее часто посещаемых городов в порядке убывания за указанный период (с месяца X по месяц Y).
Данный проект имеет два типа пользователя: администратор и пользователь.
Администратор может:
- Загрузка данных из файла
- Вывод записей
- Удаление одной или всех записей
- Поиск записи
- Редактирование записи
- Вывод списка наиболее посещаемых городов за указанный месяц
- Вывод общей выплаты командировочных за указанный месяц
- Запись в файл
- Изменение пароля
Пользователь может:
- Просмотр записей
- Вывод списка наиболее посещаемых городов за указанный месяц
- Вывод общей выплаты командировочных за указанный месяц
- Поиск записи
Содержимое проекта:

Для данной задачи лучше всего подходят текстовые файлы. Во время своей работы, программа оперирует структурами которые ввиду своей простоты без проблем записываются и считываются из текстового файла.
Для объединения данных внутри программы используется контейнер std::list из стандартной библиотеки
Пример кода:
// Ф-ция добавления новых элементов
void addCommandV(list<CommandStruct> &a)
{
system("Cls");
std::string TEXT;
//Создаем временную переменную
CommandStruct *tmp = new CommandStruct;
double dBuffer = 0;
int i = 0, iBuffer = 0;
int count;
cout << "Сколько записей добавить?" << endl;
cin >> count;
cin.ignore();
for (i = 0; i < count; i++)
{
//Заполняем её
cout << "Элемент " << a.size() << endl;
//Ввод инвентарного номера
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите инв.номер: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат инвентарного номера!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат инвентарного номера!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
tmp->position = iBuffer;
iBuffer = 0;
cout << "Введите ФИО: ";
getline(cin, TEXT);
tmp->sFIO = TEXT;
//Ввод год поездки
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите год поездки: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат года!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат года!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
tmp->iYear = iBuffer;
iBuffer = 0;
//Ввод месяца
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите месяц поездки: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат месяца!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат месяца!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
tmp->iMonth = iBuffer;
iBuffer = 0;
//Ввод количества дней отведенных на поездку
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите количество дней поездки: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
iBuffer = std::stoi(TEXT);
}
catch(...)
{
cout << "Неправильный формат количества дней!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
iBuffer = -2;
}
if (iBuffer != -2 && iBuffer < 0)
{
cout << "Неправильный формат количества дней!!! Попробуйте еще!!!" << endl;
}
}
while(iBuffer < 0);
tmp->iCountOfDays = iBuffer;
iBuffer = 0;
//Ввод города
cout << "Введите город: ";
getline(cin, TEXT);
tmp->sCity = TEXT;
//Ввод выделенной суммы на поездку
//Цикл который выполниться минимум 1 раз
do
{
cout << "Введите сумму в рублях, выделенную на поездку: ";
getline(cin, TEXT);
try
{
//Конверт данных в число
dBuffer = std::stod(TEXT);
}
catch(...)
{
cout << "Неправильный формат суммы!!! Попробуйте еще!!!" << endl;
//tmp->position = 0;
dBuffer = -2;
}
if (dBuffer != -2 && dBuffer < 0)
{
cout << "Неправильный формат суммы!!! Попробуйте еще!!!" << endl;
}
}
while(dBuffer < 0);
tmp->dSumm = dBuffer;
dBuffer = 0;
// Добавляем её в список
a.push_back( *tmp );
}
// Освобождаем память
delete tmp;
}
Содержание архива
-
Исходный код на С++ для Visual Studio
Телеграм
-