Сортировка По Алфавиту

kingl

New member
30.10.2013
2
0
#1
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Квитанция содержит наименование (телевизор и т. п.), марку изделия, дату приемки, фамилию мастера, состояние (выполнен или нет). ВЫВЕСТИ ИНФОРМАЦИЮ О СОСТОЯНИИ ЗАКАЗОВ НА УКАЗАННУЮ С КЛАВИАТУРЫ ДАТУ, ОТСОРТИРОВАННУЮ ПО ФАМИЛИИ ВЫПОЛНЯЮЩЕГО ЗАКАЗ МАСТЕРА.
Остался последний пункт сделать под номером 4. Подскажите, пожалуйста, как сделать сортировку по фамилии.
Код:
#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); // Ввод фамилии с проверкой правильности ввода
//void EnterDetailsAmount(int); // Ввод количества деталей с проверкой правильности ввода
//void EnterTeamNumber(int); // Ввод номера бригады с проверкой правильности ввода

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 - Создание файла");
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("\nЗапись сохранена. Нажмите любую клавишу...");
}

void ViewFile()
{
if (!(fl = fopen("list.txt", "rb")))
{
printf("\n\nOpening file error\n");
return;
}

printf ("Формат записи");
printf("\n № Фамилия, Наименование, Марка изделия, Дата, Состояние готовности");
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++;
}
}
void Edit()
{
int actionNumber, i, recordNumber;

do
{
printf("1 - удалить запись");
printf("\n2 - редактировать запись");
printf("\n3 - добавить новую запись");
printf("\n4 - отмена");

printf("\n\nВведите номер действия: ");
scanf("%d", &actionNumber);
fflush(stdin);

if (actionNumber < 1 || actionNumber > 4)
{
printf("Пожалуйста, введите число от 1 до 4\n\n");
}
}
while(actionNumber < 1 || actionNumber > 4);

switch (actionNumber)
{
case 1:
FileToStructEdit();

system("cls");
printf("Удаление записи");
printf ("Формат записи");
printf("\n № Фамилия, Наименование, Марка изделия, Дата, Состояние готовности");
printf("\n");

for (i = 0; i < nw; i++)
{
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);
}

printf("\n\n");

do
{
printf("Введите номер удаляемой строки: ");
scanf("%d", &recordNumber);
fflush(stdin);
}
while(recordNumber < 1 || recordNumber > nw);

if(!(fl=fopen("list.txt", "wb")))
{
printf("\n\nFile opening error\n");
return;
}

for (i = 0; i < nw - 1; i++)
{
if (i > recordNumber - 2)
{
work[i] = work[i + 1];
}

fwrite(&work[i], sizeof(worker), 1, fl);
}

fclose(fl);
printf("Удаление прошло успешно");

break;

case 2:
FileToStructEdit();

system("cls");
printf("Редактирование записи");
printf ("Формат записи");
printf("\n № Фамилия, Наименование, Марка изделия, Дата, Состояние готовности");
printf("\n");

for (i = 0; i < nw; i++)
{
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);
}

printf("\n\n");

do
{
printf("Введите номер записи для редактирования: ");
scanf("%d", &recordNumber);
fflush(stdin);
}
while(recordNumber < 1 || recordNumber > nw);

if(!(fl=fopen("list.txt", "wb")))
{
printf("\n\nFile opening error\n");
return;
}

for (i = 0; i < nw; i++)
{
if (i == recordNumber - 1)
{
Enter(i);
}

fwrite(&work[i], sizeof(worker), 1, fl);
}

fclose(fl);
printf("Editing was successful");

break;

case 3: 
FileToStructEdit();

system("cls");
printf("Adding new record\n");

if(!(fl=fopen("list.txt", "wb")))
{
printf("\n\nFile opening error\n");
return;
}

for (int i = 0; i < nw + 1; i++)
{
if (i == nw)
{
Enter(i);
}

fwrite(&work[i], sizeof(worker), 1, fl);
}

nw++;
fclose(fl);
printf("Adding new record was successful");

break;

// Выход в главное меню
case 4: 
return;

break;
}

printf("\n\nPress any key");
}

void Enter(int i)
{
int den, mesyc, god;
char continueAdd;
char Surnme[40], name[40], brand[40], status[4];


printf("\nВведите фамилию: ");
scanf("%s", &Surnme);
fflush(stdin);
strcpy(work[i].surname, Surnme);

printf("\nВведите наименование: ");
scanf("%s", &name);
fflush(stdin);
strcpy(work[i].name, name);

printf("\nВведите марку изделия: ");
scanf("%s", &brand);
fflush(stdin);
strcpy(work[i].brand, brand);

printf("\nВведите состояние готовности: ");
scanf("%s", &status);
strcpy(work[i].status, status);

printf("\nВведите день, месяц, год: ");
scanf("%d %d %d", &den, &mesyc, &god);
work[i].den = den;
work[i].mesyc = mesyc;
work[i].god = god;


}
void Exit()
{
exit(0);
}