Ім'я файлу: Курсова робота.docx
Розширення: docx
Розмір: 6329кб.
Дата: 12.06.2022
скачати

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

Чернівецький національний університет ім. Ю. Федьковича

Інститут фізико-технічних та комп’ютерних наук

Кафедра радіотехніки та інформаційної безпеки



Звіт

Курсової роботи з предмету :

«Програмне забезпечення об’єктів кіберпростору»



Роботу виконав:

Студент 225 групи

Катеринко Владислав

Керівник:

Галюк С.Д.

Ченівці ЧНУ 2020р.



Анотація

В даній курсовій роботі була виконана розробка програми на мові програмування С++, яка включала в себе роботу з файлами та класами.

Зміст

  1. Вступ

  2. Аналіз сучасного стану програмування

  3. Поняття класів

  4. Робота з файлами

  5. Розробка програми

  6. Результат

  7. Висновок

  8. Додаток 1(повний код програми)


Вступ

Мова програмування Сi була розроблена в 1972 р. Деннисом Рiтчi, який є одним з авторів операцiйноi системи UNIX. Мова програмування Сi пізніше була використана для програмування цiеi системи, а також багатої бібліотеки обслуговуючих програм, оскільки, являлася універсальною мовою загального призначення, мова Сi зручна для програмування системних задач. Поява мікрокомп’ютерів закріпила позицii мови Сi. Було створено близько 30 його нових компіляторів, а після проведення Американським національним інститутом стандартів (American National Standards Institute) робiт по стандартизацii в області програмування почали розроблятися компілятори, що вiдповiдали опублікованому весною 1986 р. проекту стандарту.

Першим компілятором по стандарту ANSI являлась система Турбо Сi версii 1.0 фiрми Borland International. Ця система, що складається з компілятора мови Сi, пов'язаного з ним редактора, компоновщика i бібліотек, забезпечила користувачам зручну інтегровану операційну оболонку, а також суттєво полегшувала професійне програмування, в якому визначальними параметрами є висока швидкість компiляцii, висока якість згенерованого коду та невеликий об’єм оперативної пам’яті. Мова С серед сучасних мов програмування є однією iз найбільш поширених. Вона універсальна, але найбільш ефективне її використання в задачах системного програмування - розробки трансляторів, операційних систем, інструментальних засобів. Мова С добре зарекомендувала себе ефективністю, лаконічністю запису алгоритмів, логічною стрункістю програм. У багатьох випадках програми, написані на мові С, можна порівняти по швидкості з програмами, написаними на мові Асемблера, при цьому вони більш наглядні i прості у супроводі.

Основними перевагами мови С вважаться висока переча написаних на нiй програм мiж комп'ютерами з різною архітектурою, мiж різними операційними середовищами. Транслятори мови С дiять практично на всiх персональних комп'ютерах, які використовуються в наш час. Перечислимо окремі особливості мови С:

-в мові С реалізовані окремі операцii низького рівня (а саме операцii над бітами). Окремі з таких операцій напряму вiдповiдають машинним командам;

- мова С підтримує механізм показчикiв на змiннi i функцii;

-базовi типи даних мови С відображають тi ж об’єкти, з якими потрібно мати справу програмі на мові Асемблера,- байти, машинні слова, символи, строки;

- як в нiякiй iншiй мові програмування високого рівня в мові С накладаються лише незначні обмеження на перетворення типів даних;

- не дивлячись на ефективність і потужність конструкцii мови С, він відносно малий по об'єму, але в системне оточення мови С входить бібліотека стандартних функцій, в який реалізовані встроенi оператори введення - виведення, динамічного розподілу пам’ять, управління процесами i т.д.

Аналіз сучасного стану технологій програмування

У 80-х роках мова С++ стала одною з найбільш розповсюджених та універсальних мов програмування. З допомогою цієї мови можна створювати програми для широкого класу комп'ютерів. В 70-х роках серед створювачів мов програмування популярною стала концепція об'єкту. Об'єкт є сукупністю коду і даних, що створена для відтворення властивостей фізичних предметів чи абстрактних понять.

Крім можливостей, що дає C, C++ надає гнучкі й ефективні засоби визначення нових типів. Використовуючи визначення нових типів, програміст може розділяти розроблювальну програму на піддающіся легкому контролю частини. Такий метод побудови програм часто називають абстракцією даних. Інформація про типи утримується в деяких об'єктах типів, визначених користувачем. Такі об'єкти прості й надійні у використанні в тих ситуаціях, коли їхній тип не можна встановити на стадії компіляції. Програмування з застосуванням таких об'єктів часто називають об'єктно-орієнтованим. При правильному використанні цей метод дає більш короткі й зрозуміліші контрольовані програми.

C++ і його стандартні бібліотеки спроектовані так, щоб забезпечувати мобільність. Наявна на сучасний момент реалізація мови буде йти в більшості систем, що підтримують C. З C++ програм можна використовувати C бібліотеки, і з C++ можна використовувати велику частину інструментальних засобів, що підтримують програмування на C.

Поняття класів

Клас являє собою абстрактний тип даних, що визначається користувачем і являє собою модель реального об’єкта у вигляді даних та функцій для роботи з ними.

Оголошення класу має таку форму:
class сім’я класу> : список класів-батьків>

{

public:             // доступно всім

<дані, методи, властивості, події>

protected: // доступно тільки потомкам

<дані, методи, властивості, події>

private:   // доступно тільки в класі

<дані, методи, властивості, події>

} <список змінних>

Об’єкт — це змінна типу клас. Дані класу називаються по­лями, а функції —методами, що призначені для обробки полів. Крім методів, тип клас може мати спеціальні функції — конструктори і деструктори.

Однією з найцікавіших властивостей програмування є можливість успадкування даних і функ­цій. У випадку, коли один клас успадковує інший, базовий клас називають батьківським, а той, що успадковує, — похідним або нащадком.

Розміщення описів змінних і функції з їх обробки, тобто полів та методів в одному класі називається інкапсуляцією.

Класи в С++ мають три різних рівні доступу до своїх еле­ментів, тобто даних (полів) і функцій (методів):

  • закриті елементи (private);

  • захищені елементи (protected);

  • відкриті елементи (public).

До даних у закритому розділі (private) мають доступ тіль­ки функції-елементи свого класу. Класам-нащадкам забороня­ється доступ до закритих даних своїх базових (батьківських) класів. За замовчуванням усі дані-члени класу мають атрибут private(закритий).

До даних у захищеному розділі (protected) мають доступ функції свого класу і функції класів-нащадків.

У свою чергу до даних відкритого розділу (public) можуть звертатися будь-які функції.

Існують такі правила створення розділів класу:

  • розділи можуть з’являтися в будь-якому порядку і де­кілька разів;

  • якщо не оголошено жодного розділу, компілятор за за­мовчуванням оголошує усі елементи закритими;

  • розміщати дані-елементи класу у відкритому розділі мож­на тільки за необхідності. Дані-елементи класу звичайно розмі­щують у закритому, або захищеному розділі, щоб до них мали доступ функції-члени класу, а також функції класів-нащадків;

  • для зміни значень даних (полів) слід використовувати функції-члени класу;

  • клас може мати декілька конструкторів, але тільки один деструктор.


Серед функцій-членів класу можуть бути такі, що визнача­ють процеси створення, ініціювання, копіювання та знищення об’єктів свого класу. До цих функцій належать конструктори і деструктори.

Головною метою конструкторів є ініціювання змінних-об’єктів класу та розподілення пам’яті для їх зберігання. Конструк­тор викликається кожного разу при створенні об’єкта даного класу або явно, або автоматично (див. Р11_1.СРР).

Основні правила роботи з конструкторами:

  • ім’я конструктора повинне співпадати з ім’ям свого класу;

  • для конструктора не вказується тип значення, яке повер­тає функція;

  • клас може мати декілька конструкторів або не мати жод­ного;

  • конструктор за замовчуванням — це конструктор, який не має параметрів, або всі його параметри мають значення за замовчуванням;

  • конструктор копіювання безпосередньо призначений для створення об’єкта класу шляхом копіювання даних з існуючого об’єкта.


Робота з файлами

Файли дозволяють користувачеві зчитувати великі обсяги даних безпосередньо з диска, не вводячи їх з клавіатури. Існують два основних типи файлів: текстові і двійкові.

Текстовими називаються файли, що складаються з будь-яких символів. Вони організовуються по рядках, кожна з яких закінчується символом «кінця рядка». Кінець самого файлу позначається символом «кінця файлу». При запису інформації в текстовий файл, переглянути який можна за допомогою будь-якого текстового редактора, всі дані перетворюються до символьного типу і зберігаються в символьному вигляді.

У довічних файлах інформація зчитується і записується у вигляді блоків певного розміру, в яких можуть зберігатися дані будь-якого виду і структури.

Для роботи з файлами використовуються спеціальні типи даних, звані потоками. Потік ifstream служить для роботи з файлами в режимі читання, а ofstream в режимі запису. Для роботи з файлами в режимі як записи, так і читання служить потік fstream.

У програмах на C ++ при роботі з текстовими файлами необхідно підключати бібліотеки iostream і fstream.

Для того щоб записувати дані в текстовий файл, необхідно:

- описати змінну типу ofstream.

- відкрити файл за допомогою функції open.

- вивести інформацію в файл.

- обов'язково закрити файл.

Для зчитування даних з текстового файлу, необхідно:

- описати змінну типу ifstream.

- відкрити файл за допомогою функції open.

- зчитати інформацію з файлу, при зчитуванні кожної порції даних необхідно перевіряти, чи досягнуто кінець файлу.

- закрити файл.

Запис інформації в текстовий файл

Як було сказано раніше, для того щоб почати працювати з текстовим файлом, необхідно описати змінну типу ofstream. Наприклад, так:

ofstream F;

Буде створена змінна F для запису інформації в файл. На наступних етапі файл необхідно відкрити для запису. У загальному випадку оператор відкриття потоку матиме вигляд:

F.open ( «file», mode);

Тут F - змінна, описана як ofstream, file - повне ім'я файлу на диску, mode - режим роботи з відкриваються файлом. Зверніть увагу на те, що при вказівці повного імені файлу потрібно ставити подвійний слеш. Для звернення, наприклад до файлу accounts.txt, що знаходиться в папці sites на диску D, в програмі необхідно вказати: D: \\ sites \\ accounts.txt.

Файл може бути відкритий в одному з наступних режимів:

ios :: in - відкрити файл в режимі читання даних; режим є режимом за замовчуванням для потоків ifstream;

ios :: out - відкрити файл в режимі запису даних (при цьому інформація про існуючий файлі знищується); режим є режимом за замовчуванням для потоків ofstream;

ios :: app - відкрити файл в режимі запису даних в кінець файлу;

ios :: ate - пересунутися в кінець вже відкритого файлу;

ios :: trunc - очистити файл, це ж відбувається в режимі ios :: out;

ios :: nocreate - не виконувати операцію відкриття файлу, якщо він не існує;

ios :: noreplace - не відкривати існуючий файл.

Параметр mode може бути відсутнім, в цьому випадку файл відкривається в режимі за замовчуванням для даного потоку.

Після вдалого відкриття файлу (в будь-якому режимі) в змінної F буде зберігатися true, в іншому випадку false. Це дозволить перевірити коректність операції відкриття файлу.

Для того щоб прочитати інформацію з текстового файлу, необхідно описати змінну типу ifstream. Після цього потрібно відкрити файл для читання за допомогою оператора open. Якщо змінну назвати F, то перші два оператора будуть такими:

1 . ifstream F;

2 .F.open ( "accounts.txt", ios :: in);

Після відкриття файлу в режимі читання з нього можна зчитувати інформацію точно так же, як і з клавіатури, тільки замість cin потрібно вказати ім'я потоку, з якого відбуватиметься читання даних.

Наприклад, для читання даних з потоку F в змінну a, оператор введення буде виглядати так:

F >> a;

Два числа в текстовому редакторі вважаються розділеними, якщо між ними є хоча б один із символів: пробіл, табуляція, символ кінця рядка. Добре, коли програмісту заздалегідь відомо, скільки і які значення зберігаються в текстовому файлі. Однак часто відомий лише тип значень, що зберігаються в файлі, при цьому їх кількість може бути різним. Для вирішення даної проблеми необхідно зчитувати значення з файлу по черзі, а перед кожним зчитуванням перевіряти, чи досягнуто кінець файлу. А допоможе зробити це функція F.eof (). Тут F - ім'я потоку функція повертає логічне значення: true або false, залежно від того чи досягнуто кінець файлу.

Розробка програми

Моє завдання:

Розробити програму «Абітурієнт», що дозволяє автоматизувати роботу

приймальної комісії навчального закладу. Забезпечити виконання таких

функцій: введення та збереження основних даних абітурієнта; введення

результатів вступних випробувань; формування списків зарахованих до

навчального закладу. База даних програми – текстові файли.

Отже, для початку добавимо бібліотеки , які нам допоможуть в написанні програми

(тобто , забезпечать виконання певних функцій):



Бібліотека <iostream> - заголовний файл з класами, функціями і змінними для організації введення-виведення ;

Бібліотека - клас з методами і змінними для організації роботи з рядками;

Бібліотека - ця бібліотека визначає кілька функцій для обробки Сі-рядків і масивів;

Бібліотека - заголовний файл зі стандартної бібліотеки C ++, що включає набір класів, методів і функцій, які надають інтерфейс для читання / запису даних з / в файл;

Бібліотека - використовується для заміни стандартному динамічному масиву, пам'ять для якого виділяється вручну, за допомогою оператора new;

Бібліотека - стандартний заголовний файл введення-виведення;

Бібліотека - цей заголовний файл визначає декілька функцій загального призначення, у тому числі - функції динамічного управління пам'яттю, генерації випадкових чисел, цілої арифметики, пошуку, сортування і перетворення типів даних.

Далі, я створювам клас – «абітуріент» , в якому я ініціалізував змінні:



-ім’я;

-прізвище;

-вік;

-номер телефону ;

-результат вступних випробувань;

Створив функцію , яка б виводила дані про абітуріента:



Написав функцію , яка записує об’єкт у файл , та яка може повертатися за посиланням:



Аналогічно , функцію , яка зчитує об'єкт у файл, та яка може повертатися за посиланням:



Далі створив базу данних абітурієнтів:



Та записав її у файл :



А ця функція завантажує дані з файла :



Після цього , я створив зовнішній вигляд меню, яке буде відображене при запуску програми :



Пізніше , я написав функцію , яка б зберігала базу данних в файлі :



А ця функція буде використовуватися для того , щоб приймальна комісія могла добавляти абітуріентів до бази данних :



Ця , функція буде використовуватися для того , щоб приймальна комісія могла обраховувати , яка кількість абітуріентів ,з їх прохідними балами, поступила до університету:





Далі , я для зручності добавив функцію , яка виводить базу абітуріентів на екран :





Переходжу до main () , де перевіряю чи відкрився файл :



Та створюю меню в якому викликаю раніше написані функції :



Та завершаю роботу програми .

Результат

Відкривається меню в якому можу вибрати будь – яку із зазначених функцій:



Якщо вибираю 1 – то :



Якщо вибираю 2 – то:

Запитує:

  • ім’я;

  • прізвище;

  • вік;

  • телефон;

  • бал вступного екзамена;

  • чи потрібно зберігати цього абітуріента в базу данних;



Якщо ж я виберу 3 варіант – то, спочатку в мене запитає з яким балом абітуріент буде зарахований до університету:



А далі:



Висновок:

В ході курсової роботи я на практиці застосував свої знання з програмування. Поглибив розуміння основних принципів ідеології програмування. Відпрацював на практиці основні методи та засоби програмування. Навчився розробляти ієрархію класів та файлів. Набув практичних навиків роботи.

Додаток 1

#include

#include

#include

#include //підключення бібліотек;

#include

#include

#include

using namespace std;

class abiturient

{

public:

abiturient() {};

abiturient(string n, string sn, int o, string ph, int rez) :name(n), secname(sn), old(o), phone(ph), rezult(rez) {};

void get_info()

{

cout << "name " << name << endl;

cout << "secname " << secname << endl;

cout << "how old " << old << endl;

cout << "phone " << phone << endl;

cout << "rezult " << rezult << endl;

cout << endl;

}

string get_type() { return name; }

string name;

string secname;

int old;

string phone;

int rezult;

};

//функція для запису об'єкта;

void write_object(ofstream& file_write, const abiturient& b)

{

file_write << b.name << '\n';

file_write << b.secname << '\n';

file_write << b.old << '\n';

file_write << b.phone << '\n';

file_write << b.rezult << '\n';

}

//функція для зчитування всього об'єкта,який повертається за посиланням;

void read_object(ifstream& file_read, abiturient& b)

{

file_read >> b.name;

file_read >> b.secname;

file_read.get();//зчитуєм символ \n---->в результаті переходить до наступного рядка;

file_read >> b.old;

file_read >> b.phone;

file_read >> b.rezult;

}

//створюємо базу данних;

void create_base()

{

abiturient b1("Vasia", "Mostovyk", 17, "0987654673", 10);

b1.get_info();

abiturient b2("Yulia", "Kozak", 18, "0678954673", 8);

b2.get_info();

abiturient b3("Grisha", "Lovin", 18, "0654534567", 9);

b3.get_info();

abiturient b4("Lesia", "Lubimov", 17, "0345678900", 12);

b4.get_info();

ofstream file_write("abiturients.txt");//відкриваємо файл для запису;

write_object(file_write, b1);

write_object(file_write, b2);

write_object(file_write, b3);

write_object(file_write, b4);

file_write.close();//закриваємо файл ;

}

vector load_base(ifstream& file_read)

{

vector base;

abiturient temp;

for (int i = 0; i < 4; i++)

{

read_object(file_read, temp);

base.push_back(temp);

}

return base;

}

void show_main_menu()

{

cout << "Main menu:" << endl;

cout << "1. Check base with abiturient ... " << endl;

cout << "2. Add abiturient to base ... " << endl;

cout << "3. Check abiturients who are enrolled in the university ... " << endl;

cout << "4. Exit ..." << endl;

cout << "" << endl;

}

int save_base(const vector& base)

{

ofstream file_write("abiturients.txt");//відкриваємо файл для запису;

auto it = base.begin();

for (unsigned i = 0; i < base.size(); i++)

write_object(file_write, *it++);

file_write.close();//закриваємо файл ;

return 1;

}

//функція , яка добавляє абітуріентів в базу ;

void add_to_base(vector& base)

{

abiturient b;

cout << "Vvedit name: " << endl;

cin >> b.name;

cout << "Vvedit second name: " << endl;

cin >> b.secname;

cout << "Vvedit how old: " << endl;

cin >> b.old;

cout << "Enter phone number: " << endl;

cin >> b.phone;

cout << "Enter rezult of exam: " << endl;

cin >> b.rezult;

base.push_back(b);

bool save = 1;

cout << "Save 1/0?" << endl;

cin >> save;

if (save)

{

save_base(base);

}

}

//функція , яка обчислює , чи зараховано абітуріента до закладу;

void abit_rez() {

string k = "abiturients.txt";

ifstream fin;

fin.open(k);

if (!fin.is_open())//перевіряємо чи відкрився файл;

{

cout << "Fail ne vidkrutui" << endl;

}

else {

cout << "fail vidkrutui!" << endl;

}

string str[5];

//зчитуємо з яким балом абітурієнти будуть зараховані;

int l;

cout << "Vvedit z yiakym balom abiturientu budut zarahovani ..." << endl;

cin >> l;

while (!fin.eof())

{

getline(fin, str[0]);

getline(fin, str[1]);

getline(fin, str[2]);

getline(fin, str[3]);

getline(fin, str[4]);

int temp = stoi(str[4]);

if (temp <= l) {

cout << " St " << str[0] << " " << str[1] << " ne proishov " << endl;

}

else

{

cout << "St " << str[0] << " " << str[1] << " proishov " << endl;

}

}

fin.close();

}

//функція , яка виводить базу абітуріентів на екран;

void base_ab() {

string k = "abiturients.txt";

ifstream fin;

fin.open(k);//відкриваємо файл;

if (!fin.is_open())//перевірка, чи файл успішно відкритий;

{

cout << "Fail ne vidkrutui" << endl;

}

else

{

cout << "fail vidkrutui!" << endl;

}

string str;

while (!fin.eof())

{

str = "";

getline(fin, str);

cout << str << endl;

}

fin.close();//закриваємо файл;

}

int main()

{

ifstream file_read("abiturients.txt");//відкриваємо файл;

if (!file_read)//перевірка , чи файл успішно відкритий;

{

cerr << "Error input file!";

return 1;

}

vector base = load_base(file_read);

file_read.close();//закриваємо файл;

bool b = 1;

while (b)

{

show_main_menu();//виводимо меню на екран;

int option = 0;

cin >> option;

switch (option)

{

case 1: cout << "You choise is 1" << endl; system("cls"); base_ab(); break;

case 2: cout << "You choise is 2" << endl; system("cls"); add_to_base(base); break;

case 3: cout << "You choise is 3" << endl; system("cls"); abit_rez(); break;

case 4: cout << "You choise is 4" << endl; exit(0);

default:cout << "Input error!" << endl;

};

}

cout << base.size() << endl;

(--base.end())->get_info();

return 0;

}

скачати

© Усі права захищені
написати до нас