Философия науки. 2

Чувашский государственный университет им. И.Н.Ульянова

Факультет информатики и вычислительной техники

Кафедра вычислительной техники 
 
 
 
 
 
 
 
 
 
 
 

Пояснительная записка к курсовой работе

по дисциплине

«Объектно-ориентированное программирование» 
 
 
 
 
 
 

                Выполнил:

                студент группы  ИВТ- 42-08

                Кузнецов  Алексей Петрович 

                Руководитель:

                   кандидат  технических наук, доцент Обломов Игорь Александрович  
                 
                 
                 
                 
                 
                 
                 
                 
                 

Чебоксары 2011

Оглавление 

 

Задание на курсовую работу 

       Разработать информационно-поисковую систему  «Абитуриент»

       Курсовой  работу необходимо реализовать в  виде системы взаимодействующих  модулей, а само проектирование выполнить  в несколько последовательных этапов.

 

       Введение 

       Традиционная технология программирования складывалась в условиях, когда основными потребителями программ были научные учреждения, вычислительные ресурсы были ограничены, а проблемы сопровождения по существу неизвестны. Основными критериями качества программы считалось ее узко понимаемая эффективность и компактность. Со временем  сложность программ возросла настолько, что на их разработку уходили годы труда большого коллектива, а в результате системы появлялись с опозданием и содержали тысячи ошибок.

       Кризис  программного обеспечения привел к необходимости создания нового способа создания программ, который снижал бы общие затраты на протяжении всего цикла программы, – от замысла до завершения эксплуатации. Такая технология появилась в начале 70-х годов и была названа структурным программированием. В его основе лежит сочетание теории программирования и личного опыта высококвалифицированных программистов, а также учет современных требований к программам и промышленного характера их производства.

       Структурное программирование – это технология создания программ, позволяющая путем соблюдения определенных правил уменьшить время разработки и количество ошибок, а также облегчить возможность модификации программы. Структурный подход охватывает все стадии разработки проекта: спецификацию, проектирование, собственно программирование и тестирование.

       Структурный подход к программированию позволил успешно создавать достаточно крупные  проекты, но сложность программного обеспечения продолжала возрастать, и требовались все более развитые средства ее преодоления. Идеи структурного программирования получили свое дальнейшее развитие в объектно-ориентированном программировании (ООП) – технологии, позволяющей достичь простоты структуры и управляемости очень крупных программных систем.

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

 

       1. Постановка задачи 

       Требуется разработать программу, обеспечивающую хранение и обработку данных указанного типа. Должны быть реализованы типовые  действия, включающие в себя:

    • включение нового элемента;
    • удаление элемента;
    • корректировка элемента;
    • сохранение изменений в базу данных.

       Одним из требований к разрабатываемой  программной системе является хранение таблицы с исходными данными в файле. Все изменения, вносимые в базу данных, не должны теряться при завершении работы с программой, то есть необходимо обновление содержимого файла при изменении базы данных.

       Взаимодействие  пользователя с программой осуществляется через меню.

 

2. Анализ задания

2.1. Методы решения 

       В системе «Абитуриент» существуют две  сущности – «Абитуриент» и «ВУЗ». Главная проблема разработки системы – определение связи между этими сущностями1.

       Объект  А содержит данные об абитуриенте:

    • ФИО
    • Дата рождения
    • Серия и номер паспорта
    • Баллы за экзамен

       Объект  ВУЗ содержит данные о ВУЗе, в  которую желает поступить абитуриент:

    • Название ВУЗа
    • Название факультета
    • Название специальности
    • Проходной балл(сумма)

       Идея  1 метода решения поставленной задачи состоит в том, чтобы отдельно организовать объекты А и В. В этом случае необходимо программно организовать взаимодействие между объектами, на что потратится кучу времени, но не будет никаких конфликтов между ними.

       В основе 2 метода лежит объединение объектов А и В в один – АВ. В этом случае база данных будет в ненормальной форме, но, по сравнению с первым методом решения, необходимость во взаимодействии объектов А и В отпадает, что достаточно облегчит задачу.

       В силу очевидных превосходств2 между методами в курсовой работе будет рассматриваться 2 метод решения поставленной задачи. 

 

2.2. Подробный анализ выбранного метода решения 

       Объединив два объекта – Абитуриент и  ВУЗ – в один.

       Рассмотрим  объект ВУЗ. В общем случае иерархия объекта будет иметь следующий  вид:

       Из  рисунка видно, что необходимо создать  базовый класс ВУЗ, наследник класса ВУЗ – Факультет и наследник класса Факультет – Специальность.

       Поля  класса решения поставленной задачи LIST и Абитуриент:

       Все методы класса LIST – возможности системы Абитуриент: добавление, изменение, удаление записи, сохранение и т.д. Такой метод решения позволяет значительно уменьшить время разработки и количество ошибок, а также облегчить модификацию программы.

 

3. Описание классов и структур 

Класс Факультет:

class Faculty

{

public:

      char nameFaculty[15];

public:

      void SetParam(char *name);

      void Print();

}; 

Класс Специальность:

class Speciality: public Faculty

{

public:

      char nameSpeciality[15];

      int sumBalls;

public:

      void SetParam(char *nameF, char *nameS, int sumBalls);

      void Print();

      void PrintBalls()

}; 

Структура ФИО:

struct sfio  

            {

                  char surname[15];

                  char name[15];

                  char father[15];

            }; 

Структура ДатаРождения:

            struct sdr

            {

                  int day;

                  int month;

                  int year;

            }; 

Структура Абитуриент:

struct Abiturient

      {

      public:

            bool deleted;

            Speciality speciality;

            sfio fio;

            sdr dr;

            int balls[5];

            char pasport_s[4];

            char pasport_n[6];

      public:

            const Abiturient& operator = (const Abiturient &abit);

            void Print();

      };

 

Класс LIST: 

class List

{

private:

      int count;

      Abiturient list[10];

public:

      List()

      {

            count=0;

            for(int i=0;i<10; i++) list[i].deleted=false;

      };

      void ReadData(char *name);

      void SaveData(char *name);

      void PrintList(void);

      void AddRecord();

      void DelRecord();

      void ChangeRecord();

      void RestoreRecord();

}; 

4. Основные алгоритмы методов класса LIST

4.1. Чтение данных

4.2. Добавление записи 

 

4.3. Удаление записи 

 

4.4. Сохранение изменений 

 

 

         5. Результат работы программы 

         При запуске программы появляется меню со следующим списком действий: 

I N F O R M A T I O N  S E A R C H   S Y S T E M

              A B I T U R I E N T

- MENU --------------------------------------------

        F1  -  About

        L   -  Print list

        A   -  Add record to list

        C   -  Change record

        D   -  Delete record of list

        R   -  Restore deleted record

        S   -  Save list

        ESC -  Exit

--------------------------------------------------- 

         Вывод списка абитуриентов(L):

- LIST --------------------------------------------

   - 1 --------------------------------------------

        FIO:        Kuznetsov Alexey Petrovich

        DR:         2.6.1991

        Passport:   9704 352216

        Balls:      81 77 75 0 0

        Faculty:    IVT

        Speciality: Speciality

   - 2 --------------------------------------------

        FIO:        Averkiev Aleksandr Vitalievich

        DR:         17.7.1991

        Passport:   9704 332211

        Balls:      80 80 80 0 0

        Faculty:    IVT

        Speciality: PO

--------------------------------------------------- 

      Добавление  нового абитуриента(A): 

- NEW RECORD --------------------------------------

   - SOURNAME    : Petrov

   - NAME        : Aleksandr

   - FATHERNAME : Alekseevich

   - BIRTH DAY  : 12

   - BIRTH MONTH : 2

   - BIRTH YEAR  : 1989

   - PASPORT S   : 1212

   - PASPORT N   : 121212

   - BALLS      :

        Ball[1]: 67

        Ball[2]: 83

        Ball[3]: 88

        Ball[4]: 0

        Ball[5]: 0

   - FACULTY     : IVT

   - SPECIALITY  : PO

   - SUM BALLS   : 217

        The record 6 added...

---------------------------------------------------

               Изменение записи: 

- CHANGE RECORD -----------------------------------

   - ENTER NUMBER: 6 

- CHANGE RECORD 6 -------------------------------- 

   - SOURNAME   (Petrov):  Petrov

   - NAME       (Aleksandr):  Aleksey

   - FATHERNAME (Alekseevich): Petrovich

   - BIRTH DAY  (12):  12

   - BIRTH MONTH(2):  2

   - BIRTH YEAR (1989):  198

   - PASPORT S  (1212121212): 1212

   - PASPORT N  ():   121212

   - BALLS      :

        Ball[1] (67): 12

        Ball[2] (83): 12

        Ball[3] (88): 12

        Ball[4] (0): 12

        Ball[5] (0): 12

   - FACULTY    (IVT): 12

   - SPECIALITY (PO): 12

   - SUM BALLS  (217): 12

        The record 6 changed...

--------------------------------------------------- 
Вывод
 

           Мною решена задача проектирования и написания программы система «Абитуриент» с применением основных принципов объектно-ориентированного программирования.

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

           Благодаря тому, что  программа системы представляется в терминах поведения объектов, при  программировании использовались понятия, более близкие к предметной области, следовательно, программа легче читается и понимается. Это является большим преимуществом ООП.

           Плохо спроектированная иерархия классов приводит к созданию сложных и запутанных программ. Важно  до начала проектирования правильно определить, требуется ли вообще применить объектно-ориентированный подход. Применение к этой задаче объектно-ориентированного подхода, по моему мнению, добавила к положительным качествам программы такие пункты, как эффективность, компактность и надежность. Также программа стала хорошо читаемой и легко модифицируемой.

 

Список  использованной литературы 

      1. Т.А.Павловская. С/С++ Программирование на языке высокого уровня. 2009.
      2. Шилдт, Герберт. Полный справочник по С, 4-е издание.: Пер. с анг.- М.:

        Вильямс, 2005. 
         

 

Приложение

faculty.h:

class Faculty

{

      public:

      char nameFaculty[15];

public:

      void SetParam(char *name);

      void Print()

      {

            printf("\tFaculty:    %s\n",this->nameFaculty);

      };

}; 

class Speciality: public Faculty

{

public:

      char nameSpeciality[15];

      int sumBalls;

public:

      void SetParam(char *nameF, char *nameS, int sumBalls);

      void Print()

      {

            Faculty::Print();

            printf("\tSpeciality: %s\n",nameSpeciality);

      };

      void PrintBalls()

      {

            printf("\t%d",sumBalls);

      }

}; 
 

abiturient.h

#include "faculty.h"

            struct sfio  

            {

                  char surname[15];

                  char name[15];

                  char father[15];

            };

            struct sdr

            {

                  int day;

                  int month;

                  int year;

            };

struct Abiturient

      {

      public:

            bool deleted;

            Speciality speciality;

            sfio fio;

            sdr dr;

            int balls[5];

            char pasport_s[4];

            char pasport_n[6];

      public:

            const Abiturient& operator = (const Abiturient &abit)

            {

                  if (&abit == this) return *this;

                  for(int i=0; i<5; i++) this->balls[i]=abit.balls[i];

                  this->speciality.SetParam((char *)abit.speciality.nameFaculty,

                        (char *)abit.speciality.nameSpeciality,

                        abit.speciality.sumBalls);

                  strcpy(this->fio.father,abit.fio.father);

                  strcpy(this->fio.name,abit.fio.name);

                  strcpy(this->fio.surname,abit.fio.surname);

                  this->dr.day=abit.dr.day;

                  this->dr.month=abit.dr.month;

                  this->dr.year=abit.dr.year;

                  strcpy(this->pasport_n,abit.pasport_n);

                  strcpy(this->pasport_s,abit.pasport_s);

                  return *this;

            };

            void Print()

            {

                  printf("\tFIO:        %s %s %s\n",fio.surname,fio.name,fio.father);

                  printf("\tDR:         %d.%d.%d\n",dr.day,dr.month,dr.year);

                  printf("\tPassport:   ");

                  for(int i=0;i<4; i++) printf("%c",pasport_s[i]);

                  printf(" %s\n",pasport_n);

                  printf("\tBalls:      ");

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

                        printf("%d ",balls[i]);

                  printf("\n");

                  speciality.Print();

            };

      }; 

list.h

#include "abiturient.h"

Философия науки. 2