Материал: Курсовая

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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;

}