Главная страница
Навигация по странице:

  • Тема работы

  • Вариант № 27 Задание

  • Описание разработанных функций

  • Листинг программы

  • Тестовый пример

  • Добавление записи Удаление записи

  • Формирование выходного массива

  • РГР. Отчет по расчётнографической работе по дисциплине Программирование


    Скачать 1.62 Mb.
    НазваниеОтчет по расчётнографической работе по дисциплине Программирование
    Дата11.01.2019
    Размер1.62 Mb.
    Формат файлаdocx
    Имя файлаРГР.docx
    ТипОтчет
    #63219


    ФГБОУ ВО

    Уфимский государственный авиационный технический университет

    Кафедра ТК

    ОТЧЕТ

    по расчётно-графической работе

    по дисциплине «Программирование»

    Выполнил: студент гр. ИВТ-216


    Проверил: доцент каф. ТК

    Хасанов А.Ю.


    Уфа 2018

    Аннотация

    Эта расчётно-графическая работа посвящена обработке классов данных. В этой работе для обработки данных использовались многочисленные операции, такие как сортировки, создания перечней, сохранения результатов обработки в текстовый файл, поиск по вводимым данным, а также добавление и удаление записей из таблицы данных.

    Кроме того, для упрощения понимания кода программы были изображены блок-схемы алгоритмов всех используемых в расчётно-графической функций, а также представлено тестирование программы, подтверждающее корректную и достоверную работу всех методов, используемых в классе.

    Реализация данной программы представляет собой классы динамических массивов классов и написана в среде C++.
    Тема работы: Проектирование классов в языке C++, использующих свободную память, для обработки файлов данных
    Задачи работы

    • Написать программу на языке С++, реализованную в виде простейшего меню, выполняющую различные заданные сортировки исходных и выходных данных с использованием классов

    • Протестировать работоспособность программы для различных исходных данных.

    • Реализовать функции добавления (удаления) данных в(из) исходный(ого) массива

    • Реализовать функции сортировок

    • Реализовать конструктор копирования

    • Реализовать деструктор

    • Реализовать перегрузку оператора присваивания


    Вариант № 27

    Задание:

    Дан массив записей, содержащий сведения об игрушках: название игрушки (например, кукла, кубики, мяч и т.д.); стоимость игрушки; возрастные границы детей, для которых игрушка предназначена (например, для детей от 2 до 5 лет).Найти и вывести на экран названия и стоимости игрушек для заданного возрастного диапазона детей. Сформировать перечень стоимостей игрушек с указанием количества игрушек этой стоимости.

    а)Сортировка исходного массива:

    1)по названию игрушек в алфавитном порядке, а при совпадении названия игрушек по нижней возрастной границе в порядке возрастания.

    б)Сортировка выходного массива структур:

    2)по стоимости игрушек в порядке убывания.

    3)по названию игрушек в алфавитном порядке.

    в)Сортировка перечня:

    4)по стоимости игрушек в порядке убывания

    5)по количеству в порядке возрастания.
    Описание разработанных функций


    Название функции

    Параметры функции

    Назначение функции

    masToys()

    px,n;py,k;pu,l.

    Конструктора без параметров

    masToys()

    px,n;py,k;pu,l.

    Деструктор очистки памяти

    masToys(masToys &z)

    masToys &z

    Конструктор копирования

    masToys& operator=(masToys &z)

    masToys &z

    Операции присваивания

    void inputMasToysFile();

    toys *px, int n

    Загрузка исходных данных из текстового файла

    void outputMastToys();

    toys *px, int n

    Просмотр загруженных данных

    void outputMastVToys();

    toys *pu, int l

    Просмотр загруженных данных

    void addToys();

    toys *px, int n

    Добавление записи в таблицу данных

    void deleteToys();

    toys *px, int n

    Сортировка по году издания в порядке возрастания Удаление записи из таблицы данных

    void outputMasToysFile();

    toys *px, int n

    Сохранение данных в текстовый файл

    void outputMasVToysFile();

    toys *pu, int l

    Сохранение данных в текстовый файл

    void findToys();

    toys *pu, int l

    Поиск игрушек по заданному диапазону

    void perechToys();

    perech *py, int k

    Создания перечня стоимости

    void outputperech();

    perech *py, int k

    Просмотр найденных данных

    void perechFile();

    perech *py, int k

    Сохранение найденных данных в текстовый файл

    void sortNameVvod();

    toys *px, int n

    Алфавитная сортировка по названию игрушек, при совпадении по нижней возрастной границе

    void sortPrice();

    toys *pu, int l

    Сортировка по стоимости игрушек

    void sortName();

    toys *pu, int l

    Алфавитная сортировка по названию

    void sortDeng();

    perech *py, int k

    Сортировка по стоимости игрушек

    void sortNp();

    perech *py, int k

    Сортировка по количеству



    Блок-схемы












    Листинг программы



    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;

    const int L=31,N=100;

    struct toys//объявление структурных типов

    {

    string name;

    int price;

    int a1;

    int a2;

    };

    struct perech

    {

    int deng;

    int np;

    };

    class masToys//объявление классов

    { private:

    toys *px;

    int n;

    perech *py;

    int k;

    toys *pu;

    int l;

    public:

    //определение конструктора без параметров

    masToys(){px=NULL;n=0;py=NULL;k=0;pu=NULL;l=0;}

    //деструктор возвращения памяти

    masToys(){if(px!=NULL) delete [] px;

    if(py!=NULL) delete [] py;

    if(pu!=NULL) delete [] pu;}

    masToys(masToys &z);//прототип конструктора копирования

    masToys& operator=(masToys &z);//прототип метода операции присваивания

    void inputMasToysFile();

    void outputMastToys();

    void outputMastVToys();

    void addToys();

    void deleteToys();

    void outputMasToysFile();

    void outputMasVToysFile();

    void findToys();

    void perechToys();

    void outputperech();

    void perechFile();

    void sortNameVvod();

    void sortPrice();

    void sortName();

    void sortDeng();

    void sortNp();
    };

    void masToys :: addToys ()//добавление

    { int i;

    toys t, *p;

    p= new toys[n + 1];//выделение места для нового массива

    if (p==NULL){

    cout << " Массив заполнен \n";

    getch(); return;

    }

    cout<<"Название игрушки:"; cin >> t.name;

    cout<<"Цена:"; cin >> t.price;

    cout<<"Возрастные границы: от "; cin >> t.a1; cout << "до "; cin >> t.a2;

    for(int i = 0; i < n; i++)

    p[i] = px[i];

    p[n] = t;//добавление новой записи

    n++;

    if(px!=NULL)delete [] px;//удаление старого масс

    px = p;//адрес нового заносится в старый

    cout<<"Запись добавлена\n";

    getch();

    }
    void masToys :: outputMastToys()// вывод на экран загруженных из файла данных

    { int i;

    cout<<" ___________________________________________________________________\n";

    cout<<" | | | Возрастные границы |\n";

    cout<<" | Название игрушки | Цена |_____________________|\n";

    cout<<" | | | От | До |\n";

    cout<<" |_______________________________|____________|__________|__________|\n";

    cout<
    for (i=0;i
    cout<<" | "<

    cout<<" |__________________________________________________________________|\n";

    getch();

    }
    void masToys :: outputMastVToys()

    { int i;

    cout<<" ___________________________________________________________________\n";

    cout<<" | | | Возрастные границы |\n";

    cout<<" | Название игрушки | Цена |_____________________|\n";

    cout<<" | | | От | До |\n";

    cout<<" |_______________________________|____________|__________|__________|\n";

    cout<
    for (i=0;i
    cout<<" | "<

    cout<<" |__________________________________________________________________|\n";

    getch();

    }
    void outputToys (toys px[],int n)

    {

    int i;

    cout<<" __________________________________________________________________________\n";

    cout<<" | | | | Возрастные границы |\n";

    cout<<" | № | Название игрушки | Цена |_____________________|\n";

    cout<<" | | | | От | До |\n";

    cout<<" |____|________________________________|____________|__________|__________|\n";

    cout<
    for (i=0;i
    cout<<" | "<

    cout<<" |________________________________________________________________________|\n";

    getch();

    }
    void masToys :: deleteToys ()// удаление записи из исходного массива

    {int j,i;

    char ch;

    toys *p;

    outputToys(px,n);// вызов функции вывода данных на экран

    cout<<"Номер удаляемой стоки: "; cin>>j;// ввод строки, которую нужно удалить

    j--;

    if (j<0 || j>=n)// проверка наличие такой строки

    {cout <<"Ошибка: данной строки не существует\n"; getch(); return;}

    cout<
    cout<<"Название игрушки:"<

    cout<<"Удалить(y/n): "; cin>>ch;

    if (n==1){delete []px; px=NULL; n=0;}

    else {p=new toys [n-1];// выделение места для нового массива

    if (p==NULL){cout<<"Нет памяти\n"; getch(); return;}

    for(i=0;i
    p[i]=px[i];// в новый

    for(i=j+1;i
    p[i-1]=px[i];

    delete []px;

    px=p

    n--;}

    cout<<"Запись удалена\n";

    getch();

    }
    void masToys :: findToys()

    {

    int i,j;

    int a1,a2;

    toys *p;

    p=new toys[n];

    if(p==NULL)

    {

    cout<<"Нет памяти в функции findToys\n";

    getch();

    return;

    }

    cout<<"\nПоиск игрушки по возростному ограничению: "<
    cout<<"Введите диапазон: от " ;

    cin>>a1;

    cout<<" до ";

    cin>>a2;

    l=0;

    for(i=0;i
    if(px[i].a1==a1)

    if (px[i].a2<=a2)

    {

    p[l]=px[i];

    l++;

    }

    if (pu!=NULL) delete []pu;

    pu=new toys[l];

    if(pu==NULL)

    {

    cout<<"Нет памяти в функции findToys\n";

    getch();

    delete []p;

    l=0;

    return;

    }

    for(i=0;i
    pu[i]=p[i];

    delete []p;

    cout<<"Данные сформированs\n";

    getch();

    }
    void masToys :: outputMasToysFile ()//сохранение исходных данных в текстовый файл

    {

    int i;

    ofstream fout;

    char file [L];

    cout<<"Имя выходного файла:";

    cin>>file;// ввод пути для сохранения файла

    fout.open(file);// открытие нового файла

    if(fout.fail())

    {

    cout<
    getch ();

    return;

    }

    fout<<" _____________________________________________________________________\n";

    fout<<" | | | Возрастные границы |\n";

    fout<<" | Название игрушки | Цена |_____________________|\n";

    fout<<" | | | От | До |\n";

    fout<<" |________________________________|____________|__________|__________|\n";

    fout<
    for (i=0;i
    fout<<" | "<

    fout<<" _____________________________________________________________________\n";

    cout<<"Массив сохранен в файле\n";

    getch();

    fout.close();// закрытие файла

    }
    void masToys :: outputMasVToysFile ()//сохранение данных в текстовый файл

    {

    int i;

    ofstream fout;

    char file [L];

    cout<<"Имя выходного файла:";

    cin>>file;// ввод пути для сохранения файла

    fout.open(file);// открытие нового файла

    if(fout.fail())

    {

    cout<
    getch ();

    return;

    }

    fout<<" _____________________________________________________________________\n";

    fout<<" | | | Возрастные границы |\n";

    fout<<" | Название игрушки | Цена |_____________________|\n";

    fout<<" | | | От | До |\n";

    fout<<" |________________________________|____________|__________|__________|\n";

    fout<
    for (i=0;i
    fout<<" | "<

    fout<<" |___________________________________________________________________|\n";

    cout<<"Массив сохранен в файле\n";

    getch();

    fout.close();// закрытие файла

    }
    void masToys :: inputMasToysFile()//загрузка данных из файла

    {

    ifstream fin;

    char file[L];

    toys t;

    int i;

    cout<<"Имя входного файла: ";

    cin>>file;// ввод пути к нужному файлу

    fin.open(file);//открытие файла

    if(fin.fail())

    {

    cout<
    getch ();

    return;

    }

    n=0;

    while(1)

    {

    fin>>t.name>>t.price>>t.a1>>t.a2;

    if (fin.fail()) break;

    n++;

    }

    fin.close();// закрытие файла

    if (px!=NULL) delete []px;

    px=new toys[n];// создание нового динамического массива

    if(px==NULL)

    {

    cout<<"Нет памяти\n";

    getch();

    n=0;

    return;

    }

    fin.open(file);// открытие файла

    if(fin.fail())

    {

    cout<
    getch ();

    delete []px;

    px=NULL;

    n=0;

    return;

    }

    for(i=0;i
    fin>>px[i].name>>px[i].price>>px[i].a1>>px[i].a2;

    fin.close();// закрытие файла

    cout<<"Файл введен\n";

    getch();

    }
    void masToys::sortNameVvod()// сортировка по названию

    {

    int i,fl,nn;

    toys t; nn=n;

    do {fl=0;nn--;

    for(i=0;i
    {

    if (px[i].name>px[i+1].name)

    {

    t=px[i];

    px[i]=px[i+1];

    px[i+1]=t;

    fl=1;

    }

    else if (px[i].name==px[i+1].name)

    {

    if (px[i].a1>px[i+1].a1)

    {

    t=px[i];

    px[i]=px[i+1];

    px[i+1]=t;

    }

    fl=1;

    } }}

    while(fl==1);

    cout<<"Сортировка выполнeна";

    getch();

    }
    void masToys::sortPrice()

    {

    for(int i = 0; i < l - 1; i++){

    toys t;

    for(int j = 0; j < l - 1 - i; j++)// цикл сравнения и перестановки строк

    if(pu[j + 1].price > pu[j].price){

    t = pu[j];

    pu[j] = pu[j + 1];

    pu[j + 1] = t;

    }
    }
    cout<<"Сортировка выполнена";

    getch();

    }

    void masToys::sortName()

    {

    for(int i = 0; i < l - 1; i++){

    toys t;

    for(int j = 0; j < l - 1 - i; j++)// цикл сравнения и перестановки строк

    if(pu[j + 1].name < pu[j].name){

    t = pu[j];

    pu[j] = pu[j + 1];

    pu[j + 1] = t;

    }

    }

    cout<<"Сортировка выполнена";

    getch();

    }
    void masToys :: perechToys()// создание перечня

    {

    int i,j,fl;

    perech *z;

    z=new perech [n];// создание нового динамического массива для перечня

    if(z==NULL)

    {

    cout<<"Нет памяти\n";

    cout<<"Сформировать перечень не удается\n";

    getch();

    return;

    }

    k=0;

    for(i=0;i
    {

    z[i].np=0;

    z[i].deng=0;

    }

    for(i=0;i
    {

    fl=0;

    for(j=0;j
    if (px[i].price==z[j].deng)

    {

    z[j].np++;

    fl=1;

    }

    if (fl==0)

    {

    z[j].deng=px[i].price;// присваивание строки одного массива к другому

    z[k].np++;

    k++;

    }

    }

    if(py!=NULL) delete []py;

    py=new perech[k];// создание нового динамического массива

    if(py==NULL)

    {

    cout<<"Нет памяти\n";

    cout<<"Сформировать перечень не удается\n";

    delete []z;

    getch();

    return;

    }

    for(j=0;j
    py[j]=z[j];

    delete []z;// удаление массива

    cout<<"Перечень сформирован\n";

    getch();

    }
    void masToys :: outputperech()// вывод на экран перечня

    {

    int i;

    cout<<" ____________________________\n";

    cout<<" | Стоимость | Количество |\n";

    cout<<" |_____________|____________|\n";

    cout<
    for(i=0;i
    cout<<" | "<

    cout<<" |_____________|____________|\n";

    getch();

    }
    void masToys :: perechFile()

    {

    int i;

    ofstream fout;

    char file [L];

    cout<<"Имя выходного файла:";

    cin>>file;// ввод пути для сохранения файла

    fout.open(file);

    if (fout.fail())

    {

    cout<
    getch();

    return;

    }

    fout<<" ____________________________\n";

    fout<<" | Стоимость | Количество |\n";

    fout<<" |_____________|____________|\n";

    fout<
    for(i=0;i
    fout<<" | "<

    fout<<" |_____________|____________|\n";

    cout<<"Массив сохранен в файле\n";

    getch();

    fout<
    fout.close();

    }

    void masToys::sortDeng()

    {

    int i,fl,kk;

    perech t; kk=k;

    do

    {

    fl=0; kk--;

    for(i=0;i
    if(py[i].deng


    { t=py[i];

    py[i]=py[i+1];

    py[i+1]=t;

    fl=1;

    }

    }

    while(fl==1);

    cout<<"Сортировка выполнена\n";

    getch();

    }

    void masToys::sortNp()

    {

    int i,fl,kk;

    perech t; kk=k;

    do

    {

    fl=0; kk--;

    for(i=0;i
    if(py[i].np>py[i+1].np)

    { t=py[i];

    py[i]=py[i+1];

    py[i+1]=t;

    fl=1;

    }

    }

    while(fl==1);

    cout<<"Сортировка выполнена\n";

    getch();

    }
    masToys :: masToys(masToys &z)//определение конструктора копирования

    {

    int i;

    n=z.n;

    if (n==0) px=NULL;

    else {px=new toys[n];

    if (px==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    px[i]=z.px[i];}

    k=z.k;

    if (k==0) py=NULL;

    else {py=new perech[k];

    if (py==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    py[i]=z.py[i];}

    l=z.l;

    if (l==0) pu=NULL;

    else {pu=new toys[l];

    if (pu==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    pu[i]=z.pu[i];}

    };
    masToys & masToys :: operator=(masToys &z)// определение операции присваивания

    {

    int i;

    n=z.n;

    if(this == &z) return z;

    if(px!=NULL) delete []px;// освобождение памяти

    if (n==0) px=NULL;

    else {px=new toys[n];

    if (px==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    px[i]=z.px[i];}

    k=z.k;

    if(py!=NULL) delete []py;// освобождение памяти

    if (k==0) py=NULL;

    else {py=new perech[k];

    if (py==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    py[i]=z.py[i];}

    l=z.l;

    if(pu!=NULL) delete []pu;// освобождение памяти

    if (l==0) pu=NULL;

    else {pu=new toys[l];

    if (pu==NULL) { cout<<"Нет памяти\n";

    cout<<"Конструктор копирования\n";

    getch(); exit(1);}

    for(i=0;i
    pu[i]=z.pu[i];}

    return z;

    }
    int main()

    {SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    masToys a;

    int j;

    while (1)

    { system ("cls");

    cout<<"1.Ввод БД из файла\n";

    cout<<"2.Вывод на экран исходной таблицы\n";

    cout<<"3.Добавление записи в исходную таблицу\n";

    cout<<"4.Удаление записи из исходной таблицы\n";

    cout<<"5.Cохранение исходной таблицы в файл\n";

    cout<<"6.Сортировка исходной таблицы по алфавиту(при совпадении названия по нижней возростной границе по возростанию)\n";

    cout<<"7.Поиск игрушки заданного возрастного диапазона(формирование выходного)\n";

    cout<<"8.Вывод на экран выходной таблицы\n";

    cout<<"9.Сохранение выходной таблицы в файл\n";

    cout<<"10.Сортировка в таблице с заданным возрастным диапазоном по стоимости игрушек в порядке убывания(выходной)\n";

    cout<<"11.Сортировка в таблице с заданным возрастным диапазоном по алфавиту(выходной)\n";

    cout<<"12.Перечень стоимостей с указанием кол-ва игрушек этой стоимости\n";

    cout<<"13.Сортировка перечня по стоимости по порядке убывания\n";

    cout<<"14.Сортировка перечня по кол-ву в порядке возрастания\n";

    cout<<"15.Вывод на экран перечня\n";

    cout<<"16.Сохранение в файл перечня\n";

    cout<<"17.Проверка работы конструктора копирования\n";

    cout<<"18.Проверка работы перегруженного оператора присваивания\n";

    cout<<"19.Завершение программы\n";

    cout<<"Ваш выбор (1-19):";

    cin>>j;

    switch(j)

    {

    case 1: a.inputMasToysFile();break;

    case 2: a.outputMastToys();break;

    case 3: a.addToys();break;

    case 4: a.deleteToys();break;

    case 5: a.outputMasToysFile();break;

    case 6: a.sortNameVvod();break;

    case 7: a.findToys();break;

    case 8: a.outputMastVToys();break;

    case 9: a.outputMasVToysFile();break;

    case 10: a.sortPrice();break;

    case 11: a.sortName();break;

    case 12: a.perechDat();break;

    case 13: a.sortDeng();break;

    case 14: a.sortNp();break;

    case 15: a.outputperech();break;

    case 16: a.perechFile();break;

    case 17: {masToys b(a); a.outputMastToys(); b.outputMastToys();

    a.outputMastVToys(); b.outputMastVToys();

    a.outputperech(); b.outputperech();};getch();break;

    case 18: { masToys b,c;

    c=b=a;

    a.outputMastToys(); c.outputMastToys();

    a.outputperech(); c.outputperech();

    a.outputMastVToys(); c.outputMastVToys();}

    break;

    case 19: cout<<"Завершение программы\n";

    system("pause");

    return(1);

    default: cout<
    system("pause");}}}



    Тестовый пример


    1. Главное меню





    1. Просмотр загруженных из файла данных





    1. Добавление записи



    1. Удаление записи





    1. Формирование выходного массива





    1. Формирование перечня



    Заключение

    В результате выполнения расчётно-графической работы был разработан класс динамических массивов классов с функциями для решения таких задач, как сортировки, различные виды поиска данных, создание перечней, добавление и удаление записей, сохранения данных в файл. Программа также содержит меню, позволяющее легко осуществить проверку всех методов класса.

    Класс написан на языке C++, но исходя из того что, приведенные алгоритмы довольно просто, то программа может быть переписана и на другом современном языке. Реализация с помощью динамических массивов позволила эффективно использовать динамическую память.




    написать администратору сайта