Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
udov
7 / 7 / 0
Регистрация: 10.01.2013
Сообщений: 59
1

Файл: Отображать номера групп в порядке убывания средней успеваемости их студентов

09.04.2013, 23:55. Просмотров 967. Ответов 16
Метки нет (Все метки)

В файле данных содержится информация об итогах зимней сессии. О каждом студенте известны: <ФИО >, <номер группы >, <факультет >, <год поступления >, <оценка 1>, <оценка 2>, <оценка 3>. Разработать программу, которая позволяет:
a) Создавать или пополнять файл данных;
b) Отображать содержимое файла данных;
c) Отображать номера групп в порядке убывания средней успеваемости их студентов;
d) Печатать список отличников заданной группы.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 23:55
Ответы с готовыми решениями:

Вывести элементы массива с нечетными номерами в порядке убывания номера
Дан массив A размера N (N — нечетное число). Вывести его элементы с нечетными...

Вывести номера групп в порядке убывания средней успеваемости их студентов
В массиве содержится информация о зимней сессии. Сведения о каждом студенте...

Отсортировать группы студентов в порядке убывания средней успеваемости
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о...

Написать программу анализа средней успеваемости четырех студентов
Написать программу анализа средней успеваемости четырех студентов по четырем...

Определить номера групп с наибольшим значением качественной успеваемости
Помогите, пожалуйстааааааа:wall: В ручную заполнить созданную таблицу на листе...

16
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
10.04.2013, 01:14 2
Вот кусок без с:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Private Type Student    ' 72 байта
    FIO As String * 32
    Group As String * 8
    Faculty As String * 16
    Year As Long
    Score1 As Long
    Score2 As Long
    Score3 As Long
End Type
Dim Students() As Student, Init As Boolean
 
Private Function LoadData() As Boolean
    Dim fNum As Integer, I As Long
    On Error GoTo ErrorLoading
    fNum = FreeFile
    Open App.Path & "\Data.rdm" For Random As fNum Len = 72
    I = LOF(fNum) \ 72
    If I = 0 Then Close fNum: Exit Function
    ReDim Students(I - 1): Init = True
    I = 0
    For I = 0 To UBound(Students)
        Get fNum, , Students(I)
    Next
    Close fNum
    LoadData = True
    Exit Function
ErrorLoading:
    MsgBox "Ошибка", vbCritical
End Function
Private Sub StoreData()
    Dim fNum As Integer, I As Long
    On Error GoTo ErrorStore
    fNum = FreeFile
    If Not Dir$(App.Path & "\Data.rdm") = vbNullString Then Kill (App.Path & "\Data.rdm")
    If Not Init Then Exit Sub
    Open App.Path & "\Data.rdm" For Random As fNum Len = 72
    I = 0
    Do Until I > UBound(Students)
        Put fNum, , Students(I)
        I = I + 1
    Loop
    Close fNum
    Exit Sub
ErrorStore:
    MsgBox "Ошибка", vbCritical
End Sub
Private Sub RefreshList()
    Dim I As Long
    If Not Init Then Exit Sub
    lvwList.ListItems.Clear
    For I = 0 To UBound(Students)
        With lvwList.ListItems.Add(, , I + 1)
            .SubItems(1) = RTrim(Students(I).FIO)
            .SubItems(2) = RTrim(Students(I).Group)
            .SubItems(3) = RTrim(Students(I).Faculty)
        End With
    Next
End Sub
Private Sub cmdAdd_Click()
    Dim Index As Long
    If Not Init Then Index = 0: Init = True Else Index = UBound(Students) + 1
    ReDim Preserve Students(Index)
    Students(Index).FIO = txtFIO
    Students(Index).Group = txtGroup
    Students(Index).Faculty = txtFaculty
    Students(Index).Year = txtYear
    Students(Index).Score1 = txtScore(0)
    Students(Index).Score2 = txtScore(1)
    Students(Index).Score3 = txtScore(2)
    StoreData
    RefreshList
End Sub
 
Private Sub cmdBests_Click()
    Dim G As String, I As Long, R As String, T As Long
    If Not Init Then Exit Sub
    G = InputBox("Введите группу")
    If Len(G) = 0 Then Exit Sub
    For I = 0 To UBound(Students)
        If StrComp(Trim$(Students(I).Group), G, vbTextCompare) = 0 And _
           Students(I).Score1 >= 5 And Students(I).Score2 >= 5 And _
           Students(I).Score3 >= 5 Then
            R = R & RTrim$(Students(I).FIO) & " (" & RTrim$(Students(I).Faculty) & ")" & vbNewLine
            T = T + 1
        End If
    Next
    MsgBox "Отличники в группе " & G & " " & T & " человек" & vbNewLine & R
End Sub
 
Private Sub Form_Load()
    LoadData
    RefreshList
End Sub
Private Sub lvwList_Click()
    If lvwList.SelectedItem Is Nothing Then Exit Sub
    txtFIO = RTrim$(Students(lvwList.SelectedItem.Index - 1).FIO)
    txtGroup = RTrim$(Students(lvwList.SelectedItem.Index - 1).Group)
    txtFaculty = RTrim$(Students(lvwList.SelectedItem.Index - 1).Faculty)
    txtYear = Students(lvwList.SelectedItem.Index - 1).Year
    txtScore(0) = Students(lvwList.SelectedItem.Index - 1).Score1
    txtScore(1) = Students(lvwList.SelectedItem.Index - 1).Score2
    txtScore(2) = Students(lvwList.SelectedItem.Index - 1).Score3
End Sub
1
Вложения
Тип файла: rar SmallDataBase.rar (2.9 Кб, 10 просмотров)
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
10.04.2013, 09:56 3
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Вот теперь все
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Private Type Student    ' 72 байта
    FIO As String * 32
    Group As String * 8
    Faculty As String * 16
    Year As Long
    Score1 As Long
    Score2 As Long
    Score3 As Long
End Type
Private Type GroupReport
    Group As String
    Score As Double
    Total As Long
End Type
Dim Students() As Student, Init As Boolean
 
Private Function LoadData() As Boolean
    Dim fNum As Integer, I As Long
    On Error GoTo ErrorLoading
    fNum = FreeFile
    Open App.Path & "\Data.rdm" For Random As fNum Len = 72
    I = LOF(fNum) \ 72
    If I = 0 Then Close fNum: Exit Function
    ReDim Students(I - 1): Init = True
    I = 0
    For I = 0 To UBound(Students)
        Get fNum, , Students(I)
    Next
    Close fNum
    LoadData = True
    Exit Function
ErrorLoading:
    MsgBox "Ошибка", vbCritical
End Function
Private Sub StoreData()
    Dim fNum As Integer, I As Long
    On Error GoTo ErrorStore
    fNum = FreeFile
    If Not Dir$(App.Path & "\Data.rdm") = vbNullString Then Kill (App.Path & "\Data.rdm")
    If Not Init Then Exit Sub
    Open App.Path & "\Data.rdm" For Random As fNum Len = 72
    I = 0
    Do Until I > UBound(Students)
        Put fNum, , Students(I)
        I = I + 1
    Loop
    Close fNum
    Exit Sub
ErrorStore:
    MsgBox "Ошибка", vbCritical
End Sub
Private Sub RefreshList()
    Dim I As Long
    If Not Init Then Exit Sub
    lvwList.ListItems.Clear
    For I = 0 To UBound(Students)
        With lvwList.ListItems.Add(, , I + 1)
            .SubItems(1) = RTrim(Students(I).FIO)
            .SubItems(2) = RTrim(Students(I).Group)
            .SubItems(3) = RTrim(Students(I).Faculty)
        End With
    Next
End Sub
Private Sub cmdAdd_Click()
    Dim Index As Long
    If Not Init Then Index = 0: Init = True Else Index = UBound(Students) + 1
    ReDim Preserve Students(Index)
    Students(Index).FIO = txtFIO
    Students(Index).Group = txtGroup
    Students(Index).Faculty = txtFaculty
    Students(Index).Year = txtYear
    Students(Index).Score1 = txtScore(0)
    Students(Index).Score2 = txtScore(1)
    Students(Index).Score3 = txtScore(2)
    StoreData
    RefreshList
End Sub
 
Private Sub cmdBests_Click()
    Dim G As String, I As Long, R As String, T As Long
    If Not Init Then Exit Sub
    G = InputBox("Введите группу")
    If Len(G) = 0 Then Exit Sub
    For I = 0 To UBound(Students)
        If StrComp(Trim$(Students(I).Group), G, vbTextCompare) = 0 And _
           Students(I).Score1 >= 5 And Students(I).Score2 >= 5 And _
           Students(I).Score3 >= 5 Then
            R = R & RTrim$(Students(I).FIO) & " (" & RTrim$(Students(I).Faculty) & ")" & vbNewLine
            T = T + 1
        End If
    Next
    MsgBox "Отличники в группе " & G & " " & T & " человек" & vbNewLine & R
End Sub
 
Private Sub cmdGroup_Click()
    Dim Rep() As GroupReport, rInit As Boolean
    Dim I As Long
    If Not Init Then Exit Sub
    For I = 0 To UBound(Students)
        AddToGroup Rep, Students(I), rInit
    Next
    For I = 0 To UBound(Rep)
        Rep(I).Score = Rep(I).Score / Rep(I).Total / 3
    Next
    qSort Rep, 0, UBound(Rep)
    Load dlgReport
    For I = 0 To UBound(Rep)
        With dlgReport.lvlReport.ListItems.Add(, , I + 1)
            .SubItems(1) = Rep(I).Group
            .SubItems(2) = Round(Rep(I).Score, 3)
        End With
    Next
    dlgReport.Show 1
End Sub
Private Sub AddToGroup(Rep() As GroupReport, Value As Student, Optional ByRef rInit As Boolean)
    Dim I As Long, Z As Long
    If rInit Then
        I = GetGroup(Rep, Value.Group)
        If I = -1 Then
            I = UBound(Rep) + 1
            ReDim Preserve Rep(I)
            Rep(I).Group = Value.Group
        End If
        Rep(I).Total = Rep(I).Total + 1
        Rep(I).Score = Rep(I).Score + Value.Score1 + Value.Score2 + Value.Score3
    Else
        ReDim Rep(0)
        Rep(0).Group = Value.Group
        Rep(0).Score = Value.Score1 + Value.Score2 + Value.Score3
        Rep(0).Total = 1
        rInit = True
    End If
End Sub
Private Function GetGroup(Rep() As GroupReport, Name As String) As Long
    Dim I As Long
    GetGroup = -1
    For I = 0 To UBound(Rep)
        If StrComp(RTrim(Name), RTrim(Rep(I).Group), vbTextCompare) = 0 Then GetGroup = I
    Next
End Function
Private Sub qSort(Ar() As GroupReport, ByVal low As Long, ByVal high As Long)
    Dim I As Long, j As Long, m As Single, wsp As GroupReport
    I = low: j = high: m = Ar(CInt((I + j) / 2)).Score
    Do Until I > j: Do While Ar(I).Score > m: I = I + 1: Loop: Do While Ar(j).Score < m: j = j - 1: Loop
        If (I <= j) Then wsp = Ar(I): Ar(I) = Ar(j): Ar(j) = wsp: I = I + 1: j = j - 1
    Loop
    If low < j Then qSort Ar, low, j
    If I < high Then qSort Ar, I, high
End Sub
Private Sub Form_Load()
    LoadData
    RefreshList
End Sub
Private Sub lvwList_Click()
    If lvwList.SelectedItem Is Nothing Then Exit Sub
    txtFIO = RTrim$(Students(lvwList.SelectedItem.Index - 1).FIO)
    txtGroup = RTrim$(Students(lvwList.SelectedItem.Index - 1).Group)
    txtFaculty = RTrim$(Students(lvwList.SelectedItem.Index - 1).Faculty)
    txtYear = Students(lvwList.SelectedItem.Index - 1).Year
    txtScore(0) = Students(lvwList.SelectedItem.Index - 1).Score1
    txtScore(1) = Students(lvwList.SelectedItem.Index - 1).Score2
    txtScore(2) = Students(lvwList.SelectedItem.Index - 1).Score3
End Sub
3
Миниатюры
Файл: 	Отображать номера групп в порядке убывания средней успеваемости их студентов  
Вложения
Тип файла: rar SmallDataBase.rar (4.3 Кб, 24 просмотров)
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 11:37 4
The trick,
Ругается:
55 строка (ListItems) - Method or data member not found
0
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
20.08.2014, 11:41 5
Цитата Сообщение от Vlad11 Посмотреть сообщение
55 строка (ListItems) - Method or data member not found
ListView с названием lvwList, есть на форме?
0
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 11:44 6
Цитата Сообщение от The trick Посмотреть сообщение
ListView с названием lvwList, есть на форме?
Да- PictureBox
0
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
20.08.2014, 11:50 7
Цитата Сообщение от Vlad11 Посмотреть сообщение
Да- PictureBox
Нет, должен быть ListView, а не PictureBox
0
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 11:56 8
Цитата Сообщение от The trick Посмотреть сообщение
Нет, должен быть ListView, а не PictureBox
(При запуске приложения выдает Object libraru not registered
дальше
Path not found d:\class\modAddins.bas
ну и кучу других подобных,а потом уже и данную
0
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
20.08.2014, 12:00 9
Посмотри.
0
Вложения
Тип файла: rar SmallDataBase.rar (4.4 Кб, 10 просмотров)
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 12:06 10
Цитата Сообщение от The trick Посмотреть сообщение
Посмотри.
Тоже Object libraru not registered
0
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
20.08.2014, 12:22 11
Цитата Сообщение от Vlad11 Посмотреть сообщение
Object libraru not registered
Значит зарегистрируй mscomctl.ocx
0
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 12:27 12
Цитата Сообщение от The trick Посмотреть сообщение
Значит зарегистрируй mscomctl.ocx
с удовольствием, а как???
и что это такое?
0
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
20.08.2014, 14:38 14
Цитата Сообщение от The trick Посмотреть сообщение
Значит зарегистрируй mscomctl.ocx
Зарегистрировал - результат все тот же -Object libraru not registered


блин пол дня про..... ,а задачка то на 20 строк кода
0
Alex77755
10760 / 3329 / 557
Регистрация: 13.02.2009
Сообщений: 9,799
20.08.2014, 23:29 15
В файле данных содержится информация
Хоть бы не поленился указать на какую тему задание!
В каком файле?
В Visual Basic реализованы три типа доступа к файлам:
последовательный (для обработки текстовых файлов);
произвольный (для обработки текста или структурированных двоичных файлов с записями фиксированной длины);
двоичный (для обработки произвольно структурированных файлов).
0
Vlad11
9 / 9 / 2
Регистрация: 12.05.2014
Сообщений: 225
21.08.2014, 10:01 16
Цитата Сообщение от Alex77755 Посмотреть сообщение
Хоть бы не поленился указать на какую тему задание!
В каком файле?
Привет.
Если вопрос адресован мне- то я никакого задания не предлагал, хочу нарисовать простенькую програмульку для работы с БД (Access или dbf файлами), понимаю что задачка элементарная, но знаний Null. Поэтому спрашиваю примеры для образца (самые элементарные, заполнение и редактирование таблицы и вывод отчета на печать)
И фраза :"Сделай за меня задание не считаю помощью" ОЧЧЧЕНЬ даже уместна - нарисовать хочу сам - а когда начну - тогда нужна будет помощь.
.....Только вот с начать проблема......
0
The trick
Модератор
7369 / 2586 / 756
Регистрация: 22.02.2013
Сообщений: 3,800
Записей в блоге: 76
21.08.2014, 11:17 17
Цитата Сообщение от Vlad11 Посмотреть сообщение
Только вот с начать проблема
Ты смотрел ссылку которую я дал?
Проект в этой теме не является базой данных mdb или dbf, а является демонстрацией работы с файлом произвольного доступа.
0
21.08.2014, 11:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 11:17

Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания
File22. Дан файл вещественных чисел. Создать файл целых чисел, содержащий...

Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания.
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех...

Вывести название предприятия, в порядке убывания средней заработной платы
Здравствуйте! Нужна помощь, есть массив который имеет данные про предприятие:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru