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

Тема в разделе "C/C++/C#", создана пользователем kingl, 18 дек 2013.

  1. kingl

    kingl New Member

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

Поделиться этой страницей