Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya (1).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
290.94 Кб
Скачать

Заключение

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

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

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

Приложение Фрагменты кода программы

Обработчик события нажатия кнопки «Вход» во время аутентификации пользователя:

void CMainDlg::OnBnClickedEnter()

{

str users[2];

users[0].Login="Админ";

users[0].Password="Админ";

users[1].Login="Оператор";

users[1].Password="Оператор";

UpdateData(1);

int c=compare(Login,Password,users);//Определение пользователя

Admin dlg1;

Operator dlg2;

switch(c)

{

case 0:

EndDialog(IDOK);

if(dlg1.DoModal() == -1)

MessageBox(L"Отказ в доступе",L"Ошибка",MB_OK|MB_ICONERROR);

break;

case 1:

EndDialog(IDOK);

if(dlg2.DoModal() == -1)

MessageBox(L"Отказ в доступе",L"Ошибка",MB_OK|MB_ICONERROR);

break;

default:

MessageBox(L"Неправильный логин или пароль",L"Ошибка",MB_OK|MB_ICONERROR);

}

Login="";

Password="";

UpdateData(0);

}

Обработчик события нажатия кнопки «Гость» во время аутентификации пользователя:

void CMainDlg::OnBtnUser()

{

EndDialog(IDC_BUTTON_USER);

User dlg;

if(dlg.DoModal() == -1)

MessageBox(L"Отказ в доступе",L"Ошибка",MB_OK|MB_ICONERROR);

}

Функция инициализация окна «Администратор»

OOL Admin::OnInitDialog()

{

CDialog::OnInitDialog();

//Вставка столбцов а таблицу

LCtrl.InsertColumn(0,L"№ маршрута",LVCFMT_LEFT,80);

LCtrl.InsertColumn(1,L"Пункт отправления",LVCFMT_LEFT,120);

LCtrl.InsertColumn(2,L"Пункт назначения",LVCFMT_LEFT,120);

LCtrl.InsertColumn(3,L"Минуты",LVCFMT_LEFT,70);

LCtrl.InsertColumn(4,L"Секунды",LVCFMT_LEFT,70);

FILE *f;

fopen_s(&f,"Запросы.bin","rb");

if(f!=NULL)

{

lst_char req;

lst rq;

while(feof(f) != fread(&req,sizeof(req),1,f))

{

rq.departure = req.departure;

rq.destination = req.destination;

rq.hour = req.hour;

rq.minute = req.minute;

rq.routeNum = req.routeNum;

vec.push_back(rq);

}

fclose(f);

insert(vec);//Заполнение таблицы

return TRUE;

}

else

{

MessageBox(L"Ошибка при подключении к файлу", L"Ошибка", MB_OK | MB_ICONERROR);

return TRUE;

}

SetIcon(m_hIcon, TRUE);

SetIcon(m_hIcon, FALSE);

}

Функция закрытия окна «Администратор» и созранения данных запросов

void Admin::OnClose()

{

FILE *f,*g,*h;

vector<rts> r;

vector<shift> sh;

fopen_s(&g,"Маршруты.bin","rb");

fopen_s(&h,"Смены.bin","rb");

if(g == NULL)

{

MessageBox(L"Ошибка открытия файла Маршруты. Изменения не были сохранены.", L"Ошибка!", MB_OK | MB_ICONERROR);

CDialog::OnCancel();

}

if(h == NULL)

{

MessageBox(L"Ошибка открытия файла Смены. Изменения не были сохранены.", L"Ошибка!", MB_OK | MB_ICONERROR);

CDialog::OnCancel();

}

rts_char rc;

rts rt;

while(feof(g) != fread(&rc,sizeof(rc),1,g))

{

rt.arTime = rc.arTime;

rt.lvTime = rc.lvTime;

rt.rNum = rc.rNum;

rt.station = rc.station;

r.push_back(rt);

}

fclose(g);

shift_char sch;

shift sf;

while(feof(h) != fread(&sch,sizeof(sch),1,h))

{

sf.begs = sch.begs;

sf.driver = sch.driver;

sf.ends = sch.ends;

sf.kond = sch.kond;

sf.rNum = sch.rNum;

sh.push_back(sf);

}

fclose(h);

synch(vec,r,sh);//Синхронизация данных с запросами администратора

fopen_s(&f,"Запросы.bin","wb");

fopen_s(&g,"Маршруты.bin","wb");

fopen_s(&h,"Смены.bin","wb");

if(f == NULL || g == NULL || h == NULL)

{

MessageBox(L"Ошибка открытия файла! Изменения не сохранены!", L"Ошибка!", MB_OK | MB_ICONERROR);

CDialog::OnCancel();

}

for(int i=0;i<vec.size();i++)

{

lst_char ch = converting(vec[i]);

fwrite(&ch,sizeof(lst_char),1,f);

}

for(int i=0;i<r.size();i++)

{

rts_char ch = converting(r[i]);

fwrite(&ch,sizeof(ch),1,g);

}

for(int i=0;i<sh.size();i++)

{

shift_char ch = converting(sh[i]);

fwrite(&ch,sizeof(ch),1,h);

}

fclose(f);

fclose(g);

fclose(h);

CDialog::OnCancel();

}

Функция синхронизации с данными запросов

void synch(vector<lst> &vec, vector<rts> &vec1, vector<shift> &vec2)

{

quickSort(vec,0,vec.size()-1);

vector<rts>::iterator it1;

for(int i = 0;i < vec1.size();i++)

{

if(!binary_search(vec,vec1[i].rNum,0,vec.size()-1))

{

it1 = vec1.begin()+i;

vec1.erase(it1);

i--;

}

}

vector<shift>::iterator it2;

for(int i = 0;i < vec2.size();i++)

{

if(!binary_search(vec,vec2[i].rNum,0,vec.size()-1))

{

it2 = vec2.begin()+i;

vec2.erase(it2);

i--;

}

}

}

Функция двоичного поиска в векторе

bool binary_search(vector<lst> &vec, int rn, int beg, int end)

{

if(vec[beg].routeNum == rn || vec[end].routeNum == rn)

return true;

int n = end - beg;

if(n == 1)

return false;

int mid = beg + (n/2);

if(vec[mid].routeNum== rn)

return true;

if(vec[mid].routeNum > rn)

binary_search(vec,rn,beg,mid);

else

binary_search(vec,rn,mid,end);

}

Функция быстрой сортировки

void quickSort(vector<rts> &vec, int low, int high)

{

int i = low;

int j = high;

rts x = vec[(low+high)/2];

do

{

while(vec[i].station < x.station) ++i;

while(vec[j].station > x.station) --j;

if(i <= j)

{

swap(vec[i],vec[j]);

i++; j--;

}

}

while(i < j);

if(low < j) quickSort(vec, low, j);

if(i < high) quickSort(vec, i, high);

}

Функция редактирования таблицы маршрутов

void Routes::OnClickedBtnEdit()

{

AddStand as;

int n = LCtrlStand.GetSelectedCount();

if(n == 0)

{

MessageBox(L"Выберите данные для редактирования!", L"Сообщение", MB_OK | MB_ICONINFORMATION);

return;

}

POSITION pos = LCtrlStand.GetFirstSelectedItemPosition();

if(pos)

{

int nIndex = LCtrlStand.GetNextSelectedItem(pos);

as.arTime = vec2[nIndex].arTime;

as.lvTime = vec2[nIndex].lvTime;

as.stand = vec2[nIndex].station;

if(as.DoModal() == IDOK)

{

LCtrlStand.DeleteAllItems();

rts rt;

rt.arTime = as.arTime;

rt.lvTime = as.lvTime;

rt.station = as.stand;

rt.rNum = Rn;

vector<rts>::iterator it;

it = vec2.begin() + nIndex;

it = vec2.erase(it);

vec2.insert(it,rt);

insert(vec2);

}

}

}

Обработчик события нажатия кнопки «Маршруты» пользователя «Гость».

void User::OnClickedBtnUsRt()

{

LCtrlUs.DeleteAllItems();

sch = L"";

UpdateData(FALSE);

if(fl == 1)

{

LCtrlUs.DeleteColumn(0);

LCtrlUs.InsertColumn(0,L"№ маршрута",LVCFMT_LEFT,80);

LCtrlUs.InsertColumn(1,L"Пункт отправления",LVCFMT_LEFT,120);

LCtrlUs.InsertColumn(2,L"Пункт назначения",LVCFMT_LEFT,120);

fl=0; //Флаг показывает, что была создана таблица маршрутов

}

FILE *f;

fopen_s(&f,"Запросы.bin","rb");

vecUs1.clear();

if(f!=NULL)

{

lst_char req;

lst rq;

while(feof(f) != fread(&req,sizeof(req),1,f))

{

rq.departure = req.departure;

rq.destination = req.destination;

rq.hour = req.hour;

rq.minute = req.minute;

rq.routeNum = req.routeNum;

vecUs1.push_back(rq);

}

fclose(f);

insert(vecUs1);

}

}

Обработчик события нажатия кнопки «Остановки» пользователя «Гость».

void User::OnClickedBtnUsSt()

{

LCtrlUs.DeleteAllItems();

sch = L"";

UpdateData(FALSE);

if(fl == 0)

{

LCtrlUs.DeleteColumn(0);

LCtrlUs.DeleteColumn(0);

LCtrlUs.DeleteColumn(0);

LCtrlUs.InsertColumn(0,L"Остановка",LVCFMT_LEFT,100);

fl=1;

}

FILE *f;

fopen_s(&f,"Маршруты.bin","rb");

vecUs2.clear();

if(f!=NULL)

{

rts_char rou;

rts rt;

while(feof(f) != fread(&rou,sizeof(rou),1,f))

{

rt.arTime = rou.arTime;

rt.lvTime = rou.lvTime;

rt.rNum = rou.rNum;

rt.station = rou.station;

vecUs2.push_back(rt);

}

fclose(f);

quickSort(vecUs2,0,vecUs2.size()-1);

vector<rts>::iterator it;

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

{

if(vecUs2[i].station == vecUs2[i+1].station)

{

it = vecUs2.begin() + i;

vecUs2.erase(it);

i--;

}

}

insert(vecUs2);

}

}

Блок-схемы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]