Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Нужна функция сортировки (любым методом)


Автор: devil4eg 5.4.2012, 13:11
Имеется следующая программа (нехватает сортировки)

Код

#include <iomanip.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#define MARKA 10
#define S_N 10
#define HARAKTER 30
void begtable()
{
    //      1234567890 1234567890 123456789012345678901234567890 123 123
    cout<<"_______________________________________________________________\n";
    cout<<"|  Марка   | Сер.Ном  |       Характеристики         |Оце|В.Р |\n";
    cout<<"---------------------------------------------------------------\n";
}
void endtable()
{
    cout<<"________________________________________________________________\n";
}
struct noutbook
{
    char marka[MARKA];
    char s_n[S_N];
    char harakter[HARAKTER];
    int ocenka_prz;
    int chas_atm;
};

istream& operator>>(istream& in, noutbook& z)
{
    cout<<"Марка= ";
    in.seekg(0L, ios::end);
    in.get(z.marka,MARKA-1,'\n');
    cout<<"Серийный номер= ";
    in.seekg(0L, ios::end);
    in.get(z.s_n,S_N-1,'\n');
    cout<<"Характеристики= ";
    in.seekg(0L, ios::end);
    in.get(z.harakter,HARAKTER-1,'\n');
    cout<<"Оценка производительности= ";
    in.seekg(0L, ios::end);
    in>>z.ocenka_prz;
    cout<<"Время работы= ";
    in.seekg(0L, ios::end);
    in>>z.chas_atm;
    return in;
}
ofstream& operator << (ofstream& f, noutbook z)
{
    f<<z.marka<<endl<<z.s_n<<endl<<z.harakter<<endl<<z.ocenka_prz<<endl<<z.chas_atm<<endl;
    return f;
}
ifstream& operator>> (ifstream& f, noutbook& z)
{
    f.getline(z.marka,MARKA,'\n');
    f.getline(z.s_n,S_N,'\n');
    f.getline(z.harakter,HARAKTER,'\n');
    f>>z.ocenka_prz;
    f.seekg(2l,ios::cur);
    f>>z.chas_atm;
    f.seekg(2l,ios::cur);
    return f;
}
ostream& operator<<(ostream& out, noutbook& z)
{
    out.setf (ios::left);
    out<<"|"<<setw(10)<<z.marka<<"|"<<setw(10)<<z.s_n<<"|"<<setw(30)<<z.harakter<<"|";
    out.setf(ios::right);
    out<<setw(3)<<z.ocenka_prz<<"|"<<setw(4)<<z.chas_atm<<"|\n";
    return out;
}
void sozdanie(char reg)
{
    ofstream fl;
    noutbook s;
    char c;
    if (reg=='1')
      fl.open("noutbook.txt", ios::out);
    else
      fl.open ("noutbook.txt", ios::app);
    if (!fl)
    {
        cerr<<"Ошибка при создании базы\n";
        exit(1);
        }
    do
    {
        cin>>s;
        fl<<s;
        cout<<"Продолжить ввод  (y/n)?";
        cin.seekg(0l,ios::end);
        cin>>c;
    }
    while (c=='y'||c=='Y'||c=='D');
    fl.close();
}
void output()
{
    ifstream fl;
    noutbook s;
    fl.open("noutbook.txt", ios::in);
    if (!fl)
    {
        cerr<<"Ошибка открытия файла для чтения\n";
        exit(1);
    }
    cout<<"Марки\n";
    begtable();
    while (fl)
    {
        fl>>s;
        if (strlen (s.marka)<=0)
            break;
        cout<<s;
    }
    endtable();
    fl.close();
    }
void poisk()
{
    ifstream fl;
    noutbook s;
    char marka[MARKA];
    char s_n[S_N];
    char harakter[HARAKTER];
    char c;
    int ocenka_prz;
    int chas_atm;
    fl.open("noutbook.txt", ios::in);
    if (!fl)
    {
        cerr<<"Ошибка чтения...";
        exit(1);
    }
    while(1)
    {
        cout<<"Поиск информации по:\n";
        cout<<"1. По Марки: \n";
        cout<<"2. По серийному номеру: \n";
        cout<<"3. По характеристикам: \n";
        cout<<"4. По оценки производительности: \n";
        cout<<"5. По времени работы: \n";
        cout<<"6. Выход: \n";
        cout<<"Ваш выбор: ";
        cin.seekg(0l, ios::end);
        cin>>c;
        switch(c)
        {
            case '1':
                cout<<"Задайте марку поиска: ";
                cin.seekg(0l, ios::end);
                cin.get (marka, MARKA-1,'\n');
                break;
            case '2':
                cout<<"Задайте серийный номер устройства: ";
                cin.seekg(0l, ios::end);
                cin.get (s_n, S_N-1,'\n');
                                break;
            case '3':
                cout<<"Задайте характеритики: ";
                cin.seekg(0l, ios::end);
                cin.get (harakter, HARAKTER-1,'\n');
                                break;
            case '4':
                cout<<"Задайте оценку производительности: ";
                cin.seekg(0l, ios::end);
                cin>>ocenka_prz;
                                break;
            case '5':
                cout<<"Задайте Время работы: ";
                cin.seekg(0l, ios::end);
                cin>>chas_atm;
                                break;
            case '6':
                         fl.close();
                return;
        }
        fl.clear (!ios::eofbit);
        fl.seekg(0l, ios::beg);
        begtable();
        while(!fl.eof())
        {
            fl>>s;
            if (strlen(s.marka)<=0)
                break;
            if ((c=='1'&&strcmp(s.marka,marka)==0)||(c=='2'&&strcmp(s.s_n,s_n)==0)||(c=='3'&&strcmp(s.harakter,harakter)==0)||(c=='4'&&s.ocenka_prz==ocenka_prz)||(c=='5'&&s.chas_atm==chas_atm))
                cout<<s;
        }
        endtable();
        }
}
void udalenie()
{
    ifstream fl;
    ofstream fo;
    noutbook s;
        char marka[MARKA];
    char s_n[S_N];
    int prizn;
    fl.open ("noutbook.txt", ios::in);
    if (!fl)
    {
        cerr<<"Ошибка чтения\n";
        exit(1);
    }
    fo.open ("tmp.txt",ios::out);
    if (!fo)
    {
        cerr<<"Ошибка временного файла\n";
        exit(1);
    }
    cout<<"ВВедите марку оборудования: ";
    cin.seekg(0l, ios::end);
    cin.get (marka, MARKA-1, '\n');
    cout<<"ВВедите серийный номер: ";
    cin.seekg(0l, ios::end);
    cin.get (s_n, S_N-1, '\n');
    prizn=0;
    while (!fl.eof())
    {
        fl>>s;
                cout << s;
        if (strlen (s.marka)<=0)
            break;
        if (strcmp(s.s_n,s_n)==0)
        {
            prizn=1;
            cout<<"Найдена запись для удаления\n";
        }
        else
            fo<<s;
    }
    fl.close();
    fo.close();
    if (prizn==1)
    {
        remove ("noutbook.txt");
        rename ("tmp.txt","noutbook.txt");
    }
    else
        remove ("tmp.txt");

}

void redakt()
{
    ifstream fl;
    ofstream fo;
    noutbook s;
        char marka[MARKA];
    char s_n[S_N];
    char harakter[HARAKTER];
    int ocenka_prz;
    int chas_atm;
        char c;
    int prizn;
    fl.open ("noutbook.txt", ios::in);
    if (!fl)
    {
        cerr<<"Ошибка чтения\n";
        exit(1);
    }
    fo.open ("tmp.txt",ios::out);
    if (!fo)
    {
        cerr<<"Ошибка временного файла\n";
        exit(1);
    }
        fl.clear (!ios::eofbit);
        fl.seekg(0l, ios::beg);
    cout<<"ВВедите серийный номер: ";
    cin.seekg(0l, ios::end);
    cin.get (s_n, S_N-1, '\n');
    prizn=0;
    while (!fl.eof())
    {
        fl>>s;
                cout<<s;
        if (strlen (s.marka)<=0)
            break;
        if (strcmp(s.s_n,s_n)==0)
    {
            prizn=1;
            cout<<"Найдена запись на редактирование\n";
            while (1)
            {
    cout<<"Что вы хотите отредактировать в данной записи\n";
    cout<<"1. Редактировать Марку оборудования \n";
    cout<<"2. Редактировать серийный номер \n";
    cout<<"3. Редактировать характеристики \n";
    cout<<"4. Редактировать оценку \n";
    cout<<"5. Редактировать время работы \n";
    cout<<"6. РЕДАКТИРОВАТЬ ЗАПИСЬ ПОЛНОСТЬЮ \n";
    cout<<"7. Выход \n";
    cout<<"Ваш выбор: ";
    cin.seekg(0l, ios::end);
    cin>>c;
    if (c=='7')
        break;
        switch(c)
            {
        case '1':
            cout<<"ВВедите новую МАРКУ оборудования: ";
            cin.seekg(0l, ios::end);
            cin.get (s.marka, MARKA-1,'\n');
            break;
        case '2':
            cout<<"Введите новый Серийный номер= ";
            cin.seekg(0L, ios::end);
            cin.get(s.s_n,S_N-1,'\n');
            break;
        case '3':
            cout<<"Введите новые характеристики= ";
            cin.seekg(0L, ios::end);
            cin.get(s.harakter,HARAKTER-1,'\n');
            break;
        case '4':
            cout<<"Укажите новую оценку производительности= ";
            cin.seekg(0L, ios::end);
            cin>>s.ocenka_prz;
            break;
        case '5':
            cout<<"Укажите время работы= ";
            cin.seekg(0L, ios::end);
            cin>>s.chas_atm;
            break;
        case '6':
            cout<<"ВВедите новую запись Марки= ";
            cin.seekg(0L, ios::end);
            cin.get(s.marka,MARKA-1,'\n');
            cout<<"Введите новый Серийный номер= ";
            cin.seekg(0L, ios::end);
            cin.get(s.s_n,S_N-1,'\n');
            cout<<"Введите новые характеристики= ";
            cin.seekg(0L, ios::end);
            cin.get(s.harakter,HARAKTER-1,'\n');
            cout<<"Укажите новую оценку производительности= ";
            cin.seekg(0L, ios::end);
            cin>>s.ocenka_prz;
            cout<<"Укажите время работы= ";
            cin.seekg(0L, ios::end);
            cin>>s.chas_atm;
                        break;
        case '7':
            break;
            }
        }
        }        
            fo<<s;
    }
    fl.close();
    fo.close();
    if (prizn==1)
    {
        remove ("noutbook.txt");
        rename ("tmp.txt","noutbook.txt");
    }
    else
        remove ("tmp.txt");
             
}

Void sotrirovka() //прототит сортировки (метод вставки)
{

}


void main ()
{
    char c;
    while(1)
    {
        cout<<"1. Создание базы\n";
        cout<<"2. Добавление\n";
        cout<<"3. Вывод всей информации\n";
        cout<<"4. Выборка по различным полям\n";
        cout<<"5. Редактирование\n";
        cout<<"6. Удаление\n";
                cout<<"7. Сортировка\n";
        cout<<"8. Выход\n";
        cout<<"Ваш выбор: ";
        cin.seekg(0l,ios::end);
        cin>>c;
        switch (c)
        {
            case '1':
            case '2':
                sozdanie (c);
                break;
            case '3':
                output();
                break;
            case '4':
                poisk();
                break;
            case '5':
                redakt();
                break;
            case '6':
                udalenie();
                break;
            case '7':
                sortirovka;
                                break;
            case '8':
                return;
        }
    }
}


Прикрепляю файл, в котором он должен сделать сортировку.

Ps саму функцию и пункт в меню уже добавил, нажен сам код сортировки.

Автор: borisbn 5.4.2012, 13:36
http://lmgtfy.com/?q=%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4+%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8

Автор: xvr 5.4.2012, 13:47
Сортировки -
http://www.youtube.com/watch?v=lyZQPjUT5B4
http://www.youtube.com/watch?v=ywWBy6J5gz8&feature=relmfu
http://www.youtube.com/watch?v=Ns4TPTC8whw&feature=relmfu
http://www.youtube.com/watch?v=XaqR3G_NVoo&feature=relmfu
http://www.youtube.com/watch?v=ROalU379l3U&feature=relmfu
http://www.youtube.com/watch?v=CmPA7zE8mx0&feature=relmfu
 smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)