p align="left">Разработка меню Меню проекта располагается в верхней строке экрана. Своим присутствием оно создает значительные удобства пользователям для работы с базой данных. После открытия проекта пользователям необходимо запустить на выполнение меню и из него можно выбирать нужные команды. В меню программы имеются две вкладки: «Поиск» и «Фильтр». В вкладке меню «Поиск» находятся еще четыре команды: «Найти», «поиск вперед», «поиск назад», «по всем группам» (Рисунок 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. А. Микляев «Учебник пользователя IBM PC», Москва - 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 // если таблица до закрытия была в режиме with Table2 do // редактирования или вставки if ((State=dsInsert) or (State=dsEdit)) then Post; // изменения сохраняются end; procedure TForm1. Table3BeforeClose (DataSet: TDataSet); begin // если таблица до закрытия была в режиме with Table3 do // редактирования или вставки if ((State=dsInsert) or (State=dsEdit)) and (FieldByName('Familiya').AsString>'') then Post; // изменения сохраняются end; procedure TForm1. Table4BeforeClose (DataSet: TDataSet); begin // если таблица до закрытия была в режиме with Table4 do // редактирования или вставки if ((State=dsInsert) or (State=dsEdit)) then Post; // изменения сохраняются end; procedure TForm1. Table5BeforeClose (DataSet: TDataSet); begin // если таблица до закрытия была в режиме with Table5 do // редактирования или вставки if ((State=dsInsert) or (State=dsEdit)) then Post; // изменения сохраняются end; procedure TForm1.mnFindClick (Sender: TObject); begin // команда «Найти» в гл. меню if form3. ShowModal = mrOK then begin mnSearchForward. Enabled:=true; // делаем доступными пункты «вперед, назад» mnSearchBack. Enabled:=true; // до входа на Form3 они не доступны if Form3. ComboBox1. ItemIndex<2 then begin // Выбраны группа или количество 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 // рвем связь, чтобы встать // на первую запись в Table3 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; // чтобы сойти с // найденной записи дальше while not Eof do 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; // чтобы сойти с // найденной записи дальше while not Bof do 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; // если в таблицах if Table4. 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; end; procedure TForm1. Table4AfterOpen (DataSet: TDataSet); begin table4. Edit; // ставим в режим редактирования end; procedure TForm1. Table5AfterOpen (DataSet: TDataSet); begin table5. Edit; // ставим в режим редактирования end; procedure TForm1. Table3AfterOpen (DataSet: TDataSet); begin table3. Edit; // ставим в режим редактирования end; procedure TForm1. Table2AfterOpen (DataSet: TDataSet); begin table2. Edit; end; procedure TForm1.mnFilter_OnClick (Sender: TObject); begin // при выборе команды «Включить фильтр» form2.show; end; procedure TForm1.mnFilter_OffClick (Sender: TObject); begin // при выборе команды «Отключить фильтр» Table3. Filtered:=false; end; procedure TForm1.N4Click (Sender: TObject); begin // Команда «Поиск по всем группам» Form4.show; end; procedure TForm1. FormCreate (Sender: TObject); begin Table4. Open; // открываем таблицы Table5. Open; Table3. Open; Table1. Open; Table2. Open; Animate1. ResName:= 'bAvi'; // подключаем анимацию Animate1. Active:= True; end; procedure TForm1.DBGrid4MouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // к Table4 подключаем Navigator DbNavigator1. DataSource:=Datasource4; end; procedure TForm1.DBGrid5MouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // к Table5 подключаем Navigator DbNavigator1. DataSource:=Datasource5; end; procedure TForm1.DBGrid3MouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // к Table3 подключаем Navigator DbNavigator1. DataSource:=Datasource3; end; procedure TForm1.DBGrid2MouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // к Table2 подключаем Navigator DbNavigator1. DataSource:=Datasource2; end; procedure TForm1. Table4AfterInsert (DataSet: TDataSet); begin Table4. Post; end; procedure TForm1. Table2AfterInsert (DataSet: TDataSet); begin // после вставки сохраняем изменения Table2. Post; end; procedure TForm1. Table5AfterInsert (DataSet: TDataSet); begin // после вставки сохраняем изменения Table5. Post; end; procedure TForm1. Table3AfterInsert (DataSet: TDataSet); begin // после вставки сохраняем изменения Table3. Post; end; end.
Страницы: 1, 2, 3, 4
|