Смекни!
smekni.com

Создание информационного банка данных Успеваемость студентов (стр. 4 из 5)

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;