Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
 Аватар для D@gon
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 50

Как разобраться с программой!

16.04.2011, 12:17. Показов 3468. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
На кафедре попросили создать программу "Тест", простое тестирование где из 2 вариантов нужно выбрать правильный! Вопрос! Всего 46 заданий, как организовать программу, чтобы при каждом запуске вопросы появлялись в разном порядке (это чтобы запутать студентов).

Создал 2 формы, первая форма для регистрации а вторая для вопросов.
На форме где задаются вопросы 3 кнопки (назад-пропустить-следующий).
Хотелось бы при нажатии на кнопку "следующий", чтобы появлялся следующий вопросс.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2011, 12:17
Ответы с готовыми решениями:

Разобраться с программой
Добрый день! Необходимо разобраться с программой, кот использует Financial.DDB метод (интерфейс во вложенном файле). Не могу вывести...

Найти синус угла в радианах с большой точностью
Нужно найти синус угла в радианах. Результат должен иметь n-ное количество знаков после запятой. Или просто модернизировать проект, он...

Как разобраться с программой stamp 0.85
Здравствуйте,Други ! Кто поможет разобраться с программой stamp 0.85 ? Не могу вставить текст в макет круглой печати в следующий уровень....

29
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.04.2011, 17:56
Студворк — интернет-сервис помощи студентам
Кстати, пользователь может зайти в папку программы и уничтожить файл с учетными данными, затем создать новый - ну я бы так и сделал . Лучше файл куда-нить далеко запрятать
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.04.2011, 19:22
Цитата Сообщение от Eugene22 Посмотреть сообщение
Кстати, пользователь может зайти в папку программы и уничтожить файл с учетными данными, затем создать новый - ну я бы так и сделал . Лучше файл куда-нить далеко запрятать
ну так сделаем мы чудо защиту, будет вообще не взломать, а потом ЦБ РФ продадим

Добавлено через 1 час 21 минуту
выкладываю мой вариант защиты, спасибо Инженеру
VB.NET
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
Public Class Form1
    Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Ключ
    Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Вектор инициализации
    Dim pth As String = My.Application.Info.DirectoryPath & "\users\"
    Public Sub Encrypt(ByVal fName As String, ByVal txtEncrypt As String)
 
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Create)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
        Dim SWriter As New IO.StreamWriter(CryptStream)
        SWriter.Write(txtEncrypt)
        SWriter.Close()
        fs.Close()
        CryptStream.Close()
    End Sub
    Public Function Decrypt(ByVal fName As String) As String
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        Dim fs As New IO.FileStream(fName, IO.FileMode.Open)
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
        Dim SReader As New IO.StreamReader(CryptStream)
        Decrypt = SReader.ReadToEnd()
        SReader.Close()
        fs.Close()
        CryptStream.Close()
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim info As String
        Try
            If IO.File.Exists(pth & TextBox1.Text & ".u") = True Then
                MsgBox("Пользователь с таким логином уже зарегистрирован", MsgBoxStyle.Exclamation)
                Exit Sub
            End If
            If TextBox1.TextLength < 4 Then
                MsgBox("Имя пользователя должно состоять из 4 и более букв", MsgBoxStyle.Exclamation)
                Exit Sub
            End If
            If TextBox2.TextLength < 6 Then
                MsgBox("Пароль должен включать не менее 6 символов", MsgBoxStyle.Exclamation)
                Exit Sub
            End If
            info = "User: " & TextBox1.Text & vbCrLf & _
            "Дата реги: " & Date.Today
            Dim User As String = Strings.Left(TextBox1.Text + "0000000000000000", 16)
            Dim Pass As String = TextBox2.Text
            If Pass.Length <= 16 Then
                Pass = Strings.Left(TextBox2.Text + "0000000000000000", 16)
            End If
            For i = 0 To 15
                Key(i) = CByte(Asc(Mid(Pass, i + 1, 1)))
                IV(i) = CByte(Asc(Mid(User, i + 1, 1)))
            Next
 
            If Pass.Length > 16 Then
                info = SHIFR(info, Mid(Pass, 16, Pass.Length - 16))
            End If
 
            If IO.Directory.Exists(pth) = False Then MkDir(pth)
 
            
            Encrypt(pth & TextBox1.Text & ".u", info)
            MsgBox("Поздравляем, " & TextBox1.Text & "! Вы успешно зарегистрированы!", MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.Critical)
        End Try
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If TextBox1.Text = "" Or TextBox2.Text = "" Then
            MsgBox("Все поля обязательны для заполнения", MsgBoxStyle.Exclamation)
            Exit Sub
        End If
        Try
            Dim UE As New IO.FileInfo(pth & TextBox1.Text & ".u")
            If UE.Exists = False Then
                MsgBox("Такой пользователь не зарегистрирован", MsgBoxStyle.Exclamation)
                Exit Sub
            End If
            Dim info As String = ""
            Dim User As String = Strings.Left(TextBox1.Text + "0000000000000000", 16)
            Dim Pass As String = TextBox2.Text
            If Pass.Length <= 16 Then
                Pass = Strings.Left(TextBox2.Text + "0000000000000000", 16)
            End If
            For i = 0 To 15
                Key(i) = CByte(Asc(Mid(Pass, i + 1, 1)))
                IV(i) = CByte(Asc(Mid(User, i + 1, 1)))
            Next
 
        
            
            Try
                info = Decrypt(pth & TextBox1.Text & ".u")
                If Pass.Length > 16 Then
                    info = DESHIFR(info, Mid(Pass, 16, Pass.Length - 16))
                End If
                ' MsgBox("Добро пожаловать", MsgBoxStyle.Information)
                MsgBox(info)
            Catch ex As Exception
                MsgBox("Неверный пароль!", MsgBoxStyle.Exclamation)
            End Try
 
      
        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.Critical)
        End Try
    End Sub
 
 
    Private Function SHIFR(ByVal word, ByVal key)
 
        Dim Out As String = ""
        Dim Str As String = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz1234567890"
        Dim Z As Integer = Str.Length - 1
        Dim M(Z, Z) As String
        Dim KeyInd As Integer = 0
        For I As Integer = 0 To Z
            For T As Integer = 0 To Z
                Dim C As Integer = T + I + 1
                If C > (Z + 1) Then C = C - (Z + 1)
                M(I, T) = Strings.Mid(Str, C, 1)
            Next
        Next
        For Y As Integer = 0 To word.Length - 1
            If InStr(Str, Strings.Mid(word, Y + 1, 1), CompareMethod.Text) = 0 Then
                Out &= Strings.Mid(word, Y + 1, 1)
            Else
                If KeyInd > Len(key) - 1 Then KeyInd = 0
                Out &= M(InStr(Str, Strings.Mid(word, Y + 1, 1), CompareMethod.Text) - 1, InStr(Str, Strings.Mid(key, KeyInd + 1, 1), CompareMethod.Text) - 1)
                KeyInd += 1
            End If
        Next
        Return (Out)
    End Function
    Private Function DESHIFR(ByVal word, ByVal key)
        Dim Out As String = word
        Dim Str As String = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz1234567890"
        Dim Z As Integer = Str.Length - 1
        Dim M(Z, Z) As String
        Dim KeyInd As Integer = 0
        Dim Vert, Goriz, PsVert As Integer
        Dim EndWord As String = ""
 
        For I As Integer = 0 To Len(Out) - 1
            If InStr(Str, Mid(Out, I + 1, 1), CompareMethod.Text) > 0 Then
                If Len(key) - 1 < KeyInd Then KeyInd = 0
                Goriz = InStr(Str, Mid(key, KeyInd + 1, 1), CompareMethod.Text)
                PsVert = InStr(Str, Mid(Out, I + 1, 1), CompareMethod.Text)
                Vert = PsVert - Goriz + 1
                If Vert < 1 Then Vert = Len(Str) + Vert
                EndWord &= (Mid(Str, Vert, 1))
                KeyInd += 1
            Else
                EndWord &= Mid(Out, I + 1, 1)
            End If
        Next
        Return EndWord
    End Function
 
 
End Class
Дальше просто проверим соотвествует ли file.u логину User'а, в user.u будем записывать логин user и его как раз сверим
0
Почетный модератор
 Аватар для Памирыч
23251 / 9165 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
16.04.2011, 19:53
Цитата Сообщение от Ciberst Посмотреть сообщение
If Pass.Length > 16 Then
Все-таки, предлагаю оставить эти 16 символов для пароля, потому, что из-за увеличения его длины код нагромождается какими-то непонятными и трудночитаемыми блоками. И не из-за этого ли у тебя образовалась брешь в безопасности?

Помни - мы делаем это для начинающего кодера, пока он разбирается с авторизацией, может и не дойти до самих тестов
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.04.2011, 19:54
Памирыч, посмотри самый последний мой код, пожалуйста, и comment его, здесь бреши, на мой взгляд, нет
0
Почетный модератор
 Аватар для Памирыч
23251 / 9165 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
16.04.2011, 20:17
Ciberst, Не в обиду, но это перебор. Ты наворотил в коде, что сам через месяц уже не поймешь. И все для чего? Для тестов, которые топикстартер напишет без этого алгоритма в лучшем случае, в худшем - вообще передумает что-то писать, полагая, что если для одной только авторизации такая каша, то что говорить о самой программе, и забудет о ней уже через неделю.

Если код еще хоть как-то читался, то ты функциями SHIFR DESHIFR окончательно превратил в полигон для чтения по диагонали.

Насчет бреши - это я пока писал комент, ты уже новый код выложил, в котором уже нет сил разбираться.
Тема бесспорно полезная, но не для данного топа, ну переборщил ты малость.

Eugene22, папку с учетками и сами тесты, конечно же, придется спрятать, возможно на другом компе.
100-процентную защиту это не гарантирует, но далеко не каждый уже сможет там наворотить.
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.04.2011, 20:30
Памирыч, если будет время и силы, то посмотри этот код, мне кажется он довольно таки рабочий, а для начин. кодера любой код - это хороший материал для мозгов. да и код не настолько уж и сложный.
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
16.04.2011, 21:51
Я сделал проще, сделал .mdb с паролем, внутри него 2 таблицы, одна с инфой о результатах тестирования, вторая с регистрационными данными. 2 софтины: 1 для тестирования 2 для: просмотра результатов тестирования, сортировки по различным критериям, поиска по бд, создание тестовых заданий, но вход во вторую софтину только по паролю, пароли хранятся в бд во 2-ой таблице, на самой бд стоит пароль, и поэтому обе софтины подключаются к бд с помощью запроса с паролем. После входа во 2-ю софтину также можно изменить пароль, или создать дополнительные пароли для других преподов например.
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.04.2011, 21:55
навскидку вот так записывать тесты, читать и располагать в случайном порядке, осталось это всего лишь зашифровать, но это труда не составит
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim test() As String
    Private Sub AddTest(ByVal TestStr As String)
        Dim testWrite As New IO.StreamWriter(pth & "test.test", True)
        testWrite.WriteLine(TestStr)
        testWrite.Close()
    End Sub
    Private Sub ReadTest()
        test = IO.File.ReadAllLines(pth & "test.test")
    End Sub
    Private Sub Random()
        Dim ForCount As Integer = Int((Rnd() * test.Length * 10)) ' 10 - коэф. перемешивания. Чем больше, тем круче, но дольше.
        Do While ForCount > 0
            Randomize()
            Dim RandomSource As Integer = Int(Rnd() * test.Length) ' Берем первый случайный элемент
            Dim RandomTarget As Integer = Int(Rnd() * test.Length) ' Берем второй случайный элемент
            Dim TempStrA As String = test(RandomSource) ' Запоминаем первый случайный элемент
            test(RandomSource) = test(RandomTarget) ' Меняем первый и второй местами
            test(RandomTarget) = TempStrA
            ForCount -= 1
        Loop
    End Sub
0
Почетный модератор
 Аватар для Памирыч
23251 / 9165 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
17.04.2011, 11:19
Ciberst, а как у тебя сами то тесты организованы? Как выглядит файл с вопросами и где процедура ввода-вывода?
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
17.04.2011, 11:34
когда прочитали тест в массив test, вывод осуществляем примерно так:
VB.NET
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
  Private Function Random(ByVal A() As String)
        Dim ForCount As Integer = Int((Rnd() * A.Length * 10)) ' 10 - коэф. перемешивания. Чем больше, тем круче, но дольше.
        Do While ForCount > 0
            Randomize()
            Dim RandomSource As Integer = Int(Rnd() * A.Length) ' Берем первый случайный элемент
            Dim RandomTarget As Integer = Int(Rnd() * A.Length) ' Берем второй случайный элемент
            Dim TempStrA As String = A(RandomSource) ' Запоминаем первый случайный элемент
            A(RandomSource) = A(RandomTarget) ' Меняем первый и второй местами
            A(RandomTarget) = TempStrA
            ForCount -= 1
 
        Loop
        Return A
    End Function
 
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Try
 
  
            If RadioButton1.Checked = True Then
                If RadioButton1.Text = Split(test(ind), "|")(1) Then MsgBox("УРА. Вы угадали.")
            End If
            If RadioButton2.Checked = True Then
                If RadioButton2.Text = Split(test(ind), "|")(1) Then MsgBox("УРА. Вы угадали.")
            End If
            If RadioButton3.Checked = True Then
                If RadioButton3.Text = Split(test(ind), "|")(1) Then MsgBox("УРА. Вы угадали.")
            End If
            If RadioButton4.Checked = True Then
                If RadioButton4.Text = Split(test(ind), "|")(1) Then MsgBox("УРА. Вы угадали.")
            End If
 
            ind = ind + 1
            If ind > test.Count - 1 Then
                MsgBox("Тест окончен")
            End If
            Label1.Text = Split(test(ind), "|")(0)
            Ответы(0) = Split(test(ind), "|")(1)
            Ответы(1) = Split(test(ind), "|")(2)
            Ответы(2) = Split(test(ind), "|")(3)
            Ответы(3) = Split(test(ind), "|")(4)
            Ответы = Random(Ответы)
            RadioButton1.Text = Ответы(0)
            RadioButton2.Text = Ответы(1)
            RadioButton3.Text = Ответы(2)
            RadioButton4.Text = Ответы(3)
        Catch ex As Exception
 
        End Try
    End Sub
а как записывать то там есть метод AddTest
вот туда и записываем так: "Вопрос|правильный ответ|доп ответ|доп ответ|доп ответ"

PS Сырой, конечно, вариант, так как из-за моего неумения (программу для тестов пишу впервые)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2011, 11:34

Не могу разобраться с программой, и объясните как работают функции
Программа на c, вводится динамическая структура, ввод останавливается, когда вводится &quot;*&quot;, первая и последняя строки меняются...

Как разобраться в протоколе обмена между программой и сервер
Известно что чат работает посредством сервера, т.е. сообщения уходят на 8000 порт. Каким образом можно отследить какие пакеты гоняет...

Не могу разобраться с программой, выдает ошибку C2371, как и что исправить, не знаю, строка 20
#define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; char numder2text(int numbera) { int...

Разобраться с программой
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

Не разобраться с программой
Не получается суммирование элементов массива, выдает ошибку А также непонятно как потом заменить любой элемент на полученную сумму ...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru