Расчётно-графическая работа на тему "Адвокатская контора" - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

Расчётно-графическая работа на тему "Адвокатская контора"

 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

ВВЕДЕНИЕ

Цель расчётно-графической работы – закрепления и углубление знаний, полученных студентами при изучении дисциплины, а также получение практических навыков разработки программы с использованием современных технологий и инструментальных средств.

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

В качестве языка программирования используется C/C++.

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

1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ «АДВОКАТСКАЯ КОНТОРА»

В рамках данного раздела необходимо провести анализ предметной области «Адвокатская контора».

Адвокат – лицо, профессией которого является оказание квалифицированной юридической помощи физическим лицам и юридическим лицам, в том числе защита их прав и представление интересов в суде [1].

Адвокатская контора – это частное некоммерческое учреждение. Адвокатская контора может быть создана только адвокатом, состоящим в коллегии адвокатов.

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

Деятельность адвокатской конторы регулируется законодательством РК (Законы «О некоммерческих организациях» и «Адвокатская деятельность») и внутренним уставом организации. Деятельность адвокатской конторы осуществляется на основании Устава или Учредительного договора [2].

Созданная программа будет упрощать запись клиентов на приём. Приём будет длиться примерно час, поэтому при записи важно учесть, что, к примеру, нельзя записаться к одному и тому же адвокату через полчаса после приёма предыдущего. Так же стоит учесть, что адвокаты будут принимать с 8 утра до 6 вечера.

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

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

2 СОСТАВЛЕНИЕ ТЕХНИЧЕСКОГО ЗАДАНИЯ

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

«Адвокатская контора»

СОДЕРЖАНИЕ

1. Наименование и область применения

 

2. Основание для разработки

 

3. Назначение разработки

 

4. Технические требования

 

4.1. Требования к функциональным характеристикам

 

4.2. Требования к надежности

 

4.3. Условия эксплуатации

 

4.4. Требования к составу и параметрам технических средств

 

4.5. Требования к информационной и программной совместимости

 

4.6. Специальные требования

 

5. Технико-экономические показатели

 

6. Стадии и этапы разработки

 

7. Порядок контроля и приёмки

 

1 НАИМЕНОВАНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ

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

2 ОСНОВАНИЕ ДЛЯ РАЗРАБОТКИ

Основанием для разработки является задание расчётно-графической работы по дисциплине «Технология программирования».

3 НАЗНАЧЕНИЕ РАЗРАБОТКИ

Назначение программного продукта: запись на приём к адвокату, рассмотрение и приём заявок клиентов адвокатами.

Подпись Заказчика и Исполнителя на настоящем документе подтверждает их согласие с нижеследующими фактами и условиями:

3.1. При реализации необходимо выполнить работы в объёме, указанном в настоящем Техническом Задании.

3.2. Все неоднозначности, выявленные в настоящем Техническом Задании после его подписания, подлежат двухстороннему согласованию между Сторонами.

4 ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ

4.1. Требования к функциональным характеристикам

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

Программа должна иметь окно для входа для адвокатов, где у каждого адвоката будет логин и пароль, выданные администратором. После успешного входа, должны появиться функции адвоката: просмотр заявок и удаление. Для администратора также будут доступны: добавление адвоката, изменение информации об адвокате, удаление адвоката.

4.2. Требования к надежности

Надежное функционирование программы должно быть обеспечено выполнением совокупности организационно-технических мероприятий, перечень которых приведен ниже:

Организацией бесперебойного питания технических средств;

Выполнением рекомендаций Министерства труда и социального развития РФ, изложенных в Постановлении от 23 июля 1998 г. «Об утверждении межотраслевых типовых норм времени на работы по сервисному обслуживанию ПЭВМ и оргтехники и сопровождению программных средств»;

Выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов.

4.3. Условия эксплуатации

Программа должная быть рассчитана на непрофессионального пользователя.

4.4. Требования к составу и параметрам технических средств

Необходимо наличие ПК – совместимого ПК с частотой не менее 500МГц, графическим адаптером VGA. Необходимое свободное дисковое пространство – не менее 20 Гб, объем свободной оперативной памяти - не менее 2 Гб.

4.5. Требования к информационной и программной совместимости

Программа должна работать автономно под управлением ОС Windows версии не ниже XP. Базовый язык программирования – С++.

4.6 Специальные требования

Программа должна иметь простой интерфейс с некоторой структурой:

4.6.1. Начальное меню.

4.6.1.1. Войти.

4.6.1.2.1. Список заявок.

4.6.1.2.2. Удалить заявку.

4.6.1.2.3. Добавить адвоката (если администратор).

4.6.1.2.4. Изменение адвоката (если администратор).

4.6.1.2.5. Удалить адвоката (если администратор).

4.6.1.2.6. Выйти.

4.6.1.3. Записаться на приём.

4.6.1.4. Выйти из программы.

5 ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ

Ориентировочная экономическая эффективность не рассчитываются. Предполагаемое число использования программы в год – 365 сеансов работы на одном рабочем месте.

6 СТАДИИ И ЭТАПЫ РАЗРАБОТКИ

Таблица 1 – Этапы разработки

Содержание

Сроки

Исполнители

Отчёт

Готовая программа

2 Недели

 

Демонстрация приложения

7 ПОРЯДОК КОНТРОЛЯ И ПРИЁМКИ

Исполнитель должен предоставить следующий комплект поставки при сдаче проекта:

7.1. Исходный код программы;

7.2. Исполняемые модули программы.

3 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА

Исходное описание

Системы: Адвокатская контора

Схема Оглавление

Номер: 0.0

Оглавление альбома

документов и условные обозначения

Лист: 1

Автор: Иванов Ю.О.

Дата: 17.12.2018

Обозначение

Наименование

Лист

Примечание

0.0

Оглавление альбома документации и условные обозначения

1

 

0.1

Схема состава разложения

2

 

1.1

Автоматизировать рассмотрение заявок и запись на приём

3

 

2.4

Автоматизировать работу администратора

4

 

2.5

Автоматизировать работу адвокатов

5

 

Исходное описание

Системы: Адвокатская контора

Схема Состава Разложения

Номер: 0.1

Схема

состава разложения

Лист: 2

Автор: Иванов Ю.О.

Дата: 17.12.2018

Рисунок 1 - Схема состава разложения

Исходное описание

Системы: Адвокатская контора

Номер: 1.1

Автоматизировать рассмотрение заявок и запись на приём

Лист: 3

Автор: Иванов Ю.О.

Дата: 17.12.2018

Вход

Обработка

Выход

 

Автоматизировать обработку данных

2.1

Выбрать режим работы

Если режим = 1 то

Реализовать удобную навигацию в программе

2.2

Иначе

Если режим = 2 то

Автоматизировать запись на приём

2.3

Иначе

Если режим = 3 то

Автоматизировать работу администратора

2.4

 

Иначе

Если режим = 4 то

Автоматизировать работу адвокатов 2.5

2.1. Автоматизировать обработку данных. При запуске программы, необходимо считать все данные из двух файлов: AD, LS – в которых находится информация об адвокатах и заявках на приём соответственно. В случае их отсутствия необходимо их создать. После чтения информации из LS, требуется автоматически проверить и удалить заявки, время которых истекло.

f – указатель на поток, который используется для проверки существования файлов и дальнейшего чтения из них информации.

Все считанные данные из файлов AD и LS заносятся в вектора a и b соответственно.

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

2.3. Автоматизировать запись на приём. При записи на приём необходимо учитывать, проверять и обрабатывать введённую пользователем информацию.

temp – переменная структуры LS. В ней будет храниться и обрабатываться введённая информация, в случае записи на приём, эта переменная будет копироваться в вектор заявок и записываться в файл.

c – переменная, которая запоминает код нажатой клавиши. Нужна для того, чтобы обрабатывать выбор пользователя.

y – переменная, которая хранит индекс выбора пользователя. Нужна для того, чтобы обрабатывать выбор пользователя.

n – переменная, которая хранит число. Нужна для того, чтобы посчитать количество доступных юристов.

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

На выходе получается заполненная переменная temp и пользователю предоставляется выбор, либо записаться, либо вернуться на ветку назад.

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

bool reads(char *s, int x) – функция считывания символов. В качестве аргументов используется указатель на строку и переменную, которая означает длину вводимой строки, соответственно. Возвращаемое значение – булева переменная, которая при истинном значении означает, что ввод строки прерван, иначе, что информация введена.

bool readn(unsigned *s, int x) – функция считывания числа. В качестве аргументов используется указатель на число, и переменную, которая означает длину вводимого числа, соответственно. Возвращаемое значение – булева переменная, которая при истинном значении означает, что ввод строки прерван, иначе, что информация введена.

bool readp(char *s, int x) – функция считывания цифр. В качестве аргументов используется указатель на строку и переменную, которая означает длину вводимой строки, соответственно. Ввод будет продолжаться до тех пор, пока не будет введено x количество цифр. Возвращаемое значение – булева переменная, которая при истинном значении означает, что ввод строки прерван, иначе, что информация введена.

bool readt(char *s, int x) – функция считывания цифр при определённой маске ввода. В качестве аргументов используется указатель на строку и переменную, которая означает длину вводимой строки, соответственно. Ввод будет продолжаться до тех пор, пока не будет введено x количество цифр или пока следующий символ равен «_». Маска ввода произвольного вида, до x длины. Возвращаемое значение – булева переменная, которая при истинном значении означает, что ввод строки прерван, иначе, что информация введена.

Исходное описание: Адвокатская контора

Номер: 2.4

Автоматизировать работу администратора

Лист: 4

Автор: Иванов Ю.О.

Дата: 17.12.2018

Вход

Обработка

Выход

 

Регистрация адвоката

3.1

 
 

Изменение информации об адвокате

3.2

 
 

Удаление адвоката

3.3

 

3.1. Регистрация адвоката. Попадая в данную ветку, запрашивается информация о регистрируемом адвокате. Также эту операцию можно прервать, нажав определённую клавишу.

temp – переменная структуры AD. В ней будет храниться и обрабатываться введённая информация, в случае регистрации адвоката, эта переменная будет копироваться в вектор списка адвокатов и записываться в файл.

c – переменная, которая запоминает код нажатой клавиши. Нужна для того, чтобы обрабатывать выбор пользователя.

y – переменная, которая хранит индекс выбора пользователя. Нужна для того, чтобы обрабатывать выбор пользователя.

3.2. Изменение информации об адвокате. Попадая в данную ветку, администратору предлагается выбрать адвоката, информацию о котором надо изменить. После выбора предлагается ввести обновлённую информацию, в случае, если информацию менять не нужно, можно пропустить шаг, нажав определённую клавишу.

temp – переменная структуры AD. В ней будет храниться и обрабатываться введённая информация, в случае изменения информации об адвокате, эта переменная будет заменять выбранный элемент в векторе списка адвокатов и обновлять данные в файле.

c – переменная, которая запоминает код нажатой клавиши. Нужна для того, чтобы обрабатывать выбор пользователя.

y – переменная, которая хранит индекс выбора пользователя. Нужна для того, чтобы обрабатывать выбор пользователя.

3.3. Удаление адвоката. Попадая в данную ветку, администратору предлагается выбрать, какого адвоката удалить. В случае удаления всех адвокатов, будет выводиться соответствующая надпись.

c – переменная, которая запоминает код нажатой клавиши. Нужна для того, чтобы обрабатывать выбор пользователя.

y – переменная, которая хранит индекс выбора пользователя. Нужна для того, чтобы обрабатывать выбор пользователя.

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

Исходное описание: Адвокатская контора

Номер: 2.5

Автоматизировать работу адвоката

Лист: 5

Автор: Иванов Ю.О.

Дата: 17.12.2018

Вход

Обработка

Выход

 

Просмотр заявок

3.1

 
 

Удаление заявок

3.2

 

3.1. Просмотр заявок. Попадая в данную ветку, выводятся все заявки, соответствующие обязанностям адвоката, в случае если в систему зашёл администратор, то выводятся все заявки. Нажатие клавиши возвращает на ветку назад. Если заявок по критерию поиска нет, то выводится соответствующее сообщение.

n – переменная, которая хранит число. Требуется для подсчёта количества доступных заявок, удовлетворяющих критериям поиска.

3.2. Удаление заявок. Попадая в данную ветку, адвокату предлагается удалить рассмотренные или уже принятые заявки. Для более удобного просмотра списка, информация будет выводиться частично.

c – переменная, которая запоминает код нажатой клавиши. Нужна для того, чтобы обрабатывать выбор пользователя.

y – переменная, которая хранит индекс выбора пользователя. Нужна для того, чтобы обрабатывать выбор пользователя.

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

4 РЕАЛИЗАЦИЯ ПРОГРАММЫ

Файл main.cpp

#include <stdio.h>

#include <windows.h>

#include <vector>

#include <locale.h>

#include <conio.h>

#include <time.h>

#define g(x,y) SetConsoleCursorPosition(h,{x,y})

#define VK_UP 0x48

#define VK_DOWN 0x50

#define VK_LEFT 0x4B

#define VK_RIGHT 0x4D

#define ADMIN {{0xC8,0xE2,0xE0,0xED,0xEE,0xE2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0xDE,0xF0,0xE8,0xE9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0xCE,0xEB,0xE5,0xE3,0xEE,0xE2,0xE8,0xF7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0x61,0x64,0x6D,0x69,0x6E,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0x61,0x64,0x6D,0x69,0x6E,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},0,0x7FFFFFFF}

using namespace std;

const HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

struct AD { char f[32]; char i[32]; char o[32]; char l[32]; char p[32]; unsigned c; unsigned j; };

struct LS { char d[64]; char f[32]; char i[32]; char o[32]; char l[32]; char t[17]; char p[11]; unsigned j; };

vector<AD> a; vector<LS> b;

int admin = -1, user = -1;

void menu(unsigned type);

bool reads(char *s, int x);

bool readn(unsigned *s, int x);

bool readp(char *s, int x);

bool readt(char *s, int x);

int main(){ setlocale(0, ""); a.push_back(ADMIN); if (GetFileAttributes(L"AD") == (DWORD)-1) { FILE *f = fopen("AD", "wb"); if (f != 0) { fclose(f); } else return 1; } if (GetFileAttributes(L"LS") == (DWORD)-1) { FILE *f = fopen("LS", "wb"); if (f != 0) { fclose(f); } else return 1; } FILE *f = fopen("AD", "rb"); if (f != 0){ AD temp = { 0 }; while (1) { fread(&temp, sizeof(AD), 1, f); if (feof(f)) break; a.push_back(temp); } fclose(f); f = fopen("LS", "rb"); if (f != 0){ LS temp = { 0 }; while (1) { fread(&temp, sizeof(LS), 1, f); if (feof(f)) break; b.push_back(temp); } fclose(f); tm t = { 0 }; for (unsigned i = 0; i < b.size(); ++i) { sscanf(b[i].t, "%4d.%2d.%2d %2d:%2d", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min); t.tm_year -= 1900; --t.tm_mon; if (mktime(&t) - time(0) + 3599 < 0) { b.erase(b.begin() + i); } } FILE *f = fopen("LS", "wb"); if (f != 0) { for (unsigned i = 0; i < b.size(); ++i) fwrite(&b[i], sizeof(LS), 1, f); fclose(f); } menu(0); } else return 1; } else return 1; return 0; } void menu(unsigned type){ char c = 0; unsigned y = 0; switch (type){ case 0x0:{ system("cls"); printf("\n%31c{ Начальное меню }\n\n%28c| Войти |\n\n%28c| Записаться на приём |\n\n%28c| Выйти из программы |\n",0,0,0,0); g(28, 3); putchar('>'); g(51, 3); putchar('<'); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(28, 3 + 2 * y); putchar('|'); g(51, 3 + 2 * y); putchar('|'); --y; g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_DOWN && y < 2) { g(28, 3 + 2 * y); putchar('|'); g(51, 3 + 2 * y); putchar('|'); ++y; g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_RIGHT || c == VK_RETURN) { switch (y){ case 0: { menu(0x1); break; } case 1: { menu(0x2); break; } case 2: { return; } } system("cls"); printf("\n%31c{ Начальное меню }\n\n%28c| Войти |\n\n%28c| Записаться на приём |\n\n%28c| Выйти из программы |\n", 0, 0, 0, 0); g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_LEFT || c == VK_ESCAPE) return; } break; } case 0x1:{ system("cls"); printf("\n%32c{ Залогиниться }\n\nЛогин :\nПароль:\n\n%25c| Войти | | Назад |", 0, 0); char l[32] = { 0 }, p[32] = { 0 }; g(8, 3); if (reads(l, sizeof(l))) return; g(8, 4); if (reads(p, sizeof(p))) return; g(25, 6); putchar('>'); g(33, 6); putchar('<'); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_LEFT && y > 0) { g(25 + 21 * y, 6); putchar('|'); g(33 + 21 * y, 6); putchar('|'); --y; g(25 + 21 * y, 6); putchar('>'); g(33 + 21 * y, 6); putchar('<'); } if (c == VK_RIGHT && y < 1) { g(25 + 21 * y, 6); putchar('|'); g(33 + 21 * y, 6); putchar('|'); ++y; g(25 + 21 * y, 6); putchar('>'); g(33 + 21 * y, 6); putchar('<'); } if (c == VK_RETURN) { switch (y){ case 0: { unsigned i; for (i = 0; i < a.size(); ++i){ if (!strcmp(l, a[i].l) && !strcmp(p, a[i].p) && a[i].j == 0x7FFFFFFF) { admin = i; user = i; break; } else if (!strcmp(l, a[i].l) && !strcmp(p, a[i].p)) { user = i; break; } } if (i == a.size()) { g(26, 8); printf("Неверный логин и/или пароль!"); system("pause > nul"); return; } menu(0x11); admin = -1; user = -1; return; } case 1: { return; } } } if (c == VK_ESCAPE) return; } break; } case 0x11: { char ps[73] = {0}; strcat(ps, "{ Добро пожаловать, "); strncat(ps, a[user].i, 28); strcat(ps, " "); strncat(ps, a[user].o, 28); strcat(ps, "! }"); system("cls"); printf("\n"); for (int i = 0; i < 40 - strlen(ps) / 2; ++i) putchar(0x00); printf("%s\n\n%28c| Список заявок |\n\n%28c| Удалить заявку |\n\n", ps, 0, 0); if (admin != -1) printf("%28c| Добавить адвоката |\n\n%28c| Изменить адвоката |\n\n%28c| Удалить адвоката |\n\n", 0, 0, 0); printf("%28c| Выйти |", 0); g(28, 3); putchar('>'); g(51, 3); putchar('<'); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(28, 3 + 2 * y); putchar('|'); g(51, 3 + 2 * y); putchar('|'); --y; g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_DOWN && (y < (admin == -1 ? 2 : 5))) { g(28, 3 + 2 * y); putchar('|'); g(51, 3 + 2 * y); putchar('|'); ++y; g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_RIGHT || c == VK_RETURN) { switch (y){ case 0: { menu(0x111); break; } case 1: { menu(0x112); break; } case 2: { if (admin == -1) return; menu(0x113); break; } case 3: { menu(0x114); break; } case 4: { menu(0x115); break; } case 5: { return; } } system("cls"); printf("\n"); for (int i = 0; i < 40 - strlen(ps) / 2; ++i) putchar(0x00); printf("%s\n\n%28c| Список заявок |\n\n%28c| Удалить заявку |\n\n", ps, 0, 0); if (admin != -1) printf("%28c| Добавить адвоката |\n\n%28c| Изменить адвоката |\n\n%28c| Удалить адвоката |\n\n", 0, 0, 0); printf("%28c| Выйти |", 0); g(28, 3 + 2 * y); putchar('>'); g(51, 3 + 2 * y); putchar('<'); } if (c == VK_ESCAPE) return; } break; } case 0x111:{ system("cls"); printf("\n%31c{ Список заявок }\n\n", 0); unsigned n = 0; if (!b.empty()) for (unsigned i = 0; i < b.size(); ++i){ if ((admin == -1) ? (!strcmp(a[user].l, b[i].l)) : 1){ printf("Фамилия : %s\nИмя : %s\nОтчество : %s\nПаспорт : %s\n", b[i].f, b[i].i, b[i].o, b[i].p); if (admin != -1) printf("Тип : %s\n", b[i].j == 0 ? "Финансовый" : b[i].j == 1 ? "Защита прав" : b[i].j == 2 ? "Консультация" : "Общий"); printf("Время : %s\nПрочая инфа : %s\n\n--------------------------------------------------------------------------------\n", b[i].t, b[i].d); ++n; } } if (n == 0) { g(30, 3); printf("Нетдоступныхзаявок"); } system("pause > nul"); break; } case 0x112:{ system("cls"); printf("\n%31c{ Удалить заявку }\n\n %-31s%-31s%16s", 0, "Имя", "Отчество", "Время"); unsigned n = 0; if (!b.empty()) { unsigned *in = (unsigned*)calloc(b.size(), sizeof(unsigned)); for (unsigned i = 0; i < b.size(); ++i) if ((admin == -1) ? (!strcmp(a[user].l, b[i].l)) : 1) { printf(" %-31s%-31s%16s", b[i].i, b[i].o, b[i].t); in[n++]=i; } if (n != 0){ g(0, 4); putchar('>'); while (1) { c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(0, 4 + y); putchar(' '); --y; g(0, 4 + y); putchar('>'); } if (c == VK_DOWN && y < n - 1) { g(0, 4 + y); putchar(' '); ++y; g(0, 4 + y); putchar('>'); } if (c == VK_RETURN) { b.erase(b.begin() + in[y]); system("cls"); printf("\n%31c{ Удалить заявку }\n\n %-31s%-31s%16s", 0, "Фамилия", "Отчество", "Время"); if (--n == 0) break; n = 0; for (unsigned i = 0; i < b.size(); ++i) if ((admin == -1) ? (!strcmp(a[user].l, b[i].l)) : 1) { printf(" %-31s%-31s%16s", b[i].i, b[i].o, b[i].t); in[n++] = i; } if (y > 0) --y; g(0, 4 + y); putchar('>'); } if (c == VK_LEFT || c == VK_ESCAPE) { break; } free(in); } } FILE *f = fopen("LS", "wb"); if (f != 0) { for (unsigned i = 0; i < b.size(); ++i) fwrite(&b[i], sizeof(LS), 1, f); fclose(f); } if (n == 0) { g(30, 5); printf("Нет доступных заявок"); system("pause > nul"); } break; } case 0x113:{ system("cls"); printf("\n%28c{ Добавление адвоката }\n\nФамилия :\nИмя :\nОтчество :\nТип : 1. Финансовый;\n%15c 2. Защитаправ;\n%15c 3. Консультация.\nЦена :\n\nЛогин :\nПароль :", 0, 0, 0); AD temp = { 0 }; g(15, 3); if (reads(temp.f, sizeof(temp.f))) return; g(15, 4); if (reads(temp.i, sizeof(temp.i))) return; g(15, 5); if (reads(temp.o, sizeof(temp.o))) return; g(15, 6); putchar('>'); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(15, 6 + y); putchar(' '); --y; g(15, 6 + y); putchar('>'); } if (c == VK_DOWN && y < 2) { g(15, 6 + y); putchar(' '); ++y; g(15, 6 + y); putchar('>'); } if (c == VK_RETURN || c == VK_RIGHT) { temp.j = y; break; } if (c == VK_ESCAPE) return; } g(15, 9); if (readn(&temp.c, 7)) return; unsigned i; do { g(15, 11); if (reads(temp.l, sizeof(temp.l))) return; for (i = 0; i < a.size(); ++i) if (!strcmp(temp.l, a[i].l)) break; if (i != a.size()) { g(26, 13); printf("Введитедругойлогин/пароль."); g(15, 11); printf("%31c",0); } } while (i != a.size()); g(26, 13); printf("%28c", 0); do { g(15, 12); if (reads(temp.p, sizeof(temp.p))) return; for (i = 0; i < a.size(); ++i) if (!strcmp(temp.p, a[i].p)) break; if (i != a.size()) { g(26, 13); printf("Введитедругойлогин/пароль."); g(15, 11); printf("%31c", 0); } } while (i != a.size()); g(26, 13); printf("%28c", 0); g(19, 14); printf("> Добавить < | Назад |"); g(20, 14); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_LEFT && y > 0) { g(19 + 26 * y, 14); putchar('|'); g(34 + 26 * y, 14); putchar('|'); --y; g(19 + 26 * y, 14); putchar('>'); g(34 + 26 * y, 14); putchar('<'); } if (c == VK_RIGHT && y < 1) { g(19 + 26 * y, 14); putchar('|'); g(34 + 26 * y, 14); putchar('|'); ++y; g(19 + 26 * y, 14); putchar('>'); g(34 + 26 * y, 14); putchar('<'); } if (c == VK_RETURN) { switch (y){ case 0: { a.push_back(temp); FILE *f = fopen("AD","ab"); if (f != 0) { fwrite(&temp, sizeof(AD), 1, f); fclose(f); } return; } case 1: { return; } } } if (c == VK_ESCAPE) return; } break; } case 0x114:{ system("cls"); printf("\n%29c{ Изменениеадвоката }\n\n %-31s%-31sДолжность\n", 0, "Имя", "Отчество"); unsigned i; AD temp = { 0 }; if (a.size() != 1) { for (i = 1; i < a.size(); ++i) printf(" %-31s%-31s%s\n", a[i].i, a[i].o, a[i].j == 0 ? "Финансовый" : a[i].j == 1 ? "Защитаправ" : a[i].j == 2 ? "Консультация" : "Общий"); g(0, 4); putchar('>'); while (1) { c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(0, 4 + y); putchar(' '); --y; g(0, 4 + y); putchar('>'); } if (c == VK_DOWN && y < a.size() - 2) { g(0, 4 + y); putchar(' '); ++y; g(0, 4 + y); putchar('>'); } if (c == VK_RETURN) { ++y; system("cls"); printf("\n%29c{ Изменениеадвоката }\n\nФамилия : %s\nИмя : %s\nОтчество : %s\nОбязанность : %s\nЦена : %d\n\nЛогин : %s\nПароль : %s\n\n--------------------------------------------------------------------------------\nФамилия :\nИмя :\nОтчество :\nТип : 1. Финансовый;\n%15c 2. Защита прав;\n%15c 3. Консультация.\n%15c 4. Сохранить прежнее значение.\nЦена :\n\nЛогин :\nПароль :", 0, a[y].f, a[y].i, a[y].o, a[i].j == 0 ? "Финансовый" : a[i].j == 1 ? "Защитаправ" : a[i].j == 2 ? "Консультация" : "Общий", a[y].c, a[y].l, a[y].p, 0, 0, 0); memcpy(&temp, &a[y], sizeof(AD)); g(15, 14); ZeroMemory(&temp.f, sizeof(temp.f)); if (!reads(temp.f, sizeof(temp.f))) memcpy(&a[y].f, &temp.f, sizeof(temp.f)); else { g(15, 14); printf(a[y].f); } g(15, 15); ZeroMemory(&temp.i, sizeof(temp.i)); if (!reads(temp.i, sizeof(temp.i))) memcpy(&a[y].i, &temp.i, sizeof(temp.i)); else { g(15, 15); printf(a[y].i); } g(15, 16); ZeroMemory(&temp.o, sizeof(temp.o)); if (!reads(temp.o, sizeof(temp.o))) memcpy(&a[y].o, &temp.o, sizeof(temp.o)); else { g(15, 16); printf(a[y].o); } g(15, 17); putchar('>'); unsigned yy = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && yy > 0) { g(15, 17 + yy); putchar(' '); --yy; g(15, 17 + yy); putchar('>'); } if (c == VK_DOWN && yy < 3) { g(15, 17 + yy); putchar(' '); ++yy; g(15, 17 + yy); putchar('>'); } if (c == VK_RETURN || c == VK_RIGHT) { if (yy != 3) a[y].j = yy; break; } if (c == VK_ESCAPE) break; } g(15, 21); if (!readn(&temp.c, 7)) a[y].c = temp.c; else { g(15, 21); printf("%d", a[y].c); } do { g(15, 23); ZeroMemory(&temp.l, sizeof(temp.l)); if (!reads(temp.l, sizeof(temp.l))) { for (i = 0; i < b.size(); ++i) if (!strcmp(b[i].l, a[y].l)) memcpy(&b[y].l, &temp.l, sizeof(temp.l)); memcpy(&a[y].l, &temp.l, sizeof(temp.l)); } else { g(15, 23); printf(a[y].l); } for (i = 0; i < a.size(); ++i) if (!strcmp(temp.l, a[i].l)) break; if (i != a.size()) { g(26, 26); printf("Введите другой логин/пароль."); g(15, 23); printf("%31c", 0); } } while (i = a.size());g(26, 26); printf("%28c", 0); do { g(15, 24); ZeroMemory(&temp.p, sizeof(temp.p)); if (!reads(temp.p, sizeof(temp.p))) { memcpy(&a[y].p, &temp.p, sizeof(temp.p)); } else { g(15, 24); printf(a[y].p); } for (i = 0; i < a.size(); ++i) if (!strcmp(temp.p, a[i].p)) break; if (i != a.size()) { g(26, 26); printf("Введите другой логин/пароль."); g(15, 24); printf("%31c", 0); } } while (i != a.size()); g(26, 26); printf("%28c", 0); FILE *f = fopen("AD", "r+b"); if (f != 0) { fseek(f, sizeof(AD) * (y - 1), 0); fwrite(&a[y], sizeof(AD), 1, f); fclose(f); } g(20, 26); printf("Нажмитеклавишу, чтобывернутьсяназад.."); system("pause > nul"); --y; system("cls"); printf("\n%29c{ Изменениеадвоката }\n\n %-31s%-31sДолжность\n", 0, "Имя", "Отчество"); for (i = 1; i < a.size(); ++i) printf(" %-31s%-31s%s\n", a[i].i, a[i].o, a[i].j == 0 ? "Финансовый" : a[i].j == 1 ? "Защитаправ" : a[i].j == 2 ? "Консультация" : "Общий"); g(0, 4 + y); putchar('>'); } if (c == VK_LEFT || c == VK_ESCAPE) { return; } } } else { g(28, 5); printf("Нет доступных адвокатов."); system("pause > nul"); } break; } case 0x115:{ system("cls"); printf("\n%29c{ Удаление адвоката }\n\n %-31s%-31sДолжность\n", 0, "Имя", "Отчество"); unsigned i; if (a.size() != 1) { for (i = 1; i < a.size(); ++i) printf(" %-31s%-31s%s\n", a[i].i, a[i].o, a[i].j == 0 ? "Финансовый" : a[i].j == 1 ? "Защитаправ" : a[i].j == 2 ? "Консультация" : "Общий"); g(0, 4); putchar('>'); while (1) { c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(0, 4 + y); putchar(' '); --y; g(0, 4 + y); putchar('>'); } if (c == VK_DOWN && y < a.size() - 2) { g(0, 4 + y); putchar(' '); ++y; g(0, 4 + y); putchar('>'); } if (c == VK_RETURN) { a.erase(a.begin() + y + 1); system("cls"); printf("\n%29c{ Удаление адвоката }\n\n %-31s%-31sДолжность\n", 0, "Имя", "Отчество"); if (a.size() == 1) break; for (i = 1; i < a.size(); ++i) printf(" %-31s%-31s%s\n", a[i].i, a[i].o, a[i].j == 0 ? "Финансовый" : a[i].j == 1 ? "Защитаправ" : a[i].j == 2 ? "Консультация" : "Общий"); if (y > 0) --y; g(0, 4 + y); putchar('>'); } if (c == VK_LEFT || c == VK_ESCAPE) { return; } } } FILE *f = fopen("AD", "wb"); if (f != 0) { for (i = 1; i < a.size(); ++i) fwrite(&a[i], sizeof(AD), 1, f); fclose(f); } if (a.size() == 1) { g(28, 5); printf("Нет доступных адвокатов."); system("pause > nul"); } break; } case 0x2: { system("cls"); printf("\n%28c{ Записаться на приём }\n\nФамилия :\nИмя :\nОтчество :\nПаспорт :", 0); LS temp = { 0 }; g(15, 3); if (reads(temp.f, sizeof(temp.f))) return; g(15, 4); if (reads(temp.i, sizeof(temp.i))) return; g(15, 5); if (reads(temp.o, sizeof(temp.o))) return; g(15, 6); if (readp(temp.p, sizeof(temp.p))) return; g(0, 7); y = 0; printf("Тип : > 1. Финансовый;\n%15c 2. Защитаправ;\n%15c 3. Консультация.",0,0); while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(15, 7 + y); putchar(' '); --y; g(15, 7 + y); putchar('>'); } if (c == VK_DOWN && y < 2) { g(15, 7 + y); putchar(' '); ++y; g(15, 7 + y); putchar('>'); } if (c == VK_RETURN || c == VK_RIGHT) { temp.j = y; break; } if (c == VK_ESCAPE) return; } unsigned i = 0, n = 0, yy = 0; for (i = 1; i < a.size(); ++i) if (a[i].j == temp.j) ++n; if (n == 0) { g(29, 11); printf("Нетдоступныхюристов."); system("pause > nul"); return; } char f[20] = { 0 }; unsigned *in = (unsigned*)calloc(n, sizeof(unsigned)); g(0, 11); printf("Выборюриста : >"); for (i = 1, n = 0; i < a.size(); ++i) if (a[i].j == temp.j) { g(17, 11 + n); strncpy(f, a[i].i, sizeof(f) - 1); printf("%2d. %19s %-31s %-7i", n, f, a[i].o, a[i].c); in[n++] = i; } g(16, 11); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_UP && y > 0) { g(15, 11 + y); putchar(' '); --y; g(15, 11 + y); putchar('>'); } if (c == VK_DOWN && y < n - 1) { g(15, 11 + y); putchar(' '); ++y; g(15, 11 + y); putchar('>'); } if (c == VK_RETURN || c == VK_RIGHT) { yy = in[y]; strncpy(temp.l, a[yy].l, sizeof(temp.l)); free(in); break; } if (c == VK_ESCAPE) return; } n += 11; g(0, n); printf("Время : ____.__.__ __:__"); tm t = { 0 }, tb = { 0 }; do { g(15, n); strcpy(temp.t, "____.__.__ __:__"); if (readt(temp.t, sizeof(temp.t))) return; sscanf(temp.t, "%4d.%2d.%2d %2d:%2d", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min); t.tm_year -= 1900; --t.tm_mon; if (mktime(&t) > time(0) && t.tm_mon <= 11 && t.tm_mday > 0 && t.tm_mday <= 31 && t.tm_hour >= 8 && t.tm_hour <= 17 && t.tm_min <= 59) { if (!b.empty()){ for (i = 0; i < b.size(); ++i){ sscanf(b[i].t, "%4d.%2d.%2d %2d:%2d", &tb.tm_year, &tb.tm_mon, &tb.tm_mday, &tb.tm_hour, &tb.tm_min); tb.tm_year -= 1900; --tb.tm_mon; if (mktime(&t) - mktime(&tb) - 3599 < 0 && !strcmp(b[i].l, a[yy].l)) break; } if (i != b.size()) { ZeroMemory(&t, sizeof(tm)); ZeroMemory(&tb, sizeof(tm)); g(15, n); printf("____.__.__ __:__"); g(27, n + 2); printf("Некорректновведеновремя."); continue; } } break; } else { ZeroMemory(&t, sizeof(tm)); ZeroMemory(&tb, sizeof(tm)); g(15, n); printf("____.__.__ __:__"); g(27, n + 2); printf("Некорректно введено время."); } } while (1); ++n; g(27, n + 1); printf("%26c",0); g(0, n); printf("Прочаяинфа : "); g(15, n); if (reads(temp.d, sizeof(temp.d))) return; n+=2; g(19, n); printf("> Записаться < | Назад |"); g(20, n); y = 0; while (1){ c = _getch(); if (c == -32) c = _getch(); if (c == VK_LEFT && y > 0) { g(19 + 26 * y, n); putchar('|'); g(34 + 26 * y, n); putchar('|'); --y; g(19 + 26 * y, n); putchar('>'); g(34 + 26 * y, n); putchar('<'); } if (c == VK_RIGHT && y < 1) { g(19 + 26 * y, n); putchar('|'); g(34 + 26 * y, n); putchar('|'); ++y; g(19 + 26 * y, n); putchar('>'); g(34 + 26 * y, n); putchar('<'); } if (c == VK_RETURN) { switch (y){ case 0: { b.push_back(temp); FILE *f = fopen("LS","ab"); if (f != 0){ fwrite(&temp, sizeof(LS), 1, f); fclose(f); } return; } case 1: { return; } } } if (c == VK_ESCAPE) return; } break; } } }

bool reads(char *s, int x){ char c = 0, i = 0; while (1) { c = _getch(); if (c == -32) c = _getch(); if (c != 0x08 && c != 0x0D && i >= x - 1) continue; if (c == 0x0D && i != 0) return 0; if (c >= -128 && c < -80) c += 64; else if (c >= -32 && c <= -17) c += 16; else if (c == -15) c = -72; else if (c == -16) c = -88; if (c == 0x1B) return 1; else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= ' ' && c <= '9' || c >= 'А' && c <= 'я' || c == 'ё' || c == 'Ё') { putchar(c); s[i++] = c; } else if (c == 0x08 && i > 0) { putchar(0x08); putchar(0x00); putchar(0x08); s[--i] = 0; } } return 1; }

bool readp(char *s, int x){ char c = 0, i = 0; while (1) { c = _getch(); if (c == -32) c = _getch(); if (c != 0x08 && c != 0x0D && i >= x - 1) continue; if (c == 0x0D && i == x - 1) return 0; else if (c == 0x1B) return 1; else if (c >= '0' && c <= '9') { putchar(c); s[i++] = c; } else if (c == 0x08 && i > 0) { putchar(0x08); putchar(0x00); putchar(0x08); s[--i] = 0; } } return 1; }

bool readn(unsigned *s, int x){ char c = 0, i = 0; char *str = (char*)calloc(x + 1, sizeof(char)); while (1) { c = _getch(); if (c == -32) c = _getch(); if (c != 0x08 && c != 0x0D && i >= x) continue; if (c == 0x0D && i > 0) { sscanf(str, "%d", s); free(str); return 0; } else if (c == 0x1B) { free(str); return 1; } else if (c >= '0' && c <= '9') { putchar(c); str[i++] = c; } else if (c == 0x08 && i > 0) { putchar(0x08); putchar(0x00); putchar(0x08); str[--i] = 0; } } free(str); return 1; }

bool readt(char *s, int x){ char c = 0, i = 0; while (1) { c = _getch(); if (c == -32) c = _getch(); if (c != 0x08 && c != 0x0D && i >= x - 1) continue; if (c == 0x0D && i == x - 1) return 0; else if (c == 0x1B) return 1; else if (c >= '0' && c <= '9') { putchar(c); s[i++] = c; if (s[i] != '_') { if (i == 16) continue; putchar(s[i]); ++i; } } else if (c == 0x08 && i > 0) { putchar(0x08); if (s[i - 1] != '.' && s[i - 1] != ':' && s[i - 1] != ' ') { putchar('_'); putchar(0x08); s[--i] = '_'; } else { --i; putchar(0x08); putchar('_'); putchar(0x08); s[--i] = '_'; } } } return 1; }

5 СОСТАВЛЕНИЕ ПРОГРАММНОЙ ДОКУМЕНТАЦИИ

УТВЕРЖДАЮ

Начальник тех. отдела

__________ Хххххххх Х. Х.

“___”____________2018

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Спецификация

A.B.00001-01 01-ЛУ

Руководитель разработки

Начальник ХХХХ

___________Хххххххх Х.Х.

“_____”_____________2018

2018

УТВЕРЖДЕНО

А.В.00001-01 01-ЛУ

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Спецификация

A.B.00001-01 01

Листов 3

2018

Обозначение

Наименование

Примечание

     
 

Документация

 
     

А.В.00001-01 01-ЛУ

Программа адвокатская контора

 
 

Спецификация

 
 

Лист утверждения

 
     

А.В.00001-01 12 01

Программа адвокатская контора

 
 

Текст программы

 
     

А.В.00001-01 12 01-ЛУ

Программа адвокатская контора

 
 

Текст программы

 
 

Лист утверждения

 
     

А.В.00001-01 13 01

Программа адвокатская контора

 
 

Описание программы

 
     

А.В.00001-01 13 01-ЛУ

Программа адвокатская контора

 
 

Описание программы

 
 

Лист утверждения

 
     

А.В.00001-01 14 01

Программа адвокатская контора

 
 

Руководство пользователя

 
     

А.В.00001-01 14 01-ЛУ

Программа адвокатская контора

 
 

Руководство пользователя

 
 

Лист утверждения

 
     

А.В.00001-01 15 01

Программа адвокатская контора

 
 

Руководство администратора

 
     

А.В.00001-01 15 01-ЛУ

Программа адвокатская контора

 
 

Руководство администратора

 
 

Лист утверждения

 

Лист регистрации изменений

Номера листов (страниц)

Всего листов (страниц) в документе

№ документа

Входящий № сопрово дительного документа и дата

Подп.

Дата

Изм.

изменённых

заменённых

новых

аннулированных

                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

УТВЕРЖДАЮ

Начальник тех. отдела

__________ Хххххххх Х. Х.

“___”____________2018

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Текст программы

A.B.00001-01 12-ЛУ

Руководитель разработки

Начальник ХХХХ

___________Хххххххх Х.Х.

“_____”_____________2018

2018

УТВЕРЖДЕНО

А.В.00001-01 12-ЛУ

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Текст программы

A.B.00001-01 12

Листов 13

2018

ТЕКСТ ПРОГРАММЫ

Раздел 4

УТВЕРЖДАЮ

Начальник тех. отдела

__________ Хххххххх Х. Х.

“___”____________2018

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Описание программы

A.B.00001-01 13-ЛУ

Руководитель разработки

Начальник ХХХХ

___________Хххххххх Х.Х.

“_____”_____________2018

2018

УТВЕРЖДЕНО

А.В.00001-01 13-ЛУ

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Описание программы

A.B.00001-01 13

Листов 9

2018

ОПИСАНИЕ ПРОГРАММЫ

Раздел 3.

УТВЕРЖДАЮ

Начальник тех. отдела

__________ Хххххххх Х. Х.

“___”____________2018

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Руководство пользователя

A.B.00001-01 14-ЛУ

Руководитель разработки

Начальник ХХХХ

___________Хххххххх Х.Х.

“_____”_____________2018

2018

УТВЕРЖДЕНО

А.В.00001-01 14-ЛУ

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Руководство пользователя

A.B.00001-01 14

Листов 3

2018

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

1 НАЗНАЧЕНИЕ РАЗРАБОТКИ

Назначение программного продукта: запись на приём к адвокату, рассмотрение и приём заявок клиентов адвокатами.

2 УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

Необходимо наличие ПК – совместимого ПК с частотой не менее 500МГц, графическим адаптером VGA. Необходимое свободное дисковое пространство – не менее 20 Гб, объем свободной оперативной памяти - не менее 2 Гб.

3 ВЫПОЛНЕНИЕ ПРОГРАММЫ

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

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

Основные функции программы для пользователей:

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

2. Просмотр заявок – отправляет на ветку просмотра заявок. Список заявок выводится в соответствии с обязанностями адвоката в полной форме.

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

4. Выйти – выход из аккаунта и возвращение на ветку назад.

5. Записаться на приём – отправляет на ветку записи на приём. Эта функция доступна всем. В данной ветке предлагается ввести информацию для записи на приём. В конце предлагается подтвердить запись на приём.

6. Выйти из программы – закрытие программы.

УТВЕРЖДАЮ

Начальник тех. отдела

__________ Хххххххх Х. Х.

“___”____________2018

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Руководство администратора

A.B.00001-01 15-ЛУ

Руководитель разработки

Начальник ХХХХ

___________Хххххххх Х.Х.

“_____”_____________2018

2018

УТВЕРЖДЕНО

А.В.00001-01 15-ЛУ

ПРОГРАММА АДВОКАТСКАЯ КОНТОРА

Руководство администратора

A.B.00001-01 15

Листов 3

2018

РУКОВОДСТВО АДМИНИСТРАТОРА

1 НАЗНАЧЕНИЕ РАЗРАБОТКИ

Назначение программного продукта: запись на приём к адвокату, рассмотрение и приём заявок клиентов адвокатами.

2 УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

Необходимо наличие ПК – совместимого ПК с частотой не менее 500МГц, графическим адаптером VGA. Необходимое свободное дисковое пространство – не менее 20 Гб, объем свободной оперативной памяти - не менее 2 Гб.

3 ВЫПОЛНЕНИЕ ПРОГРАММЫ

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

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

Основные функции программы для администратора:

1. Войти – отправляет на ветку входа в личный кабинет. Там требуется сначала ввести логин, потом пароль. При вводе неверного логина и/или пароля, выведется соответствующее сообщение и после нажатия любой клавиши, пользователь будет возвращён на ветку назад. При вводе верного логина и пароля, пользователь будет направлен на ветку личного кабинета, откуда будут доступны некоторые функции. Чтобы были доступны функции администратора, необходимо ввести логин и пароль администратора.

2. Просмотр заявок – отправляет на ветку просмотра заявок. Список заявок выводится в полной форме.

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

4. Регистрация адвоката – отправляет на ветку регистрации адвоката. С приёмом и регистрацией нового адвоката, следует зарегистрировать адвоката в программе. Для этого необходимо ввести данные адвоката и выдать ему логин и пароль для входа в личный кабинет. В конце предлагается подтвердить регистрацию нового адвоката.

5. Изменение информации об адвокате – отправляет на ветку выбора адвоката, которому необходимо исправить или изменить информацию. После выбора предлагается ввести информацию об адвокате, если некоторое поле изменять не надо, то необходимо нажать клавишу Esc, предыдущая информация сохранится и курсор будет передвинут в следующее поле.

6. Удаление адвоката – отправляет на ветку удаления адвоката, если оный уволен или его аккаунт больше не нужен.

7. Выйти – выход из аккаунта и возвращение на ветку назад.

8. Записаться на приём – отправляет на ветку записи на приём. Эта функция доступна всем. В данной ветке предлагается ввести информацию для записи на приём. В конце предлагается подтвердить запись на приём.

9. Выйти из программы – закрытие программы.

6 ТЕСТИРОВАНИЕ

N

Тестируемая функция

Входные данные

Выходные данные

Комментарий

1

Войти

adminaaaaaaaaaaaa, adminaaaaaaaa, 0

Сообщение об ошибке ввода

Неуспешно

2

Войти

adminaaaaaaaaaaa, adminaaaa, 1

Возвращение на ветку назад

Неуспешно

3

Список

заявок

0

Вывод всего списка

Неуспешно

4

Удалить

заявку

0, 0, 1

Успешное удаление элементов под индексами 0, 1

Неуспешно

5

Добавить

адвоката

123, 123, 123, 2, 123, admin4, admin4, 0

Успешное добавление элемента в конец

Неуспешно

6

Изменение информации об адвокате

0, 6, VK_ESCAPE, Вася, VK_ESCAPE, 3, VK_ESCAPE VK_ESCAPE, 123454

Успешное изменение информации об адвокате

Неуспешно

7

Выйти

0

Возвращение назад

Неуспешно

8

Записаться на приём

123, 123, 123, 1234567890, 1, 1, 201812210700

Сообщение об ошибке введённых данных

Неуспешно

9

Записаться на приём

123, 123, 123, 1234567890, 1, 1, 201812210800, 1, 123, 0

Успешное добавление заявки

Неуспешно

7 ОПИСАНИЕ ПРОЦЕССА ВНЕДРЕНИЯ ПРОГРАММЫ

Этап

Процесс

Описание

1

Обследование компании

 

2

Составление контракта на производство работ

 

3

Создание группы по внедрению ПО

Назначение ответственных за внедрение

4

Инсталляция и наладка ПО

Установка ПО

5

Завершение внедрения и проведение дополнительных работ

Выдача логинов и паролей и обучение адвокатов работе с новым ПО

ЗАКЛЮЧЕНИЕ

Как и другие традиционные инженерные дисциплины, разработка программного обеспечения имеет дело с проблемами качества, стоимости и надёжности. Некоторые программы содержат миллионы строк исходного кода, которые, как ожидается, должны правильно исполняться в изменяющихся условиях. Сложность ПО сравнима со сложностью наиболее сложных из современных машин, таких как самолёты [3].

В данной курсовой работе реализован программный продукт на языке C/C++ с помощью знаний, полученных в ходе учебной деятельности. В ходе работы был рассмотрен весь жизненный цикл программного продукта:

1. Формирование требований – проанализирована предметная область.

2. Техническое задание – в рамках предметной области составлено техническое задание.

3. Проектирование программного продукта – составлено описание программного продукта.

4. Реализация проектных решений (программирование) - реализован программный продукт.

5. Составление программной документации – составлена документация на реализованный программный продукт.

6. Тестирование – произведён набор тестов основного функционала программы.

7. Ввод в действие – программный продукт был внедрён в предприятие в соответствии с разработанным планом.

8. Сопровождение программного продукта – произведено послегарантийное обслуживание.

9. Смерть программного продукта.

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

1. Адвокат. // URL: https://ru.wikipedia.org/wiki/%D0%90%D0%B4%D0%B2%D0%BE%D0%BA%D0%B0%D1%82

2. Адвокатская контора. // URL: https://prav.kz/blog/grpravo/advokatskaya-kontora.

3. Разработка программного обеспечения. // URL: https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F

Просмотров работы: 301