6.1 Руководство для пользователя
Для начала работы пользователя с данной базой достаточно запустить файл «Student.exe».
Главное окно программы
Работа начинается с главного окна программы (рисунок 6.1), где будут приведены уже существующие базы данных. Это является наиболее удобным, так как предполагается, что работа по редактированию существующих баз данных будет выполняться чаще, чем создание новой базы знаний.
Рисунок 6.1 – Главное окно программы
При открытии главного окна активизируются таблицы с данными о всех факультетах, группах и студентах вуза.
Разработка меню
Меню проекта располагается в верхней строке экрана. Своим присутствием оно создает значительные удобства пользователям для работы с базой данных. После открытия проекта пользователям необходимо запустить на выполнение меню и из него можно выбирать нужные команды.
В меню программы имеются две вкладки: «Поиск» и «Фильтр».
В вкладке меню «Поиск» находятся еще четыре команды: «Найти», «поиск вперед», «поиск назад», «по всем группам» (Рисунок 6.2).
Рисунок 6.2 – Вкладка главного меню «Поиск»
Команда «Найти» означает поиск данных определенного студента либо в определенной группе, либо какой-либо группы в определенном факультете (Рисунок 6.3).
Рисунок 6.3 – Окно «Поиск»
При поиске активизируются команды «поиск вперед», «поиск назад». При нажатии этих команд идет дальнейший поиск входных данных. При этом, если эти данные не найдены, выдается сообщение об этом (Рисунок 6.4).
Рисунок 6.4 – Сообщение о результате поиска
Команда «по всем группам» предназначена для поиска нужных фамилий студентов не в одной группе, а во всех группах всех факультетов (Рисунок 6.5).
Рисунок 6.5 – Окно поиска по всем группам
Во вкладке «Фильтр» имеется две команды: «Включить», «Отключить». При выборе комнады «Включить» открывается форма для фильтрации фамилий студентов. Здесь пользователь вводит фамилию студента, котрого он ищет (Рисунок 6.6).
Рисунок 6.6 – Окно фильтрации
При нажатии кнопки Пуск происходит фильтрация в нужной группе по введенной фамилии (Рисунок 6.7).
Рисунок 6.7 – Фильтрация по фамилии
Если пользователь выбирает команду «Отключить» из главного меню, то фильтрация отключается.
Заключение
Информационный банк данных «Успеваемость студентов», разработанный в ходе выполнения курсового проекта, является актуальным на сегодняшний день, так как все вузы нуждаются в автоматизации управления. Нами были приобретены навыки программирования на языке Object Pascal в среде Delphi 7.0. Также мы научились разрабатывать собственные алгоритмы для решения поставленных задач, овладели методами и средствами отладки и тестирования программ.
Разработанная нами программа устойчиво выполняет все свои функции, но для использования ее в вузах, она требует некоторых доработок: программным путем обеспечить безопасность данных, расширить возможности поиска (поиск по двум и более полям), и т.д.
Список используемой литературы
1. А.Я. Архангельский Программирование в Delphi 7
2. А. Микляев «Учебник пользователя IBMPC», Москва – 2000
Приложение А
Программный код информационного банка данных
1.Листингмодуля «UnitZastavka»
Var
Form5: TForm5; path:string;
procedure TForm5. FormCreate (Sender: TObject);
begin
getDir (0, path);
mediaplayer1. FileName:=path+'\BART.AVI';
mediaplayer1. Open; // проигрывается заставка
mediaplayer1. Play;
form5. Close;
form1. Top:=50;
end;
end.
2. Листингмодуля «UnitMainForm»
Var
Form1: TForm1;
Cond_of_search:TTable; Field_of_search, Require:string;
CurrentRec1, CurrentM:string; CurrentRecord, CurrentRecord_S:variant;
CurrentRec2:longint; // при возврате связи используются запомненные счетчики
DataSource_On_Off:TDataSource;
procedure TForm1. Table2CalcFields (DataSet: TDataSet);
Var r:real;
s_r:string;
begin // Вычисляемое поле «Средний балл»
r:=(Table2. FieldByName('1atest').AsInteger+
Table2. FieldByName('2atest').AsInteger+
Table2. FieldByName('3atest').AsInteger)/3;
s_r:=floatToStr(r);
Delete (s_r, 4, length (s_r));
Table2. FieldByName ('Sr_b').AsString:=s_r;
end;
procedure TForm1. Table2BeforeClose (DataSet: TDataSet);
begin // если таблица до закрытия была в режиме
withTable2 do // редактирования или вставки
if ((State=dsInsert) or (State=dsEdit))
thenPost; // изменения сохраняются
end;
procedure TForm1. Table3BeforeClose (DataSet: TDataSet);
begin // если таблица до закрытия была в режиме
withTable3 do // редактирования или вставки
if ((State=dsInsert) or (State=dsEdit))
and (FieldByName('Familiya').AsString>'')
thenPost; // изменения сохраняются
end;
procedure TForm1. Table4BeforeClose (DataSet: TDataSet);
begin // если таблица до закрытия была в режиме
withTable4 do // редактирования или вставки
if ((State=dsInsert) or (State=dsEdit))
thenPost; // изменения сохраняются
end;
procedure TForm1. Table5BeforeClose (DataSet: TDataSet);
begin // если таблица до закрытия была в режиме
withTable5 do // редактирования или вставки
if ((State=dsInsert) or (State=dsEdit))
thenPost; // изменения сохраняются
end;
procedure TForm1.mnFindClick (Sender: TObject);
begin // команда «Найти» в гл. меню
if form3. ShowModal = mrOK then
begin
mnSearchForward. Enabled:=true; // делаем доступными пункты «вперед, назад»
mnSearchBack. Enabled:=true; // до входа на Form3 они не доступны
ifForm3. ComboBox1. ItemIndex<2 thenbegin // Выбраны группа или количество
CurrentM:='Gruppa'; // первичный ключ, поиск в Table5
Cond_of_search:= TTable (FindComponent('Table5'));
DataSource_On_Off:= TDataSource (FindComponent('DataSource5'));
end
else
begin
CurrentM:='N_stud'; // автоинкриментноеполе, поискв Table3
Cond_of_search:= TTable (FindComponent('Table3'));
DataSource_On_Off:= TDataSource (FindComponent('DataSource3'));
end;
if Cond_of_search=Table2 then // рвем связь, чтобы встать
Table2. MasterSource:=nil; // идет повторный запрос на разрыв связи
Cond_of_search. First;
CurrentRecord:=null; // если не находим,
mnSearchForward. Click; // вызываем поиск вперед
end;
end;
procedure TForm1.mnSearchForwardClick (Sender: TObject);
begin // команда "Поиск вперед»
if Cond_of_search=Table3 then
Table3. MasterSource:=nil; // рвем связи
with Cond_of_search do
begin
DataSource_On_Off. DataSet:=nil; // на время поиска
// отключаемвизуальныекомпоненты
CurrentRecord_S:=FieldValues[CurrentM]; // запоминаемкуда
CurrentRec1:=table3. FieldByName('Gruppa2').AsString;
CurrentRec2:=table3. FieldByName ('N_stud').AsInteger;
if CurrentRecord=FieldValues[CurrentM] then next; // чтобы сойти с
whilenotEofdo
begin
if FieldValues [Field_of_search]=Require then
begin
CurrentRecord:=FieldValues[CurrentM]; // запоминаем для
// следующего схода
if Table3. MasterSource=nil then begin // при «поиске вперед»
CurrentRec1:=table3. FieldByName('Gruppa2').AsString;
Table3. MasterSource:=DataSource5; // возвращаем связь таблиц
Table5. Locate ('Gruppa', CurrentRec1, []); // и локализуемся
// на найденную запись
Table3. Locate ('N_stud', CurrentRecord, []);
end;
DataSource_On_Off. DataSet:=Cond_of_search; // возвращаем подключение визуальных компонентов
exit
end;
Next
end;
if Table3. MasterSource=nil then
Link_On
else
Locate (CurrentM, CurrentRecord_S, [loCaseInsensitive]); // возвращаемся по окончании поиска
end;
DataSource_On_Off. DataSet:=Cond_of_search; // возвращаем подключение визуальных компонентов
showmessage ('не найдено');
end;
procedure TForm1. Link_On;
begin // возвращаем связь таблиц
Table3. MasterSource:=DataSource5;
Table5. Locate ('Gruppa', CurrentRec1, []);
Table3. Locate ('N_stud', CurrentRec2, []);
end;
procedure TForm1. Link_Off;
begin
CurrentRec1:=table3. FieldByName('Gruppa2').AsString;
CurrentRec2:=table3. FieldByName ('N_stud').AsInteger;
Table3. MasterSource:=nil // рвем связь таблиц
end;
procedure TForm1.mnSearchBackClick (Sender: TObject);
begin // Команда "Поиск назад»
if Cond_of_search=Table3 then
Table3. MasterSource:=nil;
with Cond_of_search do
begin
DataSource_On_Off. DataSet:=nil; // навремяпоискаотключаем
// визуальныекомпоненты
CurrentRecord_S:=FieldValues[CurrentM]; // запоминаемкуда
CurrentRec1:=table3. FieldByName('Gruppa2').AsString;
CurrentRec2:=table3. FieldByName ('N_stud').AsInteger;
if CurrentRecord=FieldValues[CurrentM] then prior; // чтобы сойти с
whilenotBofdo
begin
if FieldValues [Field_of_search]=Require then
begin
CurrentRecord:=FieldValues[CurrentM]; // запоминаемдля
if Table3. MasterSource=nil then begin
CurrentRec1:=table3. FieldByName('Gruppa2').AsString;
Table3. MasterSource:=DataSource5; // возвращаем связь таблиц
Table5. Locate ('Gruppa', CurrentRec1, [loCaseInsensitive]);
Table3. Locate ('N_stud', CurrentRecord, [loCaseInsensitive]);
end;
DataSource_On_Off. DataSet:=Cond_of_search; // возвращаем
exit
end;
Prior
end;
if Table3. MasterSource=nil then
Link_On
else
Locate (CurrentM, CurrentRecord_S, [loCaseInsensitive]); // возвращаемся по окончании поиска на последнюю найденную или стартовую запись
end;
DataSource_On_Off. DataSet:=Cond_of_search; // возвращаем подключение визуальных компонентов
showmessage ('не найдено');
end;
procedure TForm1. FormClose (Sender: TObject; var Action: TCloseAction);
begin // При закрытии формы
Table4BeforeClose(Table4);
Table5BeforeClose(Table5);
Table3BeforeClose(Table3);
Table2BeforeClose(Table2);
if Table5. Modified then Table5. Post; // если в таблицах
ifTable4. Modified then Table4. Post; // были изменения
if Table3. Modified then Table3. Post; // их сохраняем
if Table2. Modified then Table2. Post;
if Table1. Modified then Table1. Post;
Table5. Close;
Table4. Close;
Table3. Close;
Table2. Close;
Table1. Close;