Создание информационной системы 'Знаки зодиака'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    185,96 Кб
  • Опубликовано:
    2016-03-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание информационной системы 'Знаки зодиака'

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

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

Создать базу данных, которая позволяет вводить информацию, хранить её в файле, осуществлять поиск, модификацию, сортировку и удаление данных. информационный база данные зодиак

Тип хранимой информации и задание на поиск определяются в соответствии с номером варианта

Вариант 1

Описать структуру с именем ZNAK, содержащую следующие поля:

фамилия, имя;

знак зодиака;

дата рождения (массив из трёх чисел).

Задание на поиск: найти информацию о людях, чей знак зодиака введен с клавиатуры.

Описание структур данных

Данные хранятся в структуре ZNAK

struct ZNAK

{secondname;//фамилияname; //имяzodiac; //знакзодиакаbday[3]; //датарождения

};ElementOfList

{; // информацияобанкете*next; //указатель на следующий элемент списка

};

База данных хранится на диске в виде тестового файла.

Для работы с БД в процессе выполнения программы используется список.

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

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

При выборе пункта добавления анкеты, создается новая анкета при помощи вызываемой функции . Пользователь поэтапно вводит имя, фамилию, дату рождения (через пробел, формат указан в скобках). Затем в пункте идет цикл whileс вызовом функции проверки на идентичность анкеты. Пока пользователь не введет уникальные данные и флаг не вернет значение false, программа будет выводить сообщение «Такой человек уже есть. Повторите ввод.» После этого, вызывается функция AddNew и анкета добавляется в список.

При выборе пункта вывода анкет на экран вызывается функция Print.

При выводе функции на экран в отсортированном видесначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция Sort. А затем функция Print.

При выборе пункта редактирования анкеты сначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция BaseSearch.

Если возвращаемое значение «0», это значит, что пользователь отменил ввод, и выполнение пункта прекращается. Иначе BaseSearchнаходит нужную анкету и при помощи вспомогательной функции Search передает её вызываемой функции Edit.

Как работают функции BaseSearchи Editсм. в их описании.

При выборе пункта удаления анкеты сначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция BaseSearch.

Если возвращаемое значение «0», это значит, что пользователь отменил ввод, и выполнение пункта прекращается. Иначе BaseSearchнаходит нужную анкету передает ее вызываемой функции Delete.

Как работает функция Deleteсм. в её описании.

При выборе поиска анкеты сначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция BaseSearch. Найденная анкета выводится в самом пункте.

Как работает функция BaseSearchсм. в её описании.

При выборе поиска по знаку зодиака анкеты сначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция ZodiacSearch.

Как работает функция ZodiacSearchсм. в её описании.

При выборе пункта сохранения в файл сначала происходит проверка на пустоту списка при помощи if. Если список действительно оказывается пустым, выводится сообщение «Данные отсутствуют». Иначе вызывается функция Save. После вызова в этом пункте флагу check присваивается значение true. Это необходимо для того, чтобы перед выходом из программы не напоминать лишний раз пользователю о сохранении.

При выборе пункта загрузки базы данных из файла вызывается функция Download.

При выборе пункта выхода из программы происходит проверка значения check. Если его значение false(база данных еще не сохранялась), на экран консоли выведется нумерованное меню с предложением сохранить базу данных в файл. Пользователь выбирает пункт (1- да; 2 - нет), если «да», то вызывается функция Save, и программа закрывается.

Иначе (база данных уже сохранялась) программа закроется сразу.

Перед закрытием программы выполняется функция Free, очищающая оставшиеся анкеты (если такие имеются).

Добавление информации

DynList AddInfo(DynList *begin)

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

Учитываются високосные года.

Пример работы:



Функция проверки одинаковых анкетСheckForDuplicates(ElementOfList *begin, ElementOfList a)

Функция сравнивает введенную пользователем анкету с анкетами, уже имеющимися в списке. Если обнаруживается полное совпадение, то функция возвращает значение trueи записианкеты не происходит. На экран консоли выводится соответствующее сообщение «Такой человек уже есть, повторите ввод:». Если совпадения нет, то новая анкета добавляется в список. Функция вызывается в mainв пунктах добавления новой анкеты и редактирования анкеты.

Добавление анкеты в списокAddNew(DynList **begin, DynList **end, DynList a)

Функция принимает информацию от функции AddInfo, и создает новый элемент списка. Перед добавлением в mainвызывается функция проверки на одинаковые анкеты СheckForDuplicates.

Функция для автоматического определения знака зодиакаZodiac(DynList a)

Функция получает дату рождения пользователя и определяет его знак зодиака. Учитываются високосные года.

Пример работы:


Функция вывода анкет для просмотра(ElementOfList *begin)

Функция выводит все элементы списка на экран консоли в порядке их дополнения.

Проводится проверка на пустоту списка. Если список не заполнен, появится сообщение «Анкеты отсутствуют».

Функция для поиска анкеты(ElementOfList *begin)

Функция для поиска определенной анкеты. Для поиска пользователь постепенно вводит фамилию, затем, если есть однофамильцы, то имя, а если есть полные тезки, то дату рождения.

В функции предусмотрена возможность отмены ввода (пользователь нажимает 0).

Если пользователь пытается найти несуществующую анкету, выводится сообщение «Данная анкета отсутствует».

Проводится проверка на пустоту списка(Перед вызовом функции в main).Если список не заполнен, появится сообщение “Данные отсутствуют”.

Функция используется как и для отдельного пункта в main, так и в качестве вспомогательной в функциях Deleteи Edit.

Функция для поиска анкет по знаку зодиакаZodiacSearch(ElementOfList *begin)

Функция ищет анкеты по знаку зодиака, введенным пользователем и выводит их на экран консоли.

Если анкеты с искомым знаком зодиака отсутствуют, выводится сообщение «Нет совпадений».

В функции предусмотрена возможность отмены ввода (пользователь нажимает 0).

Проводится проверка на пустоту списка(Перед вызовом функции в main). Если список не заполнен, появится сообщение “Данные отсутствуют”.

Функция удаления анкеты.

void Delete(ElementOfList **begin, ElementOfList a)

Функция удаляет искомую анкету. Проводится проверка на пустоту списка(Перед вызовом функции в main). Если операция прошла успешно, выводится сообщении «Анкета удалена».

В качестве вспомогательной функции для поиска нужной анкеты используется BaseSearch(вызывается в mainперед удалением).

В функции предусмотрена возможность отмены ввода (пользователь нажимает 0).

Проводится проверка на пустоту списка(Перед вызовом функции в main).Если список не заполнен, появится сообщение “Данные отсутствуют”.

Функция редактирования Edit(ElementOfList *begin, ElementOfList *f)

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

При редактировании даты рождения проводится проверка на корректность введенных данных. При вводе некорректных данных появляется сообщение "Некорректные данные. Повторите ввод:".Учитываются високосные года.

При редактировании происходит проверка на одинаковые анкеты при помощи функции CheckForDuplicates. Таким образов исключается появление в списке анкет с одинаковой информацией. На консоль выводится запись «Идентичная анкета есть в базе данных, введите другую дату рождения».

В качестве вспомогательной функции для поиска нужной анкеты используется BaseSearch(вызывается в mainперед редактированием).

В функции предусмотрена возможность отмены ввода и выхода из меню (пользователь нажимает 0).

Проводится проверка на пустоту списка(в самой функции).Если список не заполнен, появится сообщение “Анкеты отсутствуют”.

Функция сортировки анкет(ElementOfList *begin)

Функция сортирует имеющиеся в списке анкеты по фамилии. Если есть анкеты с одинаковыми фамилиями, то сортируются по имени.

Проводится проверка на пустоту списка(в main в соответствующем пункте перед вызовом функции).Если список не заполнен, появится сообщение “Анкеты отсутствуют”.

Функция сохранения анкет в тестовый файл(ElementOfList *begin)

Функция сохраняет весь список в текстовый файл, хранящийся в папке с проектом.

Функция вызывается в соответствующем пункте меню и в пункте выхода, если на протяжении работы с программой список не сохранялся (по согласию пользователя).

Проводится проверка на пустоту списка(в mainв соответствующем пункте перед вызовом функции).Если список не заполнен, появится сообщение “Анкеты отсутствуют”.

Функция загрузки анкет из текстового файла

void Download(ElementOfList **begin, ElementOfList **end)

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

Производится проверка, если файл поврежден, отсутствует или пуст.

Функция очистки спискаFree(ElementOfList **begin)

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

В главной функции main() реализовано меню пользователя, в которой каждому действию соответствует определенная цифра. Реализованы следующие функции работы с базой данных: добавление, редактирование, удаление, сортировка, поиск определенной анкеты, поиск анкет по знаку зодиака, вывод на экран, вывод в отсортированном виде, сохранение в файл, загрузка из файла.

Пользователь вводит цифру для выбора необходимого ему пункта. Если такого пункта нет, на экран консоли выведется сообщение «Повторите ввод».

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

Описание пользовательского интерфейса

Пример пользовательского интерфейса

Гороскоп

Меню

. Добавить анкету

. Вывод на экран

. Вывод на экран (отсортированный вид)

. Редактировать анкету

. Удалить анкету

. Найти анкету

. Найти анкеты по знаку зодиака

. Сохранить в базу данных

. Загрузка из базы данных

. Выход

. Результаты тестирования программы

Вывод:


Добавить анкету

Ввод: 1

Вывод:

Введите имя:

Ввод: Прасковья

Вывод:

Введите фамилию:

Ввод: Орлова

Вывод:

Введите дату рождения (гггг мм дд):

Ввод: 1815 10 17

Вывод:

Вы ввели некорректные данные.

Введите дату рождения (гггг мм дд):

Ввод: 1915 10 17

Вывод:

Анкета добавлена

Ввод: 1

Вывод:

Введите имя:

Ввод: Прасковья

Вывод:

Введите фамилию:

Ввод: Орлова

Вывод:

Введите дату рождения (гггг мм дд):

Ввод: 1915 10 17

Вывод:

Такой человек уже есть, повторите ввод.

Загрузка базы данных из файла

Ввод: 9

Вывод:

База данных загружена

Вывод анкет

Ввод: 2

Вывод:


Вывод в отсортированном виде

Ввод: 3

Вывод:


Редактирование анкеты

Ввод: 4

Вывод:

Ввод: Орлова

Вывод:

Ввод:

Вывод:


Ввод: 0

Удаление анкеты

Ввод: 5

Вывод:


Ввод: Журавлёва

Вывод:

Анкета удалена

Поиск анкеты

Ввод: 6

Вывод:


Ввод: Тихонова

Вывод:


Ввод: Лариса

Вывод:

С такими именем и фамилией найдено несколько человек. Продолжайте ввод.

Тихонова Лариса 9 12 1985 Стрелец

Тихонова Лариса 28 3 2000 Овен

Ввод: 2000 3 28

Вывод:

Тихонова Лариса 28 3 2000 Овен

Поиск по знаку зодиака

Вывод:


Ввод: Стрелец

Вывод:


Выход из программы

Ввод: 0

Вывод:

Ввод: 1

Заключение

В процессе выполнения курсового проекта была реализована база данных позволяющая: вводить информацию, хранить её в файле, осуществлять поиск, модификацию, сортировку и удаление данных. Все поставленные задачи были выполнены. Программа работает корректно, без ошибок и «вылетов».

Плюсы программы:

Реализован удобный и понятный на интуитивном уровне пользователю интерфейс;

Программа полностью русифицирована;

При вводе данных происходят проверки на корректность введенной даты рождения. Учитываются високосные годы;

В функциях, работающих с анкетами, реализованы проверки на пустоту списка;

Автоматически определяется знак зодиака;

Полностью исключена возможность создания полностью идентичных анкет. При этом программа работает с тезками;

В некоторых функциях реализована возможность отмены ввода данных;

Реализовано напоминание о сохранении анкет в текстовой файл перед выходом из программы, если оно не проводилось;

В функции редактирования осуществлена возможность выбора пункта анкеты, который нужно изменить;

Исключена возможность утечки памяти;

Минусы:

В функции добавления анкеты нет возможности отмены ввода;

При добавлении имени и фамилии нет проверки на посторонние символы;

Приложение

<iostream>

#include <fstream>

#include <string>

#include <windows.h>

//утечки памяти

#include <crtdbg.h>

#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)

//________________________________namespace std;

//структуры данных

//________________________________ZNAK

{secondname;name;zodiac;bday[3];

};ElementOfList

{info;

ElementOfList *next;

};

//________________________________

//определение знака зодиака

//________________________________

string Zodiac(ElementOfList a)

{year[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };(a.info.bday[2] % 4 == 0 && a.info.bday[2] % 400 == 0)

{[1] = 29;

}z;((a.info.bday[0] >= 21 && a.info.bday[1] == 3) || (a.info.bday[0] <= 19 && a.info.bday[1] == 4))= "Овен";if ((a.info.bday[0] >= 20 && a.info.bday[1] == 4) || (a.info.bday[0] <= 20 && a.info.bday[1] == 5))= "Телец";if ((a.info.bday[0] >= 21 && a.info.bday[1] == 5) || (a.info.bday[0] <= 20 && a.info.bday[1] == 6))= "Близнецы";if ((a.info.bday[0] >= 21 && a.info.bday[1] == 6) || (a.info.bday[0] <= 22 && a.info.bday[1] == 7))= "Рак";if ((a.info.bday[0] >= 23 && a.info.bday[1] == 7) || (a.info.bday[0] <= 22 && a.info.bday[1] == 8))= "Лев";if ((a.info.bday[0] >= 23 && a.info.bday[1] == 8) || (a.info.bday[0] <= 22 && a.info.bday[1] == 9))= "Дева";if ((a.info.bday[0] >= 23 && a.info.bday[1] == 9) || (a.info.bday[0] <= 22 && a.info.bday[1] == 10))= "Весы";if ((a.info.bday[0] >= 23 && a.info.bday[1] == 10) || (a.info.bday[0] <= 21 && a.info.bday[1] == 11))= "Скорпион";if ((a.info.bday[0] >= 22 && a.info.bday[1] == 11) || (a.info.bday[0] <= 21 && a.info.bday[1] == 12))= "Стрелец";if ((a.info.bday[0] >= 22 && a.info.bday[1] == 12) || (a.info.bday[0] <= 19 && a.info.bday[1] == 1))= "Козерог";if ((a.info.bday[0] >= 20 && a.info.bday[1] == 1) || (a.info.bday[0] <= 18 && a.info.bday[1] == 2))= "Водолей";if ((a.info.bday[0] >= 19 && a.info.bday[1] == 2) || (a.info.bday[0] <= 20 && a.info.bday[1] == 3))

z = "Рыба";= "Неверно задано";z;

}

//________________________________

//Вывод списка на экран

//________________________________Print(ElementOfList *begin)

{(begin == NULL)

{<< "Анкеты отсутствуют.\n" << endl;

return;

}*a = begin;i = 1;(a)

{<< a->info.secondname << " " << a->info.name << " " << a->info.bday[0] << "." << a->info.bday[1] << "." << a->info.bday[2] << " " << a->info.zodiac << endl;= a->next;++;

}<< endl;

}

//________________________________

//Сохранение нового звена в список

//________________________________

void AddNew(ElementOfList **begin, ElementOfList **end, ElementOfList a)

{bool x = true;(*begin == NULL)= true;(x)

{

*begin = new ElementOfList;

(*begin)->info = a.info;

(*begin)->next = NULL;

*end = *begin;= false;;

}

(*end)->next = new ElementOfList;

*end = (*end)->next;

(*end)->info = a.info;

(*end)->next = NULL;

}LastEl(ElementOfList *begin)

{*temp = begin;i = 0;(temp)

{

++i;= temp->next;

}i;

}

//удалениеанкеты

//________________________________Delete(ElementOfList **begin, ElementOfList a)

{*temp = *begin;(*begin == NULL)

{<< "Анкеты отсутствуют.\n" << endl;

return;

}(temp->info.name == a.info.name && temp->info.secondname == a.info.secondname && temp->info.bday[0] == a.info.bday[0] && temp->info.bday[1] == a.info.bday[1] && temp->info.bday[2] == a.info.bday[2])

{

*begin = (*begin)->next;temp;<< "Анкетаудалена." << endl;;

}*t1 = temp->next;flag = true;(t1)

{(t1->info.name == a.info.name && t1->info.secondname == a.info.secondname && t1->info.bday[0] == a.info.bday[0] && t1->info.bday[1] == a.info.bday[1] && t1->info.bday[2] == a.info.bday[2])

{>next = t1->next;t1;= false;<< "Анкетаудалена." << endl;;

}= t1;= t1->next;

}(flag)<< "Данная анкета отсутствует\n" << endl;

}

//________________________________

//добавление информации о пользователе

//________________________________AddInfo(ElementOfList *begin)

{a;<< "Введитеимя:\t ";(cin, a.info.name);<< "Введите фамилию:\t ";(cin, a.info.secondname);temp[3];year[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };(temp[2] % 4 == 0 && temp[2] % 400 == 0)

{[1] = 29;

}<< "Введите дату рождения (гггг мм дд):\t ";

while ((!(cin >> temp[2] && temp[2] >= 1900 && temp[2] <= 2014)) || (!(cin >> temp[1] && temp[1] >= 1 && temp[1] <= 12)) || (!(cin >> temp[0] && temp[0] >= 1 && temp[0] <= year[temp[1] - 1])))

{.clear();.sync();<< "Вы ввели некорректные данные\n ";<< "Введите дату рождения (гггг мм дд):\t ";

}(int i = 0; i < 3; i++).info.bday[i] = temp[i];.info.zodiac = Zodiac(a);.get();a;

}

//________________________________

//поиск

//________________________________BaseSearch(ElementOfList *begin)

{a;*temp = begin;s;{(begin);<< "Дляотменывводанажмите 0.\n";<< "ВведитеФамилию:\t";= 0;(cin, a.info.secondname);(1)

{(a.info.name == "0")

{a;

}break;

}(int i = 0; i < LastEl(begin); i++)

{(a.info.secondname == temp->info.secondname)++;= temp->next;

}= begin;(s == 0)

{("cls");<< "Нет совпадений. Повторите ввод:\n " << endl;

}break;

} while (1);(s == 1)

{(int i = 0; i < LastEl(begin); i++)

{(a.info.secondname == temp->info.secondname)

{.info.name = temp->info.name;.info.bday[0] = temp->info.bday[0];.info.bday[1] = temp->info.bday[1];.info.bday[2] = temp->info.bday[2];.info.zodiac = temp->info.zodiac;a;

}= temp->next;

}

}(s >= 2)

{<< "С такой фамилией найдено несколько человек. Продолжайте ввод:\t" << endl;

}{

short qq = 1;(int i = 0; i < LastEl(begin); i++)

{(a.info.secondname == temp->info.secondname)

{<< temp->info.secondname << " " << temp->info.name << " " << temp->info.bday[0] << " " << temp->info.bday[1] << " " << temp->info.bday[2] << " " << temp->info.zodiac << endl;++;

}= temp->next;

}= begin;

s = 0;<< "\nДля отмены ввода нажмите 0.\n";

cout << "Введитеимя:\t ";(cin, a.info.name);(1)

{

(a.info.name == "0")

{a;

}

break;

}(int i = 0; i < LastEl(begin); i++)

{(a.info.name == temp->info.name && a.info.secondname == temp->info.secondname)++;= temp->next;

}= begin;(s == 0)

{("cls");<< "Нетсовпадений. Повторитеввод\t: " << endl;

}break;

} while (1);(s == 1)

{(int i = 0; i < LastEl(begin); i++)

{(a.info.name == temp->info.name && a.info.secondname == temp->info.secondname)

{.info.name = temp->info.name;.info.bday[0] = temp->info.bday[0];.info.bday[1] = temp->info.bday[1];.info.bday[2] = temp->info.bday[2];.info.zodiac = temp->info.zodiac;a;

}= temp->next;

}

}(s >= 2)

{<< "\nС таким именем и фамилией найдено несколько человек. Продолжайтеввод:\t" << endl;

}= begin;

do {qq = 1;(int i = 0; i < LastEl(begin); i++)

{(a.info.name == temp->info.name && a.info.secondname == temp->info.secondname)

{<< temp->info.name << " " << temp->info.name << " " << temp->info.bday[0] << " " << temp->info.bday[1] << " " << temp->info.bday[2] << temp->info.zodiac << endl;++;

}= temp->next;

}= begin;

s = 0;<< "Введите дату рождения (год):\t ";

int date[3];(!(cin >> date[2] && date[2] >= 1900 && date[2] <= 2014))

}<< "Введите дату рождения (месяц): ";

while (!(cin >> date[1] && date[1] >= 1 && date[1] <= 12))

{.clear();.sync();<< "Некорректные данные. Повторите ввод:\t ";

}<< "Введите дату рождения (день):\t ";

int year[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };(date[2] % 4 == 0 && date[2] % 400 == 0)

{[2] = 29;

}(!(cin >> date[0] && date[0] >= 1 && date[0] <= year[date[1] - 1]))

{.clear();.sync();<< "Некорректныеданные." << "Повторитеввод:\t ";

}

(int i = 0; i < LastEl(begin); i++)

{(temp->info.name == a.info.name && temp->info.secondname == a.info.secondname && temp->info.bday[0] == a.info.bday[0] && temp->info.bday[1] == a.info.bday[1] && temp->info.bday[2] == a.info.bday[2])++;= temp->next;

}= begin;(int i = 0; i < 3; i++).info.bday[i] = date[i];(s == 0)

{("cls");<< "Нет совпадений. Повторите:\t " << endl;

}break;

} while (1);(s == 1)

{(int i = 0; i < LastEl(begin); i++)

{(temp->info.name == a.info.name && temp->info.secondname == a.info.secondname && temp->info.bday[0] == a.info.bday[0] && temp->info.bday[1] == a.info.bday[1] && temp->info.bday[2] == a.info.bday[2])

{.info.secondname = temp->info.secondname;.info.bday[0] = temp->info.bday[0];.info.bday[1] = temp->info.bday[1];.info.bday[2] = temp->info.bday[2];.info.zodiac = temp->info.zodiac;a;

}= temp->next;

}

}.get();

} ElementOfList* Search(ElementOfList *begin, ElementOfList a)

{flag = true;*temp = begin;(begin == NULL)

{<< "Анкетыотсутствуют.\n" << endl;0;

}

{(temp)

{(temp->info.name == a.info.name && temp->info.secondname == a.info.secondname && temp->info.bday[0] == a.info.bday[0] && temp->info.bday[1] == a.info.bday[1] && temp->info.bday[2] == a.info.bday[2])

{= false;;

}= temp->next;

}(!flag)

{<< "Анкетанайдена.\n" << endl;temp;

}

{<< "Такойанкетынетвбазе.\n" << endl;0;

}

}<< endl;

}ZodiacSearch(ElementOfList *begin)

{*temp = begin, a;{(begin);s = 0;<< "\nДляотменывводанажмите 0.\n";

cout << "Введите знак зодиака:\t ";

getline(cin, a.info.zodiac);(1)

{(a.info.zodiac == "0")

{;

}break;

}(int i = 0; i < LastEl(begin); i++)

{(a.info.zodiac== temp->info.zodiac)++;= temp->next;

}= begin;

if (s == 0)

{("cls");<< "Нет совпадений в знаках зодиака. Повторитеввод:\n" << endl;

}break;

} while (1);("cls");qq = 1;

(int i = 0; i < LastEl(begin); i++)

{(a.info.zodiac== temp->info.zodiac)

{<< temp->info.secondname << " " << temp->info.name << " " << temp->info.bday[0] << "." << temp->info.bday[1] << "." << temp->info.bday[2]<< " " << temp->info.zodiac << endl;++;

}= temp->next;

}<< endl;

}

//________________________________

//проверка на одинаковые анкеты

//________________________________СheckForDuplicates(ElementOfList *begin, ElementOfList a)

{flag = false;*temp = begin;(temp)

{(temp->info.name == a.info.name && temp->info.secondname == a.info.secondname && temp->info.bday[0] == a.info.bday[0] && temp->info.bday[1] == a.info.bday[1] && temp->info.bday[2] == a.info.bday[2])

{= true;;

}= temp->next;

}flag;

}

//________________________________

//редактирование анкет

//________________________________Edit(ElementOfList *begin, ElementOfList *f)

{t = *f;(begin == NULL)

{<< "Анкеты отсутствуют\n" << endl;

return;

}c;{("cls");<< f->info.secondname << " " << f->info.name << " " << f->info.bday[0] << "." << f->info.bday[1] << "." << f->info.bday[2] << endl;<< "Чтовыхотитеизменить:\n1. Имя\n2. Фамилию\n3. Дату рождения\n0. Выход" << endl;<< "Выберите значение: ";>> c;(c)

{'1':

{.sync();<< "Введите новое имя: ";

while (1)

{(cin, t.info.name);

if (СheckForDuplicates(begin, t))

{<< "Человек с идентичными данными уже есть, введите другое имя: ";

}break;

};

}'2':

{.sync();<< "Введите новую фамилию: ";

while (1)

{(cin, t.info.secondname);

if (СheckForDuplicates(begin, t))

{<< "Человек с идентичными данными уже есть, введите другую фамилию: ";

}break;

};

}'3':

{{.sync();<< "Введите дату рождения (год): ";

int temp[3];(!(cin >> temp[2] && temp[2] >= 1900 && temp[2] <= 2014))

{.clear();.sync();<< "Неккоректныеданные. Повторите ввод: ";

}<< "Введите дату рождения (месяц): ";

while (!(cin >> temp[1] && temp[1] >= 1 && temp[1] <= 12))

{.clear();.sync();<< "Неккоректныеданные. Повторите ввод: ";

}<< "Введите дату рождения (день): ";

int year[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };(temp[2] % 4 == 0 && temp[2] % 400 == 0)

{[1] = 29;

}(!(cin >> temp[0] && temp[0] >= 1 && temp[0] <= year[temp[1] - 1]))

{.clear();.sync();<< "Неккоректныеданные. Повторитеввод: ";

}(int i = 0; i < 3; i++).info.bday[i] = temp[i];(СheckForDuplicates(begin, t))

{<< "Идентичнаяанкетаестьвбазеданных, введитедругуюдатурождения: " << endl;

}break;

} while (1);;

}

}

*f = t;

} while (c != '0');.get();<< endl;

}

//________________________________

//сортировка списка

//________________________________Sort(ElementOfList *begin)

{*a = begin;*buf = new ElementOfList[LastEl(begin)];(int i = 0; i < LastEl(begin); i++)

{[i] = *a;= a->next;

}(int i = 0; i < LastEl(begin); i++)

{(int j = 0; j < LastEl(begin); j++)

{(buf[i].info.secondname < buf[j].info.secondname)

{(buf[i].info.name, buf[j].info.name);(buf[i].info.secondname, buf[j].info.secondname);(buf[i].info.bday[0], buf[j].info.bday[0]);(buf[i].info.bday[1], buf[j].info.bday[1]);(buf[i].info.bday[2], buf[j].info.bday[2]);(buf[i].info.zodiac, buf[j].info.zodiac);

}if (buf[i].info.secondname == buf[j].info.secondname)

{(buf[i].info.secondname < buf[j].info.secondname)

{(buf[i].info.name, buf[j].info.name);(buf[i].info.secondname, buf[j].info.secondname);(buf[i].info.bday[0], buf[j].info.bday[0]);(buf[i].info.bday[1], buf[j].info.bday[1]);(buf[i].info.bday[2], buf[j].info.bday[2]);(buf[i].info.zodiac, buf[j].info.zodiac);

}if (buf[i].info.secondname == buf[j].info.secondname)

{(buf[i].info.name < buf[j].info.name)

{(buf[i].info.secondname, buf[j].info.secondname);(buf[i].info.name, buf[j].info.name);(buf[i].info.bday[0], buf[j].info.bday[0]);(buf[i].info.bday[1], buf[j].info.bday[1]);(buf[i].info.bday[2], buf[j].info.bday[2]);(buf[i].info.zodiac, buf[j].info.zodiac);

}

}

}

}

}*t = begin;(int i = 0; i < LastEl(begin); i++)

{

*t = buf[i];= t->next;

}[] buf; << "Анкеты отсортированы.\n" << endl;

}

//________________________________

//сохранение в бд

//________________________________Save(ElementOfList *begin)

{fout;*temp = begin;.open("DataBase.txt", ios::trunc);<< LastEl(begin) << endl;(int i = 0; i < LastEl(begin); i++)

{<< temp->info.secondname << " " << temp->info.name << " " << temp->info.bday[0] << " " << temp->info.bday[1] << " " << temp->info.bday[2] << " " << temp->info.zodiac << endl;= temp->next;

}.close();

}

//________________________________

//загрузка из бд

//________________________________Download(ElementOfList **begin, ElementOfList **end)

{fin;temp;.open("DataBase.txt");

if (!fin.is_open())

{<< "База данных еще не сохранена.\n" << endl;

return;

}a, b[3] = {};>> a;.get();str1, str2, str3;(int i = 0; i < a; i++)

{>> str1; fin.get();>> str2; fin.get();>> b[0]; fin.get();>> b[1]; fin.get();>> b[2]; fin.get();>> str3; fin.get();.info.secondname = str1;.info.name = str2;.info.zodiac = str3;.info.bday[0] = b[0];.info.bday[1] = b[1];.info.bday[2] = b[2];(begin, end, temp);

} << "База данных загружена." << endl;

fin.close();

}

//________________________________

//очистка

//________________________________Free(ElementOfList **begin)

{(*begin == 0) return;*p = *begin;*t;(p)

{= p;= p->next;t;

}

*begin = NULL;

}

//________________________________main()

{

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);//проверкаутечекпамяти(1251);(1251);*begin = NULL;*end = NULL;exit = false;check = false;c;

{<< "\t\t\t Гороскоп\n\n";<< "\t\t\t Меню\n\n";

cout << "1. Добавить анкету\n" << "2. Вывод на экран\n" << "3. Вывод на экран (отсортированный вид)\n" << "4. Редактировать анкету\n" << "5. Удалить анкету\n" << "6. Найти анкету\n"<<"7. Найти анкеты по знаку зодиака\n"<< "8. Сохранить в базу данных\n" << "9. Загрузка из базы данных\n" << "0. Выход\n";<< endl;<< "Выберите действие\t";>> c;

switch (c)

{'1':

{("cls");.sync();a = AddInfo(begin);(СheckForDuplicates(begin, a))

{<< "Такойчеловекужеесть, повторитеввод:\n " ;= AddInfo(begin);

}(&begin, &end, a);

cout << "\nАнкета добавлена" << endl;;

}'2':

{("cls");.sync();(begin);<< endl;;

}'3':

{("cls");(begin == 0)

{<< "Данные отсутствуют" << endl << endl;

break;

}.sync();(begin);(begin);;

}'4':

{("cls");.sync();(begin == 0)

{<< "Данные отсутсвуют\n" << endl;

break;

}x;= BaseSearch(begin);(x.info.name == "0" || x.info.secondname == "0")

{;

}*_q;

_q = Search(begin, x);(begin, _q);;

}

'5':

{("cls");.sync();(begin == 0)

{<< "Данные отсутсвуют" << endl << endl;;

}<< "Введите данные:\n" << endl;

ElementOfList b;= BaseSearch(begin);(b.info.name == "0" || b.info.secondname == "0")

{;

}(&begin, b);<< endl;;

}'6':

{("cls");.sync();(begin == 0)

{<< "Данныеотсутсвуют" << endl << endl;;

}b;= BaseSearch(begin);<< endl;<< b.info.secondname << " " << b.info.name << " " << b.info.bday[0] << " " << b.info.bday[1] << " " << b.info.bday[2] << " " << b.info.zodiac << endl;;

}'7':

{("cls");.sync();(begin == 0)

{<< "Данныеотсутсвуют" << endl << endl;;

}(begin);;

}'8':

{("cls");.sync();(begin == 0)

{<< "Данные отсутсвуют" << endl << endl;

break;

}(begin);= true;;

}'9':

{("cls");.sync();(&begin, &end);;

}'0':

{("cls");

if (check == false){<< " Сохранить анкеты в базу данных перед выходом?\n 1. Да\n 2. Нет" << endl;c;<< " Выберите значение: ";

while (!((cin >> c) && (c == 1 || c == 2)))

{.clear();.sync();<< endl << " Повторите ввод: ";

}

(c == 1)

{("cls");(begin);

}

{("cls");

}= true;;}{= true;;

}

}:

{

system("cls");

cin.sync();

cout << "Повторитеввод\n" << endl;

break;

}

}

} while (!exit);(&begin);0;

}

Похожие работы на - Создание информационной системы 'Знаки зодиака'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!