Разработка проекта автоматизации и упрощения деятельности центра обучения иностранным языкам

Описание самообучающейся экспертной системы и деятельности центра обучения иностранным языкам. Описание разработанной схемы данных, диаграммы классов, алгоритмов поиска ответа. Результаты тестирования разработанной системы. Учетные записи и работа с ними.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.04.2015
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

Целью данной работы является разработка проекта автоматизации и упрощения деятельности центра обучения иностранным языкам.

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

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

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

Описание предметной области

Наиболее удобно рассматривать процессы с помощью декомпозиций.

Рисунок 2.1 - Рассматриваемый процесс

Рисунок 2.2 - Декомпозиция рассматриваемого процесса

Рисунок 2.3 - Декомпозиция процесса “Определить расчетную ставку”

Рассмотрим процесс расчета зарплаты преподавателю. В начале мы имеем договоры об обучении, которые поступают от новых студентов центра обучения иностранным языкам. После выполнения процесса выходными данными является зарплата преподавателя.Преподаватель и бухгалтер являются основными ресурсами данного процесса. Ресурс, который контролирует этот процесс - это накладная. Сам процесс расчета зарплаты преподавателю делится на три под процесса: определение сложности преподаваемого курса, определение длины преподаваемого курса и определение расчетной ставки. Эти под процессы напрямую влияют на увеличение размера надбавки, от которой в свою очередь изменяется зарплата преподавателя.

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

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

Описание разработанной схемы данных

Данная курсовая работа предполагает разработку следующих файлов:

1) Файл accepted&rejected, в котором хранится информация о результатах запросов для записи на курс. В этот файл записывается объект класса Student, который наследуется от базового класса Centre_components, и состояние запроса.

2) Файл accounts, в котором хранится информация об учетных записях администратора и преподавателя. В этот файл записывается объект класса Registration_and_Enterance.

3) Файл courses, в котором хранится информация о существующих курсах. В этот файл записывается объект класса Course, который наследуется от базового класса Centre_components.

4) Файл requests, в котором хранится информация о существующих запросах для записи на курс. В этот файл записывается объект класса Student, который наследуется от базового класса Centre_components.

5) Файл students, в котором хранится информация о данных студентов курсов. В этот файл записывается объект класса Student, который наследуется от базового класса Centre_components.

6) Файл teachers, в котором хранится информация о данных преподавателей курсов. В этот файл записывается объект класса Teacher, который наследуется от базового класса Centre_components.

Описание разработанной диаграммы классов

Диаграмма классов представлена в приложении А. Базовый класс содержит следующие атрибуты и методы:

Методы класса Centre_components:

1) Centre_components(void); // конструктор;

2) virtual ~Centre_components(void); // виртуальный деструктор;

3) virtual void add() = 0; // чисто виртуальная функция добавления данных;

4) virtual void show() = 0; // чисто виртуальная функция выведения данных на экран;

5) virtual void del() = 0; // чисто виртуальная функция удаления данных;

6) virtual void edit() = 0; // чисто виртуальная функция изменения данных.

На рисунке 4.1 показан класс Centre_components со всеми его атрибутами и методами.

Рисунок 4.1 - Класс Centre_components

Класс Studentхранит информацию о студентах, наследуется от базового класса Centre_componentsи содержит следующие атрибуты и методы:

Атрибуты класса Student:

1) string name; // имя;

2) string surname; // фамилия;

3) string patronymic; // отчество;

4) int age; // возраст;

5) string course_code; // уникальный код курсов, на которые ходит этот студент

Методы класса Student:

1) Student(void); // конструктор;

2) ~Student(void); // деструктор;

3) Student(string, string, string, int, string); // конструктор с параметрами;

4) Student(Student& ); // конструктор копирования;

5) friend ofstream& operator << (ofstream& , Student&); // перегрузка потока записи в файл;

6) friend ifstream& operator >> (ifstream& , Student&); // перегрузка потока чтения из файла;

7) friend ostream& operator <<(ostream&, Student&); // перегрузка потока вывода;

8) void add(); // функция добавления данных;

9) void show(); // функция выведения данных на экран;

10) void del(); // функция удаления данных;

11) void edit(); // функция изменения данных;

12) void set_name(string); // функция добавления имени;

13) void set_surname(string) // функция добавления фамилии;

14) void request(); // функция бизнес-логики, отвечающая за запрос для записи на курсы;

15) void check(); // функция проверки запроса;

16) string get_name(); // функция вывода имени на экран;

17) string get_surname(); // функция вывода фамилии на экран;

18) string get_patronymic (); // функция вывода отчества на экран;

19) int get_age(); // функция вывода возраста на экран;

20) string get_course_code(); // функция вывода уникального кода курсов на экран;

21) int no_crush(); // функция проверки на ввод символов;

22) string no_int(); // функция проверки на ввод числа;

23) string no_space(); // функция проверки на наличие пробела/

На рисунке 4.2 показан класс Student со всеми его атрибутами и методами.

Рисунок 4.2 - Класс Student

Класс Teacher хранит информацию о преподавателях, наследуется от базового класса Centre_components и содержит следующие атрибуты и методы:

Атрибуты класса Teacher:

1) string name; // имя;

2) string surname; // фамилия;

3) string patronymic; // отчество;

4) int age; // возраст;

5) stringcourse_code; // уникальный код курсов, на которые ходит этот студент.

Методы класса Teacher:

1) Teacher(void); // конструктор;

2) Teacher(string, string, string, int, string); // конструктор с параметрами;

3) Teacher(Teacher& ); // конструктор копирования;

4) ~Teacher(void); // деструктор;

5) void add(); // функция добавления данных;

6) void show(); // функция выведения данных на экран;

7) void del(); // функция удаления данных;

8) void edit(); // функция изменения данных;

9) friend ofstream& operator << (ofstream& , Teacher&); // перегрузка потока записи в файл;

10) friend ifstream& operator >> (ifstream& , Teacher&); // перегрузка потока чтения из файла;

11) friend ostream& operator <<(ostream&, Teacher&); // перегрузка потока вывода;

12) void set_name(string); // функция добавления имени;

13) void set_surname(string); // функция добавления фамилии;

14) string get_surname(); // вывод фамилию;

15) string get_patronymic(); // вывод отчества;

16) int get_age(); // вывод возраста;

17) string get_course_code(); // вывод уникального кода;

18) int no_crush(); // проверка;

19) string get_name(); // функция вывода имени на экран;

20) string get_surname(); // функция вывода фамилии на экран;

21) stringget_patronymic(); // функция вывода отчества на экран;

22) intget_age(); // функция вывода возраста на экран;

23) string get_course_code(); // функция вывода уникального кода курсов на экран;

24) int no_crush(); // функция проверки;

25) string no_int(); // функция проверки на ввод числа;

26) string no_space(); // функция проверки на наличие пробела.

На рисунке 4.3 показан класс Teacher со всеми его атрибутами и методами.

Рисунок 4.3 - Класс Teacher

Класс Course хранит информацию о преподавателях, наследуется от базового класса Centre_components и содержит следующие атрибуты и методы:

Атрибуты класса Course:

1) string language; // язык;

2) int lenght_in_academic_hours; // длина курса в академических часах;

3) string audience; // аудитория;

4) string difficulty; // сложность курса;

5) string course_code; // уникальный код курсов.

Методы класса Course:

1) void set_language(string); // установить язык;

2) void set_lenght_in_academic_hours(int); // установить длину курса;

3) void set_audience(string); // установить язык;

4) void set_difficulty(string); // установить язык;

5) void set_course_code(string); // установить язык;

6) string get_language(); // вывести на экран язык;

7) int get_lenght_in_academic_hours(); // вывести на экран длину;

8) string get_audience(); // вывести на экран аудиторию;

9) string get_difficulty(); //вывести на экран сложность;

10) string get_course_code(); // вывести на экран;

11) friend ofstream&operator<<ofstream&,Course&); //перегрузка потока записи в файл;

12) friend ifstream& operator >> (ifstream& , Course&); // перегрузка потока чтения из файла;

13) friend ostream&operator<<(ostream&, Course&); // перегрузка потока вывода;

14) void add(); // функция добавления данных;

15) void show(); // функция выведения данных на экран;

16) void del(); // функция удаления данных;

17) void edit(); // функция изменения данных;

18) void show_audience(); // поиск аудитории;

19) int no_crush(); // проверка;

20) int special_no_crush(); // проверка;

21) Course(); // конструктор;

22) Course(string, int, string, string, string); // конструктор с параметрами;

23) Course(Course& ); // конструктор копирования;

24) ~Course(); // деструктор;

25) string no_int(); // функция проверки на ввод числа;

26) string no_space(); // функция проверки на наличие пробела.

На рисунке 4.4 показан класс Course со всеми его атрибутами и методами.

Рисунок 4.4 - Класс Course

обучение диаграмма класс алгоритм

Класс Registration_and_Enterance предназначен для хранения информации об учетных записях и работы с ней. Содержит следующие атрибуты и методы:

Атрибуты класса Registration_and_Enterance:

1) string login; // имя учетной записи;

2) string password; // пароль;

3) string status; // статус.

Методы класса Registration_and_Enterance:

1) void set_login(string); // задать имя учетной записи;

2) void set_password(string); // задать пароль;

3) void set_status(string); // задать статус;

4) string get_login(); // вывести логин;

5) string get_password(); // вывести пароль;

6) string get_status(); // вывести статус;

7) void admin_registration(); // регистрация администратора;

8) void teacher_registration(); // регистрация преподавателя;

9) void show(); // вывод на экран данных;

10) int login_available(); // проверка на доступность имени учетной записи;

11) void admin_enterance(); // вход под администратором;

12) void admin_functions(); // функции администратора;

13) void teacher_enterance(); // вход под преподавателем;

14) void teacher_functions(); // функции преподавателя;

15) void student_functions(); // функции студента;

16) void creation_functions(); // функции создания новых учетных записей;

17) void teacher_account_edition_functions(); // редактирование учетной записи преподавателя;

18) void admin_account_edition_functions(); // функция редактирования учетной записи администратора;

19) int teacher_account_edition_check(); // проверка;

20) int account_edition_check(); // проверка;

21) int admin_account_edition_check(); // проверка;

22) void change_by_login(); // изменение имени учетной записи;

23) void change_by_password(); // изменение пароля учетной записи;

24) void change_status_to_admin(); // переведение учетной записи; преподавателя в статус администратора;

25) void delete_account(); // удаление учетной записи;

26) int delete_check(); // проверка;

27) Registration_and_Enterance(void); // конструктор;

28) Registration_and_Enterance(string, string, string); // конструктор с параметрами;

29) Registration_and_Enterance(Registration_and_Enterance&obj); // конструктор копирования;

30) ~Registration_and_Enterance(void); // деструктор;

31) friend ostream&operator<<(ostream&,Registration_and_Enterance&); // перегрузка потока вывода на экран;

32) friend ofstream& operator << (ofstream& , Registration_and_Enterance&); // перегрузка потока записи в файл;

33) void operations_with_teachers(); // действия над преподавателями;

34) void operations_with_students(); // действия над студентами;

35) void operations_with_courses(); // действия с каталогом курсов;

36) int no_crush(); // проверка на ввод символов в int;

37) string no_space(); // функция проверки на наличие пробела;

38) string no_int(); // проверка на ввод цифр;

39) string no_space_password(); // функция проверки на наличие пробела и ввод пароля звездочками.

На рисунке 4.5 показан класс Registration_and_Enterance со всеми его атрибутами и методами.

Рисунок 4.5 - Класс Registration_and_Enterance

Класс Template_List- это параметризированный класс, шаблон. На его основе можно строить другие классы. Этот класс можно рассматривать как некоторое описание множества классов, отличающихся только типами их данных.[2] В данной работе он является односвязным списком. Содержит следующие атрибуты и методы:

Атрибуты класса Template_List:

typedefT* pT; // указатель на данные;

structNode_base // структура списка;

{

T _data; // элемент списка;

Node_base* _next; // указатель на следующий элемент;

};

typedefNode_base* pNb; // указатель на структуру;

Node_base* _start; //указатель на начало списка;

int _size; //размер списка.

Методы класса Template_List:

1) List(); // конструктор;

2) ~List(); // деструктор;

3) T getData(int ); // получить информацию;

4) void push_back(constT& ); // добавление узла в начало;

5) void print_to_file(string ); // запись в файл;

6) void display() const; // вывод списка на экран;

7) void clear(); // очистка памяти;

8) int size() const; // расчет количества узлов списка;

9) bool empty() const; // проверка на пустоту.

На рисунке 4.6 показан классTemplate_List со всеми его атрибутами и методами.

Рисунок 4.6 - Класс Template_List

Класс Business_logic_functions содержит методы бизнес-логики. Содержит следующие атрибуты и методы:

Методы класса Business_logic_functions:

1) Business_logic_functions(void); // конструктор;

2) ~Business_logic_functions(void); // деструктор;

3) void accept_or_reject(); // функция одобрения или отклонения заявки;

4) void count_salary(); // функция подсчета зарплаты;

5) void show_audience(); // функция поиска аудитории.

На рисунке 4.7 показан классBusiness_logic_functionsсо всеми его атрибутами и методами.

Рисунок 4.7 - КлассBusiness_logic_functions

Класс Menu содержит различные меню, а также следующие атрибуты и методы:

Методы классаMenu:

1) void showMainMenu(); // главное меню;

2) void showStudentMenu(); // меню студентов;

3) void showTeachersMenu(); // меню преподавателей;

4) void showAdminMenu(); // меню администратора;

5) void showAccountEdidtionMenu1(); // меню редактирования;

6) void showAccountEdidtionMenu2(); // меню редактирования;

7) voidshowTWorkMenu(); // меню работы с преподавателями;

8) voidshowSWorkMenu(); // меню работы со студентами;

9) voidshowCWorkMenu(); // меню работы с каталогом курсов;

10) voidshowCreationMenu(); // меню создания учетных записей.

На рисунке 4.8 показан класс Menu со всеми его атрибутами и методами.

Рисунок 4.8 - Класс Menu

Описание алгоритмов работы бизнес-функций

Функция расчета зарплаты count_salary().

Данная бизнес-функция позволяет рассчитать зарплату преподавателя, когда тот введет имя, фамилию и уникальный код курсов, которые он ведет. Далее происходит сравнивание введенных имени и фамилии преподавателя и имени, и фамилии преподавателей, считанных из файла “teachers.txt”. Если данные совпали, то далее сравнивается введенный уникальный код курсов и уникальный код курсов, считываемый из файла “courses.txt”. Если данные совпали, то на экран выводится зарплата преподавателя, с учетом сложности преподаваемых курсов. Просмотреть блок-схему этой функции можно на рисунке B.1 приложения B.

Функция изменения имени учетной записи change_login().

Данная функция позволяет изменить имя учетной записи. Для этого открывается файл “accounts.txt”, вводится имя, пароль, изменяемой учетной записи, и новое имя учетной записи. После этого происходит считывание из файла имени, пароля и статуса учетных записей, которые сравниваются с введенными данными. Если данные совпали, то в файл “accounts.txt”, где содержатся искомые данные, записывается измененное имя учетной записи.

Просмотреть блок-схему этой функции можно на рисунке B.2 приложения B.

Функция вывода на экран списка преподавателей show().

Данная функция позволяет вывести на экран список преподавателей. Для этого открывается файл “teachers.txt” и данные заносятся в список. После этого файл закрывается, а список с данными преподавателей выводятся на экран. Просмотреть блок-схему этой функции можно на рисунке B.3 приложения B.

Заключение

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

Данное программное обеспечение, выполненное в среде Microsoft Visual Studio 2012 Ultimate, в перспективе можно модифицировать, расширив возможности работы с преподавателями и студентами, таким образом можно сделать вывод, что созданное программное обеспечение является вполне универсальным и комфортабельным в системе образования.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

[1] Аленский, Н.А. Практическое руководство по языку С++: учеб.пособие / Н.А.Аленский; ГУО «Акад. последипломного образования». -Минск : АПО,2007.-276 с.

[2] Дейтел Х. Как программировать на С++/ Х. Дейтел, П. Дейтел. - 1005 с.

[3] Доманов А. Т. Стандарт предприятия / А. Т. Доманов, Н. И. Сорока. - Минск БГУИР, 2011. - 169 с.

[4] Макконнелл С. Совершенный код, 2-е издание / С. Макконнелл. - Русская редакция, 2010. - 867 с.

Приложения

Приложение А (Листинг кода)

//Business_logic_functions.h

#pragma once

#include "Teacher.h"

#include "Student.h"

#include "Course.h"

class Business_logic_functions

{

public:

Business_logic_functions(void);

~Business_logic_functions(void);

void accept_or_reject();

void count_salary();

void show_audience();

int no_crush();

string no_int();

string no_space();

};

//Business_logic_functions.cpp

#include "Business_logic_functions.h"

#define ONE 49

#define TWO 50

#define ESC 27

Business_logic_functions::Business_logic_functions(void)

{

}

Business_logic_functions::~Business_logic_functions(void)

{

}

void Business_logic_functions :: count_salary()

{

int check = 0, flag = 0;

double coef = 0;

long int salary = 0;

string name = "", surname = "", course_code = "";

Teacher tch;

List <Teacher> l1;

Course crs;

List <Course> l2;

cout << "Введите имя" << endl;

name = no_int();

cout << endl << "Введите фамилию" << endl;

surname = no_int();

cout << endl << "Введите уникальный код преподаваемого курса" << endl;

course_code = no_space();

ifstream f1, f2;

f1.open("teachers.txt", ios :: in);

f2.open("courses.txt", ios :: in);

while(f1)

{

f1 >> tch;

l1.push_back(tch);

}

f1.close();

while(f2)

{

f2 >> crs;

l2.push_back(crs);

}

for(int i = 0; i < l1.size() - 1; i++)

{

tch = l1.getData(i);

if(tch.get_name() == name && tch.get_surname() == surname && tch.get_course_code() == course_code)

{

flag++;

for(int i = 0; i < l2.size() - 1; i++)

{

crs = l2.getData(i);

if(tch.get_course_code() == crs.get_course_code())

{

flag++;

if(crs.get_difficulty() == "Elementary")

coef = 1.1;

if(crs.get_difficulty() == "Pre-Intermediate")

coef = 1.2;

if(crs.get_difficulty() == "Intermediate")

coef = 1.3;

if(crs.get_difficulty() == "Upper-Intermediate")

coef = 1.4;

if(crs.get_difficulty() == "Advanced")

coef = 1.5;

if(crs.get_difficulty() == "Proficiency")

coef = 1.6;

salary = coef * crs.get_lenght_in_academic_hours() * 10000;

cout << endl << "Зарплата равна:" << salary << "р." << endl;

break;

}

}

}

}

if(flag == 0)

cout << endl << "Нет информации" << endl;

}

void Business_logic_functions :: accept_or_reject()

{

Student stud;

List <Student> l1;

Course crs;

List <Course> l2;

int choice, flag = 0, check = 0;

ifstream f1, f2;

ofstream f3, f4;

f1.open("requests.txt", ios :: in);

while(f1)

{

f1 >> stud;

flag++;

}

f1.close();

if(flag == 1)

{

cout << "Заявок нет" << endl;

return;

}

f1.open("requests.txt", ios :: in);

while(f1)

{

f1 >> stud;

l1.push_back(stud);

}

f1.close();

if(flag == 0)

{

cout << "Заявок нет" << endl;

system("PAUSE");

return;

}

f2.open("courses.txt", ios :: in);

while(f2)

{

f2 >> crs;

l2.push_back(crs);

}

f2.close();

for(int i = 0; i < l1.size() - 1; i++)

{

system("cls");

cout << setw(10) << "Имя" << setw(15) << "Фамилия" << setw(16) << "Отчество" << setw(10) << "Возраст" << setw(15) << "ID курса" << endl;

stud = l1.getData(i);

cout << stud;

for(int i = 0; i < l2.size() - 1; i++)

{

crs = l2.getData(i);

if(crs.get_course_code() == stud.get_course_code())

check++;

}

if(check == 0)

{

cout << endl << "Введенного курса не существует. Заявка отклонена" << endl;

f3.open("accepted&rejected.txt", ios :: app);

f3 << stud << "Rejected" << endl;

f3.close();

system("PAUSE");

cout << endl << endl;

}

else

{

do

{

cout << endl << "1)Принять заявку" << endl;

cout << "2)Отклонить заявку" << endl;

choice = getch();

switch (choice)

{

case ONE:

f3.open("accepted&rejected.txt", ios :: app);

f3 << stud << "Accepted" << endl;

f3.close();

f4.open("students.txt", ios :: app);

f4 << stud;

f4.close();

break;

case TWO:

f3.open("accepted&rejected.txt", ios :: app);

f3 << stud << "Rejected" << endl;

f3.close();

break;

default:

cout << "Неверный пункт" << endl;

break;

}

}while(choice != ONE && choice != TWO);

}

}

f3.open("requests.txt", ios :: out);

f3.close();

}

void Business_logic_functions :: show_audience()

{

int check = 0;

string name = "", surname = "", patronymic = "";

Teacher tch;

List <Teacher> l1;

Course crs;

List <Course> l2;

cout << "Введите имя" << endl;

name = no_int();

cout << endl << "Введите фамилию" << endl;

surname = no_int();

cout << endl << "Введите отчество" << endl;

patronymic = no_int();

ifstream f1, f2;

f1.open("teachers.txt", ios :: in);

f2.open("courses.txt", ios :: in);

while(f1)

{

f1 >> tch;

l1.push_back(tch);

}

f1.close();

while(f2)

{

f2 >> crs;

l2.push_back(crs);

}

for(int i = 0; i < l1.size() - 1; i++)

{

tch = l1.getData(i);

if(tch.get_name() == name && tch.get_surname() == surname && tch.get_patronymic() == patronymic)

{

for(int i = 0; i < l2.size() - 1; i++)

{

crs = l2.getData(i);

if(tch.get_course_code() == crs.get_course_code())

{

cout << endl << "Искомая аудитория: " << crs.get_audience() << endl;

check++;

return;

}

}

}

}

if(check == 0)

cout << endl << "Нет совпадений" << endl;

}

int Business_logic_functions :: no_crush()

{

char str[50] = "";

int key, count = 0;

do

{

key = getch();

if(key >= '0' && key <= '9')

{

str[count] = key;

putchar(key);

count++;

}

if(key == 8 && count > 0)

{

cout << "\b \b";

count--;

str[count] = 0;

}

if (count > 2)

{

cout << "\b \b";

count--;

str[count] = 0;

}

if(count == 0 && key == 13)

key = 191;

}while(key != 13);

return atoi(str);

}

string Business_logic_functions :: no_int()

{

char str[50] = "";

int key, i = 0;

do{

key = getch();

if (key >= 'a' && key <= 'z' || key >= 'A' && key <= 'Z' || key >= 192 && key <= 223 || key >= 224 && key <= 255)

{

str[i] = key;

putchar(key);

i++;

}

if (key == 8 && i >= 1)

{

cout << "\b \b";

i--;

str[i] = 0;

}

if(i == 0 && key == 13)

key = 191;

}

while(key != 13);

return str;

}

string Business_logic_functions :: no_space()

{

char str[50] = "";

int key, i = 0;

do{

key = getch();

if (key >= '0' && key <= '9' || key >= 'a' && key <= 'z' || key >= 'A' && key <= 'Z' || key >= 192 && key <= 223 || key >= 224 && key <= 255)

{

str[i] = key;

putchar(key);

i++;

}

if (key == 8 && i >= 1)

{

cout << "\b \b";

i--;

str[i] = 0;

}

if(i == 0 && key == 13)

key = 191;

}

while(key != 13);

return str;

}

//Student.h

#pragma once

#include <iostream>

#include <string>

#include <fstream>

#include <iomanip>

#include <stdlib.h>

#include <conio.h>

#include "centre_components.h"

#include "Teacher.h"

class Student :

public Centre_components

{

string name;

string surname;

string patronymic;

int age;

string course_code;

public:

Student(void);

~Student(void);

Student(string, string, string, int, string);

Student(Student& );

friend ofstream& operator << (ofstream& , Student&);

friend ifstream& operator >> (ifstream& , Student&);

friend ostream& operator <<(ostream&, Student&);

void add();

void show();

void del();

void edit();

void set_name(string);

void set_surname(string);

void request();

void check();

string get_name();

string get_surname();

string get_patronymic();

int get_age();

string get_course_code();

int no_crush();

string no_int();

string no_space();

};

//Student.cpp

void Student :: add()

{

cout << "Введите имя" << endl;

name = no_int();

cout << endl << "Введите фамилию" << endl;

surname = no_int();

cout << endl << "Введите отчество" << endl;

patronymic = no_int();

cout << endl << "Введите возраст" << endl;

age = no_crush();

cout << endl << "Введите уникальный код курсов" << endl;

course_code = no_space();

ofstream f;

f.open("students.txt", ios :: app);

f << name << endl << surname << endl << patronymic << endl << age << endl << course_code << endl;

f.close();

system("cls");

cout << endl << "Запись данных студента успешно завершена" << endl;

system("PAUSE");

}

void Student :: edit()

{

Student std;

List <Student> list;

ifstream f;

int check = 0;

cout << "Введите уникальный код курсов, которые посещает студент: " << endl;

course_code = no_space();

f.open("students.txt", ios :: in);

while(f)

{

f >> std;

if(course_code != std.course_code)

list.push_back(std);

else

{

cout << endl << "Введите новое имя студета: " << endl;

cin >> std.name;

cout << "Введите новую фамилию студента: " << endl;

cin >> std.surname;

cout << "Введите новое отчество студента: " << endl;

cin >> std.patronymic;

cout << "Введите новый возраст студента: " << endl;

std.age = no_crush();

cout << endl << "Введите новый уникальный код курса, который посещает студент" << endl;

cin >> std.course_code;

list.push_back(std);

check++;

}

}

if(check != 0)

{

f.close();

ofstream file;

file.open("students.txt", ios :: out);

for(int i = 0; i < list.size() - 1; i++)

{

std = list.getData(i);

file << std.get_name() << endl << std.get_surname() << endl << std.get_patronymic() << endl << std.get_age() << endl << std.get_course_code() << endl;

}

file.close();

}

else

{

system("cls");

cout << endl << "Нет такой записи" << endl;

system("PAUSE");

}

}

void Student :: request()

{

int choice = 0, check1 = 0, check2 = 0, lenght_in_academic_hours = 0;

string language = "", audience = "", difficulty = "", cc = "";

cout << "Заявка для записи на курсы " << endl << endl << endl;

ifstream f;

f.open("courses.txt", ios :: in);

while(f)

{

f >> language >> lenght_in_academic_hours >> audience >> difficulty >> cc;

check1++;

}

f.close();

if(check1 != 0)

{

f.open("courses.txt", ios :: in);

cout << setw(12) << "Язык" << setw(6) << "Длина" << setw(17) << "Аудитория" << setw(20) << "Уровень сложности" << setw(15) << "ID курса" << endl;

while(f)

{

f >> language >> lenght_in_academic_hours >> audience >> difficulty >> cc;

if(f.eof())

break;

cerr << setw(12) << language;

cerr << setw(6) << lenght_in_academic_hours;

cerr << setw(17) << audience;

cerr << setw(20) << difficulty;

cerr << setw(15) << cc << endl;

}

f.close();

cout << endl << "Введите имя" << endl;

name = no_int();

cout << endl << "Введите фамилию" << endl;

surname = no_int();

cout << endl << "Введите отчество" << endl;

patronymic = no_int();

cout << endl << "Введите возраст" << endl;

age = no_crush();

cout << endl << "Введите уникальный код нужных курсов" << endl;

course_code = no_space();

f.open("courses.txt", ios :: in);

while(f)

{

f >> language >> lenght_in_academic_hours >> audience >> difficulty >> cc;

if(cc == course_code)

check2++;

}

f.close();

if(check2 == 0)

{

cout << "Введенного курса не существует" << endl;

system("PAUSE");

return;

}

ofstream file;

file.open("requests.txt", ios :: app);

file << name << endl << surname << endl << patronymic << endl << age << endl << course_code << endl;

f.close();

system("cls");

cout << "Запись данных студента успешно завершена" << endl;

system("PAUSE");

}

else

{

cout << "В данный момент нет курсов" << endl;

system("PAUSE");

}

}

void Student :: check()

{

int check = 0;

string answer;

Student std;

cout << "Введите имя" << endl;

name = no_int();

cout << endl << "Введите фамилию" << endl;

surname = no_int();

cout << endl << "Введите уникальный код нужных курсов" << endl;

course_code = no_space();

ifstream f;

f.open("accepted&rejected.txt", ios :: in);

while(f)

{

f >> std >> answer;

if(std.name == name && std.surname == surname && std.course_code == course_code && !f.eof())

{

check++;

if(answer == "Accepted")

{

cout << endl << "Запрос одобрен" << endl;

f.close();

break;

}

else

{

cout << endl << "Запрос не удовлетворен" << endl;

system("PAUSE");

f.close();

break;

}

}

}

f.close();

if(check == 0)

{

f.open("requests.txt", ios :: in);

while(f)

{

f >> std;

if(std.name == name && std.surname == surname && std.course_code == course_code && !f.eof())

{

cout << endl << "Запрос еще не обработан" << endl;

check++;

f.close();

return;

}

}

cout << endl << "Данные введены неверно" << endl;

f.close();

}

}

void Student :: show()

{

Student stud;

List <Student> list;

ifstream f;

f.open("students.txt", ios :: in);

while(f)

{

f >> stud.name >> stud.surname >> stud.patronymic >> stud.age >> stud.course_code;

list.push_back(stud);

}

f.close();

list.display();

}

ostream& operator << (ostream& os, Student& obj)

{

os << setw(10) << obj.name;

os << setw(15) << obj.surname;

os << setw(16) << obj.patronymic;

os << setw(10) << obj.age;

os << setw(15) << obj.course_code;

return os;

}

ofstream& operator << (ofstream &f, Student& obj)

{

f << obj.name << endl;

f << obj.surname << endl;

f << obj.patronymic << endl;

f << obj.age << endl;

f << obj.course_code << endl;

return f;

}

ifstream& operator >> (ifstream &f, Student& obj)

{

f >> obj.name;

f >> obj.surname;

f >> obj.patronymic;

f >> obj.age;

f >> obj.course_code;

return f;

}

Рисунок В.2

Рисунок В.3

Размещено на Allbest.ru


Подобные документы

  • Проектирование Web-приложения, предназначенного для упрощения работы с учебными пособиями: разработка карты сайта, составление UML-диаграммы, алгоритмов поиска и сортировки книг. Требования к языкам программирования и параметрам технических средств.

    дипломная работа [3,0 M], добавлен 15.03.2012

  • Анализ сайтов для обучения иностранным языкам в сети Интернет и методик их изучения. Разработка сайта Foreign Dimension для обучения английскому языку. Структура сайта, разработка упражнений, базы данных, интерфейса. Тестирование основных элементов сайта.

    дипломная работа [966,9 K], добавлен 19.01.2017

  • Применение современных компьютерных технологий в процессе обучения иностранным языкам. Использование Интернет-ресурсов, скайпа, социальных сетей в обучении и интернет-сайта для поиска дополнительно новой информации. Общение онлайн с носителями языка.

    статья [15,8 K], добавлен 23.06.2015

  • Создание сетевой системы тестирования с целью автоматизации процесса контроля знаний, оценивания результатов и создания тестовых заданий. Файлы проекта и их назначение. Описание алгоритмов и модулей программы. Работа с сетью, руководство пользователя.

    контрольная работа [928,3 K], добавлен 23.12.2012

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

    курсовая работа [687,2 K], добавлен 03.10.2013

  • Описание сервиса электронного кафе и определение требований к системе. Модели представления данных и их описание. Обоснование оригинальных решений по использованию технических и программных средств. Результаты тестирования разработанной системы.

    курсовая работа [6,1 M], добавлен 20.12.2014

  • Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.

    курсовая работа [968,2 K], добавлен 26.01.2013

  • Рассмотрение особенностей информационного обеспечения современного фитнес-центра. Разработка проекта базы данных, содержащей сведения о фитнес-центре. Создание таблиц и запросов в системе MS Access 2007. Описание инструкции для пользователя системы.

    курсовая работа [1014,0 K], добавлен 03.03.2015

  • Структура типичной экспертной системы. База данных (рабочая память), её назначение. Функция getsport как экземпляр класса cSport. Алгоритм работы экспертной системы. Реализация пользовательского интерфейса. Результаты тестирования системы пользователем.

    курсовая работа [1018,8 K], добавлен 13.06.2012

  • Создание аппаратно-программных средств для системы сбора данных и управления с использованием локальной сети. Предметная область системы, ее структурная схема. Описание рабочих алгоритмов, выбор аппаратной платформы. Тестирование разработанной системы.

    дипломная работа [2,0 M], добавлен 29.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.