Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2017, 16:51   #1
drelay
Новичок
Джуниор
 
Регистрация: 28.06.2017
Сообщений: 1
По умолчанию Реализация сортировки массива структур С++

Суть задания: создать программу для работы с базой данных с нуля. Файл для БД создается программой для последующего заполнения.
В базе данных должна записываться информация о каждом студенте:
Имя Фамилия Отчество Группа Возраст Пол.
Главные условия задания сделать функционал, (саму базу будет заполнять преподаватель через консоль).
Функции: Добавление записи о студенте, редактировании, удалении, просмотра всех записей, сортировки по заданным параметрам : по группе, по фамилии, и т.д.
Считывание происходит из после заполнения через консоль.

Уже голова не варит, никак не могу сделать сортировку по заданному пользователем параметру.
Код:
Код:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <conio.h>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;
int main() {

    FILE *fp, *ft;

    char another, choice;

struct student {

        char fam[50], imua[50];
        char otch[50];
        char course[100];
        char pol[6];

        int age;

    };

 	setlocale(LC_ALL, ("Russian"));
    struct student e;
    char xfam[50], ximua[50], xcource[100], xpol[6];
    long int recsize;

    fp=fopen("users.txt","rb+");

    if (fp == NULL) {
        fp = fopen("users.txt","wb+");

        if (fp==NULL)
        {
             puts("Невозможно открыть файл!");
             return 0;
        }
    }
    

 recsize = sizeof(e);

 while(1) {
 	setlocale(LC_ALL, ("Russian"));
     system("cls");

     cout << "\n=========== Список студентов ===========";
     cout <<"\n\n                                          ";
     cout << "\n========================================";
     cout << "\n  1. Добавить запись о новом студенте";
     cout << "\n  2. Список студентов";
     cout << "\n  3. Редактировать запись о студенте";
     cout << "\n  4. Удалить запись о студенте";
     cout << "\n  5. Выйти из программы";
     cout << "\n========================================";
     cout << "\n";
     cout << "\n Выберите пункт меню:";
     fflush(stdin);
     choice = getche();
     switch(choice)
     {
      case '1' :
            fseek(fp,0,SEEK_END);
            another ='Y';
            while(another == 'Y' || another == 'y')
            {
                  system("cls");
                cout << "Введите фамилию: ";
                cin >> e.fam;
                cout << "Введите имя: ";
                cin >> e.imua;
                cout << "Введите отчество: ";
                cin >> e.otch;
				cout << "Введите курс: ";
                cin >> e.course;
                cout << "Введите возраст: ";
                cin >> e.age;
                cout << "Введите пол: ";
                cin >> e.pol;
                fwrite(&e,recsize,1,fp);
                cout << "\n Добавить еще одну запись? (Y/N) ";
                fflush(stdin);
                another = getchar();
            }
            break;
   case '2':
            system("cls");
           rewind(fp);
           cout << "=== Просмотр списка студентов ===";
           cout << "\n";
           while (fread(&e,recsize,1,fp) == 1){
           cout << "\n";
           cout <<"\nФИО     :: " <<e.fam <<" "<<e.imua<<" "<<e.otch;
           //cout << "\n";
           cout <<"\nКурс    :: " <<e.course ;
           cout <<"\nВозраст :: "<<e.age;
           cout << "\nПол    :: "<<e.pol;
           }
           cout << "\n\n";
           system("pause");
           break;
   case '6' : //Тут должна быть сортировка
   	
   case '3' :
            system("cls");
          another = 'Y';
          while (another == 'Y'|| another == 'y')
          {
              cout << "\n Введите имя студента : ";
              cin >> ximua;

            rewind(fp);
            while (fread(&e,recsize,1,fp) == 1)
            {
                if (strcmp(e.imua,ximua) == 0)
                {
                cout << "Введите новую фамилию : ";
                cin >> e.fam;
                cout << "Введите новое имя : ";
                cin >> e.imua;
                cout << "Введите новое отчество: ";
                cin >> e.otch;
                cout << "Введите новый курс    : ";
                cin >> e.course;
                cout << "Введите новый возраст   : ";
                cin >> e.age;
                cout << "Введите новый пол : ";
                cin >> e.pol;

                fseek(fp, - recsize, SEEK_CUR);
                fwrite(&e,recsize,1,fp);
                break;
                }
                else
                cout<<"Запись о студенте не найдена";
            }
            cout << "\n Изменить другую запись? (Y/N) ";
                fflush(stdin);
                another = getchar();
            }
            break;


     case '4':
       system("cls");
           another = 'Y';
          while (another == 'Y'|| another == 'y')
          {
          	 while (fread(&e,recsize,1,fp) == 1){
           cout << "\n";
           cout <<"\nФИО     :: " <<e.fam <<" "<<e.imua<<" "<<e.otch;
           //cout << "\n";
           cout <<"\nКурс    :: " <<e.course ;
           cout <<"\nВозраст :: "<<e.age;
           cout << "\nПол    :: "<<e.pol;
           }
           cout << "\n\n";
              cout << "\n Введите фамилию студента запись о котором нужно удалить : ";
              cin >> ximua;

              ft = fopen("temp.dat", "wb");

              rewind(fp);
              while (fread (&e, recsize,1,fp) == 1)

                 if (strcmp(e.imua,ximua) != 0)
                {
                    fwrite(&e,recsize,1,ft);
                }
                fclose(fp);
                fclose(ft);
                remove("users.txt");
                rename("temp.dat","users.txt");

                fp=fopen("users.txt","rb+");

                cout << "\n Удалить другую запись? (Y/N) ";
                fflush(stdin);
                another = getchar();
              }

              break;

              case '5':
              fclose(fp);
              cout << "\n\n";
              cout << "\t\t     Закрытие программы...";
              cout << "\n\n";
              exit(0);
          }
     }
system("pause");
return 0;
}
drelay вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример быстрой сортировки массива строк и сортировки методом выбора Вероника99 Помощь студентам 1 12.12.2016 19:23
Реализация сортировки Шелла beginner Помощь студентам 7 24.05.2015 23:47
Функции сортировки структур overload Общие вопросы C/C++ 0 23.05.2015 14:27
Удаление структур из массива структур Infini Помощь студентам 2 02.03.2013 22:31
Определение и использование структур. Методы сортировки. inc Помощь студентам 1 25.05.2011 06:21