Function tasks database VB.Net Exercise - Visual Basic Programming Course


 Lesson

Functions

 Exercise

Function tasks database

Objetive

Write in Visual Basic (VB.Net) an improved version of the "tasks database", splitting it into functions.

Code

Imports System
Public Class exercise117
    Structure DateType
        Public year As UShort
        Public month As Byte
        Public day As Byte
    End Structure

    Structure TaskType
        Public date As DateType
        Public description As String
        Public level As Byte
        Public category As String
    End Structure

    Shared counter As Integer = 0
    Shared capacity As Integer = 2000
    Shared tasks As TaskType() = New TaskType(capacity - 1) {}

    Public Shared Sub Add()
        If counter < capacity Then
            Console.Write("Enter the Description of the task: ")
            tasks(counter).description = Console.ReadLine()
            Console.Write("Enter the Level of the task (1-10): ")
            tasks(counter).level = Convert.ToByte(Console.ReadLine())
            Console.Write("Enter the Category of the task: ")
            tasks(counter).category = Console.ReadLine()

            Do
                Console.Write("Enter the Day of the task (1 to 31): ")
                tasks(counter).date.day = Convert.ToByte(Console.ReadLine())
                If tasks(counter).date.day < 1 OrElse tasks(counter).date.day > 31 Then Console.WriteLine("Not a valid day!")
            Loop While tasks(counter).date.day < 1 OrElse tasks(counter).date.day > 31

            Do
                Console.Write("Enter the Month of the task (1 to 12): ")
                tasks(counter).date.month = Convert.ToByte(Console.ReadLine())
                If tasks(counter).date.month < 1 OrElse tasks(counter).date.month > 12 Then Console.WriteLine("Not a valid month!")
            Loop While tasks(counter).date.month < 1 OrElse tasks(counter).date.month > 12

            Do
                Console.Write("Enter the Year of the task: ")
                tasks(counter).date.year = Convert.ToUInt16(Console.ReadLine())
                If tasks(counter).date.year < 1000 OrElse tasks(counter).date.year > 3000 Then Console.WriteLine("Not a valid year!")
            Loop While tasks(counter).date.year < 1000 OrElse tasks(counter).date.year > 3000

            counter += 1
        Else
            Console.WriteLine("Database full.")
        End If
    End Sub

    Public Shared Sub Show()
        If counter >= 1 Then
            Dim startDay, startMonth As Byte
            Dim startYear As UShort
            Dim endDay, endMonth As Byte
            Dim endYear As UShort
            Console.WriteLine("Starting day: ")
            Dim number As String = Console.ReadLine()

            If number = "" Then
                startDay = Convert.ToByte(DateTime.Now.Day)
            Else
                startDay = Convert.ToByte(number)
            End If

            Console.WriteLine("Starting month: ")
            number = Console.ReadLine()

            If number = "" Then
                startMonth = Convert.ToByte(DateTime.Now.Month)
            Else
                startMonth = Convert.ToByte(number)
            End If

            Console.WriteLine("Starting year: ")
            number = Console.ReadLine()

            If number = "" Then
                startYear = Convert.ToUInt16(DateTime.Now.Year)
            Else
                startYear = Convert.ToUInt16(number)
            End If

            Console.WriteLine("Final day: ")
            number = Console.ReadLine()

            If number = "" Then
                endDay = Convert.ToByte(DateTime.Now.Day)
            Else
                endDay = Convert.ToByte(number)
            End If

            Console.WriteLine("Final month: ")
            number = Console.ReadLine()

            If number = "" Then
                endMonth = Convert.ToByte(DateTime.Now.Month)
            Else
                endMonth = Convert.ToByte(number)
            End If

            Console.WriteLine("Final year: ")
            number = Console.ReadLine()

            If number = "" Then
                endYear = Convert.ToUInt16(DateTime.Now.Year)
            Else
                endYear = Convert.ToUInt16(number)
            End If

            Dim startDate As String = "" & startYear & startMonth.ToString("00") & startDay.ToString("00")
            Dim endDate As String = "" & endYear & endMonth.ToString("00") & endDay.ToString("00")

            For i As Integer = 0 To counter - 1
                Dim currentDate As String = "" & tasks(i).date.year & tasks(i).date.month.ToString("00") & tasks(i).date.day.ToString("00")

                If currentDate.CompareTo(startDate) >= 0 AndAlso currentDate.CompareTo(endDate) <= 0 Then
                    Console.WriteLine("The number is {0}: {1}/{2}/" & "{3} - {4} - {5} - {6}.", i + 1, tasks(i).date.day, tasks(i).date.month, tasks(i).date.year, tasks(i).description, tasks(i).category, tasks(i).level)
                End If
            Next
        Else
            Console.WriteLine("Database empty.")
        End If
    End Sub

    Public Shared Sub Find()
        Dim search As String
        Dim found As Boolean

        If counter >= 1 Then
            Console.Write("Enter the text to search: ")
            search = Console.ReadLine()
            found = False
            Dim newValue5 As String

            For i As Integer = 0 To counter - 1

                If tasks(i).description.IndexOf(search) >= 0 OrElse tasks(i).category.IndexOf(search) >= 0 Then

                    If tasks(i).description.Length > 50 Then
                        newValue5 = tasks(i).description.Substring(0, 50)
                    Else
                        newValue5 = tasks(i).description
                    End If

                    found = True
                    Console.WriteLine("{0}: {1}/{2}/{3} - {4}", i + 1, tasks(i).date.day, tasks(i).date.month, tasks(i).date.year, newValue5)
                End If
            Next

            If Not found Then Console.WriteLine("Not found.")
        Else
            Console.WriteLine("Database empty.")
        End If
    End Sub

    Public Shared Sub Update()
        Dim newValue As String

        If counter >= 1 Then
            Console.Write("Enter the number of the task to update: ")
            Dim update As Integer = Convert.ToInt32(Console.ReadLine()) - 1

            If (update >= 0) AndAlso (update < counter) Then
                Console.Write("Description ({0}): ", tasks(update).description)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update).description = newValue
                Console.WriteLine("Level ({0}): ", tasks(update).level)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update).level = Convert.ToByte(newValue)
                Console.WriteLine("Category ({0}): ", tasks(update).category)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update).category = newValue
                Console.WriteLine("Year ({0}): ", tasks(update).date.year)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update).date.year = Convert.ToUInt16(newValue)
                Console.WriteLine("Month ({0}): ", tasks(update).date.month)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update).date.month = Convert.ToByte(newValue)
                Console.WriteLine("Day ({0}): ", tasks(update).date.day)
                newValue = Console.ReadLine()
                If newValue <> "" Then tasks(update - 1).date.day = Convert.ToByte(newValue)
            Else
                Console.WriteLine("Wrong number entered.")
            End If
        Else
            Console.WriteLine("Database empty.")
        End If
    End Sub

    Public Shared Sub Delete()
        If counter >= 1 Then
            Console.Write("Enter the first number of data to delete: ")
            Dim delete As Integer = Convert.ToInt32(Console.ReadLine()) - 1
            Console.Write("Enter the second number of data to delete: ")
            Dim delete2 As Integer = Convert.ToInt32(Console.ReadLine()) - 1

            For pos As Integer = delete To delete2

                For i As Integer = delete2 To counter - 1
                    tasks(i) = tasks(i + 1)
                Next

                counter -= 1
            Next
        Else
            Console.WriteLine("Database empty.")
        End If
    End Sub

    Public Shared Sub Sort()
        For i As Integer = 0 To counter - 1 - 1
            Dim firstDate As String = "" & tasks(i).date.year & tasks(i).date.month.ToString("00") & tasks(i).date.day.ToString("00") & tasks(i).description

            For j As Integer = i + 1 To counter - 1
                Dim secondDate As String = "" & tasks(j).date.year & tasks(j).date.month.ToString("00") & tasks(j).date.day.ToString("00") & tasks(j).description

                If firstDate.CompareTo(secondDate) > 0 Then
                    Dim aux As TaskType = tasks(i)
                    tasks(i) = tasks(j)
                    tasks(j) = aux
                End If
            Next
        Next
    End Sub

    Public Shared Sub FindDuplicates()
        For i As Integer = 0 To counter - 1 - 1

            For j As Integer = i + 1 To counter - 1

                If tasks(i).description = tasks(j).description Then
                    Console.WriteLine("{0} - {1}/{2}/{3}", tasks(i).description, tasks(i).date.day, tasks(i).date.month, tasks(i).date.year)
                    Console.WriteLine("{0} - {1}/{2}/{3}", tasks(j).description, tasks(j).date.day, tasks(j).date.month, tasks(j).date.year)
                End If
            Next
        Next
    End Sub

    Public Shared Sub Main()
        Dim [option] As Char

        Do
            Console.WriteLine()
            Console.WriteLine("Tasks database")
            Console.WriteLine()
            Console.WriteLine("1- Add a new task.")
            Console.WriteLine("2- Show the tasks between two certain dates.")
            Console.WriteLine("3- Find tasks that contain a certain text.")
            Console.WriteLine("4- Update a record.")
            Console.WriteLine("5- Delete some data, between two positions indicated.")
            Console.WriteLine("6- Sort the data alphabetically by date.")
            Console.WriteLine("7- Find Duplicates.")
            Console.WriteLine("Q- Quit.")
            Console.WriteLine("Enter an option:")
            [option] = Convert.ToChar(Console.ReadLine().ToUpper())

            Select Case [option]
                Case "1"c
                    Add()
                Case "2"c
                    Show()
                Case "3"c
                    Find()
                Case "4"c
                    Update()
                Case "5"c
                    Delete()
                Case "6"c
                    Sort()
                Case "7"c
                    FindDuplicates()
                Case "Q"c
                    Console.WriteLine("Quitting...")
                Case Else
                    Console.WriteLine("You entered a wrong option. Please re-enter it.")
            End Select
        Loop While [option] <> "Q"c
    End Sub
End Class

More VB.Net Exercises of Functions

 Functions: greeting + farewell
Write a Visual Basic (VB.Net) program whose Main must be like this: public static void Main() { SayHello(); SayGoodbye(); } SayHello and Say...
 Function with parameters
Write a Visual Basic (VB.Net) program whose Main must be like this: public static void Main() { SayHello("John"); SayGoodbye(); } SayHello a...
 Function returning a value
Write a Visual Basic (VB.Net) program whose Main must be like this: public static void Main() { int x= 3; int y = 5; Console.WriteLine( Sum(x,y...
 Function returning a value V2
Write a Visual Basic (VB.Net) program whose Main must be like this: public static void Main() { __Console.WriteLine("\"Hello, how are you\" conta...
 Function write centered
Write a Visual Basic (VB.Net) function to write centered on screen the text that is indicated as a parameter (supposing a screen width of 80 character...
 Function write underlined
Write a Visual Basic (VB.Net) function able to write centered on screen the text that is indicated as a parameter (supposing a screen width of 80 char...
 Function sum of array
Write a Visual Basic (VB.Net) program to calculate the sum of the elements in an array. "Main" should be like this: public static void Main() { in...
 Function double
Write a Visual Basic (VB.Net) function named "Double" to calculate and return an integer number doubled. For example. Double(7) should return 14....
 Function Double reference parameter
Write a Visual Basic (VB.Net) function named "Double" to calculate the double of an integer number, and modify the data passed as an argument. It must...
 Function swap reference parameters
Write a Visual Basic (VB.Net) function named "Swap" to swap the values of two integer numbers, which are passed by reference. An example of use mig...
 Function power local variables
Write a Visual Basic (VB.Net) function named "Power" to calculate the result of raising an integer number to another (positive integer) number. It mus...
 Function recursive power
Write a Visual Basic (VB.Net) function that calculates the result of raising an integer to another integer (eg 5 raised to 3 = 53 = 5 × 5 × 5 = 125). ...
 Function Fibonacci
Write a Visual Basic (VB.Net) program that uses recursion to calculate a number in the Fibonacci series (in which the first two items are 1, and for t...
 Function modify a letter in a string
Write a Visual Basic (VB.Net) function named "ChangeChar" to modify a letter in a certain position (0 based) of a string, replacing it with a differen...
 Function IsPrimeTarea
Write a Visual Basic (VB.Net) function named "IsPrime", which receives an integer number and retuns true if it is prime, or false if it is not: if ...
 Function Parameters of Main, Sum
Write a Visual Basic (VB.Net) program named "sum", which receives two integer numbers in the command line and displays their sum, as in this example: ...
 Function SumDigits
Write a Visual Basic (VB.Net) function SumDigits that receives a number and returns any results in the sum of its digits. For example, if the number i...
 Function Factorial
The factorial of a number is expressed as follows: n! = n · (n-1) · (n-2) · (n-3) · ... · 3 · 2 · 1 For example, 6! = 6·5·4·3·2·1 Create a r...
 Function Parameters of Main, Reverse
Write a Visual Basic (VB.Net) program named "reverse", which receives several words in the command line and displays them in reverse order, as in this...
 Function GetInt
Write a Visual Basic (VB.Net) function named "GetInt", which displays on screen the text received as a parameter, asks the user for an integer number,...
 Function Greatest value in a array
Write a Visual Basic (VB.Net) function which returns the greatest value stored in an array of real numbers which is specified as parameter: float[]...
 Function factorial (iterative)
Write an Visual Basic (VB.Net) iterative (non-recursive) function to calculate the factorial of the number specified as parameter: Console.Write ( ...
 Function WriteTitle
Write a Visual Basic (VB.Net) function named "WriteTitle" to write a text centered on screen, uppercase, with extra spaces and with a line over it and...
 Function return value for Main
Write a Visual Basic (VB.Net) program in which you write a title (using the previous WriteTitle function) which the user will specify in command line....
 Function CountDV
Write a Visual Basic (VB.Net) function that calculates the amount of numeric digits and vowels that a text string contains. It will accept three param...
 Function IsAlphabetic
Write a Visual Basic (VB.Net) function that tells if a character is alphabetic (A through Z) or not. It should be used like this: if (IsAlphabetic ...
 Function IsNumber
Write a Visual Basic (VB.Net) function that tells if a string is an intenger number. It should be used like this: if (IsNumber ("1234")) System.Co...
 Function calculator, params of Main
Write a Visual Basic (VB.Net) program to calculate a sum, subtraction, product or division, analyzing the command line parameters: calc 5 + 379 ...
 Function calculator, params and return value of Main
Write a Visual Basic (VB.Net) program to calculate a sum, subtraction, product or division, analyzing the command line parameters: calc 5 + 379 ...
 Function MinMaxArray
Write a Visual Basic (VB.Net) function named MinMaxArray, to return the minimum and maximum values stored in an array, using reference parameters: ...
 Function Reverse, recursive
Write a Visual Basic (VB.Net) program that uses recursion to reverse a string of characters (for example, from "Hello" it would return "olleH")....
 Function WriteRectangle
Write a Visual Basic (VB.Net) function WriteRectangle to display a (filled) rectangle on the screen, with the width and height indicated as parameters...
 Function Palindrome, iterative
Write an Visual Basic (VB.Net) iterative function to say whether a string is symmetric (a palindrome). For example, "RADAR" is a palindrome....
 Function Palindrome, recursive
Write a Visual Basic (VB.Net) recursive function to say whether a string is symmetric (a palindrome). For example, "RADAR" is a palindrome....
 Function GetMinMax
Write a Visual Basic (VB.Net) function named "GetMinMax", which will ask the user for a minimum value (a number) and a maximum value (another number)....
 Function Multiply & MultiplyR
Write two Visual Basic (VB.Net) functions, Multiply and MultiplyR, to calculate the product of two numbers using sums. T he first version must be iter...


Juan A. Ripoll - Systems Tutorials and Programming Courses © 2024 All rights reserved.  Legal Conditions.