75663

Інтегровані структури даних запису

Лабораторная работа

Информатика, кибернетика и программирование

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

Украинкский

2015-01-24

562.11 KB

5 чел.

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

Вінницький національний технічний університет

Інститут інформаційних технологій та комп’ютерної інженерії

Кафедра ПЗ

Лабораторна робота №3 варіант №9

з дисципліни Алгоритми та структури даних

Виконала: ст. гр. 1 ПІ-13б                            Лілик Л. С.

Перевірив:                                                       Власюк В. Х.

Вінниця, 2013

Тема:  Інтегровані структури даних, запису.

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

Завдання:

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

  1.  текстове введення-виведення (консольний і файловий);
  2.  присвоювання;
  3.  задання константних значень;
  4.  порівняння (не менше 2-х типів).

Підготувати файл початкових даних, що містять не менше 10 значень конкретних об'єктів.

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

Варіант № 9.

Nз/п

Прикладна область

Атрибути інформації

9

Телефонна станція

номер абонента, прізвище, адреса, наявність того, що блокує, заборгованість

Хід роботи

 

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

Складність алгоритму

Складність алгоритму дорівнює O( 5N + 10 ) від Т, де Т - час виконання.


Блок-схема алгоритму




Лістинг програми

// ------ Allh.h ---------------------------------------------------------------------------------------

#ifndef ALLH_H_INCLUDED

#define ALLH_H_INCLUDED

#include "TelephoneEx.h"

#include <iostream>

#include <cstring>

#include "fstream"

using namespace std;

#endif // ALLH_H_INCLUDED

// ------ TelephoneEx.h ---------------------------------------------------------------------------------------

#ifndef TELEPHONEEX_H_INCLUDED

#define TELEPHONEEX_H_INCLUDED

#include "Allh.h"

class TelephoneEx

{

   public:

       long int subNumber;

       char surname[50];

       char adds[100];

       bool blocked;

       int debt;

       TelephoneEx();

       TelephoneEx(long int _subNumber, char *surname, char *adds, bool _blocked, int _debt);

       ~TelephoneEx();

       void Show();

       void Fill();

       bool operator<(TelephoneEx &a)

       {

           return(this->debt<a.debt);

       }

   protected:

   private:

};

#endif // TELEPHONEEX_H_INCLUDED

// ------ TelephoneEx.cpp --------------------------------------------------------------------------------------

#include "Allh.h"

TelephoneEx::TelephoneEx()

{

   //ctor

}

TelephoneEx::TelephoneEx(long int _subNumber, char *surname, char *adds, bool _blocked, int _debt): subNumber(_subNumber), blocked(_blocked), debt(_debt)

{

   //ctor

  strcpy(this->surname, surname);

  strcpy(this->adds, adds);

}

TelephoneEx::~TelephoneEx()

{

   //dtor

}

void TelephoneEx::Show()

{

   cout<<endl;

   cout<<surname<<" - "<<subNumber<<" - "<<adds<<" blocked: "<<blocked<<" debt: "<<debt;

}

void TelephoneEx::Fill()

{

   cout<<"\nPhone number: ";

       cin>>subNumber;

char str[3];

cin.getline(str, 50); // \n

   cout<<"Surname: ";

       cin.getline(surname, 50);

   cout<<"Address: ";

       cin.getline(adds, 100);

   cout<<"Blocked?: ";

       cin>>blocked;

   cout<<"Debt: ";

       cin>>debt;

}

// ------ main.cpp-----------------------------------------------------------------------------------------------

#include "Allh.h"

int MAX_ARRAY=10;

TelephoneEx *Data= new TelephoneEx[MAX_ARRAY];

char _TRUE[] = "true";

char _FALSE[] = "false";

int command=0;

void SortAlph(TelephoneEx *a)

{

   char str[50];

   long int st=0;

   bool bo=false;

   int de=0;

for (int i=1; i<MAX_ARRAY; ++i)

     for (int j=0; j<MAX_ARRAY-1; ++j)

      if (strcmp(a[j].surname, a[j+1].surname)>=0)

           {

           strcpy (str, a[j].surname);

           strcpy (a[j].surname, a[j+1].surname);

           strcpy (a[j+1].surname, str);

           strcpy (str, a[j].adds);

           strcpy (a[j].adds, a[j+1].adds);

           strcpy (a[j+1].adds, str);

           st=a[j].subNumber;

           a[j].subNumber=a[j+1].subNumber;

           a[j+1].subNumber=st;

           bo=a[j].blocked;

           a[j].blocked=a[j+1].blocked;

           a[j+1].blocked=bo;

           de=a[j].debt;

           a[j].debt=a[j+1].debt;

           a[j+1].debt=de;

           }

}

void SortDebt(TelephoneEx * &arr) // sorting of the array (improved bubble sort)

{

   bool flag=false;

TelephoneEx *temp  = new TelephoneEx;

while(flag==false)

{

 flag=true;

 for(int i=1;i<MAX_ARRAY;++i)

 {

  if(arr[i]<arr[i-1])

  {

   temp[i]=arr[i];

   arr[i]=arr[i-1];

   arr[i-1]=temp[i];

   flag=false;

  }

 }

}

}

int ComList ()  //  the list of commands

{

cout<<"\n\n\t~~~ MAIN MENU ~~~\n";

cout<<"\n - To output existing list of data from file press 1. ";

cout<<"\n - To input list into the file press 2. ";

cout<<"\n - To sort current list by alphabet press 3. ";

cout<<"\n - To sort current list by debt press 4. ";

cout<<"\n - To exit the menu 123.\n ";

   cin>>command;

cout<<"\nYour command is "<<command<<endl;

return command;

}

void MenuExit()

{

cout<<"\n\nBack to the MAIN MENU. Press any key...\n";

 //  getchar();

}

//void OutputFromFile(TelephoneEx *Data, int MAX_ARRAY);

void InputInFile(TelephoneEx *Data, int MAX_ARRAY)

{

   cout<<"Input number of records: ";

   cin>>MAX_ARRAY;

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

       Data[i].Fill();

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

   Data[i].Show();

   FILE *fp;

   fp=fopen("DataBaseInput.txt", "w");

   for (int i=0; i<MAX_ARRAY; ++i)    //  filling file

   {

       char str[6];

       if(Data[i].blocked) strcpy(str, "true");

       else strcpy(str, "false");

       fprintf (fp, "%s\n%ld\n%s\n%s\n%i\n\n", Data[i].surname, Data[i].subNumber, Data[i].adds, str, Data[i].debt);

   }

   cout<<"\n\n\tIn file: ";

fclose(fp);

ifstream inp("DataBaseInput.txt");

TelephoneEx *D= Data;

int k=0;

while(!inp.eof()&&k<MAX_ARRAY)

{

 char buf[7];

 inp.getline(D[k].surname,50);

 inp>>D[k].subNumber;

 inp.getline(buf,7);

 inp.getline(D[k].adds,100);

 inp.getline(buf,7);

 if(strcmp(buf, _TRUE)==0) D[k].blocked=true;

       else  if(strcmp(buf, _FALSE)==0)D[k].blocked=false;

 inp>>D[k].debt;

 inp.getline(buf,7);

 inp.getline(buf,7);

 ++k;

}

inp.close();

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

       D[i].Show();

}

void OutputFromFile(TelephoneEx *Data, int MAX_ARRAY)

{

ifstream inp("DataBaseOutput.txt");

TelephoneEx *D= Data;

int k=0;

while(!inp.eof()&&k<MAX_ARRAY)

{

 char buf[7];

 inp.getline(D[k].surname,50);

 inp>>D[k].subNumber;

 inp.getline(buf,7);

 inp.getline(D[k].adds,100);

 inp.getline(buf,7);

 if(strcmp(buf, _TRUE)==0) D[k].blocked=true;

       else  if(strcmp(buf, _FALSE)==0)D[k].blocked=false;

 inp>>D[k].debt;

 inp.getline(buf,7);

 inp.getline(buf,7);

 ++k;

}

inp.close();

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

       D[i].Show();

}

int main()

{

   ComList();

while (command != 123)  // while (command != (exit condition) )

{

switch(command)

{

case 1:

 {

 cout<<"\n\t Output existing list of data from file\n";

                    OutputFromFile(Data, MAX_ARRAY);

    MenuExit(); break;    }

case 2:

 {

          cout<<"\n\t Input list into the file\n";

                    InputInFile(Data, MAX_ARRAY);

    MenuExit(); break;

 }

case 3:

 {

 cout<<"\n\t Sorted current list by alphabet:\n";

                    SortAlph(Data);

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

                         Data[i].Show();

    MenuExit(); break;

 }

 case 4:

 {

 cout<<"\n\t Sorted current list by debt:\n";

                    SortDebt(Data);

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

                        Data[i].Show();

    MenuExit(); break;

 }

default: cout<<"\nERROR! Your command is wrong. Please try again. \nPress any key: ";

               // getchar();

}

ComList();

   }

   return 0;

}


Результат виконання

Висновки

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


 

А также другие работы, которые могут Вас заинтересовать

62486. Сертификация услуг общественного питания 41.48 KB
  Объектами сертификации в сфере услуг могут быть: услуга; организация предоставляющая услугу; персонал выполняющий услугу производственный процесс; система управления качеством в организации предоставляющие услуги. Формирование системы сертификации услуг и выбор ее участников проводятся в соответствии...
62488. Малювання орнаменту у смужці 14.21 KB
  Таблиці малюнки із зображеннями рослинного орнаменту квіти листя плоди вишиті серветки рушники сорочки. Ви вже знаєте що одним із видів декоративно-прикладного мистецтва є орнамент. Пригадайте що таке орнамент.
62490. Политическая власть 28.05 KB
  Ни одной другой власти таких возможностей нет Отстраненность отстранение системы установленного господства от реально доминирующего что создает определенные трудности для установления конкретных властвующих сил...