Формирование нескольких баз данных, основная из которых – «Морские сражения», страница 10

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

·  Найти среднее количество главных орудий для класса «линкор» (ввод наименования).

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==15

    thisform.LBLMan.Caption="Для класса:"

    thisform.LBLMan.Visible=.t.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.t.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.t.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

В результате работы этой процедуры, на форме появляются надпись "Для класса:", выпадающий список, содержащий все типы кораблей и кнопка "Вывести". Для вывода результата нужно выбрать в списке нужный элемент и нажать на кнопку "Вывести", либо клавишу Enter.

Кнопка "Вывести" - CMDMan.Click:

case thisform.CMBQueries.ListIndex==15

  SELECT Types.class, AVG(Battleships.fire1_num);

  FROM ships!battleships INNER JOIN ships!types  ON  Battleships.class_id = Types.class_id;

  WHERE Battleships.class_id=thisform.CMBMan1.ListIndex-1;

  INTO TABLE Temp;

  NOCONSOLE

  thisform.GRDMList.avgnumfire

  thisform.GRDMList.RecordSourceType=0

  thisform.GRDMList.RecordSource='Temp.dbf'

·  Найти для каждого класса корабля значение даты спуска на воду первого корабля этого класса.

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==5

    SELECT Types.class;

    FROM ships!Types;

    INTO ARRAY types;

    NOCONSOLE

    n=ALEN(types)

    DIMENSION mindate[n,2]

    FOR i=1 TO n

    SELECT MIN(Battleships.date_creation);

     FROM ships!battleships INNER JOIN ships!types ON  Battleships.class_id = Types.class_id;

     WHERE Types.class = types(i);

     INTO ARRAY tmp

    mindate[i,1]=types[i]

    mindate[i,2]=tmp[1]

    ENDFOR

    CREATE TABLE Temp1 FREE (col1 C(30), col2 N(4))

    APPEND FROM ARRAY mindate

    thisform.GRDMList.mindateshipcreation

    thisform.GRDMList.RecordSourceType = 0

    thisform.GRDMList.RecordSource = 'Temp1.dbf'

    thisform.LBLMan.Visible=.f.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.f.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

·  Найти для каждого класса количество кораблей этого класса, потопленных в морских сражениях.

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==4

    SELECT Types.class;

    FROM ships!Types;

    INTO ARRAY types;

    NOCONSOLE

    n=ALEN(types)

    DIMENSION numdrawn[n,2],tmp[1]

    FOR i=1 TO n

    SELECT battles.drawn;

     FROM  ships!battles INNER JOIN ships!battleships;

        INNER JOIN ships!types ON  Battleships.class_id = Types.class_id ON  battles.ship_id = Battleships.ship_id;

     WHERE battles.drawn = .T. AND Types.class = types[i];

    INTO ARRAY tmp;

    numdrawn[i,1]=types[i]

    numdrawn[i,2]=ALEN(tmp)

    ENDFOR

    CREATE TABLE Temp3 FREE (col1 C(30), col2 N(2))

    APPEND FROM ARRAY numdrawn

    thisform.GRDMList.numshipsdrawnforeachclass

    thisform.GRDMList.RecordSourceType = 0

    thisform.GRDMList.RecordSource = 'Temp3.dbf'

    thisform.LBLMan.Visible=.f.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.f.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.


Заключение.

Данная РГР, конечно же, не заслуживает называться полноценной базой данных и использование её на практике просто не реально, но всё же требованиям, поставленным в задании, она вполне удовлетворяет.

Ну а вообще говоря, для написания простой БД, при минимальных затратах времени и средств, MS Visual Fox Pro подходит идеально, что должно заинтересовать потенциальных пользователей БД.


Литература.

MSDN Library, Copyright 1987-2004 Microsoft Corporation