Java de Basis oefening 4.1 pag 132 : Dag van de Week

Status
Niet open voor verdere reacties.

romeodelta

Gebruiker
Lid geworden
26 apr 2014
Berichten
5
Ben bezig met oefening 4.1 pag 132, van het boek java de basis. Dit is een uitbreiding op 3.7 pag 119

3.7 is een programma dat de dag weergeeft na een ingevulde datum.
Voorbeeld: je vult in 14-9-2013
Antwoord: De dag na 14-9-2013 is 15-9-2013

Programma met 3 klassen.
Klasse 1: venster (canvas)
Klasse 2: paneel
Klasse 3: een klasse die kalender gegevens bepaald
- Klasse 2 haalt gegevens uit klasse 3 enz enz.

Echter nu wordt er gevraagd dat de uitkomst wordt gedisplayed met een dagnaam.
Antwoord: De dag na 14-9-2013 is maandag 15-9-2013

Gegeven is een PSD: 4p1.PNG

Ik heb alle 3 klassen geplaatst.

Vanuit het PSD moet je een stukje code kloppen, maar welke precies weet ik niet en waar ook niet.
Dus wie kan me helpen klasse 3 kalendergegevens te maken? Ik gebruik eclipse als editor.


Klasse 1:
Code:
package h03vb37volgendedag3kdagvandeweek;

import javax.swing.*;
import javax.swing.JFrame;

// Omschrijving programma: 
// Voorbeeld 3.7 volgende dag
// Invoervelden: dag maand jaar in nummerieke vorm
// Uitvoervelden: een tekst die meldt wat de volgende dag is.

public class Volgendedag extends JFrame //class
{
	public Volgendedag() //method
	{
		JFrame venster = new JFrame();
		venster.setSize(350,250);								// afmeting venster = 300 horizontaal en 250 verticaal 
		venster.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// exit on close
		venster.setTitle("Bepaal volgende dag");				// titel in venster
		venster.setLocation(500,500);							// locatie venster
		
		//-----link naar Btwnpaneel.java-------------------------------------------------------------
		JPanel hoofdpaneel = new Volgendedagpaneel(); 	// a
		venster.add(hoofdpaneel);						// b
		// a & b mogen ook worden genoteerd als: 
		// venster.add(new Etikettenpaneel() );
		//----------------------------------------------------------------------------------------------

		venster.setVisible(true);	//bouw progamma eerst op en display dan het venster pas
	}

	public static void main (String [] args) // main method
	{
		new Volgendedag(); //voer uit method: public Etiketten()

	}

}

Klasse 2:
Code:
package h03vb37volgendedag3kdagvandeweek;

import javax.swing.*;
import java.awt.event.*;

//Omschrijving programma: 
//Voorbeeld 3.7 volgende dag
//Invoervelden: dag maand jaar in nummerieke vorm
//Uitvoervelden: een tekst die meldt wat de volgende dag is.

public class Volgendedagpaneel extends JPanel implements ActionListener //class
{
	private JTextField dagVeld, maandVeld, jaarVeld;		// tekstField
	private JButton berekenKnop;							// knop
	private JTextField resultaatVeld; 						// tekstField
			
	// Maak paneel met invoervelden en berekenknop
	public Volgendedagpaneel() //method
	{
		// maak element voor paneel
		add(new JLabel("Dag"));
		dagVeld = new JTextField("14",2);
		add (dagVeld);
		
		add(new JLabel("Maand"));
		maandVeld = new JTextField("9",2);
		add (maandVeld);
		
		add(new JLabel("Jaar"));
		jaarVeld = new JTextField("2013",2);
		add (jaarVeld);
		
		berekenKnop = new JButton ("de volgende dag?");
		berekenKnop.addActionListener(this);
		add (berekenKnop);
		
		resultaatVeld = new JTextField (23);
		add(resultaatVeld);
	}
	
	// bereken de volgende dag en maak een tekst
	public String maakResultaattekst (int dag, int maand, int jaar)
	{
		if(bestaanbareDatum(dag,maand,jaar))
		{
			Kalendergegevens kalendervraagbaak = new Kalendergegevens();						// code verwijst naar andere klasse 
			String resultaat = " De dag na " + dag + "-" + maand + "-" + jaar + " is ";
			dag++;
			
			if (dag > kalendervraagbaak.getAantalDagenInMaand(maand, jaar))						// code verwijst naar andere klasse 
			{	// nieuwe maand
				dag = 1;
				maand++;
				
				if (maand >12)
				{
					//nieuw jaar
					maand = 1;
					jaar++;
			}
		}
		return resultaat + dag + "-" + maand + "-" + jaar;
		}
		else return "Ongeldige datum";
	}
		
	
	//	public int AantalDagenInMaand (int maand, int jaar)					// code ververplaatst naar andere klasse 
	// 	{
	//		
	//	}
		
	//	public boolean isSchrikkeljaar(int jaartal							// code ververplaatst naar andere klasse
	//	{
	//	
	//	}
	
		private boolean bestaanbareDatum(int dag,int maand, int jaar) 
			{
			return ((jaar >= 1582) && (maand > 0) && (maand < 13) && (dag > 0) && (dag < 32));
			}
			
	// haal gegevens op uit de velden en laat een resultaattekst maken: toon resultaattekst
	public void actionPerformed(ActionEvent e)
		{
		int invoerdag = Integer.parseInt(dagVeld.getText());
		int invoermaand = Integer.parseInt(maandVeld.getText());
		int invoerjaar = Integer.parseInt(jaarVeld.getText());
		String resultaat = maakResultaattekst (invoerdag,invoermaand,invoerjaar);
		resultaatVeld.setText(resultaat);		
		}
	}

Klasse 3:
Code:
package h03vb37volgendedag3kdagvandeweek;

public class Kalendergegevens 
{
	// geef het aantal dagen van de meegegeven maand in het meegegeven jaar
	public int getAantalDagenInMaand (int maand, int jaar)
	{
		final int APRIL=4, JUNI=6, SEPTEMBER=9,NOVEMBER=11;
		final int FEBRUARI=2;
		int aantalDagen = 31; // geldt voor de meeste maanden
		if (maand == APRIL || maand == JUNI || maand == SEPTEMBER || maand == NOVEMBER)
			{
				aantalDagen = 30;
			}
			else if (maand == FEBRUARI) 
				{
					aantalDagen = 28;
					if (isSchrikkeljaar(jaar))
						{
							aantalDagen = 29;
						}
				}
		return aantalDagen;
		
	}
	
	
	public String dagVanDeWeek( int maand, int dag, int jaar, int maandag, int dinsdag, int woensdag, int donderdag, int vrijdag, int zaterdag, int zondag) 
	{
		if(bestaanbareDatum(dag,maand,jaar))
		{
			String resultaat = " De dag na " + dag + "-" + maand + "-" + jaar + " is ";
						
			if (maand >2)
			{
				maand = maand -2;
				}
				else 
				maand = maand +10;
				jaar = jaar -1;
				}
			}
		return resultaat + dag + "-" + maand + "-" + jaar;
		}
		else return "Ongeldige datum";
	}
	
	//bepaal of het meegegeven jaartal een schrikkeljaar is
	public boolean isSchrikkeljaar (int jaarTal)
		{
			return ((jaarTal%4==0) && (jaarTal%100!=0) || (jaarTal%400 ==0));
		}
	//bepaal of het meegegeven datum bestaat	
	private boolean bestaanbareDatum(int dag,int maand, int jaar) 
		{
			return ((jaar >= 1582) && (maand > 0) && (maand < 13) && (dag > 0) && (dag < 32));
		}
		
	}
 
Laatst bewerkt:
mogelijks ligt het aan mij maar ik begrijp de vraag niet.
indien je kan vertellen waar je de cursus volgt en een email(van u)dan stuur ik je een java document op per mail.
 
In principe ben je hier gewoon je eigen date klasse aan het schrijven, maar dat maakt verder weinig uit. Ik heb de exacte implementatie van de date klasse nooit doorgenomen, dus het kan zijn dat er efficientere manieren zijn, maar dat maakt voor deze applicatie verder ook niet veel uit. Maar je zou een bepaalde datum waarvan je weet welke dag het toen was als basis kunnen nemen en functie schrijven welke het aantal dagen tussen twee datums uitrekent en kun je vervolgens eenvoudig berekenen op welke dag de nieuwe datum valt.
 
mogelijks ligt het aan mij maar ik begrijp de vraag niet.
indien je kan vertellen waar je de cursus volgt en een email(van u)dan stuur ik je een java document op per mail.

Waarom zou ik vertellen welke cursus ik volg? nou vooruit dan ik volg www.***.nl?
 
Laatst bewerkt door een moderator:
In principe ben je hier gewoon je eigen date klasse aan het schrijven, maar dat maakt verder weinig uit. Ik heb de exacte implementatie van de date klasse nooit doorgenomen, dus het kan zijn dat er efficientere manieren zijn, maar dat maakt voor deze applicatie verder ook niet veel uit. Maar je zou een bepaalde datum waarvan je weet welke dag het toen was als basis kunnen nemen en functie schrijven welke het aantal dagen tussen twee datums uitrekent en kun je vervolgens eenvoudig berekenen op welke dag de nieuwe datum valt.

Bedankt maar ik kan helaas niets met je antwoord. Zoek iemand die inhoudelijk code suggesties doet.
 
Waarom zou ik vertellen welke cursus ik volg? nou vooruit dan ik volg www.***.nl?
Dit is niet grappig, en ik vind het jammer dat je een toch heel normale vraag zo bot beantwoordt.

In ieder geval lijkt het erop dat je niet bekend bent met Date objecten; deze nemen een datum als invoer en kunnen daarna gebruikt worden om verdere berekeningen op los te laten (bijvoorbeeld datum + 1 dag). Daarna kan je dan de nieuw berekende datum in een door jouw opgegeven formattering (inclusief de te kiezen taal oftewel "locale") laten uitvoeren.

Via SimpleDateFormat kan je je eigen opmaak van datums gebruiken, dus ook datums in het Nederlands. Op http://tutorials.jenkov.com/java-internationalization/simpledateformat.html vind je een korte tutorial.
 
Laatst bewerkt:
Ik weet graag welk docenten er oude code geven de meeste developers werken met javafx door de voordelen van een veredelde css op javacode en ja ik spreek niet over javascript
nu het is zeker wel een oefening op OO maar ik blijf erbij code is te 5jaar te oud
als je dit volgt in een school neem een ander prof of docent
 
602a1d38fc5115f8ae4e282b5be8952a.png


Bron: http://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan