Контрольная работа по «Объектно-ориентированное программирование»

Автор работы: Пользователь скрыл имя, 24 Октября 2012 в 20:51, контрольная работа

Описание работы

15) Описать класс, содержащий следующую текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
 номер УДК;
 фамилию и инициалы автора;
 название;
 год издания;
 количество экземпляров данной книги в библиотеке.

Файлы: 1 файл

17.doc

— 91.50 Кб (Скачать файл)

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

ГУВПО «Белорусско-Российский университет»

Кафедра АСУ

 

 

 

Контрольная работа №1

по дисциплине

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

 

 

Выполнил:

студент гр. АСОИЗ-102

Шагов А. 

Шифр 102917

Проверил:

Н.К. Борисов

 

 

2012

    1. Описать класс, содержащий следующую текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
    • номер УДК;
    • фамилию и инициалы автора;
    • название;
    • год издания;
    • количество экземпляров данной книги в библиотеке.

Класс должен реализовывать следующие операции над данными:

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

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

# include <iostream.h>

# include <stdio.h>

# include <windows.h>

# define SIZE 255

struct library

{

int UDK;

char FIO[20];

char book_name[40];

int book_year;

int book_number;

};

//описание класса список

class list

{

int  n;

library *book_data;

 

public:

list();

~list();

void input();

void add();

void remove();

void show();

};

//конструктор

list::list()

{

book_data=new library[SIZE];

n=0;

}

//деструктор

list::~list()

{

delete book_data;

}

//ввод исходных  данных

 void list::input()

{

int i;

cout<<"Enter the number of books in the library:";

cin>>n;

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

{

cout<<"Enter the UDK number of "<<i+1<<" book:";

cin>>book_data[i].UDK;

puts("Enter the author's name of the book:");

gets(book_data[i].FIO);

puts("Enter the name of the book:");

gets(book_data[i].book_name);

cout<<"Enter year of publication of the "<<i+1<<" book:";

cin>>book_data[i].book_year;

cout<<"Enter the number of the "<<i+1<<" book:";

cin>>book_data[i].book_number;

}

}

//добавление элемента  в список

 void list::add()

{

int i=n;

cout<<"Enter the UDK number of book:";

cin>>book_data[i].UDK;

puts("Enter the author's name of the book:");

gets(book_data[i].FIO);

puts("Enter the name of the book:");

gets(book_data[i].book_name);

cout<<"Enter year of publication of the book:";

cin>>book_data[i].book_year;

cout<<"Enter the number of the book:";

cin>>book_data[i].book_number;

n=i+1;

 

}

//удаление элемента из списка

void list::remove()

{

int number,i,j;

bool flag;

if(!n)

cout<<"There is no books in the library!\n";

else

{

cout<<"Enter the UDK number of written off book:";

cin>>number;

flag=TRUE;

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

{

if(book_data[i].UDK==number)

{

flag=FALSE;

for(j=i;j<n+1;j++)

book_data[j]=book_data[j+1];   

cout<<"Remove is complete successfuly!\n";   

n--;

return;

}

}

if(flag)

{

cout<<"The book is not found in the library!\n";

}

}

//вывод содержимого  списка

 void list::show()

{

int i,j,max;

library tmp;

if(!n)

cout<<"There is no books in the library!\n";

else

{

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

{

max=0;

for(j=0;j<n-i;j++)

{

if(book_data[j].book_year>book_data[max].book_year)

max=j;

}

tmp=book_data[max];

book_data[max]=book_data[n-i-1];

book_data[n-i-1]=tmp;

}

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

{

cout<<book_data[i].UDK<<"\t";

cout<<book_data[i].FIO<<"\t";

cout<<book_data[i].book_name<<"\t";

cout<<book_data[i].book_year<<"\t";

cout<<book_data[i].book_number<<"\n";

}

}

}

int main()

{

list book;

char ch;

for(;;)

{

cout<<"________________________________________________________________\n";

cout<<"1. Creating data about the books in the library\n";

cout<<"2. Adding data of a new book\n";

cout<<"3. Remove written off book\n";

cout<<"4. Show the list of the book in the library\n";

cout<<"5. Quit\n";

cin>>ch;

cout<<"________________________________________________________________\n";

if(ch=='1')

book.input();

if(ch=='2')

book.add();

if(ch=='3')

book.remove();

if(ch=='4')

book.show();

if(ch=='5')

exit(1);

}

return 0;

}

 

 

  19) Создать класс StringType  для эффективной работы со строками, позволяющий форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Строки должны быть представлены в виде массива символов с размещением в динамической памяти.  Для данного класса необходимо реализовать:

  • перегруженные операции присваивания и конкатенации;
  • операции сравнения и приведения типов;
  • преобразование в число любого типа;
  • форматный вывод строки.

Написать программу, демонстрирующую работу с этим классом.

 

#include  <iostream.h>

#include <string.h>

#include<windows.h>

 

// создание  класса  StringType

class StringType {

 

char *str;

 

public:

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

StringType(char *);     // конструктор 

~StringType();   // деструктор

 

int len();//вычисление длины  строки

void sput(int,int);//форматированный  вывод строки

        int strtoi();

double strtof();

//перегрузка операторов

StringType& operator=(const StringType&);

StringType operator+(const StringType &) const;//слияние(конкатенцию) строк

bool operator>(const StringType &) const; 

bool operator<(const StringType &) const;

bool operator==(const StringType &) const;

};

 

// конструктор

StringType :: StringType(char *s):str(NULL)

{

if(s==NULL)

{

str=new char [1];

*str='\0';

}

else

{

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

strcpy(str,s);

}

}

StringType :: StringType(const StringType &s):str(NULL)

{

 

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

strcpy(str,s.str );

 

}

 

// деструктор

StringType :: ~StringType()

{

delete str; 

}

//вычисление длины  строки

int StringType :: len()

{

return strlen(str);

}

//преобразование строки  в целое число

int StringType :: strtoi()

{

int a=atoi(str);

return a;

}

//преобразование строки в вещ. число

double StringType :: strtof()

{

double a=atof(str);

return a;

}

 

StringType& StringType::operator=(const StringType &s1) 

{

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

delete str;

str=new char[strlen(s1.str)+1];

strcpy(str,s1.str);

return *this;

 

}

// слияние (конкатенцию) строк

//перегрузка оператора +

StringType StringType::operator+(const StringType &s1) const

{

char *s=new char[strlen(s1.str)+strlen(str)+1];

strcpy(s,str);

strcat(s,s1.str);

StringType newStr(s);

delete s;

return newStr;

}

//вывод строки

void StringType :: sput(int ll=1,int dd=0)//ll-ширина dd-точность

{

char *p;

int n,d;

cout.width (ll);

if ((p=strchr(str,'.'))!=NULL)

{

n=p-str+1;

d=strlen(str)-n;

if(dd<d)

while(d!=dd)

{

str[strlen(str)-1]=str[strlen(str)];

d--;

}

else if(dd>d)

while(d!=dd)

{

str[strlen(str)+1]=str[strlen(str)];

str[strlen(str)]='0';

d++;

}

}

else

{

str[strlen(str)+1]=str[strlen(str)];

str[strlen(str)]='.';

for(n=0;n<dd;n++){

str[strlen(str)+1]=str[strlen(str)];

str[strlen(str)]='0';}

}

cout<<str<<endl;

}

 

//перегрузка оператора >

bool StringType::operator>(const StringType &s1) const

{

if(atof(str)>atof(s1.str))

return true;

else

return false;

}

//перегрузка оператора <

bool StringType::operator<(const StringType &s1) const

{

if(atof(str)<atof(s1.str))

return true;

else

return false;

}

//перегрузка оператора  ==

bool StringType::operator==(const StringType &s1) const

{

if(atof(str)==atof(s1.str))

return true;

else

return false;

}

 

char buf[100];

char* RUS(char *text)//функция кодировки кирилицы в консольном прилож.

{

CharToOem(text, buf);

return buf;

}

 

int main()

{

int i,n,d;

//создание двух объектов типа StringType

StringType  a("123.698"), b("15");

do{

cout<<RUS("\nИсходные строки\na:")<<endl;

a.sput(a.len()+3,3);  //вывод строки a

cout<<"b:";

b.sput(b.len()+3,3); //вывод строки b

cout<<RUS("Меню:")<<endl;

cout<<RUS("1. присваивание  строк;")<<endl;

cout<<RUS("2. слияние (конкатенция)  строк;")<<endl;

cout<<RUS("3. сравнение  строк;")<<endl;

cout<<RUS("4. пребразование в целый  тип;")<<endl;

cout<<RUS("5. пребразование в вещественный  тип;")<<endl;

cout<<RUS("6. форматированный вывод")<<endl;

cout<<RUS("Для выхода нажмите  любую другую клавишу")<<endl;

cout<<RUS("Ваш выбор:")<<endl;

cin>>i;

switch(i)

{

case 1:

{StringType e=a;

cout<<"e:";

e.sput();

break;}

case 2:

{StringType c=a+b;// слияние (конкатенцию) строк a b

cout<<"a+b:";

c.sput(c.len()+3); //вывод строки c

break;}

case 3:

{if(a>b)

cout<<"a > b"<<endl;

Информация о работе Контрольная работа по «Объектно-ориентированное программирование»