Реферат: Философия науки 5
Название: Философия науки 5 Раздел: Рефераты по философии Тип: реферат |
Чувашский государственный университет им. И.Н.Ульянова Факультет информатики и вычислительной техники Кафедра вычислительной техники Пояснительная записка к курсовой работе по дисциплине «Объектно-ориентированное программирование» Выполнил: студент группы ИВТ- 42-08 Кузнецов Алексей Петрович Руководитель: кандидат технических наук, доцент Обломов Игорь Александрович Чебоксары 2011 2.2. Подробный анализ выбранного метода решения . 7 3. Описание классов и структур. 8 4. Основные алгоритмы методов класса LIST.. 9 4.4. Сохранение изменений . 11 5. Результат работы программы.. 12 Список использованной литературы.. 15 Разработать информационно-поисковую систему «Абитуриент» Курсовой работу необходимо реализовать в виде системы взаимодействующих модулей, а само проектирование выполнить в несколько последовательных этапов. Традиционная технология программирования складывалась в условиях, когда основными потребителями программ были научные учреждения, вычислительные ресурсы были ограничены, а проблемы сопровождения по существу неизвестны. Основными критериями качества программы считалось ее узко понимаемая эффективность и компактность. Со временем сложность программ возросла настолько, что на их разработку уходили годы труда большого коллектива, а в результате системы появлялись с опозданием и содержали тысячи ошибок. Кризис программного обеспечения привел к необходимости создания нового способа создания программ, который снижал бы общие затраты на протяжении всего цикла программы, – от замысла до завершения эксплуатации. Такая технология появилась в начале 70-х годов и была названа структурным программированием. В его основе лежит сочетание теории программирования и личного опыта высококвалифицированных программистов, а также учет современных требований к программам и промышленного характера их производства. Структурное программирование – это технология создания программ, позволяющая путем соблюдения определенных правил уменьшить время разработки и количество ошибок, а также облегчить возможность модификации программы. Структурный подход охватывает все стадии разработки проекта: спецификацию, проектирование, собственно программирование и тестирование. Структурный подход к программированию позволил успешно создавать достаточно крупные проекты, но сложность программного обеспечения продолжала возрастать, и требовались все более развитые средства ее преодоления. Идеи структурного программирования получили свое дальнейшее развитие в объектно-ориентированном программировании (ООП) – технологии, позволяющей достичь простоты структуры и управляемости очень крупных программных систем. Целью курсовой работы является углубление и закрепление теоретических знаний, навыков практического применения основных принципов объектно-ориентированных систем: наследования, инкапсуляции, полиморфизма, а также формирование новых взглядов на процессы программирования с учетом абстракции данных. Требуется разработать программу, обеспечивающую хранение и обработку данных указанного типа. Должны быть реализованы типовые действия, включающие в себя: - включение нового элемента; - удаление элемента; - корректировка элемента; - сохранение изменений в базу данных. Одним из требований к разрабатываемой программной системе является хранение таблицы с исходными данными в файле. Все изменения, вносимые в базу данных, не должны теряться при завершении работы с программой, то есть необходимо обновление содержимого файла при изменении базы данных. Взаимодействие пользователя с программой осуществляется через меню. В системе «Абитуриент» существуют две сущности – «Абитуриент» и «ВУЗ». Главная проблема разработки системы – определение связи между этими сущностями[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.3. Удаление записи 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 в - 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. 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); } }; #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(); }; }; #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(); }; #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("---------------------------------------------------\n\n"); }; 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"); } #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 M\n"); printf(" A B I T U R I E N T\n\n"); printf("- MENU --------------------------------------------\n"); printf("\tF1 - About\n"); printf("\tL - Print list\n"); printf("\tA - Add record to list\n"); printf("\tC - Change record\n"); printf("\tD - Delete record of list\n"); printf("\tR - Restore deleted record\n"); printf("\tS - Save list\n"); printf("\tESC - Exit\n"); printf("---------------------------------------------------\n\n"); }; void PrintHelp() { printf("- ABOUT -------------------------------------------\n"); printf("\t............\n"); printf("\t............\n"); printf("\t............\n"); printf("\t............\n"); printf("\t............\n"); printf("---------------------------------------------------\n\n"); }; #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 - %d\n", (int)ch); } ch = getch(); } } [1] Далее каждую сущность будем называть объектом [2] Т.к. нормализация базы данных не является целью курсовой работы, то этот недостаток не будем учитывать при выборе оптимального метода решения |