Автор работы: Пользователь скрыл имя, 24 Октября 2012 в 20:51, контрольная работа
15) Описать класс, содержащий следующую текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
номер УДК;
фамилию и инициалы автора;
название;
год издания;
количество экземпляров данной книги в библиотеке.
Министерство образования Республики Беларусь
ГУВПО «Белорусско-Российский университет»
Кафедра АСУ
Контрольная работа №1
по дисциплине
«Объектно-ориентированное программирование»
Выполнил:
студент гр. АСОИЗ-102
Шагов А.
Шифр 102917
Проверил:
Н.К. Борисов
2012
Класс должен реализовывать следующие операции над данными:
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
# 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>
max=j;
}
tmp=book_data[max];
book_data[max]=book_data[n-i-
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<<
cout<<book_data[i].book_year<<
cout<<book_data[i].book_
}
}
}
int main()
{
list book;
char ch;
for(;;)
{
cout<<"_______________________
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<<"_______________________
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(
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(
d--;
}
else if(dd>d)
while(d!=dd)
{
str[strlen(str)+1]=str[strlen(
str[strlen(str)]='0';
d++;
}
}
else
{
str[strlen(str)+1]=str[strlen(
str[strlen(str)]='.';
for(n=0;n<dd;n++){
str[strlen(str)+1]=str[strlen(
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Исходные строки\
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;
Информация о работе Контрольная работа по «Объектно-ориентированное программирование»