|
РГР. Отчет по расчётнографической работе по дисциплине Программирование
ФГБОУ ВО Уфимский государственный авиационный технический университетКафедра ТК ОТЧЕТ по расчётно-графической работе по дисциплине «Программирование» Выполнил: студент гр. ИВТ-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");}}} 0>
|
|
|