Сортировка массива структур по алфавиту
Добавлено: 18 дек 2015, 08:54
Создать программу (выполнив функциональное разбиение) реализующую следующие функции работы с бинарным файлом. Предусмотреть создание меню со следующими пунктами:
1 – СОЗДАНИЕ НОВОГО ФАЙЛА
2– ПРОСМОТР ФАЙЛА
3 – КОРРЕКТИРОВКА ЗАПИСЕЙ ФАЙЛА (изменение, добавление новой записи, удаление записи)
4 – ВЫПОЛНЕНИЕ ЗАДАЧИ
5 – ВЫХОД
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Квитанция содержит наименование (телевизор и т. п.), марку изделия, дату приемки, фамилию мастера, состояние (выполнен или нет). ВЫВЕСТИ ИНФОРМАЦИЮ О СОСТОЯНИИ ЗАКАЗОВ НА УКАЗАННУЮ С КЛАВИАТУРЫ ДАТУ, ОТСОРТИРОВАННУЮ ПО ФАМИЛИИ ВЫПОЛНЯЮЩЕГО ЗАКАЗ МАСТЕРА.
!!! Помогите пожалуйста разобраться с сортировкой по алфавиту. Не понимаю как сделать так, чтобы выделить записи с указанной датой в отдельный массив и уже его сортировать (код последней функции)!!!
1 – СОЗДАНИЕ НОВОГО ФАЙЛА
2– ПРОСМОТР ФАЙЛА
3 – КОРРЕКТИРОВКА ЗАПИСЕЙ ФАЙЛА (изменение, добавление новой записи, удаление записи)
4 – ВЫПОЛНЕНИЕ ЗАДАЧИ
5 – ВЫХОД
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Квитанция содержит наименование (телевизор и т. п.), марку изделия, дату приемки, фамилию мастера, состояние (выполнен или нет). ВЫВЕСТИ ИНФОРМАЦИЮ О СОСТОЯНИИ ЗАКАЗОВ НА УКАЗАННУЮ С КЛАВИАТУРЫ ДАТУ, ОТСОРТИРОВАННУЮ ПО ФАМИЛИИ ВЫПОЛНЯЮЩЕГО ЗАКАЗ МАСТЕРА.
!!! Помогите пожалуйста разобраться с сортировкой по алфавиту. Не понимаю как сделать так, чтобы выделить записи с указанной датой в отдельный массив и уже его сортировать (код последней функции)!!!
Код: Выделить всё
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <locale.h>
FILE *fl;
struct worker // Шаблон структуры
{
char surname[40], name[40], brand[40], status[4];
int den, mesyc, god;
};
worker work[1000]; // Массив структур
int nw, den, mesyc, god; // Количество рабочих
int Menu(); // Меню
void AddNewData(); // Доблавение новых данных
void ViewFile(); // Просмотр содержимого файла
void Edit(); // Редактирование данных
void FileToStructEdit(); // Запись файла в структуру
void ViewResult(); // Вывод результата
void Exit(); // Выход из программы
void Enter(int); // Ввод фамилии с проверкой правильности ввода
#define c 99999;
void main()
{
setlocale(LC_CTYPE, "Russian");
do
{
system("cls");
switch (Menu())
{
case 1: AddNewData(); break;
case 2: ViewFile(); break;
case 3: Edit(); break;
case 4: ViewResult(); break;
case 5: Exit(); break;
}
_getch();
} while(true);
}
int Menu()
{
int n;
do
{
printf("Enter desired action number");
printf("\n1 - Sozdanie faila");
printf("\n2 - view the file");
printf("\n3 - edit records");
printf("\n4 - view result");
printf("\n5 - exit");
printf("\n\nEnter an action number: ");
scanf("%d", &n);
fflush(stdin);
system("cls");
} while(n < 1 || n > 5);
return n;
}
void AddNewData()
{
int i, den, mesyc, god;
char continueAdd;
char Surnme[40], name[40], brand[40], status[4];
// Создание нового файла/стирание старого
if (!(fl = fopen("list.txt", "wb")))
{
printf("\n\nCreating file error\n");
return;
}
fclose(fl);
// Открытие файла для записи
if (!(fl = fopen("list.txt", "rb++")))
{
printf("\n\nOpening file error\n");
return;
}
for (i = 0; i < 999; i++)
{
Enter(i);
nw = i + 1;
fwrite(&work[i], sizeof(worker), 1, fl);
do
{
printf("\nContinue add records(y/n): ");
scanf("%c", &continueAdd);
fflush(stdin);
}
while(continueAdd != 'y' && continueAdd != 'Y' && continueAdd != 'n' && continueAdd != 'N');
if (continueAdd == 'n' || continueAdd == 'N')
{
break;
}
}
fclose(fl);
printf("\nZapis sohranena. Najmite lubuy klavihy...");
}
void ViewFile()
{
if (!(fl = fopen("list.txt", "rb")))
{
printf("\n\nOpening file error\n");
return;
}
printf ("Format zapisi");
printf("\n # Familia, Naimenovanie, Marca izdelia, Data, Sostoynie gotovnosti");
printf("\n");
int i = 0;
worker workRead;
while (fread(&workRead, sizeof(worker), 1, fl))
{
if (feof(fl))
{
break;
}
work[i] = workRead;
printf("\n%d %s, %s, %s, %d.%d.%d, %s",
i + 1,
work[i].surname,
work[i].name,
work[i].brand,
work[i].den,
work[i].mesyc,
work[i].god,
work[i].status);
i++;
}
fclose(fl);
printf("\n\nPress any key");
}
void FileToStructEdit()
{
worker workEdit;
int i = 0;
if(!(fl=fopen("list.txt", "rb")))
{
printf("\n\nFile opening error\n");
return;
}
nw = 0;
while(fread(&workEdit, sizeof(worker), 1, fl))
{
if (feof(fl))
{
break;
}
work[i] = workEdit;
i++;
nw++;
}
}