У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Курсова робота - Робота з файлами.
19



Інститут менеджменту та економіки „Галицька Академія”

з дисципліни “Об’єктно-орієнтовне програмування”

Тема – Робота з файлами.

 

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

- число однофамільців у групі;

- число однофамільців на факультеті.

Анотація

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

Summary

In work the program was developed on basis|foundation| of work with files with the use of classes. The program is executed|done,implemented| in programming language|speech| of С++.

Зміст

ЗМІСТ……………………………………………………………..6 ОПИС ОСНОВНИХ ФУНКЦІЙ, ЩО ВИКОРИСТАНІ В

ПРОГРАМІ………………………………………………………. 7

КОД ПРОГРАМИ З ПОЯСНЕННЯМИ (РЕМАРКАМИ) …… 9 ОПИС РОБОТИ 17

ВИСНОВКИ 18

ПЕРЕЛІК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ 19

2. ОПИС ОСНОВНИХ ФУНКЦІЙ, ЩО ВИКОРИСТАНІ В ПРОГРАМІ

Головна функція main( ) містить виклик чотирьох функцій, які ефективно вирішують поставлене завдання:

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

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

Функція Statistic( ) – забезпечує можливість перегляду числа однофамільців у групі і на факультеті.

функція exit( ) – забезпечує можливість виходу з програми

Для ефективного використання оперативної пам’яті і спрощення доступу до даних вся інформація про студентів зведена в двох класах Student і Dekanat. Клас Student включає в себе такі змінні класу:

Тип і ім’я | Призначення

Char surname[20] | Прізвище (до 20 знаків)

char Grypa[12] | Група (до 12 знаків)

Клас Dekanat включає в себе такі змінні класу:

Тип і ім’я | Призначення

Char name[20] | Імя (до 20 знаків)

char Faculty[12] | Факультет (до 12 знаків)

Дані класу Dekanat є з специфікатором доступу private – тобто, доступ до них мають тільки методи класу. А дані класу Student ‘ з специфікатором доступу protected – тобто, доступ до них мають методи класу Student і всі похідні класи від класу Student.

Для вводу даних використовується конструктор.

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

Клас Student:

Void Show();

Клас Dekanat:

void Showw(ifstream *,int);

void Read(ifstream *);

char* Gryp();

char* Surn();

char* Facult();

В програмі створюється один масив об’єктів і його використовують у всій програмі. В класі використовується перевантаження конструкторів.

Програма на мові С++

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <dos.h>

#include <iostream.h>

#include <fstream.h>

int zm=10,ji,m=0;

class Student

{

public:

Student (); //Конструктори

Student(char *,char *); //класу Student

void Show(int);

protected:

char surname[20];

char Grypa[12];

};

Student::Student(){}

//---------------------------------------------------------

Student::Student(char *surname,char *Grypa)

{

strcpy(Student::surname,surname);

strcpy(Student::Grypa,Grypa);

}

//------------------------------------------------------

void Student::Show(int i)

{

gotoxy(14,zm+i); printf("%s", surname);

gotoxy(27,zm+i); cout<<Grypa;

}

//---------------------------------------------------------------------------

class Dekanat:Student

{

public:

Dekanat(char *,char *,char *,char *,ofstream *); //Конструктори класу

Dekanat(); //Dekanat

void Showw(ifstream *,int);

void Read(ifstream *);

char* Gryp();

char* Surn();

 

 

char* Facult();

private:

char name[20];

char Faculty[12];

};

Dekanat::Dekanat(char *name,char *surname,char *Grypa,char *Faculty,ofstream *Write):Student(surname,Grypa)

{

strcpy(Dekanat::name,name);

strcpy(Dekanat::Faculty,Faculty);

*Write<<name<<'\t'<<surname<<'\t'<<Grypa<<'\t'<<Faculty<<'\n'; //Запис у файл

}

Dekanat::Dekanat():Student()

{}

//---------------------------------------------------------

void Dekanat::Showw(ifstream *R,int i)

{

*R>>name>>surname>>Grypa>>Faculty;//Читання даних з файлу

Show(i);

gotoxy(3,zm+i); cout<<name;

gotoxy(35,zm+i); cout<<Faculty;

}

//---------------------------------------------------

void Dekanat::Read(ifstream *R )

{

*R>>name>>surname>>Grypa>>Faculty; //Читання з файлу

}

//-------------------------------------------------------

char* Dekanat::Gryp()

{

return Grypa;

}

//-------------------------------------------------------

char* Dekanat::Surn()

{

return surname;

}

//-------------------------------------------------------------

char* Dekanat::Facult()

{

 

return Faculty;

}

void Vvid_info();

void Show();

void Vuhid();

void Tabluca();

void Statistic();

//-----------------------------------------------------

//Student S[100];

Dekanat D[100];

//------------------------------------

void main()

{

ifstream S("Inst.txt",ios::out);//Створює файл, якщо файлу не існує

if (S.fail())

{

cerr << "Pomulka vidkrutta faily." << endl;

sleep(2);

exit(1);

}

while(1)

{

clrscr();

cout<<"\t\tKursova robota z Obektno-orientovnogo programuvanya.\n";

cout<<"\t\t\tStydentku grypu PZ-04.\n";

cout<<"\t\t\tKaidanskoi Nadii";

printf("\n\n\t Vuberit odun z pynktiv...\n\n");

printf("\t[1] - Vvedenya vidomostei pro stydentiv\n\t[2] - Pereglad danux y faili\n\t"

"[3] - Pereglad statustuku\n\t[4] - Vuxid z programu\n");

switch(getch())

{

case 49: //1

Vvid_info();

break;

case 50: //2

Show();

break;

case 51: //3

Statistic();

break;

case 52: //4

exit(1);

break;

}

}

}

//------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

void Vvid_info()

{

int i,f;

char name[12],surname[12],Grypa[12],facultet[12];

clrscr();

cout<<"\n\nZapownit tablicu\n";

gotoxy(1, 6);

Tabluca();

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

{

ofstream Write("Inst.txt",ios::app);// Відкриває файл для додавання запису

if (Write.fail())

{

cerr << "Pomulka vidkrutta faily." << endl;

sleep(2);

exit(1);

}

 

if(i>0)

{ gotoxy(1, zm+i);

cout<<"| | | | |\n";

cout<<"|__________|____________|_______|________|\n";

}

gotoxy(1,zm+i+4);

cout<<" - Natusnit na [1] dla vuhody\n";

cout<<" - Lyby klavishy dla vvody";

f=getch();

if(f==49)break;

gotoxy(1,zm+i+4);

cout<<" \n";

cout<<" ";

gotoxy(3,zm+i);

cin>>name;

 

name[9]=NULL;

gotoxy(14,zm+i);

 

 

cin>>surname;

surname[9]=NULL;

gotoxy(27,zm+i);

cin>>Grypa;

gotoxy(35,zm+i);

cin>>facultet;

Dekanat Stydent(name,surname,Grypa,facultet,&Write);

Write.close();

}

}

//---------------------------------------------------------------------------

void Tabluca()

{

cout<<" __________ ____________ _______ ________ \n";

cout<<"| | | | |\n";

cout<<"| Imja | Prizvushe | Grypa |Fakyltet|\n";

cout<<"|----------|------------|-------|--------|\n";

cout<<"| | | | |\n";

cout<<"|__________|____________|_______|________|\n";

}

//--------------------------------------------------------------------------------

void Show()

{

int i=0;

clrscr();

ifstream R("Inst.txt",ios::in);//Відкриває файл для читання

if (R.fail())

{

cerr << "Pomulka vidkrutta faily." << endl;sleep(2);

exit(1);

}

cout<<"\n\nDani y faili:";

gotoxy(1,6);

Tabluca();

while(!R.eof())

 

{

D[i].Showw(&R,i);

 

cout<<"\n| | | | |\n";

i++;

}

gotoxy(1,zm+i-1);

cout<<"|__________|____________|_______|________|\n";

cout<<" ";

R.close();

cout<<"\n - Dlya vuhody v menu, natusnit lyby klavishy";

getch();

}

//-------------------------------------------------------------------------

void Statistic()

{

int choise,g,i,j,odn,cm;

char A[12],B[12],Cop1[12],Cop2[12];

clrscr();

cout<<"\n[1] - Vuvestu odnofamilciv y grypi[1]\n";

cout<<"[2] - Vuvestu odnofamilciv na fakylteti\n";

choise=getch();

if(choise==49)

{

clrscr();

ifstream R("Inst.txt",ios::in);

if (R.fail())

{

cerr << "Pomulka vidkrutta faily." << endl;

sleep(2);

exit(1);

}

i=0;

while(!R.eof())

{

D[i].Read(&R);

i++;

}

i--;

j=0;odn=0;

ofstream RT("Stat",ios::trunc);

while(j!=i)

{

ifstream S("Stat",ios::in);

cm=1;

while(!S.eof())

{

S>>Cop1>>Cop2;

if(!strcmp(Cop1,D[j].Surn()))

if(!strcmp(Cop2,D[j].Gryp()))cm=0;

}

 

if(cm==1)

{

strcpy(A,D[j].Surn());

strcpy(B,D[j].Gryp());

g=j+1;

while(g!=i)

{

if(!strcmp(B,D[g].Gryp()))

if(!strcmp(A,D[g].Surn()))

{

ofstream W("Stat",ios::app);

W<<A<<'\t'<<B<<'\n';

odn++;

}

g++;

}

if(odn!=0)

{cout<<"Y grypi "<<D[j].Gryp()<<' '<<odn<<" odnofamilciv\n";odn=0;}

}

j++;

}

}

else

if(choise==50)

{

clrscr();

ifstream R("Inst.txt",ios::in);

if (R.fail())

{

cerr << "Pomulka vidkrutta faily." << endl;

sleep(2);

exit(1);

}

i=0;

while(!R.eof())

{

D[i].Read(&R);

i++;

}

i--;

j=0;odn=0;

ofstream RT("Stat",ios::trunc);

while(j!=i)

{

ifstream S("Stat",ios::in);

cm=1;

while(!S.eof())

{

S>>Cop1>>Cop2;

if(!strcmp(Cop1,D[j].Surn()))

if(!strcmp(Cop2,D[j].Facult()))cm=0;

}

if(cm==1)

{

strcpy(A,D[j].Surn());

strcpy(B,D[j].Facult());

g=j+1;

while(g!=i)

{

if(!strcmp(B,D[g].Facult()))

if(!strcmp(A,D[g].Surn()))

{

ofstream W("Stat",ios::app);

W<<A<<'\t'<<B<<'\n';

odn++;

}

g++;

}

if(odn!=0)

{cout<<"Na fakylteti "<<D[j].Facult()<<' '<<odn<<" odnofamilciv\n";odn=0;}//getch();

}

J++;

}

}

cout<<"\n - Dlya vuhody v menu, natusnit lyby klavishy";

getch();

remove("Stat");

}

 

 

Опис роботи

Виконання програми починається з головної main(). В ній за допомогою команди вибору switch створюється меню. У цьому меню є чотири функції, які викликаються в залежності від клавіш на які натиснути (від 1-4).

Якщо натиснути на [1], то викликається функція вводу даних.

Якщо на [2], то функція перегляду даних у файлі.

Якщо на [3], то функція перегляду попередньої версії файлу – до видалення запису з можливістю відновлення.

Якщо [4], то фунція виходу з програми.

 

ВИСНОВКИ

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


Сторінки: 1 2