Белорусский государственный университет информатики и радиоэлектроники
Кафедра экономической информатики
Расчетно-контрольная работа
По курсу " ООП "
(наименование курса)
Выполнил
Студент гр. 172302
(номер группы)
Садовников И.В.
(Фамилия И.О.)
26.04.2013 г
(Дата сдачи работы)
Проверила
Пшевлоцкая Ю.В
(Фамилия И.О.)
26.12.2013 г
(Дата, оценка и подпись)
Минск 2013
Содержание:
Постановка задачи……………………………………..…………………………….3
Введение….………………………………………………..…………………………4
Краткие теоретические сведения об используемых алгоритмах…………...……..5
Описание программы…………………………………………………………….…9
Выводы………………………………………………………………………………10
Список источников, использованных при разработке проекта………...……….11
ПРИЛОЖЕНИЕ……………………………………………………………….…......
· Листинг программы………….………………………………………..……12
Постановка задачи
Данная контрольная работа – выполнение следующих задач:
Создать файл, содержащий сведения о сотрудниках института. Структура записи: ФИО, название отдела, год рождения, стаж работы, оклад. На печать вывести: СПИСОК СОТРУДНИКОВ ПЕНСИОННОГО ВОЗРАСТА С УКАЗАНИЕМ СТАЖА РАБОТЫ, СРЕДНИЙ СТАЖ СОТРУДНИКОВ ОТДЕЛА Х (Х ВВОДИТСЯ С КЛАВИАТУРЫ).
Требования, предъявляемые к программе:
Предусмотреть создание меню со следующими пунктами:
· СОЗДАНИЕ НОВОГО ФАЙЛА
· ПРОСМОТР ФАЙЛА (viewFile)
· ДОБАВЛЕНИЕ НОВОЙ ЗАПИСИ (addFile)
· КОРРЕКТИРОВКА ЗАПИСЕЙ ФАЙЛА (editFile)
· ВЫПОЛНЕНИЕ ЗАДАЧИ (runFile)
· УДАЛЕНИЕ УКАЗАННОЙ ЗАПИСИ (deleterecord)
.
|
Введение
Язык С++ отражает возможности современных компьютеров. Программы на С отличаются компактностью и быстротой исполнения. Структура С++ побуждает программиста использовать в своей работе нисходящее программирование, структурное программирование, пошаговую разработку модулей.
Области применения языка C++ - системное программирование и прикладные задачи с жесткими требованиями к скорости и памяти.
Большинство трансляторов языка C++ - компиляторы. Система программирования языка включает препроцессор, компилятор, редактор связей, библиотекарь, редактор текста, отладчик и интегрированную управляющую среду.
Основные достоинства языка С++:
1. Лаконичность записи алгоритмов
2. Экономичность в расходовании памяти
3. Возможность низкоуровневого программирования
4. Логическая стройность написанных на нем программ
5. Переносимость программ между компьютерами с разной архитектурой и различными операционными средами
Краткие теоретические сведения об используемых алгоритмах
Общая структура программы на языке С имеет вид:
<директивы препроцессора>
<определение типов пользователя – typedef>
<прототипы функций>
<определение глобальных переменных>
<функции>
В свою очередь, функции имеют такую структуру:
<класс_памяти><тип><имя функции>(<объявление параметров>)
{ -начало функции
<локальные параметры>
<операции и операторы>
} - конец функции
Управляющие символы:
\n – переход на новую строку
Условный оператор if - else применяется в языке С для выбора одной из ветвей вычислений. Общая форма записи:
|
if (условие) оператор1;
else оператор 2;
Оператор 1 и оператор 2 - это простые или составные операторы; если в ветви операторов два и более, то используются символы {} для их объединения.
Оператор switch – оператор выбора альтернатив (переключатель). Оператор проверяет, совпадает ли значение выражения с одним из значений, входящих в некоторое множество целых констант, и выполняет ли соответствующую этому значению ветвь программы. Основная форма оператора switch имеет вид:
switch (выражение) {
case constant1: последовательность операторов
break;
… … …
case constantN: последовательность операторов
break;
default: последовательность операторов
}
Вначале выполняется выражение в скобках за ключевым словом switch. Затем просматривается список меток (case constant1, …, case constantN) до тех пор, пока не находится метка, которая соответствует значению вычисленного выражения. Затем происходит выполнение соответствующей последовательности операторов, следующих за двоеточием. Если значения выражений не совпадают ни с одной из меток оператора switch, то выполняется последовательность операторов, которые следуют за ключевым словом default.
Допускаются конструкции оператора switch, когда слово default и соответствующая последовательность операторов отсутствуют. В этом случае, если метки не совпали со значением выражения, конструкция switch будет пропущена.
Когда после последовательности операторов встречается ключевое слово break, то выполнение оператора break приводит к выходу из оператора switch и переходу к первому за данной конструкцией оператору программы. Оператор break в операторе switch может отсутствовать. В этом случае выполнится группа операторов, метка которой совпадет со значением выражения, и далее последующие группы операторов до окончания конструкции switch.
|
Основная форма оператора цикла for имеет вид:
for (выражение 1; выражение 2; выражение 3) оператор;
Тут:
выражение 1 – установление начального значения переменной-параметра цикла (инициализация);
выражение 2 – проверка условия на продолжение цикла;
выражение 3 – изменение параметра цикла (коррекция параметра);
оператор – простой или составной оператор языка.
Схема работы оператора следующая. Сначала выполняется выражение 1, а затем выполняется циклический участок программы до тех пор, пока выражение 2 – истина.
Основная форма циклического оператора while:
While (условие) оператор;
где оператор – это простой, составной или пустой операторы.
Цикл выполняется до тех пор, пока условие принимает значение «истина», т.е выражение в скобках возвращает ненулевой результат. Это цикл с предусловием – сначала проверяется условие, затем выполняется оператор. Поэтому цикл while не выполнится ни разу, если изначально результатом выражения будет 0.
В алгоритмическом языке С кроме использования стандартных функций существует возможность работать с функциями пользователя. Предварительно функцию необходимо объявить. Используется следующий способ декларации функций:
<тип_результата> <имя_функции> (<тип> <переменная>, …<тип> <переменная>);
Прототип функции сообщает компилятору о том, что далее в тексте программы будет приведено ее полное определение (полный ее текст).
Полное определение функции имеет следующий вид:
<тип_результата> <имя_функции> (список параметров)
{
тело функции
}
Тип результата определяет тип значения, который возвращается функцией в точку ее вызова при помощи оператора возврата return. Если тип функции не указан, то по умолчанию предполагается тип int. Список параметров состоит из перечня типов и имен параметров, разделенных запятыми. Функция может не иметь параметров, но круглые скобки необходимы в любом случае.
Оператор return вызывает немедленный выход из данной функции и возврат в вызывающую ее функцию. Этот оператор можно также использовать для возврата значения функции. Отметим, что в теле функции может быть несколько операторов return, но может и не быть ни одного. В таких случаях возврат в вызывающую программу происходит после выполнения последнего оператора тела функции.
Если функция не возвращает никакого значения, она должна быть описана как функция типа void (пустая).
В языке С каждая функция – это отдельный блок программы, вход в который возможен только через вызов данной функции. Так, например, нельзя оператором перехода goto передать управление вовнутрь любой функции.
Вызов функции имеет следующий формат:
<имя_функции>(список_аргументов)
где в качестве аргументов можно использовать константы, переменные, выражения (их значения перед вызовом функции будут определены компилятором). Аргументы списка вызова должны полностью совпадать со списком параметров вызываемой функции по количеству, по порядку следования и по типам соответствующих им параметров. Отметим, что в случае отсутствия аргументов (в заголовке функции отсутствуют параметры) наличие круглых скобок у имени функции в точке ее вызова обязательно.
Тип данных «структура» объединяет несколько переменных, возможно разного типа. Переменные, которые объединены структурой, называются полями структуры (или элементами структуры).
Само описание структуры еще не создает в оперативной памяти структурных объектов с указанными полями. Описание структуры является “шаблоном” (типом пользователя) будущих объектов с описанной структурой
Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.
Прежде, чем начать работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д.
Текстовый режим отличается от двоичного тем, что при открытии файла как текстового пара символов «перевод строки», «возврат каретки» заменяется на один символ: «перевод строки» для всех функций записи данных в файл, а для всех функций вывода символ «перевод строки» теперь заменяется на два символа: «перевод строки»,«возврат каретки».
По умолчанию файл открывается в текстовом режиме.
После работы с файлом доступ к файлу необходимо закрыть. Закрывает файл в языке С функция flose. Например, из предыдущего примера файл закрывается так: fclose
Все действия по чтению/записи данных в файл можно подразделить на три группы:
1. Операции посимвольного ввода-вывода,
2. Операции построчного ввода-вывода,
3. Операции ввода-вывода по блокам.
Описание программы
Для работы программы нужно подключить следующие файлы из библиотеки:
iostream – заголовочный файл с классами, функциями и переменными для организации ввода-вывода.
conio.h - для испльзования функции getch().
Далее идёт описание структуры, используемой программой.
Записываются прототипы 7-ми функций, используемых в программе.
Сначала идёт выполнение главной функции main(), а затем описание всех пользовательских функций.
В главной функции работа основана на цикле while (), который выполняется пока «истина». Первой вызывается функция menu(), которая отображает на экране меню с возможностью выбора определенной операции и которая возвращает значение, используемое оператором switch () для альтернативного выбора вызова той или иной функции
Выводы
Таким образом, обобщив и суммировав все приобретенные знания о языке С
в результате работы была создана программа для работы с номерами абонентов телефонной базы, которая имеет следующие особенности:
1. При запуске программы появляется пользовательское меню.
2. Все данные, а именно фамилию абонента, его номер, год установки телефона, пользователь может записать в файл и при необходимости прочитать его, при этом данные предоставляются в виде таблицы, что более наглядно.
3. Выполнение задачи о выводе на экран информации следующего вида:
по вводимой с клавиатуры фамилии абонента выдается номер телефона;
определяется количество установленных телефонов с xxxx года (год вводится с клавиатуры).
Структуры и файлы в языке служат для более удобного и структурированного хранения данных, что имеет важное практическое значение при написании программ, в особенности экономического характера, где нужно хранить данные, выполнять расчеты и дополнительные предусмотренные задачи.
Список источников, использованных при разработке проекта:
1. Teach yourself C++, Herbert Schild, Third Edition, St. Petersburg,2006
2. Объектно-Ориентированное программирование на языке С++, Луцик Ю.А., Комличенко В.Н., Минск БГУИР 2008
Приложение
Листинг программы
Main.cpp
#include "data.h"
#include "funck.h"
/*
Создать файл, содержащий сведения о сотрудниках института.
Структура записи: ФИО, название отдела, год рождения, стаж работы,
оклад. На печать вывести: СПИСОК СОТРУДНИКОВ ПЕНСИОННОГО ВОЗРАСТА
С УКАЗАНИЕМ СТАЖА РАБОТЫ, СРЕДНИЙ СТАЖ СОТРУДНИКОВ ОТДЕЛА Х
(Х ВВОДИТСЯ С КЛАВИАТУРЫ).
*/
int main()
{
setlocale(LC_ALL,"Russian");
short a = 0;
char *name_File;
cout<<"======МЕНЮ======"<<endl;
do
{
cout<<"1 - Создать файл"<<endl;
cout<<"2 - Открыть файл"<<endl;
cout<<"0 - Выход"<<endl;
cout<<"Действие: ";
cin>>a;
switch (a)
{
case 1:
{
try
{
name_File = new char;
cout<<"Введите имя файла: ";
cin>>name_File;
create(name_File);
}
catch(data)
{
cout<<"Такой файл уже существует, введи новое имя: "<<endl;
cin>>name_File;
create(name_File);
}
break;
}
case 2:
{
try
{
name_File = new char;
cout<<"Введите имя файла: ";
cin>>name_File;
open(name_File);
}
catch(data)
{
cout<<"Таого файла не существует, введи другое имя: "<<endl;
cin>>name_File;
open(name_File);
}
break;
}
case 0:
{
return 0;
}
default:
{
cout<<"Error"<<endl;
}
}
}
while((a!= 1) && (a!= 2) && (a!= 0));
menu();
out_File();
//самый конец
return 0;
}
int menu()
{
short a;
do
{
system("cls");
cout<<"1 - Добавить запись"<<endl;
cout<<"2 - Вывод списка работников"<<endl;
cout<<"3 - Удаление записи"<<endl;
cout<<"4 - Изменение записи"<<endl;
cout<<"5 - СРЕДНИЙ СТАЖ"<<endl;
cout<<"0 - Выход"<<endl;
cout<<"Действие: ";
cin>>a;
switch (a)
{
case 1:
{
add_data();
break;
}
case 2:
{
out_data();
break;
}
case 3:
{
delet();
break;
}
case 4:
{
change();
break;
}
case 5:
{
zad();
break;
}
case 0:
{
return 0;
}
default:
{
cout<<"Error"<<endl;
}
}
getch();
}
while(a!= 0);
return 0;
}
Funck.h
#include "data.h"
#include "funck.h"
/*
Создать файл, содержащий сведения о сотрудниках института.
Структура записи: ФИО, название отдела, год рождения, стаж работы,
оклад. На печать вывести: СПИСОК СОТРУДНИКОВ ПЕНСИОННОГО ВОЗРАСТА
С УКАЗАНИЕМ СТАЖА РАБОТЫ, СРЕДНИЙ СТАЖ СОТРУДНИКОВ ОТДЕЛА Х
(Х ВВОДИТСЯ С КЛАВИАТУРЫ).
*/
int main()
{
setlocale(LC_ALL,"Russian");
short a = 0;
char *name_File;
cout<<"======МЕНЮ======"<<endl;
do
{
cout<<"1 - Создать файл"<<endl;
cout<<"2 - Открыть файл"<<endl;
cout<<"0 - Выход"<<endl;
cout<<"Действие: ";
cin>>a;
switch (a)
{
case 1:
{
try
{
name_File = new char;
cout<<"Введите имя файла: ";
cin>>name_File;
create(name_File);
}
catch(data)
{
cout<<"Такой файл уже существует, введи новое имя: "<<endl;
cin>>name_File;
create(name_File);
}
break;
}
case 2:
{
try
{
name_File = new char;
cout<<"Введите имя файла: ";
cin>>name_File;
open(name_File);
}
catch(data)
{
cout<<"Таого файла не существует, введи другое имя: "<<endl;
cin>>name_File;
open(name_File);
}
break;
}
case 0:
{
return 0;
}
default:
{
cout<<"Error"<<endl;
}
}
}
while((a!= 1) && (a!= 2) && (a!= 0));
menu();
out_File();
//самый конец
return 0;
}
int menu()
{
short a;
do
{
system("cls");
cout<<"1 - Добавить запись"<<endl;
cout<<"2 - Вывод списка работников"<<endl;
cout<<"3 - Удаление записи"<<endl;
cout<<"4 - Изменение записи"<<endl;
cout<<"5 - СРЕДНИЙ СТАЖ"<<endl;
cout<<"0 - Выход"<<endl;
cout<<"Действие: ";
cin>>a;
switch (a)
{
case 1:
{
add_data();
break;
}
case 2:
{
out_data();
break;
}
case 3:
{
delet();
break;
}
case 4:
{
change();
break;
}
case 5:
{
zad();
break;
}
case 0:
{
return 0;
}
default:
{
cout<<"Error"<<endl;
}
}
getch();
}
while(a!= 0);
return 0;
}
Data.h
#pragma once
#include "class.h"
#include "working_data.h"
#include "personal_data.h"
class data;
vector<data> vect;
vector<data>::iterator p, p1;
class data: public working_data, public personal_data
{
public:
void get_data(char*, char*, char*, short, short);
//ну надо же было наследование впихнуть
};
void data::get_data(char* surname1, char* name1, char* work1, short date, short exp)
{
get_name(name1);
get_surname(surname1);
get_work(work1);
get_exp(exp);
get_date(date);
};
Class.h
#pragma once
#include <iostream>
#include <conio.h>
#include <clocale>
#include <fstream>
#include <list>
#include <vector>
#include <exception>
using namespace std;
char *File_NAME;
void create(char *);
void open(char *);
void add_data();
inline int out_data();
inline void out_data(short);
void out_File();
void in_File();
int delet();
int change();
void zad();
presonal_data.h
#pragma once
#include "class.h"
class personal_data
{
private:
char name[80], surname[80];
short date;
public:
//name
void get_name(char *str)
{
strcpy(name,str);
}
char* put_name()
{
return name;
}
//surname
void get_surname(char *str)
{
strcpy(surname,str);
}
char* put_surname()
{
return surname;
}
// p_data
void get_date(short str)
{
date = str;
}
short put_date()
{
return date;
}
};
Working_data.ha
#include "class.h"
class working_data
{
private:
char work[80];
short exp;
public:
// work
void get_work(char *str)
{
strcpy(work,str);
}
char* put_work()
{
return work;
}
//experience
void get_exp(short str)
{
exp = str;
}
short put_exp()
{
return exp;
}
};