Opción 1: El usuario / a nos entrará el "Nombre" y la "fecha de nacimiento" de una persona. dd / mm / aaaa
El programa mostrará un calendario situado al mes y al día en que nació y nos dirá su signo del zodiaco. Tendremos que controlar que se hayan entrado correctamente los datos. Nos piden también que pongamos entre llaves el día en que nació y el día de la Semana.
Ejemplo: Nombre: Marta Riells Fecha: 14/07/1970
JULIO - 1970
Dl [M] X J V S D
1 2 3 4 5
6 7 8 9 10 11 12
13 [14] 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Marta es Cáncer
Opción 2: El usuario / a nos introducirá en el mes (mm) y el año (aaaa) que se quiere mostrar.
Se nos visualizará el calendario del mes para pantalla y además se debe permitir:
cambiar de mes mediante las letras: ◄ A (de Anterior) y S (de Siguiente) ►
y cambiar de año mediante: ▲ K (de Anterior) y M (de Siguiente) ▼
Opción 3: El usuario nos introducirá la semana (ss) y el año (aaaa) que se quiere mostrar.
Se nos visualizará el calendario por pantalla indicando la semana deseada:
Ejemplo: Semana: 07 Año: 2008
Febrero 2008
septiembre L M X J V S D
5 1 2 3
6 4 5 6 7 8 9 10
7 11 12 13 14 15 16 17 <<<<
8 18 19 20 21 22 23 24
9 25 26 27 28 29
La fórmula que permite conocer el primer día del mes "m" del año "a":
a) Para los meses de Enero o Febrero:
n = a + 31 * (m - 1) + (a - 1) div 4-3 * ((a + 99) div 100) div 4
b) El resto de meses:
n = a + 31 * (m-1) + 1 - (4 * m + 23) div 10 + en div 4 - (3 * (a div 100 + 1)) div 4-1
Anotaciones:
• (n Mod 7) indica el día de la semana (0 = Domingo, 1 = Lunes, etc ...)
• Mod -> es el módulo de la división entera (%) / Div. -> es la división entera.
- //importamos las librerias
- import java.io.*;
- import java.util.*;
- import cs1.Keyboard;
- import java.lang.String;
- import java.text.NumberFormat;
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.util.Date;
- public class calendario {
- public static void main (String[] args){
- //Definimos las variables
- char menu, letra='0';
- String nombre, fecha, StringMes="";
- int dia, mes, año, PrimerDiaMes, DiaDeLaSemana, numDias = 1, posicion,j=0, z=1, h=1;
- Double n;
- boolean most=false, añocam=false;
- //Introducimos por teclado la opcion correspondiente para el menu
- System.out.print ("Introduce una letra de la a la c, para escojer una opcion: ");
- menu = Keyboard.readChar();
- menu=Character.toLowerCase(menu);
- switch (menu) {
- default: System.out.print ("\nNo has introducido una opcion correcta! ");
- break;
- case 'a':
- {
- System.out.println("Opció 1: el usuario entrarà el “Nombre” y la “fecha de nacimiento” de una persona en formato dd/mm/aaaa");
- System.out.print (" introduce el nombre : ");
- nombre = Keyboard.readString();
- System.out.print ("\nIntroduce la fecha de nacimiento (dd/mm/aaa): ");
- fecha = Keyboard.readString();
- DateFormat df = new SimpleDateFormat("dd/MM/yyyy");//las fechas en nuestro programa tendrán ese formato.
- NumberFormat nf = new DecimalFormat("#0");//para la nota
- try {
- Date fecha1;
- fecha1 = df.parse(fecha);//convertir el string de la fecha a Date.
- }
- catch (ParseException e) {
- System.out.println("La fecha no es correcta segun el patrón: " +((SimpleDateFormat)df).toPattern() );
- System.exit(0);
- } //fin comprobación de error de fechas
- System.out.println("");
- System.out.print("\tNom: " + nombre + "\t\tData: " + fecha);//Muestra el nombre y fecha introducido por pantalla
- dia = Integer.valueOf(fecha.substring(0,2));
- mes = Integer.valueOf(fecha.substring(3,5));
- año = Integer.valueOf(fecha.substring(6,10));
- switch (mes) {
- case 1:
- case 2:
- n = (double)año + 31*((double)mes - 1) + ((double)año - 1) / 4 - 3*(((double)año + 99) /100) / 4;
- break;
- default:
- //n = a + 31*(m-1) + 1 - (4*m + 23) div 10 + a div 4 - (3*(a div 100 + 1)) div 4 - 1
- n = (double)año + 31*((double)mes-1)+1- (4*(int)mes + 23) / 10 + (double)año / 4 -(3*((double)año / 100 + 1))/4-1;
- break;
- }
- PrimerDiaMes = Integer.valueOf(nf.format(n)) % 7;//(n Mod 7) indica el dia de la setmana ( 0 = Diumenge, 1 = Dilluns, etc...)
- // System.out.print ("\n\n"+PrimerDiaMes+"\n\n");
- switch (mes) {
- case 1:
- StringMes = "Enero";
- break;
- case 2:
- StringMes = "Febrero";
- break;
- case 3:
- StringMes = "Marzo";
- break;
- case 4:
- StringMes = "Abril";
- break;
- case 5:
- StringMes = "Mayo";
- break;
- case 6:
- StringMes = "Junio";
- break;
- case 7:
- StringMes = "Julio";
- break;
- case 8:
- StringMes = "Agosto";
- break;
- case 9:
- StringMes = "Septiembre";
- break;
- case 10:
- StringMes = "Octubre";
- break;
- case 11:
- StringMes = "Noviembre";
- break;
- case 12:
- StringMes = "Diciembre";
- break;
- }
- //cuantos dias tiene el mes
- switch (mes) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- numDias = 31;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- numDias = 30;
- break;
- case 2:
- if ( ((año % 4 == 0) && !(año % 100 == 0)) || (año % 400 == 0) ) {
- numDias = 29;}
- else {
- numDias = 28;}
- break;
- }//fin switch
- //CALENDARIO
- System.out.print ("\n\n " + StringMes + " " + año+"\n--------------------------------------------------");
- n = (n + dia) - 1;
- DiaDeLaSemana = Integer.valueOf(nf.format(n)) % 7;
- switch (DiaDeLaSemana) {
- case 0:
- System.out.print ("\nDL DT DC DJ DV DS [DG]\n");
- break;
- case 1:
- System.out.print ("\n[DL] DT DC DJ DV DS DG\n");
- break;
- case 2:
- System.out.print ("\nDL [DT] DC DJ DV DS DG\n");
- break;
- case 3:
- System.out.print ("\nDL DT [DC] DJ DV DS DG\n");
- break;
- case 4:
- System.out.print ("\nDL DT DC [DJ] DV DS DG\n");
- break;
- case 5:
- System.out.print ("\nDL DT DC DJ [DV] DS DG\n");
- break;
- case 6:
- System.out.print ("\nDL DT DC DJ DV [DS] DG\n");
- break;
- }
- switch (PrimerDiaMes) {
- case 0:
- posicion = 7;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 1:
- posicion = 1;
- System.out.print ("");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 2:
- posicion = 2;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 3:
- posicion = 3;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 4:
- posicion = 4;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 5:
- posicion = 5;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 6:
- posicion = 6;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- if (i == dia) {
- System.out.print ("["+i+"] ");
- }
- else {
- System.out.print (i+" ");
- }
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- }
- //CALCULAR SIGNO ZODIACAL
- if ( (mes == 3 && dia >= 21) || (mes == 4 && dia <=20) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Àries");
- }
- else {
- if ( (mes == 4 && dia >= 21) || (mes == 5 && dia <=20) ) {
- System.out.print ("\n\n En/Na "+nombre+" Taure");
- }
- else {
- if ( (mes == 5 && dia >= 21) || (mes == 6 && dia <=21) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Gèminis");
- }
- else {
- if ( (mes == 6 && dia >= 22) || (mes == 7 && dia <=22) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Càncer");
- }
- else{
- if ( (mes == 7 && dia >= 23) || (mes == 8 && dia <=22) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Lleó");
- }
- else{
- if ( (mes == 8 && dia >= 23) || (mes == 9 && dia <=23) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Verge");
- }
- else{
- if ( (mes == 9 && dia >= 23) || (mes == 10 && dia <=22) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Balança");
- }
- else{
- if ( (mes == 10 && dia >= 23) || (mes == 11 && dia <=21) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Escorpió");
- }
- else{
- if ( (mes == 11 && dia >= 22) || (mes == 12 && dia <=21) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Sagitari");
- }
- else{
- if ( (mes == 12 && dia >= 22) || (mes == 1 && dia <=19) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Capricorn");
- }
- else{
- if ( (mes == 1 && dia >= 20) || (mes == 2 && dia <=18) ) {
- System.out.print ("\n\n En/Na "+nombre+" és Acuari");
- }
- else{
- System.out.print ("\n\n En/Na "+nombre+" és Peixos");
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- break;
- case 'b':
- {
- System.out.println("Opció 2: L'usuari/a ens introduirà el mes (mm) i l'any (aaaa) que es vol mostrar.");
- NumberFormat nf = new DecimalFormat("#0");
- //Introducimos el mes y el año
- do {
- System.out.print ("\nIntrodueix el mes: ");
- mes = Keyboard.readInt();
- }
- while(mes<1 || mes>12);
- System.out.print ("\nIntrodueix l'any : ");
- año = Keyboard.readInt();
- do {
- switch (mes) {
- case 1:
- n = (double)año + 31*((double)mes - 1) + ((double)año - 1) / 4 - 3*(((double)año + 99)/ 100) / 4;
- break;
- case 2:
- n = (double)año + 31*((double)mes - 1) + ((double)año - 1) / 4 - 3*(((double)año + 99)/ 100) / 4;
- break;
- default:
- n = (double)año + 31*((double)mes-1) + 1 - (4*(double)mes + 23) / 10 + (double)año / 4- (3*((double)año / 100 + 1)) / 4 - 1;
- break;
- }
- PrimerDiaMes = Integer.valueOf(nf.format(n)) % 7;//(n Mod 7) indica el dia de la setmana ( 0 = Diumenge, 1 = Dilluns, etc...)
- switch (mes) {
- case 1:
- StringMes = "Enero";
- break;
- case 2:
- StringMes = "Febrero";
- break;
- case 3:
- StringMes = "Marzo";
- break;
- case 4:
- StringMes = "Abril";
- break;
- case 5:
- StringMes = "Mayo";
- break;
- case 6:
- StringMes = "Junio";
- break;
- case 7:
- StringMes = "Julio";
- break;
- case 8:
- StringMes = "Agosto";
- break;
- case 9:
- StringMes = "Septiembre";
- break;
- case 10:
- StringMes = "Octubre";
- break;
- case 11:
- StringMes = "Noviembre";
- break;
- case 12:
- StringMes = "Diciembre";
- break;
- }
- //cuantos dias tiene el mes
- switch (mes) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- numDias = 31;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- numDias = 30;
- break;
- case 2:
- if ( ((año % 4 == 0) && !(año % 100 == 0)) || (año % 400 == 0) ) {
- numDias = 29;}
- else {
- numDias = 28;}
- break;
- }//fin switch
- //Calendario
- System.out.print ("\n\n " + StringMes + " " + año+"\n--------------------------------------------------");
- System.out.print ("\nDL DT DC DJ DV DS DG\n");
- switch (PrimerDiaMes) {
- case 0:
- posicion = 7;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 1:
- posicion = 1;
- System.out.print ("");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 2:
- posicion = 2;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 3:
- posicion = 3;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 4:
- posicion = 4;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 5:
- posicion = 5;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- case 6:
- {
- posicion = 6;
- System.out.print (" ");
- for (int i = 1; i <= numDias; i++) {
- System.out.print (i+" ");
- posicion = posicion + 1;
- if (posicion > 7) { System.out.println(); posicion = 1;}
- }
- break;
- }}System.out.print ("\n");
- System.out.print ("\nCanviar de mes mitjançant les lletres A ( d'Anterior ) i S ( de Següent ) ");
- System.out.print ("\nCanviar d'any mitjançant: K (d'Anterior ) i M ( de Següent ) ");
- letra = Keyboard.readChar();
- letra=Character.toUpperCase(letra);
- switch (letra) {
- case 'A' :
- if (mes==1){
- mes=12;
- año=año-1;}
- else{
- mes=mes-1;}
- break;
- case 'S':
- if (mes==12){
- mes=1;
- año=año+1;}
- else{
- mes=mes+1;}
- break;
- case 'M':
- año=año+1;
- break;
- case 'K':
- año=año-1;
- break;}
- }while(letra==('A')||letra==('S')||letra==('K')||letra==('M'));
- break;
- }
- case 'c': System.out.println("Opció 3: L'usuari ens introduirà la setmana (ss) i l'any (aaaa) que es vol mostrar.");
- {
- //Introducimos por teclado el dia y año
- System.out.print("\nIntrodueix Setmana: "); int setm=Keyboard.readInt();
- System.out.print("\nIntrodueix Any: "); int iany=Keyboard.readInt();
- System.out.println("");
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.YEAR, iany);
- //cal.get(Calendar.YEAR);
- cal.set(Calendar.WEEK_OF_YEAR, setm);
- int imes=cal.get(Calendar.MONTH);
- imes=imes+1;
- System.out.println ("\tSetmana: " +setm+ "\tAny: " +iany);
- switch(imes){
- case 1:
- System.out.println(" Gener - "+cal.get(Calendar.YEAR));
- break;
- case 2:
- System.out.println(" Febrer - "+cal.get(Calendar.YEAR));
- break;
- case 3:
- System.out.println(" Març - "+cal.get(Calendar.YEAR));
- break;
- case 4:
- System.out.println(" Abril - "+cal.get(Calendar.YEAR));
- break;
- case 5:
- System.out.println(" Maig - "+cal.get(Calendar.YEAR));
- break;
- case 6:
- System.out.println(" Juny - "+cal.get(Calendar.YEAR));
- break;
- case 7:
- System.out.println(" Juliol - "+cal.get(Calendar.YEAR));
- break;
- case 8:
- System.out.println(" Agost - "+cal.get(Calendar.YEAR));
- break;
- case 9:
- System.out.println(" Septembre - "+cal.get(Calendar.YEAR));
- break;
- case 10:
- System.out.println(" Octubre - "+cal.get(Calendar.YEAR));
- break;
- case 11:
- System.out.println(" Novrembre - "+cal.get(Calendar.YEAR));
- break;
- case 12:
- System.out.println(" Desembre - "+cal.get(Calendar.YEAR));
- break;
- }
- System.out.println("");
- if(imes==1 || imes==2){
- int primerdia= (iany+(31*(imes-1))+((iany-1)/4)-((3*((iany+99)/100)/4)));
- PrimerDiaMes=primerdia%7;
- }
- else {
- int primerdia=(iany+(31*(imes-1))+1-(((4*imes)+23)/10)+(iany/4)-(((3*((iany/100)+1)))/4)-1);
- PrimerDiaMes=primerdia%7;
- }
- System.out.println("set DL DM DM DJ DV DS DG");
- int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
- Calendar cal2 = Calendar.getInstance();
- cal2.set(Calendar.MONTH, imes-1);
- cal2.set(Calendar.YEAR, iany);
- cal2.set(Calendar.WEEK_OF_MONTH, 1);
- //**********************************************
- Calendar cal3=Calendar.getInstance();
- cal3.clear();
- cal3.set(Calendar.YEAR, iany-1);
- int semant= cal3.getActualMaximum(Calendar.WEEK_OF_YEAR);
- int esmesenero= cal2.get(Calendar.MONTH);
- z=cal2.get(Calendar.WEEK_OF_YEAR);
- if(setm==53){
- z=cal2.get(Calendar.WEEK_OF_YEAR)+1;
- System.out.print(z);
- }
- else if( semant==52 && esmesenero==0 && PrimerDiaMes<=4){
- z=cal2.get(Calendar.WEEK_OF_YEAR);
- System.out.print(z);
- }
- else if( semant==52 && esmesenero==0 && ((PrimerDiaMes<=4)==false) ){
- System.out.print("52");
- z=cal2.get(Calendar.WEEK_OF_YEAR)-1;
- }
- else if(PrimerDiaMes>4 && esmesenero==0){
- System.out.print("53");
- z=cal2.get(Calendar.WEEK_OF_YEAR)-1;
- }
- else{
- z=cal2.get(Calendar.WEEK_OF_YEAR);
- System.out.print(z);
- }
- //********************************************
- switch (PrimerDiaMes){
- case 0:
- System.out.print(" ");
- j=7;
- break;
- case 1:
- j=1;
- break;
- case 2:
- System.out.print(" ");
- j=2;
- break;
- case 3:
- System.out.print(" ");
- j=3;
- break;
- case 4:
- System.out.print(" ");
- j=4;
- break;
- case 5:
- System.out.print(" ");
- j=5;
- break;
- case 6:
- System.out.print(" ");
- j=6;
- break;
- }
- System.out.print("\t");
- for (int i=1; i<=days; i++){
- System.out.print(i+" ");
- if (j%7==0){
- z++;
- cal2.set(Calendar.WEEK_OF_YEAR, z);
- h=cal2.get(Calendar.WEEK_OF_YEAR)-1;
- if(h==setm){
- System.out.print("<<<<<");
- most=true;
- }
- System.out.print("\n");
- System.out.print(z+"\t");
- }
- j++;
- }
- if( most==false){
- int ultitit=cal.get(Calendar.DAY_OF_WEEK)+1;
- int imprtab= 7-ultitit;
- switch(imprtab){
- case 0:
- System.out.print(" <<<<<");
- break;
- case 1:
- System.out.print("\t"+" <<<<<");
- break;
- case 2:
- System.out.print("\t\t"+" <<<<<");
- break;
- case 3:
- System.out.print("\t\t\t"+" <<<<<");
- break;
- case 4:
- System.out.print("\t\t\t\t"+" <<<<<");
- break;
- case 5:
- System.out.print("\t\t\t\t\t"+" <<<<<");
- break;
- case 6:
- System.out.print("\t\t\t\t\t\t"+" <<<<<");
- break;
- }
- }
- }
- } }
- }
No hay comentarios:
Publicar un comentario