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

Рис.18. Форма для запроса IV.

Рис.19. Результат выполнения запроса при выборе отличников.

Код программы для кнопки «Отлично»:

select * from Students_2007_Semestr1 into cursor cur

n_all = reccount()

select * from Students_2007_Semestr1 into cursor cur where Students_2007_Semestr1.оценка_1 = "5" and Students_2007_Semestr1.оценка_2 = "5" and Students_2007_Semestr1.оценка_3 = "5"

n_old = reccount()

res = (n_old / n_all)*100

select * from Students_2007_Semestr1 into cursor cur ;

where Students_2007_Semestr1.оценка_1 = "5" and Students_2007_Semestr1.оценка_2 = "5" and Students_2007_Semestr1.оценка_3 = "5"  and Students_2007_Semestr1.обучение = 1

n_budjet = reccount()

res_1 = (n_budjet / n_all)*100

select * from Students_2007_Semestr1 into cursor cur ;

where Students_2007_Semestr1.оценка_1 = "5" and Students_2007_Semestr1.оценка_2 = "5" and Students_2007_Semestr1.оценка_3 = "5"  and (Students_2007_Semestr1.обучение = 2 or Students_2007_Semestr1.обучение = 3)

n_kontrakt = reccount()

res_2 = (n_kontrakt / n_all)*100

MessageBox("Доля отличников: " + str (res) + "%   " + "(" + str(n_old) + ")  " + chr(13) + "из них бюджетников: " + str (res_1) + "%   " + str(n_budjet) + chr(13) + "контрактников: " + str (res_2) + "%   " + str(n_kontrakt))

V.        Найти студентов и их количество, которым продлена сессия в связи с болезнью, с усиленным учебно-тренировочным процессом, по другим причинам (рис.20-21):

Рис.20.Форма для запроса V.

Текст программы для кнопки «в связи с усиленным учебно-тренировочным процессом»:

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

Students_2007_semestr1.курс, Students_2007_semestr1.группа, Students_2007_semestr1.продление_сессии as Причина_продления_сессии;

 from Students_2007_Semestr1;

where Students_2007_semestr1.продление_сессии = "тренировки"

select * from Students_2007_Semestr1 into cursor cur_1

n_all_1 = reccount()

select * from Students_2007_Semestr1 into cursor cur_1 ;

where Students_2007_semestr1.продление_сессии = "тренировки"

n_old_1 = reccount()

res_1 = (n_old_1 / n_all_1)*100

MessageBox("Доля студентов, продливших сессию в связи с" +chr(13)+ "усиленным учебно-тренировочным процессом " + str (res_1) + "%   " + chr(13)  + "количество: " + str(n_old_1) )

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

VI.       Найти студентов, чья стипендия больше, чем средняя стипендия студентов заданного курса или факультета (рис.22, 23):

SELECT AVG(Students_2007_semestr1.стипендия) as "Средняя_стипендия" ;

 FROM  fakultet!Students_2007_semestr1 ;

WHERE Students_2007_semestr1.курс = val(thisform.pageframe1.Page3.pageframe1.Page6.Combo1.value);

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

Students_2007_semestr1.курс, Students_2007_semestr1.группа, Students_2007_semestr1.стипендия;

 from Students_2007_Semestr1;

where (Students_2007_semestr1.стипендия > (SELECT AVG(Students_2007_semestr1.стипендия);

 FROM  fakultet!Students_2007_semestr1 ;

WHERE Students_2007_semestr1.курс = val(thisform.pageframe1.Page3.pageframe1.Page6.Combo1.value)));

Рис.22. Форма для запроса VI.

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

VII.     Найти студентов и их количество, находящихся в академическом отпуске. Сколько из них бюджетников, сколько контрактников  (рис.24, 25):

                    

Рис.24. Форма для запроса VII.

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

Код программы, закреплённой за соответствующей кнопкой для выполнения запроса:

select * from Students_2007_Semestr1 into cursor cur

n_all = reccount()