Función base de datos de tareas Ejercicio Java - Curso de Programación Java

 Lección

Funciones

 Ejercicio

Función base de datos de tareas

 Objetivo

Cree una versión mejorada de la "base de datos de tareas", dividiéndola en funciones.

 Código de Ejemplo

import java.util.*;
public class Main
{
	private final static class DateType
	{
		public short year;
		public byte month;
		public byte day;

		public DateType clone()
		{
			DateType varCopy = new DateType();

			varCopy.year = this.year;
			varCopy.month = this.month;
			varCopy.day = this.day;

			return varCopy;
		}
	}

	private final static class TaskType
	{
		public DateType date = new DateType();
		public String description;
		public byte level;
		public String category;

		public TaskType clone()
		{
			TaskType varCopy = new TaskType();

			varCopy.date = this.date.clone();
			varCopy.description = this.description;
			varCopy.level = this.level;
			varCopy.category = this.category;

			return varCopy;
		}
	}

	private static int counter = 0;
	private static int capacity = 2000;
	private static TaskType[] tasks = new TaskType[capacity];

	public static void Add()
	{
		if (counter < capacity)
		{
			System.out.print("Enter the Description of the task: ");
			tasks[counter].description = new Scanner(System.in).nextLine();

			System.out.print("Enter the Level of the task (1-10): ");
			tasks[counter].level = Byte.parseByte(new Scanner(System.in).nextLine());

			System.out.print("Enter the Category of the task: ");
			tasks[counter].category = new Scanner(System.in).nextLine();

			do
			{
				System.out.print("Enter the Day of the task (1 to 31): ");
				tasks[counter].date.day = Byte.parseByte(new Scanner(System.in).nextLine());
				if (tasks[counter].date.day < 1 || tasks[counter].date.day > 31)
				{
					System.out.println("Not a valid day!");
				}
			} while (tasks[counter].date.day < 1 || tasks[counter].date.day > 31);

			do
			{
				System.out.print("Enter the Month of the task (1 to 12): ");
				tasks[counter].date.month = Byte.parseByte(new Scanner(System.in).nextLine());
				if (tasks[counter].date.month < 1 || tasks[counter].date.month > 12)
				{
					System.out.println("Not a valid month!");
				}
			} while (tasks[counter].date.month < 1 || tasks[counter].date.month > 12);

			do
			{
				System.out.print("Enter the Year of the task: ");
				tasks[counter].date.year = Short.parseShort(new Scanner(System.in).nextLine());
				if (tasks[counter].date.year < 1000 || tasks[counter].date.year > 3000)
				{
					System.out.println("Not a valid year!");
				}
			} while (tasks[counter].date.year < 1000 || tasks[counter].date.year > 3000);
			counter++;
		}
		else
		{
			System.out.println("Database full.");
		}
	}

	public static void Show()
	{
		if (counter >= 1)
		{
			byte startDay, startMonth;
			short startYear;
			byte endDay, endMonth;
			short endYear;

			System.out.println("Starting day: ");
			String number = new Scanner(System.in).nextLine();

			if (number.equals(""))
			{
				startDay = (byte)java.time.LocalDateTime.now().getDayOfMonth();
			}
			else
			{
				startDay = Byte.parseByte(number);
			}

			System.out.println("Starting month: ");
			number = new Scanner(System.in).nextLine();
			if (number.equals(""))
			{
				startMonth = (byte)java.time.LocalDateTime.now().getMonthValue();
			}
			else
			{
				startMonth = Byte.parseByte(number);
			}

			System.out.println("Starting year: ");
			number = new Scanner(System.in).nextLine();
			if (number.equals(""))
			{
				startYear = (short)java.time.LocalDateTime.now().getYear();
			}
			else
			{
				startYear = Short.parseShort(number);
			}

			System.out.println("Final day: ");
			number = new Scanner(System.in).nextLine();
			if (number.equals(""))
			{
				endDay = (byte)java.time.LocalDateTime.now().getDayOfMonth();
			}
			else
			{
				endDay = Byte.parseByte(number);
			}

			System.out.println("Final month: ");
			number = new Scanner(System.in).nextLine();
			if (number.equals(""))
			{
				endMonth = (byte)java.time.LocalDateTime.now().getMonthValue();
			}
			else
			{
				endMonth = Byte.parseByte(number);
			}

			System.out.println("Final year: ");
			number = new Scanner(System.in).nextLine();
			if (number.equals(""))
			{
				endYear = (short)java.time.LocalDateTime.now().getYear();
			}
			else
			{
				endYear = Short.parseShort(number);
			}


			String startDate = "" + startYear + (new Byte(startMonth)).toString("00") + (new Byte(startDay)).toString("00");
			String endDate = "" + endYear + (new Byte(endMonth)).toString("00") + (new Byte(endDay)).toString("00");

			for (int i = 0; i < counter; i++)
			{

				String currentDate = "" + tasks[i].date.year + 
                (new Byte(tasks[i].date.month)).toString("00") + 
                (new Byte(tasks[i].date.day)).toString("00");
				if (currentDate.compareTo(startDate) >= 0 && currentDate.compareTo(endDate) <= 0)
				{
					System.out.printf("The number is %1$s: %2$s/%3$s/" + "%4$s - %5$s - %6$s - %7$s." + 
                    "\r\n", i + 1, tasks[i].date.day, tasks[i].date.month, tasks[i].date.year, 
                    tasks[i].description, tasks[i].category, tasks[i].level);
				}
			}
		}
		else
		{
			System.out.println("Database empty.");
		}
	}

	public static void Find()
	{
		String search;
		boolean found;
		if (counter >= 1)
		{
			System.out.print("Enter the text to search: ");
			search = new Scanner(System.in).nextLine();
			found = false;
			String newValue5;

			for (int i = 0; i < counter; i++)
			{
				if (tasks[i].description.indexOf(search) >= 0 || tasks[i].category.indexOf(search) >= 0)
				{
					if (tasks[i].description.length() > 50)
					{
						newValue5 = tasks[i].description.substring(0, 50);
					}
					else
					{
						newValue5 = tasks[i].description;
					}

					found = true;
					System.out.printf("%1$s: %2$s/%3$s/%4$s - %5$s" + "\r\n", i + 1, tasks[i].date.day, tasks[i].date.month, tasks[i].date.year, newValue5);
				}
			}
			if (!found)
			{
				System.out.println("Not found.");
			}
		}
		else
		{
			System.out.println("Database empty.");
		}
	}

	public static void Update()
	{
		String newValue;
		if (counter >= 1)
		{
			System.out.print("Enter the number of the task to update: ");
			int update = Integer.parseInt(new Scanner(System.in).nextLine()) - 1;
			if ((update >= 0) && (update < counter))
			{
				System.out.printf("Description (%1$s): ", tasks[update].description);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{
					tasks[update].description = newValue;
				}

				System.out.printf("Level (%1$s): " + "\r\n", tasks[update].level);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{
					tasks[update].level = Byte.parseByte(newValue);
				}

				System.out.printf("Category (%1$s): " + "\r\n", tasks[update].category);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{
					tasks[update].category = newValue;
				}

				System.out.printf("Year (%1$s): " + "\r\n", tasks[update].date.year);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{
					tasks[update].date.year = Short.parseShort(newValue);
				}

				System.out.printf("Month (%1$s): " + "\r\n", tasks[update].date.month);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{

					tasks[update].date.month = Byte.parseByte(newValue);
				}

				System.out.printf("Day (%1$s): " + "\r\n", tasks[update].date.day);
				newValue = new Scanner(System.in).nextLine();
				if (!newValue.equals(""))
				{
					tasks[update - 1].date.day = Byte.parseByte(newValue);
				}
			}
			else
			{
				System.out.println("Wrong number entered.");
			}
		}
		else
		{
			System.out.println("Database empty.");
		}
	}

	public static void Delete()
	{
		if (counter >= 1)
		{
			System.out.print("Enter the first number of data to delete: ");
			int delete = Integer.parseInt(new Scanner(System.in).nextLine()) - 1;
			System.out.print("Enter the second number of data to delete: ");
			int delete2 = Integer.parseInt(new Scanner(System.in).nextLine()) - 1;

			for (int pos = delete; pos <= delete2; pos++)
			{
				for (int i = delete2; i < counter; i++)
				{
					tasks[i] = tasks[i + 1];
				}
				counter--;
			}
		}
		else
		{
			System.out.println("Database empty.");
		}
	}

	public static void Sort()
	{
		for (int i = 0; i < counter - 1; i++)
		{
			String firstDate = "" + tasks[i].date.year + (new Byte(tasks[i].date.month)).toString("00") + (new Byte(tasks[i].date.day)).toString("00") + tasks[i].description;
			for (int j = i + 1; j < counter; j++)
			{
				String secondDate = "" + tasks[j].date.year + (new Byte(tasks[j].date.month)).toString("00") + (new Byte(tasks[j].date.day)).toString("00") + tasks[j].description;

				if (firstDate.compareTo(secondDate) > 0)
				{
					TaskType aux = tasks[i];
					tasks[i] = tasks[j];
					tasks[j] = aux.clone();
				}
			}
		}
	}

	public static void FindDuplicates()
	{
		for (int i = 0; i < counter - 1; i++)
		{
			for (int j = i + 1; j < counter; j++)
			{
				if (tasks[i].description.equals(tasks[j].description))
				{
					System.out.printf("%1$s - %2$s/%3$s/%4$s" + "\r\n", tasks[i].description, tasks[i].date.day, tasks[i].date.month, tasks[i].date.year);
					System.out.printf("%1$s - %2$s/%3$s/%4$s" + "\r\n", tasks[j].description, tasks[j].date.day, tasks[j].date.month, tasks[j].date.year);
				}
			}
		}
	}

	public static void main()
	{
		char option;

		do
		{
			System.out.println();
			System.out.println("Tasks database");
			System.out.println();
			System.out.println("1- Add a new task.");
			System.out.println("2- Show the tasks between two certain dates.");
			System.out.println("3- Find tasks that contain a certain text.");
			System.out.println("4- Update a record.");
			System.out.println("5- Delete some data, between two positions indicated.");
			System.out.println("6- Sort the data alphabetically by date.");
			System.out.println("7- Find Duplicates.");
			System.out.println("Q- Quit.");
			System.out.println("Enter an option:");
			option = (char)(new Scanner(System.in).nextLine().toUpperCase());

			switch (option)
			{
				case '1': //Add a new task
					Add();
					break;

				case '2': //Show the tasks between two certain dates
					Show();
					break;

				case '3': //Find tasks that contain a certain text
					Find();
					break;

				case '4': //Update a record
					Update();
					break;

				case '5': //Delete some data, between two positions indicated by the user
					Delete();
					break;

				case '6': //Sort the data alphabetically on date + description
					Sort();
					break;

				case '7': //Find Duplicates
					FindDuplicates();
					break;

				case 'Q': //Quit
					System.out.println("Quitting...");
					break;

				default:
					System.out.println("You entered a wrong option. Please re-enter it.");
					break;
			}
		} while (option != 'Q');
	}
}

Más ejercicios Java de Función base de datos de tareas

 Funciones: saludo + despedida
Crea un programa cuyo Main debe ser así: public static void Main() { SayHello(); SayGoodbye(); } SayHello y SayGoodbye son funciones que deb...
 Función con parámetros
Crea un programa en Java cuyo Main debe ser así: public static void Main() { SayHello ("Juan"); SayGoodbye(); } SayHello y SayGoodbye son fu...
 Función que devuelve un valor
Crea un programa en Java cuyo Main debe ser así: public static void Main() { int x= 3; int y = 5; Console.WriteLine( Suma(x,y) ); } "Suma" ...
 Función que devuelve un valor V2
Crea un programa en Java cuyo Main debe ser así: public static void Main() { __Console.WriteLine(""Hola, cómo estás" contiene espacios {0}", ____...
 Función escritura centrada
Cree una función para escribir centrado en pantalla el texto que se indica como parámetro (suponiendo un ancho de pantalla de 80 caracteres): Write...
 Función escribir subrayado
Crear una función capaz de escribir centrado en pantalla el texto que se indica como parámetro (suponiendo un ancho de pantalla de 80 caracteres) y lu...
 Función suma de la matriz
Cree un programa de Java para calcular la suma de los elementos de una matriz. "Main" debería ser así: public static void Main() { int[] ejemplo= ...
 Función doble
Cree una función denominada "Doble" para calcular y devolver un número entero duplicado. Por ejemplo. Doble(7) debe devolver 14....
 Función Doble parámetro de referencia
Cree una función denominada "Doble" para calcular el doble de un número entero y modifique los datos pasados como argumento. Debe ser una función "vac...
 Función swap parámetros de referencia
Cree una función denominada "Swap" para intercambiar los valores de dos números enteros, que se pasan por referencia. Un ejemplo de uso podría ser:...
 Función power variables locales
Cree una función denominada "Power" para calcular el resultado de elevar un número entero a otro número (entero positivo). Debe devolver otro número e...
 Función power recursivo
Cree una función que calcule el resultado de elevar un entero a otro entero (por ejemplo, 5 elevado a 3 = 53 = 5 × 5 × 5 = 125). Esta función debe cre...
 Función Fibonacci
Cree un programa en Java que use la recursividad para calcular un número en la serie de Fibonacci (en la que los dos primeros elementos son 1, y para ...
 Función modificar una letra de una cadena
Cree una función denominada "ChangeChar" para modificar una letra en una determinada posición (basada en 0) de una cadena, reemplazándola por una letr...
 Función IsPrimeTarea
Cree una función denominada "IsPrime", que recibe un número entero y vuelve a ser true si es primo, o false si no lo es: if (isPrime(127)) ......
 Parámetros de Main, Suma
Cree un programa llamado "suma", que reciba dos números enteros en la línea de comandos y muestre su suma, como en este ejemplo: suma 5 3 8...
 Función SumDigits
Cree una función SumDigits que reciba un número y devuelva los resultados en la suma de sus dígitos. Por ejemplo, si el número es 123, la suma sería 6...
 Función Factorial
El factorial de un número se expresa de la siguiente manera: n! = n · (n-1) · (n-2) · (n-3) · ... · 3 · 2 · 1 Por ejemplo 6! = 6·5·4·3·2·1 C...
 Parámetros de Main, Reverso
Cree un programa llamado "reverse", que reciba varias palabras en la línea de comandos y las muestre en orden inverso, como en este ejemplo: invert...
 Función GetInt
Cree una función llamada "GetInt", que muestra en pantalla el texto recibido como parámetro, solicita al usuario un número entero, repite si el número...
 Función mayor valor en una matriz
Cree una función que devuelva el mayor valor almacenado en una matriz de números reales que se especifique como parámetro: float[] data={1.5f, 0.7f...
 Función factorial (iterativa)
Cree una función iterativa (no recursiva) para calcular el factorial del número especificado como parámetro: Console.Write ( Factorial (6) ); mo...
 Función WriteTitle
Crea una función llamada "WriteTitle" para escribir un texto centrado en pantalla, en mayúsculas, con espacios extra y con una línea sobre él y otra l...
 Función devuelve valor para Main
Cree un programa en Java en el que escriba un título (utilizando la función WriteTitle anterior) que el usuario especificará en la línea de comandos. ...
 Función CountDV
Cree una función que calcule la cantidad de dígitos numéricos y vocales que contiene una cadena de texto. Aceptará tres parámetros: la cadena que quer...
 Función IsAlphabetic
Cree una función que indique si un carácter es alfabético (de la A a la Z) o no. Debe usarse así: if (IsAlphabetic ("a")) System.Console.WriteLine...
 Función IsNumber
Cree una función que indique si una cadena es un número intensor. Debe usarse así: if (IsNumber ("1234")) System.Console.WriteLine ("Es un valor n...
 Función calculadora, parámetros de Main
Crear un programa en Java para calcular una suma, resta, producto o división, analizando los parámetros de la línea de comandos: calc 5 + 379 (L...
 Función calculadora, parámetros y valor de retorno de Main
Crear un programa en Java para calcular una suma, resta, producto o división, analizando los parámetros de la línea de comandos: calc 5 + 379 (L...
 Función MinMaxArray
Cree una función denominada MinMaxArray, para devolver los valores mínimos y máximos almacenados en una matriz, utilizando parámetros de referencia: ...
 Reverso, recursivo
Cree un programa que use la recursividad para invertir una cadena de caracteres (por ejemplo, desde "Hello" devolvería "olleH")....
 Función WriteRectangle
Cree una función WriteRectangle para mostrar un rectángulo (relleno) en la pantalla, con el ancho y el alto indicados como parámetros, utilizando aste...
 Función Palíndromo, iterativo
Cree una función iterativa para decir si una cadena es simétrica (un palíndromo). Por ejemplo, "RADAR" es un palíndromo....
 Palíndromo recursivo
Cree una función recursiva para decir si una cadena es simétrica (un palíndromo). Por ejemplo, "RADAR" es un palíndromo....
 Función GetMinMax
crear una función llamada "GetMinMax", que pedirá al usuario un valor mínimo (un número) y un valor máximo (otro número). Debe llamarse de manera simi...
 Función Multiply & MultiplyR
Crea dos funciones, Multiplicar y Multiplicar, para calcular el producto de dos números usando sumas. La primera versión debe ser iterativa, y la segu...

Juan A. Ripoll - Tutoriales de Sistemas y Cursos de Programación© 2024 Todos los derechos reservados.  Condiciones legales.