mc_gem 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +91 -0
  4. data/Lab1/arr1_3.txt +1 -0
  5. data/Lab1/lb1_1.rb +19 -0
  6. data/Lab1/lb1_2.rb +28 -0
  7. data/Lab1/lb1_3.rb +46 -0
  8. data/Lab1/lb1_4.rb +82 -0
  9. data/Lab2/1Class.jpg +0 -0
  10. data/Lab2/Web/main.rb +89 -0
  11. data/Lab2/Web/views/add.html +168 -0
  12. data/Lab2/Web/views/main.html +233 -0
  13. data/Lab2/data_storage/students1.txt +1 -0
  14. data/Lab2/data_storage/studentsRead.json +36 -0
  15. data/Lab2/data_storage/studentsRead.txt +3 -0
  16. data/Lab2/data_storage/studentsRead.yaml +26 -0
  17. data/Lab2/data_storage/studentsWrite.json +42 -0
  18. data/Lab2/data_storage/studentsWrite.txt +4 -0
  19. data/Lab2/data_storage/studentsWrite.yaml +31 -0
  20. data/Lab2/examples/Strategy.rb +38 -0
  21. data/Lab2/examples/adapter.rb +30 -0
  22. data/Lab2/examples/database.rb +15 -0
  23. data/Lab2/examples/observer_example.rb +51 -0
  24. data/Lab2/examples/pattern_pattern.rb +44 -0
  25. data/Lab2/examples/site_example.rb +21 -0
  26. data/Lab2/examples/views/about.erb +11 -0
  27. data/Lab2/examples/views/contact.erb +15 -0
  28. data/Lab2/examples/views/index.erb +11 -0
  29. data/Lab2/main.rb +6 -0
  30. data/Lab2/main_window.rb +31 -0
  31. data/Lab2/student_input_form.rb +71 -0
  32. data/Lab2/tab_students.rb +157 -0
  33. data/Lab2/test/student_test.rb +91 -0
  34. data/README.md +3 -0
  35. data/mc_gem/CHANGELOG.md +5 -0
  36. data/mc_gem/CODE_OF_CONDUCT.md +84 -0
  37. data/mc_gem/Documentation.md +33 -0
  38. data/mc_gem/Gemfile +13 -0
  39. data/mc_gem/LICENSE.txt +21 -0
  40. data/mc_gem/README.md +1 -0
  41. data/mc_gem/lib/mc_gem/version.rb +5 -0
  42. data/mc_gem/lib/mc_gem.rb +10 -0
  43. data/mc_gem/lib/source/adapters/student_list_adapter.rb +95 -0
  44. data/mc_gem/lib/source/containers/Data_list.rb +66 -0
  45. data/mc_gem/lib/source/containers/Data_list_student_short.rb +17 -0
  46. data/mc_gem/lib/source/containers/Data_table.rb +25 -0
  47. data/mc_gem/lib/source/controllers/student_edit_form_controller.rb +63 -0
  48. data/mc_gem/lib/source/controllers/student_input_form_controller.rb +56 -0
  49. data/mc_gem/lib/source/controllers/student_list_controller.rb +83 -0
  50. data/mc_gem/lib/source/converters/Converter.rb +11 -0
  51. data/mc_gem/lib/source/converters/Converter_json.rb +14 -0
  52. data/mc_gem/lib/source/converters/Converter_txt.rb +26 -0
  53. data/mc_gem/lib/source/converters/Converter_yaml.rb +14 -0
  54. data/mc_gem/lib/source/database/scripts/create_table.sql +10 -0
  55. data/mc_gem/lib/source/database/scripts/insert_data.sql +4 -0
  56. data/mc_gem/lib/source/database/student_list_db.rb +41 -0
  57. data/mc_gem/lib/source/database/students_db.rb +79 -0
  58. data/mc_gem/lib/source/model/Student.rb +106 -0
  59. data/mc_gem/lib/source/model/StudentBase.rb +50 -0
  60. data/mc_gem/lib/source/model/Student_short.rb +39 -0
  61. data/mc_gem/lib/source/repositories/Student_list.rb +65 -0
  62. data/mc_gem/lib/source/repositories/student_list_adv.rb +35 -0
  63. data/mc_gem/lib/source/util/LoggerHolder.rb +22 -0
  64. data/mc_gem/mc_gem.gemspec +17 -0
  65. data/mc_gem/sig/mvcStudentXD.rbs +4 -0
  66. metadata +121 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9c930197b35074f90b98bd270b433374fff9950ea41846755e7e5d1894a4771f
4
+ data.tar.gz: 81e052150cebb449322895a9d8b2771db898811bbcd5ff39b24ad004adc348c6
5
+ SHA512:
6
+ metadata.gz: b4a08dfb07e35c43e9894a1a5c5e04cbfba22138451bb36ccbd21a3b7dc0740ac76171e24f49ef9e21a96e14a6f862b9a455f42cb3201df98a3e3d34c299ad74
7
+ data.tar.gz: 6557c8d4fa361fbe149127cd140779226c2eb7c6677d021a9a87a3bd091f49aad18db588fe9a6bd82cf143b0f87deb6f6d6d14ccecc85e423b96d16f106889ce
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "mysql2"
6
+ gem "glimmer-dsl-libui",'~> 0.7.4'
7
+ gem 'win32api'
8
+ gem "minitest"
9
+ gem 'rubocop', group: 'development'
10
+ gem 'mvcStudentXD', '~> 1.2', '>= 1.2.2'
11
+ gem 'sinatra', '~> 3.0', '>= 3.0.6'
12
+ gem 'thin', '~> 1.8', '>= 1.8.2'
data/Gemfile.lock ADDED
@@ -0,0 +1,91 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ array_include_methods (1.4.0)
5
+ ast (2.4.2)
6
+ chunky_png (1.4.0)
7
+ color (1.8)
8
+ daemons (1.4.1)
9
+ equalizer (0.0.11)
10
+ eventmachine (1.2.7)
11
+ facets (3.1.0)
12
+ glimmer (2.7.3)
13
+ array_include_methods (~> 1.4.0)
14
+ facets (>= 3.1.0, < 4.0.0)
15
+ glimmer-dsl-libui (0.7.5)
16
+ chunky_png (~> 1.4.0)
17
+ color (~> 1.8)
18
+ equalizer (= 0.0.11)
19
+ glimmer (~> 2.7.3)
20
+ libui (~> 0.1.2.pre)
21
+ os (>= 1.0.0, < 2.0.0)
22
+ perfect-shape (~> 1.0.7)
23
+ rouge (>= 3.26.0, < 4.0.0)
24
+ super_module (~> 1.4.1)
25
+ json (2.6.3)
26
+ libui (0.1.2.pre-x64-mingw)
27
+ matrix (0.4.2)
28
+ method_source (1.0.0)
29
+ minitest (5.18.0)
30
+ mustermann (3.0.0)
31
+ ruby2_keywords (~> 0.0.1)
32
+ mvcStudentXD (1.2.2)
33
+ mysql2 (0.5.5)
34
+ os (1.1.4)
35
+ parallel (1.23.0)
36
+ parser (3.2.2.1)
37
+ ast (~> 2.4.1)
38
+ perfect-shape (1.0.7)
39
+ equalizer (>= 0.0.11, < 1.1.0)
40
+ matrix (>= 0.4.2, < 1.1.0)
41
+ rack (2.2.7)
42
+ rack-protection (3.0.6)
43
+ rack
44
+ rainbow (3.1.1)
45
+ regexp_parser (2.8.0)
46
+ rexml (3.2.5)
47
+ rouge (3.30.0)
48
+ rubocop (1.50.2)
49
+ json (~> 2.3)
50
+ parallel (~> 1.10)
51
+ parser (>= 3.2.0.0)
52
+ rainbow (>= 2.2.2, < 4.0)
53
+ regexp_parser (>= 1.8, < 3.0)
54
+ rexml (>= 3.2.5, < 4.0)
55
+ rubocop-ast (>= 1.28.0, < 2.0)
56
+ ruby-progressbar (~> 1.7)
57
+ unicode-display_width (>= 2.4.0, < 3.0)
58
+ rubocop-ast (1.28.1)
59
+ parser (>= 3.2.1.0)
60
+ ruby-progressbar (1.13.0)
61
+ ruby2_keywords (0.0.5)
62
+ sinatra (3.0.6)
63
+ mustermann (~> 3.0)
64
+ rack (~> 2.2, >= 2.2.4)
65
+ rack-protection (= 3.0.6)
66
+ tilt (~> 2.0)
67
+ super_module (1.4.1)
68
+ method_source (>= 0.8.2, < 1.1.0)
69
+ thin (1.8.2)
70
+ daemons (~> 1.0, >= 1.0.9)
71
+ eventmachine (~> 1.0, >= 1.0.4)
72
+ rack (>= 1, < 3)
73
+ tilt (2.1.0)
74
+ unicode-display_width (2.4.2)
75
+ win32api (0.1.0)
76
+
77
+ PLATFORMS
78
+ x64-mingw-ucrt
79
+
80
+ DEPENDENCIES
81
+ glimmer-dsl-libui (~> 0.7.4)
82
+ minitest
83
+ mvcStudentXD (~> 1.2, >= 1.2.2)
84
+ mysql2
85
+ rubocop
86
+ sinatra (~> 3.0, >= 3.0.6)
87
+ thin (~> 1.8, >= 1.8.2)
88
+ win32api
89
+
90
+ BUNDLED WITH
91
+ 2.4.12
data/Lab1/arr1_3.txt ADDED
@@ -0,0 +1 @@
1
+ 1 3 -4 6 8 -3 -5 10
data/Lab1/lb1_1.rb ADDED
@@ -0,0 +1,19 @@
1
+ puts 'Hello World'
2
+ puts "Hello, #{ARGV[0]}."
3
+ puts "Какой твой любимый язык?"
4
+
5
+ r = STDIN.gets.chomp
6
+ case r
7
+ when 'ruby'
8
+ puts 'Подлиза'
9
+ else
10
+ puts 'Почему не руби?!'
11
+ end
12
+
13
+ puts 'Enter ruby command: '
14
+ comRuby = STDIN.gets.chomp
15
+ system "ruby -e \'#{comRuby}\'"
16
+
17
+ puts 'Enter OS command: '
18
+ comSys = STDIN.gets.chomp
19
+ puts `#{comSys}`
data/Lab1/lb1_2.rb ADDED
@@ -0,0 +1,28 @@
1
+ #var2
2
+ def vzaimProst(num1, num2)
3
+ if(num1.gcd(num2)==1) then true
4
+ else false
5
+ end
6
+ end
7
+
8
+ def formArrDel(num)
9
+ return 1.upto(num).select{|e| num%e==0}
10
+ end
11
+
12
+ def meth1(num1)
13
+ return 2.upto(num1-1).count{|e| num1.gcd(e)==1}
14
+ end
15
+
16
+ def meth2(num)
17
+ return num.digits.select{|e| e%3==0}.sum
18
+ end
19
+
20
+ def meth3(num)
21
+ #formirovat massiv iz kol-va vzaimno-prostih s dannim
22
+ arr = formArrDel(num).map{|e| num.digits.count{|e1| e.gcd(e1)==1}}
23
+ return formArrDel(num)[arr.rindex(arr.max)]
24
+ end
25
+
26
+ puts meth1(16)
27
+ puts meth2(161718192023)
28
+ puts meth3(17)
data/Lab1/lb1_3.rb ADDED
@@ -0,0 +1,46 @@
1
+ def minArr(arr)
2
+ minim=arr[0]
3
+ for i in 0..arr.length
4
+ if arr[i].to_i<minim
5
+ then minim=arr[i].to_i
6
+ end
7
+ end
8
+ return minim
9
+ end
10
+
11
+ def firstPos(arr)
12
+ for i in 0..arr.length
13
+ return i if arr[i].to_i>0
14
+ end
15
+ return -1
16
+ end
17
+
18
+ if ARGV.count<2
19
+ puts 'Введите 2 аргумента(метод, путь)!!!'
20
+ return
21
+ end
22
+
23
+ meth = ARGV[0]
24
+ path = ARGV[1]
25
+
26
+ file = File.open(path)
27
+ array = file.readline.split(' ').map(&:to_i)
28
+ file.close()
29
+
30
+ puts "Array: #{array}\n"
31
+
32
+ case meth
33
+ when 'minArr'
34
+ puts "Min in arr: #{minArr(array)}"
35
+ when 'fP'
36
+ puts "First positive in arr: #{firstPos(array)}"
37
+ else
38
+ puts "Unknown method"
39
+ end
40
+
41
+
42
+
43
+
44
+ #a=[1,3,-4,6,8,-3,-5, 10]
45
+ #puts minArr(a)
46
+ #puts firstPos(a)
data/Lab1/lb1_4.rb ADDED
@@ -0,0 +1,82 @@
1
+ def idxMin(arr)
2
+ return arr.index(arr.min)
3
+ end
4
+
5
+
6
+ def countInterval(arr, a, b)
7
+ return arr.slice(a+1...b).length
8
+ end
9
+
10
+
11
+ def idxLastMin(arr)
12
+ return arr.rindex(arr.min)
13
+ end
14
+
15
+ def betweenMins(arr)
16
+ return countInterval(arr,idxMin(arr),idxLastMin(arr))
17
+ end
18
+
19
+ def countInNums(arr, a, b)
20
+ return arr.select{|e| e.between?(a,b)}.length
21
+ end
22
+
23
+ def differ2Arrs(arr1, arr2)
24
+ return arr1.find_all{|x| arr1.count(x)==1}.difference(arr2).union(arr2.find_all{|x| arr2.count(x)==1}.difference(arr1))
25
+ end
26
+
27
+ #a=[1,3,-4,-5,6,8,-3,-5,10,3]
28
+ #b=[2,8,-4,-7,6,12,-15,-3,1,1]
29
+
30
+ puts "Вечер добрый! Какую программу запустим?
31
+
32
+ 2 - idxMin
33
+ 14 - count in countInterval
34
+ 26 - betweenMins
35
+ 38 - countInNums
36
+ 50 - differenceBetween2Arrs"
37
+
38
+ meth = gets.chomp.to_i
39
+
40
+ case meth
41
+ when meth = 2
42
+ puts "Введите массив для обработки"
43
+ arr = gets.chomp.split(' ').map(&:to_i)
44
+ puts "Введённый массив: #{arr.inspect}"
45
+ puts idxMin(arr)
46
+ when meth = 14
47
+ puts "Введите массив для обработки"
48
+ arr = gets.chomp.split(' ').map(&:to_i)
49
+ puts "Введите a"
50
+ a = gets.chomp.to_i
51
+ puts "Введите b"
52
+ b = gets.chomp.to_i
53
+ puts countInterval(arr,a,b)
54
+ when meth = 26
55
+ puts "Введите массив для обработки"
56
+ arr = gets.chomp.split(' ').map(&:to_i)
57
+ puts betweenMins(arr)
58
+ when meth = 38
59
+ puts "Введите массив для обработки"
60
+ arr = gets.chomp.split(' ').map(&:to_i)
61
+ puts "Введите a"
62
+ a = gets.chomp.to_i
63
+ puts "Введите b"
64
+ b = gets.chomp.to_i
65
+ puts countInNums(arr,a,b)
66
+ when meth = 50
67
+ puts "Введите 1 массив для обработки"
68
+ arr1 = gets.chomp.split(' ').map(&:to_i)
69
+ puts "Введите 2 массив для обработки"
70
+ arr2 = gets.chomp.split(' ').map(&:to_i)
71
+ puts differ2Arrs(arr1, arr2)
72
+ else
73
+ puts "Error"
74
+ end
75
+
76
+
77
+ #puts "Array: #{a}\n"
78
+ #puts idxMin(a)
79
+ #puts countInterval(a, 5, -1)
80
+ #puts betweenMins(a)
81
+ #puts countInNums(a, -1, 10)
82
+ #puts differ2Arrs(a, b)
data/Lab2/1Class.jpg ADDED
Binary file
data/Lab2/Web/main.rb ADDED
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+ require 'mс_gem'
5
+
6
+ set :port, 8000
7
+
8
+ puts MvcStudentXD.constants
9
+
10
+ students_model = MvcStudentXD::StudentListAdv.new(
11
+ MvcStudentXD::StudentsListDBAdapter.new(
12
+ MvcStudentXD::StudentListDB.instance))
13
+
14
+ main_controller = StudentListController.new(students_model)
15
+ main_controller.on_view_created = lambda { }
16
+ main_controller.on_add_student_clicked = lambda { }
17
+ main_controller.on_edit_student_clicked = lambda { |id| }
18
+
19
+ main_controller.selected_page = 0
20
+
21
+ editing_id = nil
22
+
23
+ get "/" do
24
+ send_file 'web/main.html'
25
+ end
26
+
27
+ post "/students" do
28
+ main_controller.refresh_data()
29
+ result = main_controller.data_list.map { |student|
30
+ student.as_json
31
+ }
32
+
33
+ result.to_json
34
+ end
35
+
36
+ post "/next_page" do
37
+ main_controller.next_page()
38
+ main_controller.refresh_data()
39
+ end
40
+
41
+ post "/last_page" do
42
+ main_controller.last_page()
43
+ main_controller.update_table()
44
+ end
45
+
46
+ get "/get_page" do
47
+ (main_controller.selected_page + 1).to_s
48
+ end
49
+
50
+ get "/get_pages_count" do
51
+ main_controller.pages_count.to_s
52
+ end
53
+
54
+ post "/set_editing_id:id" do
55
+ puts params[:id]
56
+ editing_id = params[:id]
57
+ end
58
+
59
+ get "/get_editing_id" do
60
+ editing_id.to_s
61
+ end
62
+
63
+ post "/delete:id" do
64
+ main_controller.remove_student(params[:id])
65
+ end
66
+
67
+ post "/editing:id" do
68
+ student = main_controller.get_student(params[:id])
69
+ [student.as_json].to_json
70
+ end
71
+
72
+ get "/add" do
73
+ if editing_id == 'null'
74
+ main_controller.show_modal_add
75
+ else
76
+ main_controller.show_modal_edit(editing_id)
77
+ end
78
+ send_file 'web/add.html'
79
+ end
80
+
81
+ get "/edit:student" do
82
+ student = Student.from_json(JSON.parse(params[:student]))
83
+ main_controller.replace_student(student.id, student)
84
+ end
85
+
86
+ get "/insert:student" do
87
+ student = Student.from_json(JSON.parse(params[:student]))
88
+ main_controller.add_student(student)
89
+ end
@@ -0,0 +1,168 @@
1
+ <html>
2
+ <style>
3
+ .text {
4
+ font-size: 20px;
5
+ font-weight: bold;
6
+ color: #000000;
7
+ }
8
+
9
+ .txbox {
10
+ font-size: 16px;
11
+ padding: 7px;
12
+ border: 1px solid #050505;
13
+ }
14
+
15
+ .bt {
16
+ font-size: 15px;
17
+ padding: 5px 10px;
18
+ background-color: #5117d6;
19
+ color: #fff;
20
+ border: none;
21
+ border-radius: 5px;
22
+ cursor: pointer;
23
+ margin: 16px;
24
+ }
25
+
26
+ .bt:hover {
27
+ background-color: #22b91d;
28
+ }
29
+ </style>
30
+
31
+ <body style="display: flex; flex-direction: column; width: 256px;">
32
+ <label class="text" for="user_name">Фамилия</label>
33
+ <input class ="txbox" type="text" id="lastname">
34
+
35
+ <label class="text" for="user_name">Имя</label>
36
+ <input class ="txbox" type="text" id="firstname">
37
+
38
+ <label class="text" for="user_name">Отчество</label>
39
+ <input class ="txbox" type="text" id="parental_name">
40
+
41
+ <label class="text" for="user_name">GitHub</label>
42
+ <input class ="txbox" type="text" id="git">
43
+
44
+ <label class="text" for="user_name">Телефон</label>
45
+ <input class ="txbox" type="text" id="phone">
46
+
47
+ <label class="text" for="user_name">Почта</label>
48
+ <input class ="txbox" type="text" id="email">
49
+
50
+ <label class="text" for="user_name">Телеграм</label>
51
+ <input class ="txbox" type="text" id="telegram">
52
+
53
+ <button class ="bt" onclick="check_button()">Готово</button>
54
+ </body>
55
+
56
+ <script>
57
+ let is_edit_mode = false
58
+ let id = null
59
+
60
+ function check_button() {
61
+ if (document.getElementById('firstname').value === "") {
62
+ alert("Имя не введено")
63
+ return
64
+ }
65
+
66
+ if (document.getElementById('lastname').value === "") {
67
+ alert("Фамилия не введена")
68
+ return
69
+ }
70
+
71
+ if (document.getElementById('parental_name').value === "") {
72
+ alert("Отчество не введено")
73
+ return
74
+ }
75
+
76
+ if (document.getElementById('git').value !== "" && document.getElementById('git').value.match(/@\w*/) == null) {
77
+ alert("Неверно введен GitHub")
78
+ return
79
+ }
80
+
81
+ if (document.getElementById('email').value !== "" && document.getElementById('email').value.match(/\w*@\w*.\w{2,3}/) == null) {
82
+ alert("Неверно введена почта")
83
+ return
84
+ }
85
+
86
+ if (document.getElementById('phone').value !== "" && document.getElementById('phone').value.match(/\d-\d{3}-\d{3}-\d{2}-\d{2}/) == null) {
87
+ alert("Неверно введен номер телефона")
88
+ return
89
+ }
90
+
91
+ if (document.getElementById('telegram').value !== "" && document.getElementById('telegram').value.match(/@\w*/) == null) {
92
+ alert("Неверно введена телеграм")
93
+ return
94
+ }
95
+
96
+ if (document.getElementById('git').value === "" && document.getElementById('phone').value == "" && document.getElementById('email').value == "" && document.getElementById('telegram').value == "") {
97
+ alert("Отсутствует контакт")
98
+ return
99
+ }
100
+
101
+ add_student()
102
+ }
103
+
104
+ function get_editing_student() {
105
+ var http = new XMLHttpRequest();
106
+ http.open('GET', 'get_editing_id', false);
107
+ http.send()
108
+
109
+ id = http.responseText
110
+
111
+
112
+ if (id !== "null") {
113
+ is_edit_mode = true
114
+
115
+ http.open('POST', 'editing' + id, false);
116
+ http.send()
117
+
118
+ let student = JSON.parse(http.responseText)
119
+
120
+ document.getElementById('firstname').value = student[0]["firstname"]
121
+ document.getElementById('lastname').value = student[0]["lastname"]
122
+ document.getElementById('parental_name').value = student[0]["parental_name"]
123
+ document.getElementById('git').value = student[0]["git"]
124
+ document.getElementById('email').value = student[0]["email"]
125
+ document.getElementById('phone').value = student[0]["phone"]
126
+ document.getElementById('telegram').value = student[0]["telegram"]
127
+ }
128
+ }
129
+
130
+ function add_student() {
131
+ let json = {
132
+ "firstname": document.getElementById('firstname').value,
133
+ "lastname": document.getElementById('lastname').value,
134
+ "parental_name": document.getElementById('parental_name').value
135
+ }
136
+
137
+ if (id != null) {
138
+ json['id'] = id
139
+ }
140
+ if (document.getElementById('git').value !== "") {
141
+ json['git'] = document.getElementById('git').value
142
+ }
143
+ if (document.getElementById('email').value !== "") {
144
+ json['email'] = document.getElementById('email').value
145
+ }
146
+ if (document.getElementById('phone').value !== "") {
147
+ json['phone'] = document.getElementById('phone').value
148
+ }
149
+ if (document.getElementById('telegram').value !== "") {
150
+ json['telegram'] = document.getElementById('telegram').value
151
+ }
152
+
153
+ var http = new XMLHttpRequest();
154
+
155
+ if (is_edit_mode) {
156
+ http.open('GET', "edit" + JSON.stringify(json), false);
157
+ http.send()
158
+ } else {
159
+ http.open('GET', "insert" + JSON.stringify(json), false);
160
+ http.send()
161
+ }
162
+
163
+ window.location.replace("/");
164
+ }
165
+
166
+ get_editing_student()
167
+ </script>
168
+ </html>