From 011d8e18831511b2831b2f6c171c42b7620801ab Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 26 Feb 2021 15:51:49 +0200 Subject: Major rework over the code in Karoteka VB.Net projects, moved Person class in it's own file --- .../Kartoteka/Kartoteka/Form1.Designer.vb | 21 ++++- VB.Net Projects/Kartoteka/Kartoteka/Form1.vb | 102 ++++++--------------- VB.Net Projects/Kartoteka/Kartoteka/Person.vb | 17 ++++ 3 files changed, 62 insertions(+), 78 deletions(-) create mode 100644 VB.Net Projects/Kartoteka/Kartoteka/Person.vb diff --git a/VB.Net Projects/Kartoteka/Kartoteka/Form1.Designer.vb b/VB.Net Projects/Kartoteka/Kartoteka/Form1.Designer.vb index f93855b..aa81cfb 100644 --- a/VB.Net Projects/Kartoteka/Kartoteka/Form1.Designer.vb +++ b/VB.Net Projects/Kartoteka/Kartoteka/Form1.Designer.vb @@ -42,6 +42,7 @@ Partial Class Form1 Me.Label2 = New System.Windows.Forms.Label() Me.Label1 = New System.Windows.Forms.Label() Me.TabPage2 = New System.Windows.Forms.TabPage() + Me.btnGetReport = New System.Windows.Forms.Button() Me.lblPersonData = New System.Windows.Forms.Label() Me.cbNames = New System.Windows.Forms.ComboBox() Me.Label7 = New System.Windows.Forms.Label() @@ -89,6 +90,7 @@ Partial Class Form1 ' 'lblStatus ' + Me.lblStatus.ForeColor = System.Drawing.Color.Green Me.lblStatus.Location = New System.Drawing.Point(100, 206) Me.lblStatus.Name = "lblStatus" Me.lblStatus.Size = New System.Drawing.Size(250, 47) @@ -230,6 +232,7 @@ Partial Class Form1 ' 'TabPage2 ' + Me.TabPage2.Controls.Add(Me.btnGetReport) Me.TabPage2.Controls.Add(Me.lblPersonData) Me.TabPage2.Controls.Add(Me.cbNames) Me.TabPage2.Controls.Add(Me.Label7) @@ -241,28 +244,37 @@ Partial Class Form1 Me.TabPage2.Text = "Справки" Me.TabPage2.UseVisualStyleBackColor = True ' + 'btnGetReport + ' + Me.btnGetReport.Location = New System.Drawing.Point(363, 11) + Me.btnGetReport.Name = "btnGetReport" + Me.btnGetReport.Size = New System.Drawing.Size(71, 23) + Me.btnGetReport.TabIndex = 20 + Me.btnGetReport.Text = "Изведи" + Me.btnGetReport.UseVisualStyleBackColor = True + ' 'lblPersonData ' Me.lblPersonData.AutoSize = True Me.lblPersonData.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point) Me.lblPersonData.Location = New System.Drawing.Point(12, 77) Me.lblPersonData.Name = "lblPersonData" - Me.lblPersonData.Size = New System.Drawing.Size(128, 21) + Me.lblPersonData.Size = New System.Drawing.Size(169, 21) Me.lblPersonData.TabIndex = 19 - Me.lblPersonData.Text = "Информация за:" + Me.lblPersonData.Text = "Изведете потребител!" ' 'cbNames ' Me.cbNames.FormattingEnabled = True Me.cbNames.Location = New System.Drawing.Point(52, 11) Me.cbNames.Name = "cbNames" - Me.cbNames.Size = New System.Drawing.Size(375, 23) + Me.cbNames.Size = New System.Drawing.Size(305, 23) Me.cbNames.TabIndex = 1 ' 'Label7 ' Me.Label7.AutoSize = True - Me.Label7.Location = New System.Drawing.Point(12, 14) + Me.Label7.Location = New System.Drawing.Point(12, 15) Me.Label7.Name = "Label7" Me.Label7.Size = New System.Drawing.Size(34, 15) Me.Label7.TabIndex = 0 @@ -308,4 +320,5 @@ Partial Class Form1 Friend WithEvents Label7 As Label Friend WithEvents lblStatus As Label Friend WithEvents lblPersonData As Label + Friend WithEvents btnGetReport As Button End Class diff --git a/VB.Net Projects/Kartoteka/Kartoteka/Form1.vb b/VB.Net Projects/Kartoteka/Kartoteka/Form1.vb index be6fc4a..c15ee25 100644 --- a/VB.Net Projects/Kartoteka/Kartoteka/Form1.vb +++ b/VB.Net Projects/Kartoteka/Kartoteka/Form1.vb @@ -1,95 +1,49 @@ -Imports Newtonsoft.Json +Imports System.ComponentModel ' Required for BindingList +Imports System.IO ' Required for File +Imports Newtonsoft.Json ' Required for JsonConvert Public Class Form1 - ' The "C:\" directory is protected, only administrator priviledges can write to it, - ' so instead I save the file to the desktop (of the current user) + ' Only administrators can write to "C:\", so instead we save the file to the desktop of the current user ReadOnly filePath As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\Desktop\data.json" - ReadOnly people As List(Of Person) = New List(Of Person) + ' Normal lists don't give out a "signal" when a value is added, which we need so cbNames updates when we update people + ReadOnly people As BindingList(Of Person) = New BindingList(Of Person) - Private Sub btnInput_Click(sender As Object, e As EventArgs) Handles btnInput.Click - Dim newPerson = New Person(txtFirstName.Text, txtMiddleName.Text, txtLastName.Text, txtPhoneNumber.Text, txtEmail.Text, dtBirth.Value) - - people.Add(newPerson) - cbNames.Items.Add($"{people.Count() - 1} || {newPerson.GetFullName()}") - - changeStatus("Въведено!") + Private Sub initDataSource(sender As Object, e As EventArgs) Handles MyBase.Load + cbNames.DataSource = people End Sub - Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click, MyBase.Load - txtFirstName.ResetText() - txtMiddleName.ResetText() - txtLastName.ResetText() - txtPhoneNumber.ResetText() - txtEmail.ResetText() - dtBirth.Value = Date.Now - changeStatus(String.Empty) + Private Sub resetInputTab(sender As Object, e As EventArgs) Handles btnClear.Click, MyBase.Load + For Each control As Control In {txtFirstName, txtMiddleName, txtLastName, txtPhoneNumber, txtEmail, lblStatus, dtBirth} + control.ResetText() + Next End Sub - Private Sub resetReportTab(sender As Object, e As EventArgs) Handles MyBase.Load - cbNames.Items.Clear() - cbNames.ResetText() - lblPersonData.Text = "Изберете потребител!" + Private Sub btnInput_Click(sender As Object, e As EventArgs) Handles btnInput.Click + people.Add(New Person(txtFirstName.Text, txtMiddleName.Text, txtLastName.Text, txtPhoneNumber.Text, txtEmail.Text, dtBirth.Value)) + lblStatus.Text = "Въведено!" End Sub Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click - FileOpen(1, filePath, OpenMode.Output) - - ' Json Serialization, as it's an easier and a more universal way to serialize data - Print(1, JsonConvert.SerializeObject(people)) - - FileClose(1) - changeStatus("Данните са запазени във файла успешно!") + ' Json Serialization is easier, more universal and more flexible than having a custom serialization + File.WriteAllText(filePath, JsonConvert.SerializeObject(people)) + lblStatus.Text = "Данните са запазени във файла успешно!" End Sub Private Sub btnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click - FileOpen(1, filePath, OpenMode.Input) - + Dim deserializedPeople = JsonConvert.DeserializeObject(Of List(Of Person))(File.ReadAllText(filePath)) people.Clear() - people.AddRange(JsonConvert.DeserializeObject(LineInput(1), GetType(List(Of Person)))) - - resetReportTab(sender, e) - cbNames.Items.AddRange(people.Select(Function(p, i) $"{i} || {p.GetFullName()}").ToArray()) + deserializedPeople.ForEach(Sub(p) people.Add(p)) - FileClose(1) - changeStatus("Данните са заредени от файла успешно!") + lblStatus.Text = "Данните от файла са заредени успешно!" End Sub - Private Sub cbNames_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbNames.SelectedIndexChanged - lblPersonData.Text = $"Информация за:{Environment.NewLine}{Environment.NewLine}" + people(cbNames.SelectedIndex).ToString() + Private Sub btnGetReport_Click(sender As Object, e As EventArgs) Handles btnGetReport.Click + Dim selectedPerson As Person = people(cbNames.SelectedIndex) + lblPersonData.Text = $"Информация за:{vbCrLf}{vbCrLf}" & + $"Имена: {selectedPerson}{vbCrLf}" & + $"Телефон: {selectedPerson.PhoneNumber}{vbCrLf}" & + $"E-mail: {selectedPerson.Email}{vbCrLf}" & + $"Рожденна дата: {selectedPerson.BirthDay}{vbCrLf}" End Sub - - Private Sub changeStatus(message As String) - lblStatus.ForeColor = Color.Green - lblStatus.Text = message - End Sub -End Class - -Public Class Person - Public FirstName As String - Public MiddleName As String - Public LastName As String - Public PhoneNumber As String - Public Email As String - Public BirthDay As Date - - Public Sub New(firstName As String, middleName As String, lastName As String, phoneNumber As String, email As String, birthDay As Date) - Me.FirstName = firstName - Me.MiddleName = middleName - Me.LastName = lastName - Me.PhoneNumber = phoneNumber - Me.Email = email - Me.BirthDay = birthDay - End Sub - - Public Function GetFullName() - Return $"{Me.FirstName} {Me.MiddleName} {Me.LastName}" - End Function - - Public Overrides Function ToString() As String - Return $"Имена: {Me.FirstName} {Me.MiddleName} {Me.LastName}{Environment.NewLine}" + - $"Телефон: {Me.PhoneNumber}{Environment.NewLine}" + - $"E-mail: {Me.Email}{Environment.NewLine}" + - $"Рожденна дата: {Me.BirthDay}{Environment.NewLine}" - End Function End Class \ No newline at end of file diff --git a/VB.Net Projects/Kartoteka/Kartoteka/Person.vb b/VB.Net Projects/Kartoteka/Kartoteka/Person.vb new file mode 100644 index 0000000..962d237 --- /dev/null +++ b/VB.Net Projects/Kartoteka/Kartoteka/Person.vb @@ -0,0 +1,17 @@ +Public Class Person + Public FirstName, MiddleName, LastName, PhoneNumber, Email As String + Public BirthDay As Date + + Public Sub New(firstName As String, middleName As String, lastName As String, phoneNumber As String, email As String, birthDay As Date) + Me.FirstName = firstName + Me.MiddleName = middleName + Me.LastName = lastName + Me.PhoneNumber = phoneNumber + Me.Email = email + Me.BirthDay = birthDay + End Sub + + Public Overrides Function ToString() As String + Return $"{Me.FirstName} {Me.MiddleName} {Me.LastName}" + End Function +End Class \ No newline at end of file -- cgit v1.2.3