Программирование в среде Visual Fox Pro. База данных «Факультет», страница 8

ball_pred_3 = Среднее

n_pred_3 = reccount()

avg_ball = ball_pred_1 + ball_pred_2 + ball_pred_3

MessageBox("Средний балл по заданной дисциплине, периоду, курсу: " +  str(avg_ball,4,2) )

select Students_2007_semestr1.фамилия, Students_2007_semestr1.имя, Students_2007_semestr1.отчество,;

Students_2007_semestr1.курс, Students_2007_semestr1.группа, Students_2007_semestr1.оценка_2, Students_2007_semestr1.оценка_1,;

Students_2007_semestr1.оценка_3,;

(val((Students_2007_semestr1.оценка_1)) + (val(Students_2007_semestr1.оценка_2)) + (val(Students_2007_semestr1.оценка_3)))/3 as Средний_Балл;

 from Students_2007_Semestr1;

where (val((Students_2007_semestr1.оценка_1)) + (val(Students_2007_semestr1.оценка_2)) + (val(Students_2007_semestr1.оценка_3)))/3 > (avg_ball);

Рис.28. Форма для запроса IX.

Рис.27. Результат выполнения запроса  IX.

X.        Найти дисциплины, по которым самый высокий средний балл, больше всего двоек, больше всего пересдач, долю отличных оценок (рис.28, 29).

Код запроса:

select *  from Predmet_1  into cursor cur

max_predmet = reccount()

DIMENSION ball_pred_1(max_predmet,1)

DIMENSION ball_pred_2(max_predmet,1)

DIMENSION ball_pred_3(max_predmet,1)

DIMENSION avg_ball (max_predmet,1)

DIMENSION avg_ball_all (max_predmet,1)

for i = 1 to max_predmet

select sum(Students_2007_Semestr1.число_пересдач_1) as пересдач  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_1 = i)  ;

ball_pred_1[i,1] = пересдач

select sum(Students_2007_Semestr1.число_пересдач_2)as пересдач from Students_2007_Semestr1  into cursor cur_1;

where (Students_2007_semestr1.предмет_2 = i)

ball_pred_2[i,1] = пересдач

select sum(Students_2007_Semestr1.число_пересдач_3) as пересдач from Students_2007_Semestr1 into cursor cur_2;

where (Students_2007_semestr1.предмет_3 = i)

ball_pred_3[i,1] = пересдач

avg_ball[i,1] = ball_pred_1[i,1] + ball_pred_2[i,1] + ball_pred_3[i,1]

endfor

max_avg_ball = 0

for i = 1 to max_predmet

if (avg_ball[i,1] > max_avg_ball)

max_avg_ball = avg_ball[i,1]

j=i

endif

endfor

=ASORT(avg_ball,1)

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_1 == j)  ;

n_all_1 = reccount()

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_2 == j) ;

n_all_2 = reccount()

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_3 == j) ;

n_all_3 = reccount()

n_all = n_all_1 + n_all_2 + n_all_3

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_1 = j)  and val(Students_2007_semestr1.оценка_1) = 5;

n_new_1 = reccount()

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_2 = j)  and (val(Students_2007_semestr1.оценка_2) = 5);

n_new_2 = reccount()

select *  from Students_2007_Semestr1  into cursor cur ;

where (Students_2007_semestr1.предмет_3 = j)  and (val(Students_2007_semestr1.оценка_3) = 5);

n_new_3 = reccount()

n_new = n_new_1 + n_new_2 + n_new_3

dola_otl = (n_new/n_all)*100

select Predmet_1.дисциплина, max_avg_ball as Число_пересдач, dola_otl as Доля_отличных_оценок;

from fakultet!Predmet_1 ;

where Predmet_1.id_predmet = j

Рис.28. Форма для запроса X.

Рис.29. Результат выполнения запроса  X.

XI.       Найти студентов и их количество, претендующих на красный диплом (рис.30, 31).

Код запроса:

select Students_2007_semestr1.фамилия, Students_2007_semestr1.имя, Students_2007_semestr1.отчество,;

Students_2007_semestr1.курс, Students_2007_semestr1.группа, Students_2007_semestr1.оценка_1, Students_2007_semestr1.оценка_2,;

Students_2007_semestr1.оценка_3,;

(val((Students_2007_semestr1.оценка_1)) + (val(Students_2007_semestr1.оценка_2)) + (val(Students_2007_semestr1.оценка_3)))/3 as Средний_Балл;

 from Students_2007_Semestr1;