Курсовая работа по предмету "Программирование, компьютеры и кибернетика, ИТ технологии"


Объектно-ориентированое програмирование на С++



Міністерство освіти і науки України

Запорізький національний університет

Кафедра інформаційних технологій

Індивідуальна робота

З теми: «С++. Класи і обєкти»

Виконав:

студ. 2 курсу

матем. ф-ту

гр. 8226-1

Лапін С.М.

Перевірив:

Борю С.Ю.

Запоріжжя 2007

Цель: Разработка простейших классов на примере разработки моделей элементарных объектов и динамических информационных структур (одно и двунаправленных списков).

1 часть работы "разработка простых классов"

Постановка задачи

Разработать класс, набор методов (конструктор и минимум два метода) для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Разработать вызывающую программу (main), использующей объекты разработанного класса и тестирующие работоспособность всех методов.

Варианты заданий

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

Програма:

#ifndef rectangle__h

#define rectangle__h

#include <math.h>

class rectangle

{

private:

double a, b;

public:

rectangle();

rectangle(double, double);

~rectangle();

rectangle & operator=(const rectangle & x);

double square(void);

double perimeter(void);

double diagonal(void);

int is_square(void);

void print_rectangle(void);

};

#endif

#ifndef conrectangle__h

#define conrectangle__h

#include <iostream.h>

#include "rectangle.h"

rectangle::rectangle()

{

cout<<"The constructor "rectangle()" worked.n";

a=1.0;

b=1.0;

};

rectangle::rectangle(double x, double y)

{

cout<<"The constructor "rectangle(double, double)" worked.n";

a=x;

b=y;

};

rectangle::~rectangle()

{

cout<<"The destructor "~rectangle()" worked.n";

a=0.0;

b=0.0;

};

rectangle & rectangle::operator=(const rectangle & x)

{

if(this==&x) return *this;

this->a=x.a;

this->b=x.b;

return *this;

};

double rectangle::square(void)

{

return a*b;

};

double rectangle::perimeter()

{

return 2*a+2*b;

};

double rectangle::diagonal()

{

return sqrt(a*a+b*b);

};

int rectangle::is_square()

{

if(a==b) return 1;

return 0;

};

void rectangle::print_rectangle()

{

char msg1[]=" ", msg2[]=" not ";

cout<<"a="<<a<<" b="<<b;

cout<<"nS= "<<square()<<" m^2 P="<<perimeter()<<" m d="<<diagonal()<<" m";

cout<<"nRectangle is";

if(is_square())

cout<<msg1;

else

cout<<msg2;

cout<<"square.n";

return;

};

#endif

#include <iostream.h>

#include "conrectangle.h"

void main()

{

rectangle r1;

double a,b;

char s[1];

cout<<"nESLI VAM ETA PROGA POKAZHETSA TUPOY... NE PEREZHYVAITE! ETO DEISTVITELNO TAK :)n";

do

{

cout<<"n Our rectangle:n";

r1.print_rectangle();

cout<<"Input a, b:n";

cin>>a>>b;

rectangle r2(a, b);

cout<<"n Your rectangle:n";

r2.print_rectangle();

r1=r2;

cout<<"n Your rectangle is our now:n";

r1.print_rectangle();

cout<<"Repeat or quit?(r/q)...";

cin>>s;

}

while (s[0]!=q);

return;

};

Результати:

D:StudiesLabsCppIndivid_6>ind1

The constructor "rectangle()" worked.

ESLI VAM ETA PROGA POKAZHETSA TUPOY... NE PEREZHYVAITE! ETO DEISTVITELNO TAK :)

Our rectangle:

a=1 b=1

S= 1 m^2 P=4 m d=1.41421 m

Rectangle is square.

Input a, b:

456.125

789.5452485

The constructor "rectangle(double, double)" worked.

Your rectangle:

a=456.125 b=789.545

S= 360131 m^2 P=2491.34 m d=911.829 m

Rectangle is not square.

Your rectangle is our now:

a=456.125 b=789.545

S= 360131 m^2 P=2491.34 m d=911.829 m

Rectangle is not square.

Repeat or quit?(r/q)...r

The destructor "~rectangle()" worked.

Our rectangle:

a=456.125 b=789.545

S= 360131 m^2 P=2491.34 m d=911.829 m

Rectangle is not square.

Input a, b:

0.4876

0.4876

The constructor "rectangle(double, double)" worked.

Your rectangle:

a=0.4876 b=0.4876

S= 0.237754 m^2 P=1.9504 m d=0.689571 m

Rectangle is square.

Your rectangle is our now:

a=0.4876 b=0.4876

S= 0.237754 m^2 P=1.9504 m d=0.689571 m

Rectangle is square.

Repeat or quit?(r/q)...r

The destructor "~rectangle()" worked.

Our rectangle:

a=0.4876 b=0.4876

S= 0.237754 m^2 P=1.9504 m d=0.689571 m

Rectangle is square.

Input a, b:

16.23

31.06

The constructor "rectangle(double, double)" worked.

Your rectangle:

a=16.23 b=31.06

S= 504.104 m^2 P=94.58 m d=35.0448 m

Rectangle is not square.

Your rectangle is our now:

a=16.23 b=31.06

S= 504.104 m^2 P=94.58 m d=35.0448 m

Rectangle is not square.

Repeat or quit?(r/q)...q

The destructor "~rectangle()" worked.

The destructor "~rectangle()" worked.

D:StudiesLabsCppIndivid_6>

2 часть работы «Информационные динамические структуры»

Постановка задачи

Написать программу, в которой создаются динамические структуры, и выполнить их обработку в соответствии со своим вариантом.

Для каждого вариант разработать следующие методы:

1. Конструктор пустого списка.

2. Добавление элемента в список (в соответствии со своим вариантом).

3. Удаление элемента из списка (в соответствии со своим вариантом).

4. Печать списка.

5. Запись списка в файл.

6. Восстановление списка из файла.

7. Деструктор списка (уничтожение).

Порядок выполнения работы

1. Разработать описание класса, выделить публичные и приватные поля данных. Разработать интерфейс класса - прототипы методов.

2. Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы.

3. Написать функцию для печати списка. Функция должна предусматривать вывод сообщения, если список пустой.

4. Написать функции для удаления и добавления элементов списка в соответствии со своим вариантом.

5. Выполнить изменения в списке и печать списка после каждого изменения.

6. Написать функцию для записи списка в файл.

7. Написать функцию для уничтожения списка.

8. Записать список в файл, уничтожить его и выполнить печать (при печати должно быть выдано сообщение "Список пустой").

9. Написать функцию для восстановления списка из файла.

10. Восстановить список и распечатать его.

11. Уничтожить список.

Варианты заданий

14. Записи в линейном списке содержат поле данных звена типа *char(строка символов). Сформировать двунаправленный список. Удалить из него К элементов с указанными номерами. Добавить К элементов с указанными номерами.

Програма:

#ifndef list_h

#define list_h

class list

{

private:

struct element

{

char* info;

element* up;

element* down;

};

element *first, *last, *current;

public:

list(); //constructor

~list(); //destructor

void del_list(); //ochishchajet spisok

void init_list(int,char*); //initsializatsia spiska fonarhym metodom

void print_list(); //vyvod na ekran spiska

int current_element(int); //zdelat element s nomerom "int" tekushchim, vernetsa 0;

//Esli doidem do kontsa spiska,to vernetsa nomer poslednego elementa,kotoryi i budet tekushchim

int next_element(); //sdelat tekushchim sledujushchiy element tekuschuego

int previous_element(); //sdelat tekushchim predydushchiy element tekuschuego

int num_current(); //nomer v spiske tekushchego elementa

char* read_element(int &); //prochitat element s nomerom; Robe jogo tekushchim

char* read_element(); //prochitat tekushchiy element

void add_element(char*, int &);//dobavit element na nomer "int"; Robe novyi element tekushchim

void add_after(char*); //dobavit element posle tekushchego; Robe novyi element tekushchim

void add_before(char*); //dobavit element do tekushchego; Robe novyi element tekushchim

void del_element(); //udalit tekushchiy element; Robe sleduushchiy element tekushchim

void del_element(int &); //udalit element z nomerom "int"; Robe sleduushchiy element tekushchim

int fput_list(char*); //zapisat spisok v fail s imenem char*

int fget_list(char*); //vostanovit spisok iz faila s imenem char*

int num_list(); //kol-vo zvenjev u spiska

};

#endif

#ifndef list__h

#define list__h

#include "list.h"

#include <iostream.h>

list::list()

{

current=last=first=NULL;

};

void list::add_after(char* s)

{

if (current==NULL)

{

current=new element[1];

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

current->up=current->down=NULL;

first=last=current;

return;

};

if (current==last)

{

last=new element[1];

last->info=new char[strlen(s)+1];

strcpy(last->info,s);

last->down=NULL;

last->up=current;

current->down=last;

current=last;

return;

};

//put in buffer adress down

last->down=current->down;

current->down=new element[1];

current->down->up=current;

current=current->down;

current->down=last->down;

//clear buffer

last->down->up=current;

last->down=NULL;

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

return;

};

void list::add_before(char* s)

{

if (current==NULL)

{

add_after(s);

return;

};

if (current==first)

{

first=new element[1];

first->up=NULL;

first->down=current;

current=current->up=first;

first->info=new char[strlen(s)+1];

strcpy(first->info,s);

return;

};

first->up=current->up;

current->up=new element[1];

current->up->down=current;

current=current->up;

current->up=first->up;

first->up->down=current;

first->up=NULL;

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

return;

};

void list::add_element(char* s, int &k)

{

int i;

i=current_element(k);

if ((i<k)&&(i!=0))

{

cout<<"V spiske vsego "<<i<<" elmentov. Po etomu vmesto "<<k<<" nomera, functsia dobavit info elementa na "<<i+1<<"-e mesto(poslednee v spiske)!!!n";

k=i+1;

add_after(s);

};

if(i==0)

add_before(s);

return;

};

void list::del_element()

{

if (first==NULL)

{

cout<<"Nemogu udalit element so spiska. Spisok pust.n";

return;

};

if (current==first)

{

if (current==last)

{first=last=NULL;}

else

{

first=current->down;

first->up=NULL;

};

delete[]current->info;

delete[]current;

current=first;

return;

};

if (current==last)

{

last=current->up;

last->down=NULL;

delete[]current->info;

delete[]current;

current=last;

return;

};

last->down=current->down;

current->up->down=current->down;

current->down->up=current->up;

delete[]current->info;

delete[]current;

current=last->down;

last->down=NULL;

return;

};

void list::del_element(int &k)

{

int i=current_element(k);

if ((i<k)&&(i!=0))

{

cout<<"V spiske vsego "<<i<<" elmentov. Po etomu vmesto "<<k<<" elementa, functsia udalit "<<i<<" element!!!n";

k=i;

};

del_element();

return;

};

list::~list()

{

del_list();

};

void list::del_list()

{

while (last!=first)

{

current=last;

delete [] last->info;

last=last->up;

delete [] current;

};

if (first) delete [] first->info;

delete[]first;

current=first=last=NULL;

return;

};

//current ostaetsa netronutym

int list::num_list()

{

if(first==NULL) return 0;

int i(1);

element* temp=first->down;

while (temp!=NULL)

{

i++;

temp=temp->down;

};

return i;

};

//if OK return 0, esle return i (number current element)

int list::current_element(int k)

{

if (first==NULL)

{

cout<<"V spiske 0 elementov.n";

return 0;

};

int i(1);

current=first;

if(i==k) return 0;

while (current->down)

{

current=current->down;

if (++i==k) return 0;

};

return i;

};

//Esli sled. element sdelalsa tekuschim return 1, else 0

int list::next_element()

{

if (current->down)

{

current=current->down;

return 1;

};

return 0;

};

//Esli pred. element sdelalsa tekuschim return 1, else 0

int list::previous_element()

{

if (current->up)

{

current=current->up;

return 1;

};

return 0;

};

int list::num_current()

{

if(current==NULL)return 0;

int i(1);

element* temp=current;

while (temp->up!=NULL)

{

i++;

temp=temp->up;

};

return i;

};

char* list::read_element()

{

return current->info;

};

char* list::read_element(int &k)

{

int i;

i=current_element(k);

if ((i<k)&&(i!=0))

{

cout<<"V spiske vsego "<<i<<" elmentov. Po etomu vmesto "<<k<<" elementa, functsia vozvrashchaet "<<i<<" element!!!n";

k=i;

};

return current->info;

};

void list::init_list(int k, char* str)

{

if (k==0) return;

int f(2);

char* s;

s=new char[strlen(str)+7];

if (first!=NULL)

{

cout<<"Spisok ne pust!!!n";

cout<<"Chto delat?(0/1/2)n";

cout<<" 0)Otmenit initsializatsiu;n";

cout<<" 1)Dopisat fonarnuu infomatsiu v konets spiska;n";

cout<<" 2)Zamenit spisok novoi fonarnoi informatsyei.n";

cin>>f;

};

if(f==0) return;

if(f==1) current=last;

if(f==2)

{

del_list();

first=new element[1];

first->info=new char[strlen(str)+3];

sprintf(first->info,"%s 1",str);

first->up=first->down=NULL;

current=last=first;

};

for (int j=f; j<=k; j++)

{

sprintf(s,"%s %d",str,j);

add_after(s);

};

return;

};

void list::print_list()

{

cout<<"Vmestimoe spiska:n";

element* temp=first;

if (first==NULL)

{

cout<<"Spisok pust!!!n";

return;

};

do

{

cout<<"| "<<temp->info<<" |";

temp=temp->down;

}

while (temp);

cout<<"n";

return;

};

int list::fput_list(char* s)

{

FILE* f;

if ((f=fopen(s,"w+"))==NULL)

{

cout << "Can not open file "<<s<<"n";

return 0;

};

if (!first) fclose(f);

element* temp=first;

do

{

fputs(temp->info,f);

fputs("n",f);

temp=temp->down;

}

while (temp);

fclose(f);

return 1;

};

int list::fget_list(char* s)

{

int ff=2;

if (first!=NULL)

{

cout<<"Spisok ne pust!!!nChto delat?(0/1/2)n 0)Otmenit vostanovlenie iz faila;n";

cout<<" 1)Vostanovit infomatsiu iz faila v konets spiska;n";

cout<<" 2)Zamenit spisok informatsyei iz faila.n";

cin>>ff;

};

if(!ff) return ff;

FILE* f;

if ((f=fopen(s,"r"))==NULL)

{

cout<<"Can not open file "<<s<<"n";

return 0;

};

char str[255];

if(ff==1)

current=last;

char *sss;

if(ff==2)

del_list();

while (fgets(str,256,f))

{

sss=new char[strlen(str)];

int j=0;

while(str[j]!=n)

sss[j]=str[j++];

sss[j]=



Не сдавайте скачаную работу преподавателю!
Данную курсовую работу Вы можете использовать для написания своего курсового проекта.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем курсовую работу самостоятельно:
! Как писать курсовую работу Практические советы по написанию семестровых и курсовых работ.
! Схема написания курсовой Из каких частей состоит курсовик. С чего начать и как правильно закончить работу.
! Формулировка проблемы Описываем цель курсовой, что анализируем, разрабатываем, какого результата хотим добиться.
! План курсовой работы Нумерованным списком описывается порядок и структура будующей работы.
! Введение курсовой работы Что пишется в введении, какой объем вводной части?
! Задачи курсовой работы Правильно начинать любую работу с постановки задач, описания того что необходимо сделать.
! Источники информации Какими источниками следует пользоваться. Почему не стоит доверять бесплатно скачанным работа.
! Заключение курсовой работы Подведение итогов проведенных мероприятий, достигнута ли цель, решена ли проблема.
! Оригинальность текстов Каким образом можно повысить оригинальность текстов чтобы пройти проверку антиплагиатом.
! Оформление курсовика Требования и методические рекомендации по оформлению работы по ГОСТ.

Читайте также:
Разновидности курсовых Какие курсовые бывают в чем их особенности и принципиальные отличия.
Отличие курсового проекта от работы Чем принципиально отличается по структуре и подходу разработка курсового проекта.
Типичные недостатки На что чаще всего обращают внимание преподаватели и какие ошибки допускают студенты.
Защита курсовой работы Как подготовиться к защите курсовой работы и как ее провести.
Доклад на защиту Как подготовить доклад чтобы он был не скучным, интересным и информативным для преподавателя.
Оценка курсовой работы Каким образом преподаватели оценивают качества подготовленного курсовика.

Сейчас смотрят :

Курсовая работа Инвестиции и их роль в экономике: макроэкономические модели
Курсовая работа Отбор сельскохозяйственных животных
Курсовая работа Проектирование участка по техническому обслуживанию и ремонту топливной аппаратуры на АТП
Курсовая работа Особенности представлений об окружающем мире умственно-отсталых детей
Курсовая работа Формирование и использование финансовых ресурсов хозяйствующих субъектов в условиях рынка
Курсовая работа Разработка производственной стратегии компании
Курсовая работа Сравнение бухгалтерского и налогового учета
Курсовая работа Исследование мотивационной политики предприятия на примере ООО "Сфера"
Курсовая работа Основы бухгалтерского учета труда и заработной платы
Курсовая работа Технологии профессионального обучения
Курсовая работа Государственное регулирование ВЭД
Курсовая работа Бронхиальная астма, смешанная форма, средней степени тяжести
Курсовая работа Трудовые пенсии
Курсовая работа Платежный баланс
Курсовая работа Оценка бизнеса затратным подходом