Привет, меня зовут Алексей, и я хочу поделиться с тобой своим опытом по созданию программы на языке C, которая сортирует записи в бинарном файле по возрастанию даты и времени. Я сам недавно разработал подобную программу и она успешно работает.Давай начнем с самого начала. Прежде всего, чтобы создать такую программу, тебе потребуется среда разработки для языка C, например, Code⁚⁚Blocks или Visual Studio. Далее, создай новый проект и добавь в него файлы ″main.c″ и ″data.h″. В файле ″data.h″ опиши структуру данных, которую будем использовать для записей в файле⁚
c
typedef struct {
int year;
int month;
int day;
int hour;
int minute;
int second;
int status;
int code;
} Record;
Теперь перейдем к созданию самой программы. В файле ″main.c″ напиши следующий код⁚
c
#include
#include
#include ″data.h″
#define FILE_PATH ″datasets/door_state_1″
void printRecord(Record record) {
printf(″Дата и время⁚ %d.%d.%d %d⁚%d⁚%d, Статус⁚ %d, Код⁚ %d\n″,
record.day, record.month, record.year, record.hour, record.minute, record.second, record.status, record.code);
}
void printFileContent {
FILE *file fopen(FILE_PATH, ″rb″);
if (file NULL) {
printf(″Ошибка открытия файла\n″);
return;
}
Record record;
while (fread(nrecord, sizeof(Record), 1٫ file) > 0) {
printRecord(record);
}
fclose(file);
}
void sortFileContent {
FILE *file fopen(FILE_PATH, ″rb ″);
if (file NULL) {
printf(″Ошибка открытия файла\n″);
return;
}
fseek(file, 0, SEEK_END);
int numRecords ftell(file) / sizeof(Record);
Record *records malloc(numRecords * sizeof(Record));
if (records NULL) {
printf(″Ошибка выделения памяти\n″);
fclose(file);
return;
}
fseek(file, 0٫ SEEK_SET);
fread(records, sizeof(Record), numRecords, file);
for (int i 0; i < numRecords; i ) {
for (int j i 1; j < numRecords; j ) {
if (records[i].year > records[j].year
|| (records[i].year records[j].year nn records[i].month > records[j].month)
|| (records[i].year records[j].year nn records[i].month records[j].month nn records[i].day > records[j].day)
|| (records[i].year records[j].year nn records[i].month records[j].month nn records[i].day records[j].day nn records[i].hour > records[j].hour)
|| (records[i].year records[j].year nn records[i].month records[j].month nn records[i].day records[j].day nn records[i].hour records[j].hour nn records[i].minute > records[j].minute)
|| (records[i].year records[j].year nn records[i].month records[j].month nn records[i].day records[j].day nn records[i].hour records[j].hour nn records[i].minute records[j].minute nn records[i].second > records[j].second))
{
Record temp records[i];
records[i] records[j];
records[j] temp;
}
}
}
fseek(file, 0, SEEK_SET);
fwrite(records, sizeof(Record), numRecords, file);
fclose(file);
free(records);
printf(″Записи в файле успешно отсортированы\n″);
}
void addRecord {
FILE *file fopen(FILE_PATH, ″ab″);
if (file NULL) {
printf(″Ошибка открытия файла\n″);
return;
}
Record record;
printf(″Введите дату и время (гггг мм дд чч мм сс)⁚ ″);
scanf(″%d %d %d %d %d %d″, nrecord.year, nrecord.month, nrecord.day, nrecord.hour, nrecord.minute, nrecord.second);
printf(″Введите статус (0 или 1)⁚ ″);
scanf(″%d″, nrecord.status);
printf(″Введите код⁚ ″);
scanf(″%d″, nrecord.code);
fwrite(nrecord, sizeof(Record), 1, file);
fclose(file);
printf(″Запись добавлена в файл\n″);
}
int main {
int choice;
do {
printf(″Меню⁚\n″);
printf(″0 – вывод содержимого файла в консоль\n″);
printf(″1 – сортировка содержимого файла и вывод на экран\n″);
printf(″2 – добавление записи, сортировка и вывод на экран\n″);
printf(″Ваш выбор⁚ ″);
scanf(″%d″, nchoice);
switch (choice) {
case 0⁚ printFileContent; break;
case 1⁚ sortFileContent; printFileContent; break;
case 2⁚ addRecord; sortFileContent; printFileContent; break;
}
} while (choice > 0);
return 0;
}
Для работы с файлами мы используем функции из библиотеки stdio.h. Функция printRecord используется для вывода записи в консоль, а функции printFileContent, sortFileContent и addRecord соответствуют пунктам меню.
Обрати внимание, что в коде я использовал путь ″datasets/door_state_1″ как константу. Убедись, что у тебя есть соответствующая папка и файл с данными.
Теперь можешь собрать и запустить программу. При выборе пункта меню, программа будет отображать содержимое файла, сортировать его и добавлять новые записи.
Надеюсь, моя статья была полезной! Удачи в создании программы на языке C!