РефератыФилософияФиФилософия науки 5

Философия науки 5

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


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


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


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


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


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


Выполнил:


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


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


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


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


Чебоксары 2011


Оглавление


Оглавление. 2


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


Введение. 4


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


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


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


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


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


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


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


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


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


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


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


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


Приложение. 16


faculty.h: 16


abiturient.h. 16


list.h. 17


proc.cpp. 17


menu.cpp. 21


main.cpp. 22


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


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


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


Введение


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


Кризис программного обеспечения привел к необходимости создания нового способа создания программ, который снижал бы общие затраты на протяжении всего цикла программы, – от замысла до завершения эксплуатации. Такая технология появилась в начале 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: %sn",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: %sn",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 %sn",fio.surname,fio.name,fio.father);


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


printf("tPassport: ");


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


printf(" %sn",pasport_n);


printf("tBalls: ");


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


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


printf("n");


speciality.Print();


};


};


list.h


#include "abiturient.h"


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();


};


proc.cpp


#include <iostream>


#include <string>


#include <stdlib.h>


#include <conio.h>


#include "list.h"


void Faculty::SetParam(char *name)


{


strcpy(nameFaculty,name);


};


void Speciality::SetParam(char *nameF,char *nameS,int sumBalls)


{


Faculty::SetParam(nameF);


strcpy(nameSpeciality,nameS);


this->sumBalls=sumBalls;


}


void List::ReadData(char *name)


{


const int dl=125;


char s[dl];


int i=0,sumBalls;


char faculty[15];


char speciality[15];


FILE *_f;


_f = fopen(name,"r");


while (fgets(s,dl,_f))


{


int pos=0;


int j=0;


while(s[pos+j]!=' ')


{list[count].fio.surname[j]=s[pos+j];j++;}


list[count].fio.surname[j]='0';


pos+=sizeof(list[count].fio.surname)+1;j=0;


while(s[pos+j]!=' ')


{list[count].fio.name[j]=s[pos+j];j++;}


list[count].fio.name[j]='0';


pos+=sizeof(list[count].fio.name);j=0;


while(s[pos+j]!=' ')


{list[count].fio.father[j]=s[pos+j];j++;}


list[count].fio.father[j]='0';


pos+=sizeof(list[count].fio.father);


list[count].dr.day = atoi(&s[pos]);


pos+=3;


list[count].dr.month=atoi(&s[pos]);


pos+=3;


list[count].dr.year=atoi(&s[pos]);


pos+=5;


for(j=0;j<4;j++)


list[count].pasport_s[j]=s[pos+j];


list[count].pasport_s[j]='0';


pos+=5;


for(j=0;j<6;j++) list[count].pasport_n[j]=s[pos+j];


list[count].pasport_n[j]=0;


pos+=7;


for(int k=0; k<sizeof(list[count].balls)/4; k++)


list[count].balls[k]=atoi(&s[pos+3*k]);


pos+=15;


for(j=0;j<sizeof(faculty);j++)


faculty[j]=s[pos+j];


j--;


while (faculty[j]==' ')


j--;


j++;


faculty[j]='0';


pos+=sizeof(faculty)+1;


for(j=0;j<sizeof(speciality);j++)


speciality[j]=s[pos+j];


j--;


while (speciality[j]==' ')


j--;


j++;


speciality[j]='0';


pos+=sizeof(speciality)+1;


sumBalls=atoi(&s[pos]);


pos+=1;


this->list[count].speciality.SetParam(faculty,speciality,sumBalls);


count++;


}


count--;


fclose(_f);


}


void List::AddRecord()


{


Abiturient abit;


printf("- NEW RECORD --------------------------------------");


printf("n - SOURNAME : ");scanf("%s",abit.fio.surname);


printf(" - NAME : ");scanf("%s",abit.fio.name);


printf(" - FATHERNAME : ");scanf("%s",abit.fio.father);


printf(" - BIRTH DAY : ");std::cin>>abit.dr.day;


printf(" - BIRTH MONTH: ");std::cin>>abit.dr.month;


printf(" - BIRTH YEAR : ");std::cin>>abit.dr.year;


printf(" - PASPORT S : ");scanf("%s",abit.pasport_s);


printf(" - PASPORT N : ");scanf("%s",abit.pasport_n);


printf(" - BALLS : n");


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


{


printf("tBall[%d]: ",i+1);


std::cin>>abit.balls[i];


};


printf(" - FACULTY : ");scanf("%s",abit.speciality.nameFaculty);


printf(" - SPECIALITY : ");scanf("%s",abit.speciality.nameSpeciality);


printf(" - SUM BALLS : ");std::cin>>abit.speciality.sumBalls;


count++;


this->list[count]=abit;


printf("tThe record %d added...n",count+1);


printf("---------------------------------------------------n");


};


void List::PrintList()


{


printf("- LIST --------------------------------------------n");


int i=0;


while(i<count+1)


{


if (!list[i].deleted)


{


printf(" - %d --------------------------------------------n",i+1);


list[i].Print();


i++;


}


else


i++;


};


printf("---------------------------------------------------nn");


};


void List::DelRecord()


{


this->PrintList();


int number;


printf("n- DELETE RECORD -----------------------------------n");


printf(" - ENTER NUMBER: ");std::cin>>number;


list[number-1].deleted = true;


printf("tThe record %d deleted...n",count+1);


printf("tPress L for print the new list...n");


printf("---------------------------------------------------n");


};


void List::ChangeRecord()


{


this->PrintList();


int number;


printf("n- CHANGE RECORD -----------------------------------n");


printf(" - ENTER NUMBER: ");std::cin>>number;


printf("n- CHANGE RECORD %d --------------------------------n",number);


printf("n - SOURNAME (%s): ",list[number-1].fio.surname);scanf("%s",list[number-1].fio.surname);


printf(" - NAME (%s): ",list[number-1].fio.name);scanf("%s",list[number-1].fio.name);


printf(" - FATHERNAME (%s): ",list[number-1].fio.father);scanf("%s",list[number-1].fio.father);


printf(" - BIRTH DAY (%d): ",list[number-1].dr.day);std::cin>>list[number-1].dr.day;


printf(" - BIRTH MONTH(%d): ",list[number-1].dr.month);std::cin>>list[number-1].dr.month;


printf(" - BIRTH YEAR (%d): ",list[number-1].dr.year);std::cin>>list[number-1].dr.year;


printf(" - PASPORT S (%s): ",list[number-1].pasport_s);scanf("%s",list[number-1].pasport_s);


printf(" - PASPORT N (%s): ",list[number-1].pasport_n);scanf("%s",list[number-1].pasport_n);


printf(" - BALLS : n");


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


{


printf("tBall[%d] (%d): ",i+1,list[number-1].balls[i]);


std::cin>>list[number-1].balls[i];


};


printf(" - FACULTY (%s): ",list[number-1].speciality.nameFaculty);scanf("%s",list[number-1].speciality.nameFaculty);


printf(" - SPECIALITY (%s): ",list[number-1].speciality.nameSpeciality);scanf("%s",list[number-1].speciality.nameSpeciality);


printf(" - SUM BALLS (%d): ",list[number-1].speciality.sumBalls);std::cin>>list[number-1].speciality.sumBalls;


printf("tThe record %d changed...n",number);


printf("---------------------------------------------------n");


};


void List::RestoreRecord()


{


this->PrintList();


int number;


printf("n- RESTORE RECORD ---------------------------------n");


printf(" - ENTER NUMBER: ");std::cin>>number;


list[number-1].deleted = false;


printf("tThe record %d restored...n",count+1);


printf("tPress L for print the new list...n");


printf("---------------------------------------------------n");


};


void List::SaveData(char *name)


{


FILE *_f;


_f = fopen(name,"w+");


if(_f == 0)


printf("tNot open the file %s!n",name);


else


{


printf("n- SAVING DATA -----------------------------------n");


for(int i=0; i<=this->count; i++)


{


if(!list[i].deleted)


{


int pos=sizeof(list[i].fio.surname);


fprintf(_f,"%- 16s%- 15s%- 15s%0.2d %0.2d %0.4d ",


list[i].fio.surname,


list[i].fio.name,


list[i].fio.father,


list[i].dr.day,


list[i].dr.month,


list[i].dr.year);


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


fprintf(_f,"%c",list[i].pasport_s[j]);


fprintf(_f," %- 7s",list[i].pasport_n);


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


fprintf(_f,"%0.2d ",list[i].balls[j]);


fprintf(_f,"%- 16s%- 16s%d",


list[i].speciality.nameFaculty,


list[i].speciality.nameSpeciality,


list[i].speciality.sumBalls


);


int count=0;


for(int j=i+1; j<=this->count; j++)


if(!list[j].deleted) count++;


if (count>0) fprintf(_f,"n");


}


}


}


fclose(_f);


printf("tThe data are saved...n");


printf("---------------------------------------------------n");


}


menu.cpp


#include <iostream>


void PrintMenu()


{


printf(" I N F O R M A T I O N S E A R C H S Y S T E Mn");


printf(" A B I T U R I E N Tnn");


printf("- MENU --------------------------------------------n");


printf("tF1 - Aboutn");


printf("tL - Print listn");


printf("tA - Add record to listn");


printf("tC - Change recordn");


printf("tD - Delete record of listn");


printf("tR - Restore deleted recordn");


printf("tS - Save listn");


printf("tESC - Exitn");


printf("---------------------------------------------------nn");


};


void PrintHelp()


{


printf("- ABOUT -------------------------------------------n");


printf("t............n");


printf("t............n");


printf("t............n");


printf("t............n");


printf("t............n");


printf("---------------------------------------------------nn");


};


main.cpp


#include <iostream>


#include <string>


#include <stdlib.h>


#include <conio.h>


#include <windows.h>


#include "list.h"


void PrintHelp();


void PrintMenu();


using namespace std;


void main()


{


List list;


list.ReadData("abit2.txt");


//list.PrintList();


char ch=0;


while((int)ch!=27)//ESC


{


system("cls");


PrintMenu();


switch((int)ch)


{


case 59://F1


PrintHelp();


break;


case -92://L


case 108:


list.PrintList();


break;


case -28://A


case 97:


list.AddRecord();


break;


case 100://D


case -94:


list.DelRecord();


break;


case 114:


case -86:


list.RestoreRecord();


break;


case 99://C


case -31:


list.ChangeRecord();


break;


case 115:


case -21:


list.SaveData("abit2.txt");


break;


default:


printf("Key - %dn", (int)ch);


}


ch = getch();


}


}


[1]
Далее каждую сущность будем называть объектом


[2]
Т.к. нормализация базы данных не является целью курсовой работы, то этот недостаток не будем учитывать при выборе оптимального метода решения

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Философия науки 5

Слов:2780
Символов:31563
Размер:61.65 Кб.