tmp = 0;
printf("__________________________________________________________________________\n");
printf("| Номер | Назначение | Тип поезда | Время отправления | Время пути |\n");
printf("\n__________________________________________________________________________\n");
ticketOut(name);
printf("\n__________________________________________________________________________\n");
break;
}
if (tmp == 1)
printf("\nРейс с данным номером не был найден.\n");
system("pause");
fclose(f);
}
void searchTravel(char* file) { // поиск самого быстрого поезда определенного типа
int time_min = 100000000, n = 0, pos = –1;
char station[15], type_info[12];
system("cLs");
if ((f = fopen(file, "rb+")) == NULL) { //открытие файла и проверка на правильность открыя
perror("\nОшибка открытия файла.");
puts("\nНажмите любую клавишу для выхода в меню...\n");
system("pause");
return;
}
puts("\nВведите пункт назначения:\n");
scanf("%15s", station);
puts("\nВведите тип поезда:\n");
scanf("%12s", type_info);
while (fread(&name, sizeof(struct train), 1, f)) {
n++;
if (strcmp(name.arrivial, station) == 0)
if (strcmp(name.type, type_info) == 0)
if (time_min >= name.time_travel_hour * 60 + name.time_travel_minute) {
pos = n;
time_min = name.time_travel_hour * 60 + name.time_travel_minute;
}
}
if (pos == –1)
printf("\nПодходящих рейсов нет.\n");
else {
printf("\n__________________________________________________________________________\n");
printf("| Номер | Назначение | Тип поезда | Время отправления | Время пути |\n");
printf("__________________________________________________________________________\n");
fseek(f, (pos – 1) * sizeof(struct train), SEEK_SET);// Установка указателя на запись
fread(&name, sizeof(struct train), 1, f);//Считывание записи из файла в ОП
ticketOut(name);
printf("\n__________________________________________________________________________\n");
}
system("pause");
fclose(f);
}
void del(char* file1) { // функция удаления записи
FILE* f1, * f2;
int num;
char file2[] = "tmp";
system("cls");
if ((f1 = fopen(file1, "rb")) == NULL)
{
perror("\nОшибка открытия файла.");
puts("\nДля продолжения нажмите любую кнопку...\n");
system("pause");
return;
}
if ((f2 = fopen(file2, "wb")) == NULL)
{
perror("\nОшибка открытия файла.");
puts("\nДля продолжения нажмите любую кнопку...\n");
system("pause");
return;
}
printf("Введите номер рейса, сведения о которой хотите удалить.\n");
fflush(stdin);
scanf("%d", &num);
printf("\n");
while (fread(&name, sizeof(struct train), 1, f1))
if (num != name.number) // Сравнение номеров
fwrite(&name, sizeof(struct train), 1, f2); // Запись во временный файл
puts("\n Запись успешно удалена.\n");
system("pause");
fclose(f1);
fclose(f2);
remove(file1);
rename(file2, file1);
}
void printFile() { // вывод текстового файла с заданием на экран
char ch = 0;
FILE* file = fopen("zad.txt", "r");
system("cLs");
while (!feof(file) && !ferror(file)) {
ch = getc(file);
if (ch != EOF)
{
putchar(ch);
}
}
fclose(file);
system("pause");
}
void edit(char* file) { // Редактирование записи
int n = 0, num, point, tmp = 1;
system("cLs");
if ((f = fopen(file, "rb+")) == NULL) { //открытие файла и проверка на правильность открыя
perror("\nОшибка открытия файла.");
puts("\nНажмите любую клавишу для выхода в меню...\n");
system("pause");
return;
}
puts("Введите номер рейса для редактирования.\n");
scanf("%d", &num);
while (fread(&name, sizeof(struct train), 1, f)) {
n++;
if (name.number == num) {
tmp = 0;
fseek(f, (n – 1) * sizeof(struct train), SEEK_SET);// Установка указателя на запись
fread(&name, sizeof(struct train), 1, f);//Считывание записи из файла в ОП
printf("__________________________________________________________________________\n");
printf("| Номер | Назначение | Тип поезда | Время отправления | Время пути |\n");
printf("__________________________________________________________________________\n");
ticketOut(name);//Вывод ее на экран
printf("\n__________________________________________________________________________\n");
puts("\n\tВыберите поле для редактирования:\n");
puts("\t1. Номер поезда.\n");
puts("\t2. Пункт назначения.\n");
puts("\t3. Тип поезда.\n");
puts("\t4. Время отправления.\n");
puts("\t5. Время пути.\n");
puts("\t6. Изменить запись полностью.\n\n");
scanf("%d", &point);
system("cLs");
if (point == 1 || point == 6) {
puts("\tНомер поезда.\n");
scanf("%d", &name.number);
}
if (point == 2 || point == 6) {
puts("\tПункт назначения.\n");
scanf("%15s", name.arrivial);
}
if (point == 3 || point == 6) {
puts("\tТип поезда.\n");
scanf("%12s", name.type);
}
if (point == 4 || point == 6) {
puts("\tВремя отправления. (часы и минуты через пробел)\n");
scanf("%2d %2d", &name.time_departure_hour, &name.time_departure_minute);
}
if (point == 5 || point == 6) {
puts("\tВремя пути. (часы и минуты через пробел)\n");
scanf("%2d %2d", &name.time_travel_hour, &name.time_travel_minute);
}
// Установка указателя на эту запись
fseek(f, (n – 1) * sizeof(struct train), SEEK_SET);
//Запись измененной записи из ОП в файл
fwrite(&name, sizeof(struct train), 1, f);
break;
}
}
if (tmp) printf("Нет записи о рейсе с введённым номером.\n");
system("pause");
fclose(f);
}
int menu(char* file_name) { // меню
int item;
while (1)
{
system("cLs");
puts(" \t\tМ Е Н Ю");
puts(" \n\t 1. Просмотр задания.");
puts(" \n\t 2. Создать и добавить.");
puts(" \n\t 3. Поиск рейса по временному промежутку.");
puts(" \n\t 4. Поиск рейса по номеру.");
puts(" \n\t 5. Поиск самого быстрого рейса.");
puts(" \n\t 6. Просмотр информации о рейсах.");
puts(" \n\t 7. Удаление.");
puts(" \n\t 8. Редактирование.");
puts(" \n\t 9. Выход.");
puts(" \nВведите номер пункта меню: ");
scanf("%d", &item);
switch (item) {
case 1:
printFile();
break;
case 2:
addInf(file_name);
break;
case 3:
searchDeparture(file_name);
break;
case 4:
searchNum(file_name);
break;
case 5:
searchTravel(file_name);
break;
case 6:
show(file_name);
break;
case 7:
del(file_name);
break;
case 8:
edit(file_name);
break;
case 9:
system("cLs");
printf("\n\nРабота программы закончена. Спасибо.\n\n\n");
system("pause");
return 0;
default: {
system("cLs");
printf("\n\nПункт меню отсутствует.\n\n\n");
system("pause");
return 2;
}
}
}
}
int main() {
char file_name[25];
setlocale(LC_ALL, "Rus");
puts("Пожалуйста, введите имя файла:\n");
gets(file_name);
menu(file_name);
return 0;
}