Разработка приложения, начисляющего стипендию студентам
Министерство
образования Республики Беларусь
БЕЛОРУСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Инженерно-экономический
факультет
Кафедра
экономической информатики
Курсовая
работа
на
тему: «Разработка приложения начисляющего стипендию студентам»
Студент Кунцевич А.А.
Руководитель Мытник Н.П.
МИНСК
2015
СОДЕРЖАНИЕ
Задание
Введение
. Краткие теоретические сведения об используемых
алгоритмах
. Описание организации структур хранимых данных
. Создание пользовательских функций приложения
. Схемы алгоритмов работы приложения
. Описание программы
Заключение
Список использованных источников
ЗАДАНИЕ ПО КУРСОВОЙ РАБОТЕ
. Разработать функциональную схему
задачи, а также схемы двух модулей по указанию руководителя.
. Создать программу (консольный режим),
выполнив функциональное разбиение, реализующую следующие функции работы с
бинарным/текстовым файлом. Предусмотреть создание меню 1-го уровня со
следующими пунктами:. Вход под администратором
b. Вход под пользователем
c. Выход
Учетные записи администратора и обычного
пользователя должна содержать логин и пароль. Сведения об учетных записях
должны храниться в отдельном файле, желательно предусмотреть механизм
шифрования/дешифрования логинов/паролей.
. Меню 2-го уровня:
- Для
администратора:) Создание/открытие
файла с данными) Добавление записи) Редактирование записи) Удаление
записи) Просмотр всех данных в табличной форме) Различные
процедуры поиска и фильтрации данных) Управление пользователями) Выход
в меню 1-го уровня
Для
обычного пользователя:) Открытие файла с данными) Просмотр всех
данных в табличной форме) Выполнение задачи) Различные процедуры поиска и
фильтрации данных) Выход в меню 1-го уровня
. Данные
должны быть организованы в структуре (struct), не менее
7-ми полей, обязательно предусмотреть использование вложенных структур.
. Предусмотреть
обработку исключительных ситуаций
. Построение
программного кода должно соответствовать правилам, определенным в документе
«CodeConventions» для соответствующего языка (технологии).
. Предусмотреть
использование различных встроенных функций для работы со строками
ВВЕДЕНИЕ
В настоящее время почти во всех отраслях
человеческой деятельности использование компьютеров все более расширяется. На
фоне постоянно растущих цен стоимость вычислительной техники драматически
падает благодаря значительным успехам как в разработке аппаратной части, так и
в развитии программного обеспечения. В настоящее время в мире насчитывается
приблизительно 150 миллионов компьютеров общего назначения, которые помогают
людям в бизнесе, промышленности, политике и в повседневной жизни. Через
несколько лет это число вполне может быть удвоено.
Данная программа была написана на языке
программирования Си с использованием компилятора MicrosoftVisualStudio
2008.
Основные достоинства языка Си:
.Лаконичность записи алгоритмов
.Экономичность в расходовании памяти
.Возможность низкоуровневого программирования
.Логическая стройность написанных на нем
программ
.Переносимость программ между компьютерами с
разной архитектурой и различными операционными средами.
Цель данной курсовой работы: помочь
пользователю, в нашем случае бухгалтеру, упростить поиск студентов, заранее
зная, какой он имеет средний балл, с какого факультета, специальности, группы и
курса обучения.
Данная работа, выполняемая вручную, является
довольно долгой и монотонной, также могут быть допущены ошибки в вычислениях.
С помощью компьютера данная работа была
автоматизирована. Основные принципы автоматизации это надёжность, гибкость и
безопасность. Надёжность обеспечивается за счёт решения задач в короткий срок.
Это достигается при помощи надёжных технических средств, современных технологий
разработки программного обеспечения.
Гибкость подразумевает лёгкую адаптацию системы
ко всем изменениям требований к ней.
Безопасность работы подразумевает защиту данных
от несанкционированного доступа, а также от различных потерь данных и т.п.
Данная программа легко справляется с
поставленной задачей. Программа в автоматическом режиме подсчитывает суммы,
дружественный интерфейс облегчает работу с программой. Таким образом в
полуавтоматическом режиме можно ускорить выполнение данной работы, что весьма
удобно. Также необходимым условием выполнения данной работы являлось разделение
привелегий для различных пользователей. Так, к примеру, ко всему функционалу
программы должен быть доступ только у одного пользователя, а у остальных -
частичный доступ.
. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ ОБ ИСПОЛЬЗУЕМЫХ
АЛГОРИТМАХ
Алгоритм - набор инструкций
<#"897689.files/image001.gif">
Рисунок 1 - Структуры хранимых данных
В курсовой работе использованы вложенные
структуры. Полем структурной переменной может быть переменная любого типа, в
том числе другая структурная переменная. Поле, представляющее собой структуру,
называется вложенной структурой.
Так же курсовая работа написана через
односвязные списки.
В односвязном списке каждый элемент информации
содержит ссылку на следующий элемент списка. Каждый элемент данных обычно
представляет собой структуру, которая состоит из информационных полей и
указателя связи.
Существует два основных способа построения
односвязного списка. Первый способ - помещать новые элементы в конец списка.
Второй - вставлять элементы в определенные позиции списка, например, в порядке
возрастания. От способа построения списка зависит алгоритм функции добавления
элемента. Давайте начнем с более простого способа создания списка путем
помещения элементов в конец.
Как правило, элементы связанного списка являются
структурами, так как, помимо данных, они содержат ссылку на следующий элемент.
Поэтому необходимо определить структуру, которая будет использоваться в
последующих примерах.
. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ ПРИЛОЖЕНИЯ
Функциядобавления информации в файл
Функция, реализованная для администратора,
которая запрашивает ввод с клавиатуры данных, после чего записывает их в файл.
Но для начала функция выполняет проверку на открытие файла, и если файл не
открыт, то функция возвращает нас в меню второго уровня.
void add()
{("cls");((fptr=fopen(file_FIO,"r"))==0)("откройте
файл!\n");
{("введите название
факультета\n");(stdin);(ship.faculty);("cls");("введите
название специальности\n");(stdin);(ship.specialty);("cls");("введите
номер группы\n");("%d",
&ship.group);("cls");("введите номер
курса\n");("%d",
&ship.course);("cls");("введите Фио\n");(stdin);(ship.FIO);("cls");("введите
средний балл\n");("%d", &ship.rating);("cls");("введите
сумму\n");("%d", &ship.price);(begin)
{= new list;>str = ship;>next = begin;=
ptr;
}{= new list;>str = ship;>next = NULL;
}("cls");("Запись успешно
добавлена\n");
}();;
}
Функция редактирования информации. Функция,
которая редактирует информацию, путем линейного поиска. С помощью поиска
находим нужную нам информацию, перед этим программа проверяет ее на
существование, после чего программа вызывает меню, в котором при помощи
оператора switch-case реализовано меню редактирования. Функция запрашивает ввод
переменной select. Если select
равен:
. Мы редактируем
название
факультета.
2. Редактируем название специальности.
3. Редактируем номер группы.
. Редактируем ФИО.
. Редактируем средний балл.
. Редактируем сумму стипендии.
После редактированиямы возвращаемся в функцию admin_menu ().
void edit()
{("cls");((fptr=fopen(file_FIO,"r+"))==0)("откройте
файл!\n");
{number;(!begin)("Файл пуст.\n");
{("Введите номер, который вы хотите
изменить:\n");(stdin);("%d",&number);i = 0;= begin;(ptr)
{++;(i == number);= ptr->next;(i == number)("cls");("№
%-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма
bur");("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n", number,
ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating,
ptr->str.price);("Что вы хотите изменить?\n");("1 - название
факультета.\n");("2 - название спаециальности.\n");("3 -
номер группы.\n");("4 - номер курса.\n");("5 - Фамилия.\n");("6
- средний балл.\n");("7 - сумму.\n");("Esc -
выход.\n");select;
{=getch();
} while((select<'1' || select>'7')
&& select!=27);("cls");(select)
{'1':printf("Введите новое название
факультета:\n");(stdin);(ptr->str.faculty);;'2':printf("Введите
новое название
специальности:\n");(stdin);(ptr->str.specialty);;'3':printf("Введите
новый номер
группы:\n");("%d",&ptr->str.group);;'4':printf("Введите
новый номер курса:\n");("%d",&ptr->str.course);;'5':printf("Введите
новую Фамилия:\n");(stdin);(ptr->str.FIO);;'6':printf("Введите
новый средний
балл:\n");("%d",&ptr->str.rating);;'7':printf("Введите
новую сумму:\n");("%d",&ptr->str.price);;27:return;
}("Запись успешно изменена.\n");();;
}("В файле нет записи с таким
номером.\n");
}
}();;
}
Функция удаления информации. Функция, которая
может удалить запрашиваемую запись. С самого начала функция делает проверку на
открытие файла. Потом ищет данные о запрашиваемой информации, выводит их на
экран, затем удаляет данную информацию.
void remove()
{("cls");((fptr=fopen(file_FIO,"r"))==0)("Откройте
файл!\n");
{(1)
{number=0, i=0;end, cur;("Введите номер
записи, которую вы хотите
удалить:\n");(stdin);("%d",&number);= begin;(ptr) {++;(i ==
number);= ptr->next;
}(i == number)
{("№ %-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма
bur");("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n", number,
ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating, ptr->str.price);("Вы
уверены что хотите удалить запись №%d?\n",number);("Enter - да.\nEsc
- нет.\n");select=0;
{=getch();
} while(select!=13 &&
select!=27);(select==27);(select==13)
{* ptr2;= begin;(ptr == begin) {=
begin->next;ptr;
}{(ptr2->next != ptr) {= ptr2->next;
}->next = ptr->next;ptr;
}("\nЗапись успешно удалена.\n(Нажмите
любую клавишу)\n");();;
}
}
{("\nВ файле нет записи с таким
номером.\n");();;
}
}
}();
}
Функция поиска по двум полям,в данном случаи это
поле «Специальность» и «Средний балл».
Функция изначальноделает проверку на открытие
файла,если файл открыт,нас просят ввести название скомой специальности и
среднего балла.
После чего,сравнивая введенные значения с
имеющимися в файле,функция отбирает нужные данные,после того как отбор
закончен,следует вывод запрашиваемой информации на экран в табличной форме.
программный код пользователь студент
void search_spesialty_and_rating()
{i =
0,k=0;("cls");((fptr=fopen(file_FIO,"r"))==0)("Откройте
файл\n");
{("cls");("Введите название
специальности:\n");(stdin);(check.check_specialty);(!begin)("В файле
нет ни одной записи.\n(Для выхода нажмите любую клавишу)\n");
{("cls");("Введите средний
балл:\n");("%d",&check.check_rating);=
begin;("cls");("№
%-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма bur");(ptr)
{++;(!strcmp(ptr->str.specialty,check.check_specialty))
{(ptr->str.rating==check.check_rating)
{("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n",
i, ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating, ptr->str.price);++;
}
}= ptr->next;
}(k==0)
{("Введенных данных нет\n");
}("(Для выхода нажмите любую
клавишу)\n");
}
}();
}
Функция поиска по одному полю,в данном случаи
это поле «Факультет».
В начале деается проверка на открытие файла,если
файл открыт,нас просят ввести название искомого факультета.
Полсе чего, простым линейным поиском ,описанным
ранее,функция ищет введенные данные,сравнивает их с хранящимися в файле и
выводит в табличной форме.
search_faculty()
{i =
0,k=0;("cls");((fptr=fopen(file_FIO,"r"))==0)("Откройте
файл\n");("cls");("Введите название
факультета:\n");(stdin);(check.check_faculty);(!begin)("В файле нет
ни одной записи.\n(Для выхода нажмите любую клавишу)\n");
{= begin;("№ %-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма bur");(ptr)
{++;(!strcmp(ptr->str.faculty,check.check_faculty))
{("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n",
i, ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating, ptr->str.price);++;
}= ptr->next;
}(k==0)
{("Такого название факультетаа
нет\n");
}("(Для продолжения нажмите любую
клавишу)\n");
}
}();
Оставшиеся функции поиска,схожи с выше
описанными.
Воизбежании засорения и загромождения
пояснительной записки,я посчитал правильным не описывать их, повторяясь вновь и
вновь.
Функция main
Листинг программного кода:
main()
{(1251);(1251);choice1, k;
{= 0;("cls");("Выберите из
перечисленного:\n");("1.Администратор\n");("2.Пользователь\n");("Esc
- выход.\n");=getch();
} while((choice1<'1' || choice1>'2')
&&
choice1!=27);(choice1)'1':administrator();;'2':user_menu1();;27:return 0;
}
} while (1);
Блок-схема
Функция поиск по факультету
Листинг программного кода:
void search_faculty()
{i =
0,k=0;("cls");((fptr=fopen(file_FIO,"r"))==0)("Откройте
файл\n");("cls");("Введите название
факультета:\n");(stdin);(check.check_faculty);(!begin)("В файле нет
ни одной записи.\n(Для выхода нажмите любую клавишу)\n");= begin;("№
%-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма bur");(ptr)
{++;(!strcmp(ptr->str.faculty,check.check_faculty))("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n",
i, ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating,
ptr->str.price);++;= ptr->next;(k==0)
{("Такого название факультетаа
нет\n");("(Для продолжения нажмите любую клавишу)\n");
}
}();
}
Блок-схема
Функция поиска по специальности и среднему баллу
Листинг программного
кода:
search_spesialty_and_rating()
{i = 0,k=0;("cls");((fptr=fopen(file_FIO,"r"))==0)("Откройте
файл\n");
{("cls");("Введите
название
специальности:\n");(stdin);(check.check_specialty);(!begin)("В файле
нет ни одной записи.\n(Для выхода нажмите любую клавишу)\n");
{("cls");("Введите
средний балл:\n");("%d",&check.check_rating);=
begin;("cls");("№
%-15s%-20s%-20s%-15s%-15s%-15s%-15s\n","Факультет","Специальность","Группа","Курс","Фамилия","Средний
балл","сумма bur");(ptr)
++;(!strcmp(ptr->str.specialty,check.check_specialty))
{(ptr->str.rating==check.check_rating)
{("%-5d%-17s%-15s%-20d%-15d%-20s%-13d%-13d\n",
i, ptr->str.faculty, ptr->str.specialty, ptr->str.group,
ptr->str.course, ptr->str.FIO, ptr->str.rating,
ptr->str.price);++;= ptr->next;(k==0)("Введенных данных нет\n");
}("(Для выхода нажмите любую
клавишу)\n");();
}
. ОПИСАНИЕ ПРОГРАММЫ
Данная программа начинается с главного меню или
меню первого уровня.
Рисунок 2 - Главное меню
Рассмотрим подробнее возможности администратора.
Если пароль и логин администратора введен верно,
то пользователю представляется меню второго уровня для администратора или меню
всех возможных функций,
которыми может пользоваться администратор.
Рисунок 3 - Меню администратора
Теперь рассмотрим работу каждой из функций
отдельно.
. Создание/открытие файла с данными.
Если мы нажмем ‘1’,
то перед нами появится меню, где нам предложат создать или открыть файл. Если
мы попробуем открыть файл, который еще не создан, то увидим:
Рисунок 4 - Ошибка открытия файла.
При создании файла мы вводим его название, после
чего мы увидим сообщение «Файл создан», при успешном открытии файла мы увидим:
«Файл открыт» (Рисунок 13).
Если файл не открыть, то все далее описанные
функции работать не будут, а будут выдавать ошибку.
После нажатия клавиши ‘Esc’
мы опять окажемся в меню второго уровня для администратора.
. Добавление записи.
Рисунок 5 - Добавление записи
. Редактирование записи.
Перед тем как редактировать запись, нужно
воспользоваться функцией «Просмотр всех данных в табличной форме» и запомнить
номер редактируемой строки, который вы хотите отредактировать.
После того, как вы выбрали запись, возвращаетесь
в меню второго уровня, нажимаете ‘3’, после чего перед
вами появляется окно, где вас просят ввести название игрушки, записи о которой
вы хотите изменить. После чего вы увидете окно, представленное на Рисунке 6.
После введенного номера вбранной записи,перед
нами разворачивается меню:
Рисунок 6 - Вывод еще не измененной записи
Далее вы выбираете, что вы хотите изменить и
нажимаете цифру соответствующего пункта меню. После чего вводите новые данные,
а программа уже без нажатия каких либо кнопок изменяет информацию.
. Удаление записи
Cсамого начала вас
поросят ввести номер записи которую вы хотите удалить. После чего, программа
проверяет на наличие записи , если данные существуют, то мы увидим:
Рисунок 7 - Удаление записи
Далее работ программы зависит от того, какой
пункт меню мы выберем.
Рисунок 8 - Данные в табличной форме
После нажатия ‘Esc’
мы возвращаемся в меню 2-го уровня для администратор.
. Различные процедуры поиска и фильтрации
данных.
Рисунок 9 - Меню поиска и фильтраций
После выбора любого пункта меню мы увидим:
Рисунок 10
Дальше все аналогично.
После нажатия ‘esc’
мы возвращаемся в меню (Рисунок 9)
А сейчас мы рассмотрим все возможности
пользователя.
Вход под пользователем начинается с меню.
Рисунок 11 - Меню для входа пользователя.
Регистрация пользователя может происходить
неоднократно, однако программа проверяет логин при регистрации на его
существование ранее, а именно, зарегистрирован ли уже такой логин.
Если логин и пароль введены правильно, то мы
попадаем в меню пользователя.
Рисунок 12 - Меню пользователя
Рассмотрим каждую функцию отдельно.
. Открытие файла с данными.
Данная функция отличается от функции
администратора лишь тем, что не имеет возможности создавать файл.
Если файла, который мы хотим отрыть. Не существует,
то мы увидим окно, представленное на Рисунке 4.
В обратном случае, мы увидим:
Рисунок 13 - Открытие файла.
. Просмотр всех данных в табличной форме.
Функция аналогичная функции администратора.
Поэтому ее работу можно посмотреть на Рисунке 8.
. Выполнение задачи.
Функция, которая выполняет основную задачу
курсовой работы.
Функция осуществляет поиск и вывод данных на
экран(по ФИО).
Рисунок 14 -Выполнения задачи.
4. Различные процедуры поиска и фильтрации
данных.
Процедуры поиска и фильтрации данных для
пользователя неотличаются от процедур поиска и фильтрации для администратора.
Их работу можно посмотреть на рисунке 9-10.
В данном описании подробно рассмотрена работа
программы, ее некоторые исключительные ошибки и информация, которую следует
прочитать перед началом работы с программой.
ЗАКЛЮЧЕНИЕ
Подводя итог можно сделать вывод о результатах,
достигнутых при написании курсовой работы.
Задача курсовой работы:
. Разработать функциональную схему
задачи, а также схемы двух модулей по указанию руководителя.
. Создать программу (консольный режим),
выполнив функциональное разбиение, реализующую следующие функции работы с
бинарным/текстовым файлом. Предусмотреть создание меню 1-го уровня со
следующими пунктами:. Вход под администратором
b. Вход под пользователем
c. Выход
Учетные записи администратора и обычного
пользователя должна содержать логин и пароль. Сведения об учетных записях
должны храниться в отдельном файле, желательно предусмотреть механизм
шифрования/дешифрования логинов/паролей.
. Меню 2-го уровня:
- Для администратора:) Создание/открытие
файла с данными) Добавление записи) Редактирование записи) Удаление
записи) Просмотр всех данных в табличной форме) Различные процедуры
поиска и фильтрации данных) Управление пользователями) Выход в
меню 1-го уровня
Для обычного пользователя:) Открытие
файла с данными) Просмотр всех данных в табличной форме) Выполнение
задачи) Различные процедуры поиска и фильтрации данных) Выход в меню 1-го
уровня
. Данные должны быть организованы в
структуре (struct), не менее
7-ми полей, обязательно предусмотреть использование вложенных структур.
. Предусмотреть обработку исключительных
ситуаций
. Построение программного кода должно
соответствовать правилам, определенным в документе «CodeConventions» для
соответствующего языка (технологии).
. Предусмотреть использование различных
встроенных функций для работы со строками
Цель: помочь пользователю, в нашем случае
бухгалтеру, упростить поиск студентов, заранее зная, какой он имеет средний
балл,с какого факультета,специальности,группы и курса обучения.
При написании курсовой работы была изучена
специальная литература, включающая книги по программированию, такие как «Язык
программирования С» и «Как программировать на С++». Так же были использованы
интернет - ресурсы: поисковик гугл и база гостов.
В курсовой работе были использованы структуры,
различные алгоритмы поиска, фильтрации , списки, а так же показано умение
работать с файлами.
В программе можно зарегистрировать
неограниченное количество пользователей, однако регистрация администратора
происходит лишь один раз при начальном запуске программы. Администратор имеет
возможность редактировать свою учетную запись.
Логины и пароли администратора и пользователей
хранятся в файлах в зашифрованном виде, причем для администратора и
пользователя применено разное шифрование. Тематика курсовой работы актуальна в
настоящее время, а так же будет пользоваться спросом и в будущем. Так как
каждый год в университеты поступает большое количество людей, а следовательно
остается потребность в начисление стипендии.
Так же важно заметить, что программа, при
внедрении ее в работу предприятия, упростит и ускорит работу персонала.
Делая вывод, можно сказать, что цели и задачи, поставленные
в данной курсовой работе, выполнены и достигнуты.
Но в будущем данную программу можно
усовершенствовать и добавить что-то новое, например, добавить новые данные,
которые так же будут учитываться при поиске нужных данных, а так же больше
возможностей поиска и фильтрации данных.
В завершении надо заметить, что работа,
проделанная при написании курсовой работы, выполнена обдуманно и качественно и
проста для понимания и работы даже самого неумелого пользователя.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Дейтел
Х. Как программировать на С++. / Х. Дейтел, П. Дейтел. - 1005 с.
Доманов
А. Т. Стандарт предприятия. / А. Т. Доманов, Н. И. Сорока. - Минск БГУИР, 2011.
- 169 с.
МакконнеллС.
Совершенный код, 2-е издание. <http://vk.com/doc-66398064_271119421?dl=8c67d82fbaa299c571>
/ С. Макконнелл. - Русская редакция, 2010. - 867 с.
Мелещенко
А. А. Основы программирования на языке С. / А. А. Мелещенко. - Минск, 2004. -
232 с.
Поисковик
Google. Web: https://www.google.ru/
Единая
база гостов. Web:
<http://gostexpert.ru/>