Консольное приложение: учет спортсменов
Разработка программного обеспечения для эффективного решения задач в области управления спортивной сферой. Создание учётных записей администратора и обычного пользователя. Поиск, просмотр и фильтрация данных в табличной форме. Схемы работы двух функций.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.04.2020 |
Размер файла | 369,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Министерство образования Республики Беларусь
Учреждение образования Белорусский государственный университет информатики и радиоэлектроники
Инженерно-экономический факультет
Кафедра экономической информатики
Пояснительная записка
к курсовому проекту
на тему: Консольное приложение: учет спортсменов
Студент Белявская А. С.
Руководитель Мытник Н. П.
Минск 2018
Содержание
Введение
Задание по курсовому проекту
Описание предметной области
Краткие теоретические сведения об используемых алгоритмах
Описание организации структур хранимых данных
Создание пользовательских функций приложения
Функциональная схема задачи. Схемы работы двух функций
Описание программы
Заключение
Список используемых источников
Приложение
Введение
В последнее время информационные технологии стали неотъемлемой частью нашей жизни. Лучшие специалисты со всех уголков мира создают множество приложений для выполнения каких-либо задач и автоматизации процессов. Сегодня практически нереально представить мир без информационных технологий. Почти каждая семья может себе позволить приобрести компьютер или ноутбук, и нередко даже не один.
В последнее время люди также стали активно пользоваться Интернетом. Теперь каждое утро среднестатистического человека начинается со стандартного просмотра ленты новостей, проверки содержимого личной почты и посещения различных популярных социальных сетей. Интернет медленно, но верно, стал постоянным помощником в повседневных делах. Но самым большим плюсом Интернета является то, что он позволяет получить доступ почти к любой информации, это существенно облегчает как учебный, так и рабочий процесс.
Отрасль информационных технологий занимается созданием, развитием и эксплуатацией информационных систем. Информационные технологии призваны, основываясь и рационально используя современные достижения в области компьютерной техники и иных высоких технологий, новейших средств коммуникации, программного обеспечения и практического опыта, решать задачи по эффективной организации информационного процесса для снижения затрат времени, труда, энергии и материальных ресурсов во всех сферах человеческой жизни и современного общества. Информационные технологии взаимодействуют и часто составляющей частью входят в сферы услуг, области управления, промышленного производства, социальных процессов.
Задание по курсовому проекту
1. Разработать функциональную схему задачи.
2. Создать программу (консольный режим), выполнив функциональное разбиение, реализующую следующие функции работы с бинарным/текстовым файлом. Предусмотреть создание меню 1-го уровня со следующими пунктами:
a. Вход под администратором;
b. Вход под пользователем;
c. Выход.
Учётные записи администратора и обычного пользователя должны содержать логин и пароль. Сведения об учётных записях должны храниться в отдельном файле, желательно предусмотреть механизм шифрования/дешифрования логинов/паролей.
3. Меню 2-го уровня:
- Для администратора:
a) Создание/открытие файла с данными;
b) Добавление записи;
c) Редактирование записи;
d) Удаление записи;
e) Просмотр всех данных в табличной форме;
f) Различные процедуры поиска и фильтрации данных;
g) Управление пользователями;
h) Выход в меню 1-го уровня.
- Для обычного пользователя:
a) Открытие файла с данными;
b) Просмотр всех данных в табличной форме;
c) Выполнение задачи;
d) Различные процедуры поиска и фильтрации данных;
e) Выход в меню 1-го уровня.
4. Данные должны быть организованы в структуре (struct), не менее 7-ми полей, обязательно предусмотреть использование вложенных структур.
5. Предусмотреть обработку исключительных ситуаций.
6. Построение программного кода должно соответствовать правилам, определенным в документе «Code Conventions» для соответствующего языка (технологии).
7. Предусмотреть использование различных встроенных функций для работы со строками
8. Каждая записка, как и программная часть - должна быть уникальной, т.к. подразумевает работу над индивидуальным заданием. Обратите, пожалуйста, на это внимание во избежание ошибок
Описание предметной области
Учет спортивных команд - это программа, позволяющая быстро и удобно отслеживать информацию о каждом спортсмене без лишней документации, экономя время и т.д. Данное приложение является необходимым, особенно сейчас, во время стремительного развития IT-технологий.
Спорт является неотъемлемой частью жизни каждого из нас. Кто-то занимается спортом для поддержания формы, а для других-это их профессия и способ заработка.
Соревнования различных масштабов проводятся в нескольких формах: личном и командном зачетах. Как и в любой профессиональной деятельности, регистрация и учет команд сопровождается многочисленной документацией, где даже самый внимательный специалист может совершать ошибки. управление спортивный программный администратор
В связи с этим возникает необходимость уменьшения влияния человека на делопроизводство, а это возможно осуществить с помощью автоматизации. Исходя из этого, можно сказать, что исследуемая тема (учет команд спортивных соревнований) является актуальной.
Помимо актуальности работы стоит рассмотреть и цель исследования, которая состоит в сокращении числа ошибок при учете участников командных соревнований, обеспечении удобного и быстрого доступа к необходимой информации, а также увеличении производительности труда сотрудников и уменьшение времени заполнения необходимой документации.
Поставленная цель потребовала решения следующих задач:
1) Исследовать предметную область;
2) Разработать структуры хранимых данных;
3) Разработать пользовательские функции приложения;
4) Разработать алгоритмы работы функций;
5) Предусмотреть обработку исключительных ситуаций;
6) Описать программу.
Предмет исследования - автоматизация учета команд спортивных соревнований.
Ключевыми словами являются: алгоритм, блок-схема, функция, автоматизация, учет спортсменов, код, символ.
Краткие теоретические сведения об используемых алгоритмах
Алгоритм - набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий. Алгоритм означает точное описание некоторого процесса, инструкцию по его выполнению.
Виды алгоритмов:
1)Линейный алгоритм - набор команд (указаний), выполняемых последовательно во времени друг за другом.
2)Разветвляющийся алгоритм - алгоритм, содержащий хотя бы одно условие, в результате проверки которого может осуществляться разделение на несколько параллельных ветвей алгоритма.
3)Циклический алгоритм - алгоритм, предусматривающий многократное повторение одного и того же действия над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов.
Цикл программы - последовательность команд (тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторого условия.
В данной курсовой работе широко используются все выше перечисленные виды алгоритма.
Так же используется: алгоритмы поиска и фильтрации данных .
В алгоритмах поиска существует два возможных окончания работы: поиск может оказаться удачным - заданный элемент найден в массиве и определено его место расположения, либо поиск может оказаться неудачным - необходимого элемента в данном объеме информации нет.
В данном проекте используется линейный поиск.
Линейный поиск - это самый простой тип поиска, потому что при его выполнении просто просматривается множество элементов данных и эти элементы сравниваются с искомыми данными, пока не обнаружится совпадение.
Фильтрация данных -- это быстрый и простой способ найти подмножество данных.
Для решения поставленной задачи в данной курсовой работе использовались разные операторы и функции. Для хранения информации были использованы функции работы с файлом. Рассмотрим их.
Операторы. Оператор -- наименьшая автономная часть языка программирования, имеющая законченный смысл. На языке C++ любой оператор заканчивается символом «;» (точка с запятой).
Используемые операторы:
· if - else - оператор ветвления, используется для выбора одного из двух направлений дальнейшего хода программы в зависимости от истинности/ложности условия;
· switch - предназначен для организации выбора из множества различных вариантов;
· while - операторы выполнения тела цикла, пока условие истинно;
· for - оператор, выполняющий тело цикла, пока переменная не достигнет конечного значения;
· return - обеспечивает выход из функции. Управление передаётся оператору, следующему за вызовом функции;
· break - данный оператор применяется для выхода из операторов циклов (for, while, do) или оператора выбора switch. При использовании этого оператора метки не нужны, как управление передаётся на оператор, следующий за оператором цикла или выбора.
Функции. Функция - это синтаксически выделенный именованный программный модуль, выполняющий определенное действие или группу действий. Каждая функция имеет свой интерфейс и реализацию.
Интерфейс функции - заголовок функции, в котором указывается название функции, список ее параметров и тип возвращаемого значения.
Используемые библиотечные функции:
· system("pause") - задержка экрана консоли;
· fflush(stdin) - очистка буфера ввода;
· fopen(), fclose() - операторы открытия - закрытия файла;
· fprintf() - запись данных в файл;
· fscanf() - считывание данных из файла;
· printf() - форматный вывод данных на экран;
· scanf() - считывание данных с клавиатуры;
· system(“cls”) - очистка экрана консоли;
· strcmp() - сравнивает в лексикографическом порядке две строки и возвращает целое значение.
Описание организации структур хранимых данных
Структура - это сложный тип данных представляющий собой упорядоченное в памяти множество элементов различного типа. Каждый элемент в структуре имеет свое имя и называется полем. В СИ элементы структуре располагаются последовательно, а размер структуры определяется суммой размеров всех элементов.
Структуры одного типа можно объединять не только в массивы. Их можно связывать между собой, создавая так называемые динамические структуры данных.
Связь между отдельными структурами может быть организована по-разному, и именно поэтому среди динамических данных выделяют списки, стеки, очереди и др.
Список - это набор элементов (чаще всего структурных переменных), размещаемых в динамической памяти и связанных между собой с использованием указателей на эти элементы. Применяемый способ связывания определяет тип списка.
В данной курсовой работе для организации хранения данных используются такие динамические структуры данных, как двусвязные и односвязные списки, которые связываются между собой при помощи указателей и образуют список в списке.
Двусвязный список содержит информацию, как о последующем элементе, так и о предыдущем элементе списка. По двусвязному списку можно передвигаться в любом направлении -- как к началу, так и к концу. В этом списке проще производить удаление и перестановку элементов, так как всегда известны адреса тех элементов списка, указатели которых направлены на изменяемый элемент.
Одним из наиболее полезных свойств является хранение данных. Данные хранятся динамически, а, значит, каждый узел создаётся по мере необходимости, а список ограничен только предоставленной оперативной памятью компьютера.
Вложенные списки. В структуру данных, именуемой списки, можно поместить что угодно, в том числе и указатель на другие структуры.
Применение вложенных списков очень удобно для работы с информацией, что было показано на примере моей программы.
Пример вложенных списков выглядит так:
Структура DRIVER
struct SPORTSMAN
{
char Surname_of_the_sportsman[20];
char Name_of_the_sportsman[20];
int age;
int growth;
int weight;
struct TEAM*head;
struct SPORTSMAN*pred, *next;
};
Структура ROUTE
struct TEAM
{
char name_of_the_team[20];
int Number_of_sportsmen;
double Average_age;
double Average_growth;
double Average_weight;
struct TEAM *next;
};
Структура SPORTSMAN имеет поля данных, которые относятся к фамилии, имени, возрасту, росту и весу спортсмена и 3 указателя, два из них - это указатель на следующий и предыдущие элементы(двусвязный список), а второй - указатель на начало вложенного списка TEAM.
Структура TEAMявляется вложенной в структуру SPORTSMAN. Пользователь сам заполняет поля данных структур: фамилия, имя, данные о спортсмене(родительская структура), название команды(дочерняя структура).
Поля структуры TEAM кроме названия команды подсчитываются автоматически исходя из данных структуры SPORTSMAN.
Создание пользовательских функций приложения
Функция - это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.
С помощью функций задача может быть разделена на более простые и обозримые, после чего программу можно рассматривать в более укрупненном виде -- на уровне взаимодействия функций.
Разделение программы на функции позволяет также избежать избыточности кода, поскольку функцию записывают один раз, а вызывать ее на выполнение можно из разных точек программы многократно.
Функции меню:
1) int menu() - функция, выводящая на экран меню первого уровня. Возвращает выбор, который вводится с клавиатуры. В результате этого выбора программа выполняет вход под администратором или пользователем. При отсутствии пользователя, администратор должен его создать.
2) int menuadmin() - меню второго уровня. Эта функция предназначена только для работы администратора. В этой функции администратор выбирает функции, которые будут выполнятся программой.
3) int menuuser() - меню второго уровня. Эта функция предназначена для пользователя. В данном меню реализовано только несколько функций, так как у пользователя нет прав редактировать базу данных, созданную администратором.
4) void controluser() - меню 3-ого уровня для добавления, удаления и смены пароля пользователя. Это меню только для администратора. Если пользователь изначально не создан, то администратор обязан его создать, иначе пользователей не существует.
5) void edit(SPORTSMAN**onset, SPORTSMAN**end) - меню 3-ого уровня для редактирования родительской и дочерней структур. Данное редактирование обусловлено функцией поиска спортсмена по фамилии.
6) void del(SPORTSMAN**onset, SPORTSMAN**end) - меню 3-ого уровня для удаления родительской и дочерней структур. Данное меню подразумевает удаление всех данных спортсмена.
7) void search (SPORTSMAN **onset) - меню 3-ого уровня для поиска данных по номеру телефона или фамилии ученика. В данном меню администратор или пользователь может выбрать поиск по фамилии спортсмена и поиск по названию команды. Если введенных данных нет, выводится сообщение об ошибке. Также в этом же меню есть выход в меню фильтрации.
Функции для работы с меню пользователя и администратора:
1) void workadmin() - эта функция осуществляет работы со всеми пунктами меню администратора.
2) void workuser() - эта функция осуществляет работу со всеми пунктами меню пользователя.
Функция шифрования/дешифрования данных пользователя:
1) char* encryption(char* str) - функция шифрования пароля пользователя.
Основывается на принципе сдвига кодов букв в таблице ASCII. Вызывается непосредственно в функции авторизации и добавления пользователя.
Функции для работы с пользователями:
1) void changepassworduser() - функция, предназначенная для администратора, изменяет пароль пользователя.
В данной функции сначала дешифруется пароль, который записан в файл «user.txt», а после пароль сверяется с введёнными данными, при несовпадении данных, выводится соответствующее сообщение об ошибке, а если пароль совпадает, то администратору предлагается возможность изменить пароль.
Новый пароль перезаписывается в файл и шифруется.
2) void adduser(char* new_login,char* new_pass) - функция, предназначенная для администратора, добавляет пользователя. Можно добавлять сколь угодно пользователей.
3) void deluser(char * del_login) - функция, предназначенная для администратора, удаляет пользователя. Можно удалять сколь угодно пользователей.
Функции работы со структурами данных:
1) void addsportsman (SPORTSMAN**onset, SPORTSMAN **end) - функция добавления данных. В родительскую структуру записываются данные о спортсмене (фамилия спортсмена, имя спортсмена, возраст, вес и рост спортсмена), а в дочернюю данные о команде (название команды).
Функции изменения данных:
2) void editsportsman (SPORTSMAN **onset, SPORTSMAN **end, char* edsurname) - функция изменения фамилии спортсмена (фамилия является полем в родительской структуре).
В данной функции реализован поиск фамилии данного спортсмена. Если такой ученик найден, то администратор может изменить его фамилию, в противном случае выводится сообщение об ошибке.
3) void editteam(SPORTSMAN **onset, SPORTSMAN **end,char* edsurname) - функция изменения данных команды. В данной функции поиск осуществляется по названию команды.
Если команда найдена, то администратору будет предложено выбрать новое название команды, в противном случае выводится сообщение об ошибке.
Функции удаления данных:
4) void del(SPORTSMAN **onset, SPORTSMAN **end) - функция выполняет удаление всей записи спортсмена. В данной функции осуществляется поиск по фамилии спортсмена, если введённая администратором фамилия найдена, то данные о спортсмене удаляются.
Функции поиска данных:
5) void searchbyname (SPORTSMAN *onset,char* name_of_the_team ) - функция выполняет поиск данных по имени спортсмена.
6) void searchsurname (SPORTSMAN *onset, char* Surname_of_the_ sportsman) - функция выполняет поиск данных по фамилии спортсмена.
Функции фильтрации данных:
7) void filter_surname(SPORTSMAN*onset) - фильтрация данных о спортсмене по первым буквамфамилии. Фильтрация осуществляется по одному полю.
8) void filter_name (SPORTSMAN*onset) - фильтрация данных о спортсменах по первым буквам имени. Фильтрация осуществляется по одному полю.
9) void filter_team (SPORTSMAN *onset) - фильтрация данных о спортсменах по названию команды. Фильтрация осуществляется по одному полю.
Функции работы с файлами:
1)void write(SPORTSMAN *onset) -эта функция записывает данные о ученике в предварительно открытый файл.
2)void read (SPORTSMAN **onset, SPORTSMAN **end) - функция выполняет считывание данных из файла.
Функция вывода данных на экран:
1) void print(SPORTSMAN **onset) - эта функция позволяет выводить данные в табличном виде на экран.
Функциональная схема задачи. схемы работы двух функций
Текст кода схемы:
int menu()
{
int n;
do
{
fflush(stdin);
printf("\tМеню 1-ого уровня\n");
printf("1.Вход под администратором\n");
printf("2.Вход под пользователем\n");
printf("3.Выход\n");
scanf_s("%d", &n);
system("cls");
} while (n<1 || n>3);
return(n);
}
Схема алгоритма меню 1-ого уровня.
Схема удаления записи
Текст кода схемы:
void del(SPORTSMAN **onset, SPORTSMAN **end)
{
char delsurname[50];
int flag = 0;
SPORTSMAN *p, *s, *k;
p = (*end);
if ((*onset) == NULL) {
printf("нет информации\n");
return;
}
tabl(*onset);
printf("Введите фамилию спортсмена, данные которого Вы хотите удалить\n");
scanf("%s", &delsurname);
while (p != NULL) {
if (!strcmp(delsurname, p->Surname_of_the_sportsman)) {
flag = 1;
if (*end == *onset) {
*end = (*end)->pred;
if (*end == NULL)
*onset = NULL;
delete p;
return;
}
if (p == (*end)) {
p = (*end)->pred;
delete *end;
p->next = NULL;
(*end) = p;
return;
}
if (p == (*onset)) {
k = (*onset);
(*onset) = (*onset)->next;
delete k;
(*onset)->pred = NULL;
return;
}
if (p != (*end) && p != (*onset)) {
k = p->pred;
s->pred = k;
k->next = p->next;
delete p;
return;
}
}
s = p;
p = p->pred;
}
if (flag == 0)
printf("Нет такого спортсмена\n");
}
Описание программы
После запуска программы в консоли отображается меню первой степени, предназначенное для выбора типа аккаунта, в котором мы будем работать в дальнейшем. Из него можно перейти к авторизации аккаунта пользователя или аккаунта администратора. Если пароль и логин были введены неверно, то появляется сообщение об ошибке и предложение попробовать еще.
Если логин и пароль были введены верно, то выполниться переход к меню выбора функций администратора или меню выбора функций пользователя.
Действия в аккаунте администратора:
При выборе пункта “1. Создание/открытие файла с данными” программа проверяет наличие файла. При его отсутствии создает его и открывает для записи.
При выборе пункта “2. Добавление записи” выполняется обращение к функции void addsportsman(SPORTSMAN **onset, SPORTSMAN **end). Пользователь заполняет все поля записи. Предусмотрен случай введения однофамильца, в котором предлагается либо отменить ввод, либо добавить новую запись с одинаковым полем фамилии спортсмена. Обязательным критерием заполнения структур является соответствие стандартам, описанным в справке данной программы. При несоблюдении стандартов, структура не будет добавлена в базу данных.
При выборе пункта “3. Редактирование записи” появиться меню для выбора типа структуры, которую вы будите редактировать. После выбора типа структуры выведется имеющаяся база данных для просмотра, после чего будет предложено ввести либо фамилию спортсмена, данные которого хотите изменить, либо название команды, данные которой вы хотите изменить. После этого предлагается ввести новую информацию вместо уже устаревшей. При некорректном вводе изменяемых данных предусмотрен вывод соответствующего сообщения об отсутствии такой информации в БД.
При выборе пункта “4. Удаление записи” появиться строка с просьбой ввода фамилии спортсмена, информацию о котором вы хотите удалить. Если введенная фамилия спортсмена была введена корректна и такой спортсмен есть в БД, то все структуры с данным кодом будут удалены, и появиться сообщение об успешном удалении данных В обратном случае будет выведено сообщение об отсутствии структуры с введенным вами кодом
При выборе пункта “5. Просмотр всех данных в табличной форме” данные о спортсменах и командах, хранящиеся в памяти, будут выведены в табличной форме.
При выборе пункта “6. Управление пользователями” происходит обращение к функции void controluser() и появиться меню для выбора функций работы с пользователями:
- Выбор поля “1. Добавление пользователя” позволяет добавить нового пользователя, введя логин, пароль и подтвердив пароль.
- Выбор поля “2. Удаление пользователя” позволяет удалить пользователя, введя его логин. Если такого пользователя не существует, то выведется сообщение об ошибке.
- Выбор поля “3. Сменить пароль пользователя” позволяет изменить старый пароль пользователя. Происходит обращение к функции void changepassworduser(). После введения логина и старого пароля пользователя, происходит запись нового пароля. Иначе выводится соответствующее сообщение.
При выборе пункта “7. Поиск и фильтрация данных” появиться меню:
- Поиск по фамилии спортсмена. Предлагается ввод фамилии после чего происходит обращение к функции void searchbysurname(SPORTSMAN *onset, char* team). Осуществляется вывод информации о спортсменах с искомой фамилией в табличной форме. При некорректном вводе выводится соответствующее сообщение.
- Поиск по названию команды. Предлагается ввод названия команды после чего происходит обращение к функции void searchbyteam(SPORTSMAN *onset, char* team). Осуществляется вывод информации о спортсменах, состоящих в искомой команде, в табличной форме. При некорректном вводе выводится соответствующее сообщение.
- Меню фильтрации. Дополнительное меню выбора:
*Фильтрация по фамилии.
*Фильтрация по имени.
*Фильтрация по названию команды.
Действия в аккаунте пользователя
При выборе пункта “1. Открытие файла с данными” программа проверяет наличие файла. При его отсутствии создает его и открывает для записи.
При выборе пункта “2. Просмотр всех данных в табличной форме” данные о спортсменах и командах, хранящиеся в памяти, будут выведены в табличной форме.
При выборе пункта “3.Поиск и фильтрация данных ” появиться меню:
- Поиск по фамилии спортсмена. Предлагается ввод фамилии после чего происходит обращение к функции void searchbysurname(SPORTSMAN *onset, char* team). Осуществляется вывод информации о спортсменах с искомой фамилией в табличной форме. При некорректном вводе выводится соответствующее сообщение.
- Поиск по названию команды. Предлагается ввод названия команды после чего происходит обращение к функции void searchbyteam(SPORTSMAN *onset, char* team). Осуществляется вывод информации о спортсменах, состоящих в искомой команде, в табличной форме. При некорректном вводе выводится соответствующее сообщение.
- Меню фильтрации. Дополнительное меню выбора:
*Фильтрация по фамилии.
*Фильтрация по имени.
*Фильтрация по названию команды.
При выборе пункта “4. Выполнение задачи” выводит информацию о самой рослой, легкой и молодой команде.
Заключение
Ни для кого не секрет, что технологии не стоят на месте, а идут вперед семимильными шагами, поэтому необходимо решить задачу автоматизации выполнения различных процессов. В ходе данного проекта было разработано приложение для учета спортсменов. Были разработаны такие структуры данных, которые позволяют нам корректно хранить всю необходимую информацию.
ПО, которое я создала, позволяет редактировать, удалять, просматривать, фильтровать и искать информацию из целого списка данных о спортсменах и их командах. Таким образом, я могу сделать вывод, что поставленные в начале данной работы цели были выполнены, так как программа облегчает процесс занесения данных для всей информации о спортсменах.
Данная программа была разработана для спортивных организаций, занимающихся организацией соревнований, которая также может быть легко модифицирована для других данных и организаций.
Список используемых источников
[1] Керниган Б., Ритчи Д. Язык программирования Си - 2-е изд. - Вильямс, 2007
[2] Герберт Шилдт. C: полное руководство, классическое издание - Вильямс, 2010
[3] БГУИР [Электронный ресурс] - официальный сайт высшего учебного заведение БГУИР. - Электронные данные. - Режим доступа: http://www.bsuir.by
[4] Стив Макконнелл - Совершенный код, 2-е издание (мастер-класс) - 2010
[5] Дейтел П.Дж., Дейтел Х.М. Как программировать на С (4-е издание, 2009)
[6] Понятие алгоритма. Виды алгоритмов [Электронный ресурс]. - Режим доступа: http://www.yaklass.ru/materiali?chtid=474&mode=cht
[7] Современные информационные технологии в маркетинговой деятельности предприятия [Электронный ресурс]. - Режим доступа: http://www.webstarstudio.com/marketing/referats/internet/ref31.htm
Приложение
Листинг кода
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
using namespace std;
#pragma warning(disable : 4996)
struct SPORTSMAN {
char Surname_of_the_sportsman[20];
char Name_of_the_sportsman[20];
int age;
int weight;
int growth;
struct SPORTSMAN *next, *pred;
struct TEAM *head;
};
struct TEAM {
char Name_of_the_team;
int Number_of_sportsmen;
double Average_weight;
double Average_age;
double Average_growth;
struct TEAM *next;
};
int menu();//первое входное меню
int authorizeadmin(); //авторизация администратора
int show_menu_a(); //меню для администратора
int authorizeuser(); //авторизация пользователя
int menuuser(); //меню для пользователя
void controluser(); //управления пользователями
void changepassworduser(); //изменить пароль для пользователя
void adduser(char* new_login, char* new_pass); //
добавить пользователя
void deluser(char* del_login); //удалить пользователя
void workuser();
void workadmin();
void write(SPORTSMAN *onset);//запись данных в файл
void read(SPORTSMAN**onset, SPORTSMAN **end); //чтение из файла
void edit(SPORTSMAN **onset, SPORTSMAN **end);//меню для изменения всех данных
void editsportsman(SPORTSMAN **onset, SPORTSMAN **end, char* edsurname);
void editteam(SPORTSMAN **onset, SPORTSMAN **end, char* edsurname);
void del(SPORTSMAN **onset, SPORTSMAN **end);// удаление данных спортсмена
void addsportsman(SPORTSMAN **onset, SPORTSMAN **end); //добавить спортсмена
void tabl(SPORTSMAN *onset);//
вывести данные в табличном виде на экран
void search(SPORTSMAN *onset);//меню поиска
void searchbyteam(SPORTSMAN *onset, char* route);
void searchsurname(SPORTSMAN *onset, char* surname);
void filtr_surname(SPORTSMAN *onset);
void filtr_name(SPORTSMAN *onset);
void filtr_team(SPORTSMAN *onset);
char* encryption(char* str);
void main()
{
setlocale(LC_ALL, "rus");
SPORTSMAN *onset = NULL, *end = NULL;
int no, flag = 0;
FILE *fp = 0;
do
{
no = menu();
switch (no)
{
case 1:
workadmin();
break;
case 2:
workuser();
break;
default:
if (flag == 1) {
if ((onset) == NULL) {
fclose(fp);
if (remove("okp.txt ") == 0)
printf("Нет информации\n");
}
else {
write(onset);
fclose(fp);
}
}
else printf("Вы не открывали файл\n");
printf("Вы покинули программу\n");
return;
}
} while (true);
}
int menu()
{
int n;
do
{
fflush(stdin);
printf("\tМеню 1-ого уровня\n");
printf("1.Вход под администратором\n");
printf("2.Вход под пользователем\n");
printf("3.Выход\n");
scanf_s("%d", &n);
system("cls");
} while (n<1 || n>3);
return(n);
}
void workadmin() {
SPORTSMAN *onset = NULL, *end = NULL;
end = NULL;
int no, flag = 0, flg, label, label1, driver, mark, q = 0;
char Surname_of_the_sportsman[20];
FILE *fp;
flg = 1;
do {
label = 0;
flg = authorizeadmin();
if (flg == 0) {
do {
label1 = 0;
printf("\n");
no = show_menu_a();
switch (no) {
case 1:
if (q == 0) {
if (!(fp = fopen("okp.txt", "r"))) {
if (!(fp = fopen("okp.txt", "w+")))
printf("Ошибка при открытии\n");
else {
printf("Файл создан\n");
flag = 1;
q++;
}
}
else {
read(&onset, &end);
printf("Файл открыт\n");
flag = 1;
q++;
}
label = 1;
}
else printf("Файл уже открыт\n");
break;
case 2:
if (flag == 1)
addsportsman(&onset, &end);
else printf("Вы не открыли файл\n");
break;
case 3:
if (flag == 1)
edit(&onset, &end);
else printf("Вы не открыли файл\n");
break;
case 4:
if (flag == 1)
del(&onset, &end);
else printf("Вы не открыли файл\n");
break;
case 5:
if (flag == 1) {
if ((onset) == NULL) {
printf("нет информации\n");
break;
}
tabl(onset);
}
else printf("Вы не открыли файл\n");
break;
case 6:
controluser();
break;
case 7:
search(onset);
break;
default:
label1 = 1;
label = 1;
break;
}
} while (label1 == 0);
}
else if (flg == 1) {
do {
printf("Неверный логин или пароль\n");
printf("1.Повторить попытку\n");
printf("2.Вернуться в меню 1ого рода\n");
scanf("%d", &no);
system("cls");
} while (no<1 || no>2);
switch (no) {
case 1:
break;
default:
label = 1;
break;
}
}
} while (label == 0);
}
int authorizeadmin()
{
FILE *fp;
int i = 0, c, flag = -1;
char login[9], pass[9], log[9], pas[9];
if ((fp = fopen("admin.txt", "a+")) != NULL) {
system("cls");
printf("Введите логин и пароль(1-8 символов)\n");;
scanf("%s", &login);
fscanf(fp, "%s", &log);
while ((c = _getch()) != 13)
{
if (c == 8) {
printf("\b \b");
i--;
}
else {
fscanf(fp, "%s", &pas);
printf("*");
pass[i] = c;
i++;
}
pass[i] = '\0';
}
flag = 0;
i = 0;
if ((strcmp(login, log) != 0) || (strcmp(pass, pas) != 0))
flag = 1;
}
else printf("Ошибка при открытии файла");
system("cls");
fclose(fp);
return(flag);
}
void controluser() {
int choice;
FILE *fp;
int flag = 0;
char new_login[9], new_pass[9], log[9], pas[9], del_login[9];
do {
fflush(stdin);
printf("1.Добавить пользователя\n");
printf("2.Удалить пользователя\n");
printf("3.Сменить пароль пользователя\n");
scanf("%d", &choice);
} while (choice<0 || choice>4);
switch (choice) {
case 1:
if ((fp = fopen("user.txt", "a+")) != NULL) {
do {
flag = 0;
system("cls");
printf("Введите логин\n");
scanf("%s", new_login);
printf("Введите пароль\n");
scanf("%s", new_pass);
while (!feof(fp)) {
fscanf(fp, "%s %s", &log, &pas);
if ((strcmp(new_login, log) == 0))
flag = 1;
}
} while (flag);
adduser(new_login, new_pass);
fclose(fp);
}
break;
case 2:
printf("Введите логин пользователя,
которого хотите удалить\n");
scanf("%s", del_login);
deluser(del_login);
system("cls");
break;
case 3:
changepassworduser();
}
}
void changepassworduser() {
FILE *fp, *f1;
int flag = 0;
char log[9], pas[9], login_change[9], pass_old[9], new_pass[9];
system("cls");
if ((fp = fopen("user.txt", "a+")) != NULL) {
do {
flag = 0;
printf("Введите логин пользователя\n");
scanf("%s", login_change);
printf("Введите старый пароль\n");
scanf("%s", pass_old);
strcpy(pass_old, encryption(pass_old));
rewind(fp);
while (!feof(fp) && flag == 0) {
fscanf(fp, "%s\n", &log);
fscanf(fp, "%s\n", &pas);
if ((strcmp(login_change, log) == 0) && strcmp(pass_old, pas) == 0) {
printf("Введите новый пароль для пользователя %s\n", log);
scanf("%s", new_pass);
strcpy(new_pass, encryption(new_pass));
fflush(stdin);
flag = 1;
}
}
system("cls");
if (flag == 0)
printf("Вы ввели неверный логин или пароль,повторите попытку\n");
} while (!flag);
rewind(fp);
f1 = fopen("user.txt", "a+");
while (!feof(fp)) {
fscanf(fp, "%s\n", &log);
fscanf(fp, "%s\n", &pas);
if ((strcmp(login_change, log) == 0) && strcmp(pass_old, pas) == 0) {
fprintf(f1, "%s\n", log);
fprintf(f1, "%s\n", new_pass);
strcpy(new_pass, encryption(new_pass));
}
else {
fprintf(f1, "%s\n", log);
fprintf(f1, "%s\n", pas);
}
}
rewind(f1);
fp = fopen("user.txt", "a+");
while (!feof(f1)) {
fscanf(f1, "%s\n", &log);
fscanf(f1, "%s\n", &pas);
fprintf(fp, "%s\n", log);
fprintf(fp, "%s\n", pas);
strcpy(pas, encryption(pas));
}
fclose(fp);
fclose(f1);
}
}
void adduser(char* new_login, char* new_pass)
{
FILE *fp;
int flag = 0;
char log[9], pas[9];
if ((fp = fopen("user.txt", "a+")) != NULL) {
fprintf(fp, "%s\n", new_login);
fprintf(fp, "%s\n", encryption(new_pass));
fclose(fp);
}
}
void deluser(char* del_login) {
FILE *fp, *f1;
int flag = 0;
char log[9], pas[9];
fp = fopen("user.txt", "a+");
f1 = fopen("user.txt", "a+");
while (!feof(fp)) {
fscanf(fp, "%s\n", &log);
fscanf(fp, "%s\n", &pas);
if ((strcmp(del_login, log) != 0)) {
fprintf(f1, "%s\n", log);
fprintf(f1, "%s\n", pas);
}
}
fclose(fp);
rewind(f1);
fp = fopen("user.txt", "a+");
while (!feof(f1)) {
fscanf(f1, "%s\n", &log);
fscanf(f1, "%s\n", &pas);
fprintf(fp, "%s\n", log);
fprintf(fp, "%s\n", pas);
}
fclose(fp);
fclose(f1);
}
int authorizeuser()
{
FILE *fp;
int i = 0, c, flag = -1;
char login[9], pass[9], log[9], pas[9];
if ((fp = fopen("user.txt", "a+")) != NULL) {
system("cls");
flag = 0;
printf("Введите логин и пароль(1-8 символов)\n");;
scanf("%s", &login);
fscanf(fp, "%s", &log);
while ((c = getch()) != 13)
{
if (c == 8) {
printf("\b \b");
i--;
}
else {
fscanf(fp, "%s", &pas);
printf("*");
pass[i] = c;
i++;
}
pass[i] = '\0';
}
i = 0;
flag = 0;
if ((strcmp(login, log) == 0) && (strcmp(pass, encryption(pas)) == 0))
flag = 1;
}
else printf("Ошибка при открытии файла");
system("cls");
fclose(fp);
return(flag);
}
int menuuser()
{
int n;
do
{
fflush(stdin);
printf("\tМеню 2-ого уровня(обычный пользователь)\n");
printf("1.Открытие файла с данными\n");
printf("2.Просмотр всех данных в табличной форме\n");
printf("3.Поиск и фильтрация данных\n");
printf("4.Выполнение задачи\n");
printf("5.Выход в меню 1-го уровня\n");
scanf("%d", &n);
system("cls");
} while (n < 1 || n>5);
return(n);
}
void workuser() {
SPORTSMAN *onset = NULL, *end = NULL;
int no, flag = 0, flg, label, label1, q = 0;
char surname[50];
FILE *fp;
flg = 0;
do {
label = 0;
flag = authorizeuser();
if (flag == 1) {
do {
label1 = 0;
printf("\n");
no = menuuser();
switch (no)
{
case 1:
if (q == 0) {
if (label == 0) {
if (!(fp = fopen("okp.txt", "r")))
printf("Ошибка при открытии\n");
else {
printf("Файл открыт\n");
read(&onset, &end);
flag = 1;
q++;
}
}
if (!(fp = fopen("okp.txt", "w+")))
printf("Ошибка при открытии\n");
else {
printf("Файл открыт\n");
flag = 1;
q++;
}
label = 1;
}
else printf("Файл уже открыт\n");
break;
case 2:
if (flag == 1) {
if ((onset) == NULL) {
printf("нет информации\n");
break;
}
tabl(onset);
}
else printf("Вы не открыли файл\n");
break;
case 3:
if (flag == 1) {
if ((onset) == NULL) {
printf("нет информации\n");
break;
}
search(onset);
}
else printf("Вы не открыли файл\n");
break;
default:
label1 = 1;
label = 1;
break;
}
} while (label1 == 0);
}
else if (flg == 0) {
do {
printf("Неверный логин или пороль\n");
printf("1.Повторить попытку\n");
printf("2.Вернуться в меню 1-ого рода\n");
scanf("%d", &no);
system("cls");
} while (no<1 || no>2);
switch (no) {
case 1:
break;
default:
label = 1;
break;
}
}
} while (label == 0);
}
int show_menu_a()
{
int n;
do
{
fflush(stdin);
printf("\tМеню 2-ого уровня(администратор)\n");
printf("1.Создание/открытие файла с данными\n");
printf("2.Добавление записи\n");
printf("3.Редактирование записи\n");
printf("4.Удаление записи\n");
printf("5.Просмотр всех данных в табличной форме\n");
printf("6.Управление пользователями\n");
printf("7.Поиск и фильтрация данных\n");
printf("8.Выход в меню 1-ого уровня\n");
scanf("%d", &n);
system("cls");
} while (n<1 || n>8);
return(n);
}
void read(SPORTSMAN **onset, SPORTSMAN **end) {
SPORTSMAN *p, *s;
TEAM *l;
FILE *fp;
int flag;
if (!(fp = fopen("okp.txt", "r")))
return;
while (!feof(fp)) {
s = *end;
flag = 0;
if ((p = new SPORTSMAN) == NULL) {
printf("нетy ОП\n");
return;
}
p->head = NULL;
if ((*end) == NULL) {
fscanf(fp, "%s ", p->Surname_of_the_sportsman);
fscanf(fp, "%s ", p->Name_of_the_sportsman);
fscanf(fp, "%d ", p->age);
fscanf(fp, "%d ", p->weight);
fscanf(fp, "%d ", p->growth);
l = new TEAM;
fscanf(fp, "%s ", &l->Name_of_the_team);
fscanf(fp, "%d ", &l->Average_age);
fscanf(fp, "%d ", &l->Average_growth);
fscanf(fp, "%d ", &l->Average_weight);
fscanf(fp, "%d ", &l->Number_of_sportsmen);
l->next = NULL;
p->head = l;
p->next = NULL;
p->pred = NULL;
(*end) = (*onset) = p;
}
else {
fscanf(fp, "%s ", p->Surname_of_the_sportsman);
fscanf(fp, "%s ", p->Name_of_the_sportsman);
fscanf(fp, "%d ", p->age);
fscanf(fp, "%d ", p->weight);
fscanf(fp, "%d ", p->growth);
l = new TEAM;
fscanf(fp, "%s ", &l->Name_of_the_team);
fscanf(fp, "%d ", &l->Average_age);
fscanf(fp, "%d ", &l->Average_growth);
fscanf(fp, "%d ", &l->Average_weight);
fscanf(fp, "%d ", &l->Number_of_sportsmen);
l->next = p->head;
p->head = l;
p->pred = *end;
p->next = NULL;
(*end)->next = p;
*end = p;
}
}
system("cls");
fclose(fp);
return;
}
void write(SPORTSMAN *onset) {
SPORTSMAN *p = onset;
int count;
TEAM *l;
FILE *fp;
if (!(fp = fopen("okp.txt", "w+"))) {
printf("Ошибка при открытии\n");
return;
}
while (p) {
fprintf(fp, "%s ", p->Surname_of_the_sportsman);
fprintf(fp, "%s ", p->Name_of_the_sportsman);
fprintf(fp, "%d ", p->age);
fprintf(fp, "%d ", p->growth);
fprintf(fp, "%d", p->weight);
count = 0;
l = p->head;
while (l) {
fprintf(fp, "%-18s ", l->Name_of_the_team);
fprintf(fp, "%-18d ", l->Average_age);
fprintf(fp, "%-18d ", l->Average_growth);
fprintf(fp, "%-18d ", l->Average_weight);
fprintf(fp, "%-18d ", l->Number_of_sportsmen);
l = l->next;
}
p = p->next;
}
fclose(fp);
return;
}
char* encryption(char* str)
{
char c;
for (int i = 0; i<strlen(str); ++i) {
c = *(str + i);
if ((int)c % 2 == 0) {
str[i] += 7;
}
else {
str[i] -= 7;
}
}
return str;
}
void addsportsman(SPORTSMAN **onset, SPORTSMAN **end) {
SPORTSMAN *p, *s = *end;
TEAM *l;
int n, flag = 0;
if ((p = new SPORTSMAN) == NULL) {
printf("нет ОП\n");
return;
}
p->head = NULL;
//*end = NULL;
if ((*end) == NULL) {
system("cls");
fflush(stdin);
printf("Введите Фамилию Спортсмена\n");
scanf("%s", p->Surname_of_the_sportsman);
printf("Введите Имя Спортсмена\n");
scanf("%s", p->Name_of_the_sportsman);
printf("Введите возраст спортсмена\n");
scanf("%d", &p->age);
printf("Введите вес спортсмена\n");
scanf("%d", &p->weight);
printf("Введите рост спортсмена\n");
scanf("%d", &p->growth);
l = new TEAM;
l->Average_age = +p->age / 2;
l->Average_growth = +p->growth / 2;
l->Average_weight = +p->weight / 2;
l->Number_of_sportsmen++;
printf("Введите название команды\n");
scanf("%s", &l->Name_of_the_team);
l->next = NULL;
p->head = l;
p->next = NULL;
p->pred = NULL;
(*end) = (*onset) = p;
}
else {
printf("Введите фамилию спортсмена\n");
scanf("%s", p->Surname_of_the_sportsman);
while (s && (flag == 0)) {
if (!strcmp(p->Surname_of_the_sportsman, s->Surname_of_the_sportsman))
{
flag = 1;
printf("Такой спортсмен уже существует, хотите добавить однофамильца (1.ДА/2.НЕТ)\n");
do
scanf("%d", &n);
while (n<0 || n>2);
if (n == 1) {
printf("Введите Фамилию Спортсмена\n");
scanf("%s", p->Surname_of_the_sportsman);
printf("Введите Имя Спортсмена\n");
scanf("%s", p->Name_of_the_sportsman);
printf("Введите возраст спортсмена\n");
scanf("%d", &p->age);
printf("Введите вес спортсмена\n");
scanf("%d", &p->weight);
printf("Введите рост спортсмена\n");
scanf("%d", &p->growth);
l = new TEAM;
l->Average_age = +p->age / 2;
l->Average_growth = +p->growth / 2;
l->Average_weight = +p->weight / 2;
l->Number_of_sportsmen++;
printf("Введите название команды\n");
scanf("%s", &l->Name_of_the_team);
l->next = p->head;
p->head = l;
p->pred = *end;
p->next = NULL;
(*end)->next = p;
*end = p;
}
}
s = s->pred;
}
if (flag == 0) {
printf("Введите Фамилию Спортсмена\n");
scanf("%s", p->Surname_of_the_sportsman);
printf("Введите Имя Спортсмена\n");
scanf("%s", p->Name_of_the_sportsman);
printf("Введите возраст спортсмена\n");
scanf("%d", &p->age);
printf("Введите вес спортсмена\n");
scanf("%d", &p->weight);
printf("Введите рост спортсмена\n");
scanf("%d", &p->growth);
l = new TEAM;
l->Average_age = +p->age / 2;
l->Average_growth = +p->growth / 2;
l->Average_weight = +p->weight / 2;
l->Number_of_sportsmen++;
printf("Введите название команды\n");
scanf("%s", &l->Name_of_the_team);
l->next = p->head;
p->head = l;
p->pred = *end;
p->next = NULL;
(*end)->next = p;
*end = p;
}
}
system("cls");
return;
}
void edit(SPORTSMAN **onset, SPORTSMAN **end) {
int choice;
char edsurname[50];
if ((*onset) == NULL) {
printf("нет информации");
return;
}
do {
fflush(stdin);
printf("1.Редактировать фамилию\n");
printf("2.Редактировать данные о команде\n");
printf("3.Выход\n");
scanf("%d", &choice);
} while (choice<0 || choice>3);
switch (choice) {
case 1:
tabl(*onset);
printf("Введите фамилию спортсмена, фамилию которого
Вы хотите отредактировать:\n");
scanf("%s", edsurname);
editsportsman(onset, end, edsurname);
break;
case 2:
tabl(*onset);
printf("Введите название команды, данные которой
Вы хотите редактировать\n");
scanf("%s", edsurname);
editteam(onset, end, edsurname);
break;
default:
system("cls");
return;
}
}
void editsportsman(SPORTSMAN
**onset, SPORTSMAN **end, char* edsurname) {
int id, choice, flag = 0;
struct SPORTSMAN *p;
system("cls");
p = (*end);
while (p != NULL) {
if (!strcmp(p->Surname_of_the_sportsman, edsurname)) {
flag = 1;
system("cls");
printf("%-17s \n", "Фамилия спортсмена");
printf("%-17s \n", p->Surname_of_the_sportsman);
printf("Введите новое значение\n");
scanf("%s", edsurname);
strcpy(p->Surname_of_the_sportsman, edsurname);
break;
}
p = p->pred;
}
if (!flag) {
system("cls");
printf("Нет такого спортсмена\n");
}
}
void editteam(SPORTSMAN **onset, SPORTSMAN **end, char* edsurname) {
int flag = 0;
char name_of_the_team[20], ed_name_of_the_team[20];
SPORTSMAN *p;
TEAM *l;
p = (*end);
while (p != NULL) {
if (!strcmp(p->Surname_of_the_sportsman, edsurname)) {
flag = 1;
system("cls");
printf("%-18s %-18s %-18s %-18s %-18s %-18s\n",
"Название команды", "Количество игроков",
"Средний возраст", "Средний рост", "Средний вес");
l = p->head;
while (l) {
printf("%-18s ", l->Name_of_the_team);
printf("%-18d ", l->Number_of_sportsmen);
printf("%-18d ", l->Average_age);
printf("%-18d ", &l->Average_growth);
printf("%-18d ", &l->Average_weight);
l = l->next;
}
printf("Введите то значение,которое хотите изменить\n");
scanf("%d", &ed_name_of_the_team);
l = p->head;
while (l) {
if (*ed_name_of_the_team == l->Name_of_the_team) {
printf("Введите новое значение\n");
scanf("%s", &name_of_the_team);
l->Name_of_the_team == *name_of_the_team;
system("cls");
break;
}
l = l->next;
}
}
p = p->pred;
}
if (!flag) {
system("cls");
printf("Нет такой команды\n");
}
}
void tabl(SPORTSMAN *onset) {
SPORTSMAN *p = onset;
int count;
TEAM *l;
printf("%s %-18s %-8s %-8s %-18s %-18s %-8s %-8s\n",
"Фамилия спортсмена", "Имя спортсмена", "Возраст", "Рост",
"Вес", "Название команды", "Количество спортсменов",
"Средний возраст", "Средний рост", "Средий вес");
while (p) {
printf("\n%-10s %-10s %-10d %-10d %-10d", &p->Surname_of_the_sportsman, &p->Name_of_the_sportsman, &p->age, &p->growth, &p->weight);
count = 0;
l = p->head;
while (l) {
if (count == 0) {
printf("%-18s %-18s %-18d %-18d %-18d", &l->Name_of_the_team, &l->Number_of_sportsmen, &l->Average_age, &l->Average_growth, &l->Average_weight);
l = l->next;
count++;
}
else {
printf("\n%-18s ", p->Surname_of_the_sportsman);
printf("\n%-18s ", p->Name_of_the_sportsman);
printf("\n%-18d ", &p->age);
printf("\n%-18d ", &p->growth);
printf("\n%-18d ", &p->weight);
printf("%-18s ", l->Name_of_the_team);
printf("%-18d ", &l->Number_of_sportsmen);
printf("%-18d ", &l->Average_age);
printf("%-18d ", &l->Average_growth);
printf("%-18d ", &l->Average_weight);
l = l->next;
}
}
if (count == 0)
printf("\n");
p = p->next;
}
return;
}
void del(SPORTSMAN **onset, SPORTSMAN **end)
{
char delsurname[50];
int flag = 0;
SPORTSMAN *p, *s, *k;
p = (*end);
if ((*onset) == NULL) {
printf("нет информации\n");
return;
}
tabl(*onset);
printf("Введите фамилию спортсмена, данные которого
Вы хотите удалить\n");
scanf("%s", &delsurname);
while (p != NULL) {
if (!strcmp(delsurname, p->Surname_of_the_sportsman)) {
flag = 1;
if (*end == *onset) {
*end = (*end)->pred;
if (*end == NULL)
*onset = NULL;
delete p;
return;
}
if (p == (*end)) {
p = (*end)->pred;
delete *end;
p->next = NULL;
(*end) = p;
return;
}
if (p == (*onset)) {
k = (*onset);
(*onset) = (*onset)->next;
delete k;
(*onset)->pred = NULL;
return;
}
if (p != (*end) && p != (*onset)) {
k = p->pred;
s->pred = k;
k->next = p->next;
delete p;
return;
}
}
s = p;
p = p->pred;
}
if (flag == 0)
printf("Нет такого\n");
}
void search(SPORTSMAN *onset) {
int choice, count;
char team[50];
char surname[50];
SPORTSMAN *p;
TEAM *l;
if (onset == NULL) {
printf("нет информации\n");
return;
}
do {
fflush(stdin);
printf("1.Поиск по названию команды\n");
printf("2.Поиск по фамилии спорсмена\n");
printf("3.Меню фильтрации\n");
printf("4.Выход\n");
scanf("%d", &choice);
} while (choice < 0 || choice>4);
switch (choice) {
case 1:
printf("Введите название команды\n");
scanf("%s", &team);
searchbyteam(onset, team);
break;
case 2:
printf("Введите фамилию спортсмена\n");
scanf("%s", &surname);
searchsurname(onset, surname);
break;
case 3:do {
system("cls");
fflush(stdin);
printf("1. Фильтрация по фамилии спортсмена:\n");
printf("2. Фильтрация по имени спортсмена:\n");
printf("3. Фильтрация по названию команды:\n");
printf("4. Выход\n");
scanf("%d", &choice);
} while (choice < 0 || choice>4);
switch (choice) {
case 1:
filtr_surname(onset);
break;
case 2:
filtr_name(onset);
break;
case 3:
filtr_team(onset);
break;
default:
system("cls");
return;
}
default:
system("cls");
return;
}
}
void searchbyteam(SPORTSMAN *onset, char* team) {
int count, flag = 0;
struct SPORTSMAN *p;
TEAM *l;
p = onset;
system("cls");
char q;
char *qw;
while (p != NULL) {
l = p->head;
q = l->Name_of_the_team;
qw = (char*)malloc(sizeof(q));
qw[0] = q;
while (l) {
if (strstr(qw, team) == false) {
flag++;
if (flag == 1)
printf("%-18s %-18s %-13s %-12s %-13s %-15s %-25s %-25s\n",
"Фамилия спортсмена", "Имя спортсмена", "Возраст", "Рост",
"Вес", "Название команды", "Количество спортсменов",
"Средний возраст", "Средний рост", "Средий вес");
printf("\n%-18s ", p->Surname_of_the_sportsman);
printf("\n%-18s ", p->Name_of_the_sportsman);
printf("\n%-18d ", p->age);
printf("\n%-18d ", p->growth);
printf("\n%-18d ", p->weight);
count = 0;
l = p->head;
while (l) {
if (count == 0) {
printf("%-18s ", l->Name_of_the_team);
printf("%-18d ", l->Number_of_sportsmen);
printf("%-18d ", l->Average_age);
printf("%-18d ", l->Average_growth);
printf("%-18d ", l->Average_weight);
count++;
}
l = l->next;
}
}
p = p->next;
}
if (flag == 0) {
system("cls");
printf("Нет такого спортсмена \n");
}
}
}
void searchsurname(SPORTSMAN *onset, char* surname) {
int count, flag = 0;
struct SPORTSMAN *p;
TEAM *l;
p = onset;
system("cls");
while (p != NULL) {
if (strstr(p->Surname_of_the_sportsman, surname)) {
flag++;
if (flag == 1)
printf("%-18s %-18s %-13s %-12s %-13s %-15s %-25s %-18s %-18s %-18s\n",
"Фамилия спортсмена", "Имя спортсмена", "Возраст", "Рост",
"Вес", "Название команды", "Количество спортсменов",
"Средний возраст", "Средний рост", "Средий вес");
printf("\n%-18s ", p->Surname_of_the_sportsman);
printf("\n%-18s ", p->Name_of_the_sportsman);
printf("\n%-18d ", p->age);
printf("\n%-18d ", p->growth);
printf("\n%-18d ", p->weight);
count = 0;
l = p->head;
while (l) {
if (count == 0) {
printf("%-18s ", l->Name_of_the_team);
printf("%-18d ", l->Number_of_sportsmen);
printf("%-18d ", l->Average_age);
printf("%-18d ", l->Average_growth);
printf("%-18d ", l->Average_weight);
count++;
}
l = l->next;
}
}
p = p->next;
}
if (flag == 0) {
system("cls");
printf("Нет такого водителя \n");
}
}
void filtr_surname(SPORTSMAN *onset) {
int flag = 0, count, r = 0;
struct SPORTSMAN *p;
TEAM *l;
char filsurname2, filsurname, filsurname1;
p...
Подобные документы
Анализ технических средств и современных технологий разработки программного обеспечения. Разработка программы для упрощения поиска студентов. Создание учетных записей администратора и обычного пользователя. Изучение правил построения программного кода.
курсовая работа [1,9 M], добавлен 30.09.2016Создание сайта-каталога программного обеспечения с поиском на основе булевой модели. Достоинства и недостатки булевой модели. Алгоритм поиска по слову в базе данных системы. Разработка руководства пользователя и администратора по работе с системой.
курсовая работа [1,0 M], добавлен 28.04.2014Обоснование необходимости систем управления базами данных на предприятиях. Особенности разработки программного обеспечения по управлению базой данных, обеспечивающего просмотр, редактирование, вставку записей базы данных, формирование запросов и отчетов.
курсовая работа [1,5 M], добавлен 23.01.2010Табличный процессор - прикладное программное обеспечение для обработки данных, представимых в табличной форме. Параметры форматирования ячейки, автоформат. Создание и использование стилей, мастер функций. Экономические расчеты средствами MS Excel.
контрольная работа [1,2 M], добавлен 13.05.2012История развития принтера - устройства для печати изображений либо текста на бумаге, его виды и принцип работы. Основные параметры струйного и лазерного принтера. Области администрирования, создание учётных записей пользователя, их блокировка и удаление.
дипломная работа [516,0 K], добавлен 03.11.2014Разработка информационного и программного обеспечения предметной области, связанной с учетом прихода и расхода канцелярских товаров. Инфологическая и датологическая модель данных. Разработка интерфейса и инструкции для администратора и пользователя.
курсовая работа [1,8 M], добавлен 14.02.2010Проектирование системы управления базами данных. Особенности реализации в MS SQL. Разработка пользовательского интерфейса. Тестирование и отладка приложения. Руководство пользователя и системного администратора. Анализ и методы разработки приложений.
курсовая работа [867,9 K], добавлен 16.07.2013Проектирование логической схемы данных для предметной области, физической модели базы данных. Разработка алгоритмов функциональных модулей программного приложения. Принципы тестирования спроектированного программного обеспечения, анализ эффективности.
курсовая работа [926,7 K], добавлен 20.05.2015Разработка базы данных для спортивной школы с целью ведения учета, контроля и получения информации о нужном студенте. Создание диалогового окна входа в приложение. Составление схемы и структуры базы данных. Разработка пользовательского интерфейса.
курсовая работа [3,4 M], добавлен 08.09.2015Разработка стратегии и выбор способа автоматизации задачи снабжения для предприятия. Построение функциональной модели бизнес-процессов предметной области. Создание программного средства "1С: Конфигурация ОМТС" для оптимального решения задач снабжения.
дипломная работа [7,2 M], добавлен 12.04.2012- Разработка информационной системы предприятия с помощью системы управления базами данных Access 2007
Проектирование структуры базы данных предприятия с помощью СУБД Access. Установка связей между таблицами и ввод в них данных. Создание форм к базе данных, фильтрация запросов, просмотр отчетов. Получение комплексного отчета после группировки и сортировки.
лабораторная работа [787,7 K], добавлен 22.11.2014 Анализ предметной области, главных функций организации. Разработка макета внутренней структуры программного обеспечения информационной системы в виде диаграммы классов. Составление схемы базы данных. Разработка интерфейса и руководства пользователя.
курсовая работа [866,3 K], добавлен 02.06.2015Основные понятия и определение теории баз данных. Обоснование выбора программного обеспечения. Разработка таблиц и схемы БД. Использование запросов. Создание отчетов и форм. Руководство пользователя. Рекомендации по дальнейшей модернизации системы.
курсовая работа [2,1 M], добавлен 04.06.2014Обзор пакетов программ, предназначенных для визуализации и анализа данных. Обоснование выбора среды программирования. Организация аварийного буфера. Передача данных от нижнего уровня к верхнему и сохранение данных. Отображение данных в графической форме.
дипломная работа [512,4 K], добавлен 28.08.2012Чем отличается программист от системного администратора. Преимущества и выгоды от работы системного администратора. Подготовка и сохранение резервных копий данных, их периодическая проверка и уничтожение. Конфигурирование нового программного обеспечения.
реферат [23,4 K], добавлен 11.03.2014Построение банков данных. Инструментальные средства баз данных Borland. Принцип работы и архитектура баз данных в Delphi. Навигационный способ доступа к базам данных: операции с таблицей, сортировка и перемещение по набору данных, фильтрация записей.
курсовая работа [642,7 K], добавлен 06.02.2014Классификация служебных программных средств. Файловая структура операционных систем. Основы графического интерфейса пользователя Windows XX. Анализ алгоритмов решения задач. Описание процесса разработки программного обеспечения и результатов работы.
курсовая работа [2,4 M], добавлен 14.11.2016Проектирование программного обеспечения для создания баз данных о работах студентов университета при помощи языка Visual Basic. Разработка интерфейса пользователя. Руководство для системного программиста. Краткое описание алгоритма работы с программой.
курсовая работа [2,6 M], добавлен 19.03.2010Разработка программного обеспечения, предназначенного для автоматизации деятельности туристической фирмы. Анализ и проектирование базы данных предметной области. Создание концептуальной, логической и физической моделей данных и программы их обработки.
курсовая работа [816,5 K], добавлен 05.02.2018Практические аспекты использования прикладного программного обеспечения при разработке базы данных "Аудиторный фонд ГБОУ СПО "Старооскольский педагогический колледж". Системы управления базами данных. Описание и функциональные возможности приложения.
курсовая работа [360,4 K], добавлен 07.10.2014