From 112780852868383de098527af930d263fe40c8f7 Mon Sep 17 00:00:00 2001 From: JemyNathanael Date: Fri, 15 Mar 2024 17:06:12 +0700 Subject: [PATCH] initial commit --- ExamNETIntermediate/Exam WinForms.docx | Bin 209231 -> 209142 bytes ExamNETIntermediate/Form1.Designer.cs | 234 ++++++++++++++++++++- ExamNETIntermediate/Form1.cs | 253 +++++++++++++++++++++++ ExamNETIntermediate/Form1.resx | 120 +++++++++++ ExamNETIntermediate/Models/GenreModel.cs | 14 ++ ExamNETIntermediate/Models/SongModel.cs | 30 +++ 6 files changed, 647 insertions(+), 4 deletions(-) create mode 100644 ExamNETIntermediate/Form1.resx create mode 100644 ExamNETIntermediate/Models/GenreModel.cs create mode 100644 ExamNETIntermediate/Models/SongModel.cs diff --git a/ExamNETIntermediate/Exam WinForms.docx b/ExamNETIntermediate/Exam WinForms.docx index a16ef9b99cba957d5f15d11cf227a8baf6abd866..0dd3d7f7e551e882e0a61ce6d32e666c2668678a 100644 GIT binary patch delta 12001 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 private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; + listBoxLagu = new ListBox(); + buttonRefresh = new Button(); + buttonAddInit = new Button(); + tableLayoutPanel1 = new TableLayoutPanel(); + textBoxTitle = new TextBox(); + textBoxArtist = new TextBox(); + comboBoxGenre = new ComboBox(); + checkBoxIsAvailable = new CheckBox(); + numericUpDownSecond = new NumericUpDown(); + numericUpDownMinute = new NumericUpDown(); + buttonAdd = new Button(); + buttonUpdate = new Button(); + buttonDelete = new Button(); + dateTimePickerRelease = new DateTimePicker(); + textBoxMessage = new TextBox(); + label1 = new Label(); + textBoxSearch = new TextBox(); + tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSecond).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownMinute).BeginInit(); + SuspendLayout(); + // + // listBoxLagu + // + listBoxLagu.FormattingEnabled = true; + listBoxLagu.Location = new Point(32, 12); + listBoxLagu.Name = "listBoxLagu"; + listBoxLagu.Size = new Size(490, 164); + listBoxLagu.TabIndex = 0; + listBoxLagu.SelectedIndexChanged += ListBoxLagu_SelectedIndexChanged; + // + // buttonRefresh + // + buttonRefresh.Location = new Point(528, 41); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(94, 29); + buttonRefresh.TabIndex = 1; + buttonRefresh.Text = "Refresh"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonAddInit + // + buttonAddInit.Location = new Point(528, 76); + buttonAddInit.Name = "buttonAddInit"; + buttonAddInit.Size = new Size(94, 29); + buttonAddInit.TabIndex = 3; + buttonAddInit.Text = "Add Song"; + buttonAddInit.UseVisualStyleBackColor = true; + buttonAddInit.Click += ButtonAddInit_Click; + // + // tableLayoutPanel1 + // + tableLayoutPanel1.AutoSize = true; + tableLayoutPanel1.ColumnCount = 2; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 39.11007F)); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60.88993F)); + tableLayoutPanel1.Controls.Add(textBoxTitle, 0, 0); + tableLayoutPanel1.Controls.Add(textBoxArtist, 1, 0); + tableLayoutPanel1.Controls.Add(comboBoxGenre, 0, 1); + tableLayoutPanel1.Controls.Add(checkBoxIsAvailable, 1, 1); + tableLayoutPanel1.Controls.Add(numericUpDownSecond, 1, 2); + tableLayoutPanel1.Controls.Add(numericUpDownMinute, 0, 2); + tableLayoutPanel1.Controls.Add(buttonAdd, 0, 3); + tableLayoutPanel1.Controls.Add(buttonUpdate, 0, 4); + tableLayoutPanel1.Controls.Add(buttonDelete, 1, 4); + tableLayoutPanel1.Controls.Add(dateTimePickerRelease, 1, 3); + tableLayoutPanel1.Location = new Point(221, 185); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 5; + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 42F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 41F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 43F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 59F)); + tableLayoutPanel1.Size = new Size(420, 253); + tableLayoutPanel1.TabIndex = 4; + // + // textBoxTitle + // + textBoxTitle.Location = new Point(3, 3); + textBoxTitle.Name = "textBoxTitle"; + textBoxTitle.PlaceholderText = "Enter Song Title"; + textBoxTitle.Size = new Size(125, 27); + textBoxTitle.TabIndex = 0; + // + // textBoxArtist + // + textBoxArtist.Location = new Point(167, 3); + textBoxArtist.Name = "textBoxArtist"; + textBoxArtist.PlaceholderText = "Enter Artist Name"; + textBoxArtist.Size = new Size(125, 27); + textBoxArtist.TabIndex = 1; + // + // comboBoxGenre + // + comboBoxGenre.FormattingEnabled = true; + comboBoxGenre.Location = new Point(3, 66); + comboBoxGenre.Name = "comboBoxGenre"; + comboBoxGenre.Size = new Size(150, 28); + comboBoxGenre.TabIndex = 2; + comboBoxGenre.Text = "Select Genre"; + // + // checkBoxIsAvailable + // + checkBoxIsAvailable.AutoSize = true; + checkBoxIsAvailable.Location = new Point(167, 66); + checkBoxIsAvailable.Name = "checkBoxIsAvailable"; + checkBoxIsAvailable.Size = new Size(93, 24); + checkBoxIsAvailable.TabIndex = 3; + checkBoxIsAvailable.Text = "Available"; + checkBoxIsAvailable.UseVisualStyleBackColor = true; + // + // numericUpDownSecond + // + numericUpDownSecond.Location = new Point(167, 129); + numericUpDownSecond.Name = "numericUpDownSecond"; + numericUpDownSecond.Size = new Size(150, 27); + numericUpDownSecond.TabIndex = 5; + // + // numericUpDownMinute + // + numericUpDownMinute.Location = new Point(3, 129); + numericUpDownMinute.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + numericUpDownMinute.Name = "numericUpDownMinute"; + numericUpDownMinute.Size = new Size(150, 27); + numericUpDownMinute.TabIndex = 4; + // + // buttonAdd + // + buttonAdd.Location = new Point(3, 171); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 29); + buttonAdd.TabIndex = 8; + buttonAdd.Text = "Add"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonUpdate + // + buttonUpdate.Location = new Point(3, 212); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(94, 29); + buttonUpdate.TabIndex = 10; + buttonUpdate.Text = "Update"; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonDelete + // + buttonDelete.Location = new Point(167, 212); + buttonDelete.Name = "buttonDelete"; + buttonDelete.Size = new Size(94, 29); + buttonDelete.TabIndex = 9; + buttonDelete.Text = "Delete"; + buttonDelete.UseVisualStyleBackColor = true; + buttonDelete.Click += ButtonDelete_Click; + // + // dateTimePickerRelease + // + dateTimePickerRelease.Location = new Point(167, 171); + dateTimePickerRelease.Name = "dateTimePickerRelease"; + dateTimePickerRelease.Size = new Size(250, 27); + dateTimePickerRelease.TabIndex = 11; + // + // textBoxMessage + // + textBoxMessage.Location = new Point(42, 314); + textBoxMessage.Name = "textBoxMessage"; + textBoxMessage.Size = new Size(161, 27); + textBoxMessage.TabIndex = 11; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(32, 258); + label1.Name = "label1"; + label1.Size = new Size(186, 20); + label1.TabIndex = 5; + label1.Text = "Duration (Minute, Second):"; + // + // textBoxSearch + // + textBoxSearch.Location = new Point(530, 128); + textBoxSearch.Name = "textBoxSearch"; + textBoxSearch.PlaceholderText = "Enter song title or artist to search"; + textBoxSearch.Size = new Size(258, 27); + textBoxSearch.TabIndex = 6; + textBoxSearch.TextAlign = HorizontalAlignment.Center; + textBoxSearch.TextChanged += TextBoxSearch_TextChanged; + // + // Form1 + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(textBoxSearch); + Controls.Add(label1); + Controls.Add(tableLayoutPanel1); + Controls.Add(buttonAddInit); + Controls.Add(buttonRefresh); + Controls.Add(listBoxLagu); + Controls.Add(textBoxMessage); + Name = "Form1"; + Text = "Form1"; + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSecond).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownMinute).EndInit(); + ResumeLayout(false); + PerformLayout(); } #endregion + + private ListBox listBoxLagu; + private Button buttonRefresh; + private Button buttonAddInit; + private TableLayoutPanel tableLayoutPanel1; + private TextBox textBoxTitle; + private TextBox textBoxArtist; + private ComboBox comboBoxGenre; + private CheckBox checkBoxIsAvailable; + private NumericUpDown numericUpDownMinute; + private NumericUpDown numericUpDownSecond; + private Button buttonAdd; + private Button buttonDelete; + private Button buttonUpdate; + private Label label1; + private TextBox textBoxSearch; + private TextBox textBoxMessage; + private DateTimePicker dateTimePickerRelease; } } diff --git a/ExamNETIntermediate/Form1.cs b/ExamNETIntermediate/Form1.cs index 3302c50..de7a4df 100644 --- a/ExamNETIntermediate/Form1.cs +++ b/ExamNETIntermediate/Form1.cs @@ -1,10 +1,263 @@ +using ExamNETIntermediate.Models; +using Newtonsoft.Json; +using System.Text; +using System.Text.Json; + namespace ExamNETIntermediate { public partial class Form1 : Form { + public List SongModels { get; set; } = new List(); + public List Genres { get; set; } = new List(); + public HttpClient _httpClient { get; set; } = new HttpClient(); public Form1() { InitializeComponent(); + PopulateListBox(); + PopulateComboBox(); + } + + // Simple Methods to set length in minute and second + public int LengthConvertMinute(int length) + { + int minute = length / 60; + return minute; + } + + public int LengthConvertSecond(int length) + { + int second = length & 60; + return second; + } + + // Method to convert input music length to actual length in seconds + public int LengthInSecond(int minute, int second) + { + return (minute * 60) + second; + } + + // Method to generate List Box value + public async Task PopulateListBox() + { + var response = await _httpClient.GetAsync("https://new-dev.accelist.com:10000/api/song"); + response.EnsureSuccessStatusCode(); + var jsonContent = await response.Content.ReadAsStringAsync(); + + var content = JsonConvert.DeserializeObject>(jsonContent); + if (content != null) /// Jika Objek sudah di deserialisasi, dan object tidak null, maka SongModels akan diisi oleh object + { + SongModels = content; + } + + listBoxLagu.Items.Clear(); + listBoxLagu.Items.AddRange(SongModels.ToArray()); + + listBoxLagu.DisplayMember = "Title"; + } + + // Method to generate combo box value + public async void PopulateComboBox() + { + var response = await _httpClient.GetAsync("https://new-dev.accelist.com:10000/api/genre"); + response.EnsureSuccessStatusCode(); + + var jsonContent = await response.Content.ReadAsStringAsync(); + var genres = JsonConvert.DeserializeObject>(jsonContent); + + if (genres != null) + { + Genres = genres; + } + comboBoxGenre.Items.Clear(); + comboBoxGenre.Items.AddRange(Genres.ToArray()); + comboBoxGenre.DisplayMember = "GenreName"; + } + + // Method to select the current index option and then auto fill the properties in tableLayout + private void ListBoxLagu_SelectedIndexChanged(object sender, EventArgs e) + { + var selectedItem = listBoxLagu.SelectedItem as SongModel; + if (selectedItem == null) return; + textBoxTitle.Text = selectedItem.Title; + textBoxArtist.Text = selectedItem.Artist; + checkBoxIsAvailable.Checked = selectedItem.IsAvailable; + int length = selectedItem.Length; + int minute = LengthConvertMinute(length); + int second = LengthConvertSecond(length); + numericUpDownMinute.Value = minute; + numericUpDownSecond.Value = second; + + var currentGenre = Genres.Where(R => R.GenreName == selectedItem.GenreName).FirstOrDefault(); + + comboBoxGenre.SelectedItem = currentGenre; + } + + /// Method to add new song data into the list + private async void ButtonAdd_Click(object sender, EventArgs e) + { + var songName = textBoxTitle.Text; + var songArtist = textBoxArtist.Text; + var selectedGenre = comboBoxGenre.SelectedItem as GenreModel; + int selectedMinute = (int)numericUpDownMinute.Value; + int selectedSecond = (int)numericUpDownSecond.Value; + var asSecond = LengthInSecond(selectedMinute, selectedSecond); + + + // Validation logic + if (string.IsNullOrEmpty(songName) || string.IsNullOrEmpty(songArtist)) + { + textBoxMessage.Text = "Song or artist name can't be empty!"; + return; + } + else if (selectedGenre == null) + { + textBoxMessage.Text = "Genre can't be empty"; + return; + } + else if (selectedMinute <= 0 || selectedMinute >= 59) + { + textBoxMessage.Text = "Minute must be between 1 and 59"; + return; + } + else if (selectedSecond <= 0 && selectedMinute == 0 || selectedSecond >= 59) + { + textBoxMessage.Text = "Second must be between 0 and 59"; + return; + } + + var songModel = new SongModelInput() + { + Title = songName, + Artist = songArtist, + GenreId = selectedGenre.GenreId, + IsAvailable = checkBoxIsAvailable.Checked, + Length = asSecond, + ReleaseDate = DateTime.UtcNow + }; + + var jsonString = JsonConvert.SerializeObject(songModel); + + var content = new StringContent(jsonString); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + + var response = await _httpClient.PostAsync("https://new-dev.accelist.com:10000/api/song", content); + response.EnsureSuccessStatusCode(); + if (response.IsSuccessStatusCode) + { + textBoxMessage.Text = "Added new Song"; + } + else + { + textBoxMessage.Text = "Failed to add new Song"; + } + await PopulateListBox(); + } + + private async void ButtonRefresh_Click(object sender, EventArgs e) + { + await PopulateListBox(); + } + + private async void ButtonDelete_Click(object sender, EventArgs e) + { + var selectedSongIndex = listBoxLagu.SelectedIndex; + var selectedSong = listBoxLagu.Items[selectedSongIndex] as SongModel; + + if (selectedSong == null) + { + textBoxMessage.Text = "Can't delete"; + return; + } + var response = await _httpClient.DeleteAsync($"https://new-dev.accelist.com:10000/api/song/{selectedSong.SongId}"); + + if (response.IsSuccessStatusCode) + { + textBoxMessage.Text = "Success"; + } + else + { + textBoxMessage.Text = "failed"; + } + + await PopulateListBox(); + } + + private async void ButtonUpdate_Click(object sender, EventArgs e) + { + if (listBoxLagu.SelectedItem != null) + { + var selectedSong = listBoxLagu.SelectedItem as SongModel; + var songName = textBoxTitle.Text; + var songArtist = textBoxArtist.Text; + var selectedGenre = comboBoxGenre.SelectedItem as GenreModel; + int selectedMinute = (int)numericUpDownMinute.Value; + int selectedSecond = (int)numericUpDownSecond.Value; + var asSecond = LengthInSecond(selectedMinute, selectedSecond); + + if (string.IsNullOrEmpty(songName)) + { + textBoxMessage.Text = "Song Name can't be empty"; + return; + } + + if (string.IsNullOrEmpty(songArtist)) + { + textBoxMessage.Text = "Song Artist can't be empty"; + return; + } + + var updateModel = new SongModelInput + { + SongId = selectedSong.SongId, + Title = songName, + IsAvailable = checkBoxIsAvailable.Checked, + Artist = songArtist, + Length = asSecond, + ReleaseDate = DateTime.UtcNow, + GenreId = selectedGenre.GenreId + }; + var jsonString = JsonConvert.SerializeObject(updateModel); + var content = new StringContent(jsonString); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + + var response = await _httpClient.PutAsync("https://new-dev.accelist.com:10000/api/song", content); + response.EnsureSuccessStatusCode(); + if (response.IsSuccessStatusCode) + { + textBoxMessage.Text = "Song updated"; + } + else + { + textBoxMessage.Text = "Failed to update Song"; + } + + } + await PopulateListBox(); + } + + private void ButtonAddInit_Click(object sender, EventArgs e) + { + ClearForm(); + } + + public void ClearForm() + { + listBoxLagu.SelectedItem = null; + textBoxTitle.Text = string.Empty; + textBoxArtist.Text = string.Empty; + comboBoxGenre.SelectedItem = null; + checkBoxIsAvailable.Checked = false; + numericUpDownMinute.Value = 0; + numericUpDownSecond.Value = 0; + dateTimePickerRelease.Value = DateTime.UtcNow; + } + + private void TextBoxSearch_TextChanged(object sender, EventArgs e) + { + var textToSearch = textBoxSearch.Text.ToLower(); + var filteredText = SongModels.Where(M => M.Title.ToLower().Contains(textToSearch)).ToList(); + listBoxLagu.Items.Clear(); + listBoxLagu.Items.AddRange(filteredText.ToArray()); } } } diff --git a/ExamNETIntermediate/Form1.resx b/ExamNETIntermediate/Form1.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ExamNETIntermediate/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ExamNETIntermediate/Models/GenreModel.cs b/ExamNETIntermediate/Models/GenreModel.cs new file mode 100644 index 0000000..11f2b96 --- /dev/null +++ b/ExamNETIntermediate/Models/GenreModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExamNETIntermediate.Models +{ + public class GenreModel + { + public int GenreId { get; set; } + public string GenreName { get; set; } = string.Empty; + } +} diff --git a/ExamNETIntermediate/Models/SongModel.cs b/ExamNETIntermediate/Models/SongModel.cs new file mode 100644 index 0000000..93caff9 --- /dev/null +++ b/ExamNETIntermediate/Models/SongModel.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExamNETIntermediate.Models +{ + public class SongModel + { + public int SongId { get; set; } + public string Title { get; set; } = string.Empty; + public string Artist { get; set; } = string.Empty; + public string GenreName { get; set; } = string.Empty; + public int Length { get; set; } + public string ReleaseDate { get; set; } = string.Empty; + public bool IsAvailable { get; set; } + } + + public class SongModelInput + { + public int SongId { get; set; } + public string Title { get; set; } = string.Empty; + public string Artist { get; set; } = string.Empty; + public int GenreId { get; set; } + public bool IsAvailable { get; set; } + public int Length { get; set; } + public DateTime ReleaseDate { get; set; } + } +}