• Guten Start ins Wintersemester 2024/2025

Einsendeaufgabe 2

@danwir: Ändere in Deiner Aufgabe doch noch den Begriff "Dekomprimierung", es muss heißen: Dekomposition 😉
Danke für die Vorschläge, ich hab gerade erst mit Lesen der KE 2 angefangen.

@all: Ist die Übungsaufgabe 2.2 nicht fast identisch mit der EA 2.1?

LG Iris
 
Habe ich im Grunde auch fast so wie danwir, aber bei der Phase 2 sind es bei mir insgesamt 4 Schritte. Wenn der Kunde nämlich die Preisliste anfordert, muss der Vertrieb dies ja auch erstmal zurückschicken. Zumindest habe ich das noch als zusätzlichen Schritt.
Ansonsten gebe ich Iris recht, das ist im Grunde die gleiche Aufgabe wie die Übungsaufgabe.

Bei der Programmieraufgabe musste ich schlucken... hatte nicht mit sowas gerechnet, da gleich sowas machen zu müssen. Evtl. isses recht einfach, aber dazu brauch ich erstmal etwas Zeit mich da einzulesen.

Grüße,
Mathias
 
zwei Anmerkungen zu EA 2.2 Lösung von danwir:
- IDES Automotive Europe AG ist wenn ich das richtig lese ein Teilkonzern von IDES Europe --> Du musst die beiden tauschen
- .. werden AUCH in den Werken in Frankf... --> Das heißt doch das in allen Werken, Baugruppen produziert werden.
 
und hier noch die 2.4
ok, ich hab geschumelt, ich glaub nicht das ich C# in den paar tagen jetzt lernen werde. Habs aus dem Netz kopiert, evtl. ist es ja richtig. Falls ich die Woche noch zeit finde programmiere ich das ding mal.

Einsendeaufgabe 2.4 (Server /Handler-Muster)

Server Muster:

public class Server extends Thread {
public Server() { this.start(); }
public void run() {
while (true) {
System.out.println("waiting for new task");
try {
System.in.read();
} catch (IOException e) { e.printStackTrace(); }
Handler handler = new Handler();
System.out.println("New Handler started");
try {
Thread.sleep(1);
} catch (InterruptedException exc) {
exc.printStackTrace();
}
}
}
public static void main(String[] args) {
new Server();
}
}

Handler Muster:

public class Handler extends Thread {
public Handler() {
this.start();
}
public void run() {
System.out.println("Doing some work ...");
// Hier könnte eine sinnvolle Aufgaben gelöst werden
try {
Thread.sleep(1000);
} catch (InterruptedException exc) {
exc.printStackTrace();
}
System.out.println("... done");
}
}
 
Zu Aufgabe 2.3
@danwir: vom groben Schema her habe ich das ähnlich wie du. Aber ich glaube die Tabellen sind nicht ganz korrekt. Z.B wird ja die Zuordnung von Kunde zu Kundentyp nicht über die Zahlweise gemacht.

Für die Zuordnung von Aufträgen zu Produkten habe ich eine Beziehungstabelle genommen.


Zur Aufgabe 2.4.
Die war machbar. Gut war der Hinweis in der Newsgroup.
@danwir: Die Lösung von dir ist defintiv nicht mehr die akutellste.

Zur Aufgabe 2.5.
Das Polling verfahren konnte ich lösen.
Für das Callbackverfahren habe ich zwar was. Aber ich habe das Gefühl, dass es falsch ist.
Bekomme den Callback aufruf nicht korrekt platziert. Wenn jamand da nen Tipp hat, wäre das echt klasse.
 
Hi

@ danwir:
Also dein ERM ist auf alle Fälle mal falsch. Du darfs zwei Entitys nie direkt miteinander verbinden. Es muss im eine Relation zwischen zwei Entitys sein.
Was auch sicher falsch ist, ist, dass es bei Attributen keine Kardinalitäten gibt.

Bei dem Organigramm habe ich es auch wie marcS gelesen, dass die IDES Automotive Europe AG ein Teilkonzern von IDES Europe und dass in allen 5 Werken die Baugruppenherstellung stattfindet und die Endmontage findet nur in den 3 Werken Hamburg, Berlin und Dresden statt.

Ich hoffe, ich konnt dir etwas weiterhelfen.
 
bzgl. des Organigramm: klar, hab den Teilkonzern vertausch und Baugruppen werden überall hergestellt.

Könnt ihr mir mal eure Lösungen bzgl. des ERM und der Programmieraufgabe zeigen. Ich brauche da nen vernüftigen Ansatz.
 
die Aufgaben 1-3 hab ich jetzt. Da ich im vorletzten Semester schon Modul 31751 Modellierung von Informationssystemen belegt hatte, war das alles machbar. Ergebnisse stelle ich morgen rein.
Bzgl. der Aufgaben 4 und 5 läuft gerade die Installation der benötigten Software. Hoffentlich schaffe ich das noch in den nächsten Tagen...
Bis später.
Iris
 
Hey zusammen,

ich brauche dringend Hilfe zu den Aufgaben 2.4 und 2.5!!!

Habe mir gestern MS Visual Basic 2005 Express Edition und MS Visual Web Developer 2005 Express Edition runtergeladen und installiert. Wo ist der Unterschied? Ich kann die cs-Datei für die Aufgabe zwar öffnen, aber wie ist genau vorzugehen? Die "Einführung in Microsoft .NET und C#" hat mir nicht wirklich geholfen, mit VB umzugehen.

Welche Dateien (Endungen) gehören zu einem VB-Projekt? Ich bin für jeden Tipp dankbar, denn das Einarbeiten in das Programm werde ich in den nächsten Tagen wohl nicht mehr hinkriegen.

Vielen lieben Dank!!

Iris
 
hallo iris,
wollte wissen woher du die Primärschlüsseln hast, in der Angabe steht nichts!
Die Beziehung zwi. Kunde und Auftrag ist 1:1!
lg

Hi,
die Schlüssel hab ich mir ausgedacht.
Z.B. Tab. Kunde: Name und Typ ist gegeben, aber bei mehreren Kunden mit Namen Müller hätte ich ein Problem. Daher habe ich eine Kundennummer ergänzt und sie als PK definiert.
Z.B. Tab. Anschrift: Hier hätte man auch ein Attritbut Anschrift-Nr. nehmen können, ansonsten setzt sich der PK zusammen aus Kundennummer und Adresse.

Die Beziehung Kunde - Auftrag kann nicht 1:1 sein, sonst könnte jeder Kunde nur einen Auftrag erteilen, damit könnte kein Unternehmen leben 😉 Im Text heißt es: Ein Auftrag wird von einem Kunden erteilt, d.h. dass ein Auftrag nicht von mehreren Kunden stammen kann, wohl aber, dass ein Kunde mehrere Aufträge erteilen kann.

Kannst Dich ja noch mal melden, wenn Du Fragen hast.

Gruß
Iris
 
bzgl. 2.4

Auf der Lehrstuhl Seite gibts ja schon den Server-Handler ( https://vu.fernuni-hagen.de/lvuweb/...rial/ungetaktet/content/einsendeaufgaben.html)

Normalerweise muss man doch nur noch den Handler Thread einfügen oder ?

z.B.
public
class Handler
{
public Handler()
{
new Thread(new ThreadStart(run)).Start();
}
public void run()
{
Console.WriteLine("Handler started");
}
}
oder ???

Wie kann ich den Testen ob das richtig ist ? ausführen läßt sich das Programm ja
 
ich frage mich auch, wie ich das testen kann.
Ich hab an Programmiererfahrung nur den Kurs 20022 und da hatte ich schon Probleme...
Vielleicht kann das hier doch noch jemand erklären, als ob ich 6 Jahre alt wäre 😉
Danke!! Danke!!
Und liebe Grüße.
Iris
 
@Iris:
Also ich werde das heute soweit fertig machen, mit dem Quellcode von oben (#20). Ich habe zwar die OOP Programmiersachen gut lösen können und auch etwas VB Erfahrung. Aber was die hier wollen ? keine Ahnung! Programm startet auf DOS Ebene und die Handler Meldung "Handler started" kommt bei mir auch auf, also gehe ich davon aus das es funktioniert, mehr kann/weis ich nicht zu überprüfen.
LG Daniel
 
Daniel,
das hört sich doch schon mal nach einem guten Test an. 😉
Kannst Du mir vielleicht ganz genau erklären, wie Du den Test zum Laufen bringst?
Und hast Du schon einen Lösungsansatz für Aufgabe 2.5?
Vielen lieben Dank!!

Gruß
Iris
 
Iris,
ähmm weis nicht genau was du meinst ?
Ich versuch es mal so:
Visual Studio 2005 starten -> erstellen projekt (z.B. test)
-< den Quellode von der UNI Seite reinkopieren (rechts unter Programm.cs), den Handler Code der ja leer ist programmieren ( z.B. den Text von mir #20) und starten (F5) so ein grünes Dreieck
dan kommen die DOS Eingabebefehle.
und die Meldungen die kommen sollten ( Console.WriteLine) kommen ja alle , auch die Handler.Ausgabe.
bringt dir die Erklärung etwas ?
Daniel
 
Hey Daniel,

vielen lieben Dank, ich weiß jetzt auch, warum ich das nicht hinbekommen habe. Ich hatte Visual Basis 2005 und Visual Web Developer 2005 installiert und mit keinem Programm hat es funktioniert. Hab mich mal wieder voll blöd angestellt. Danke für Deine Hinweise. Mit dem Visual C# 2005 klappt das dann auch 😉

So, nun noch die Aufgabe 5... und dann langes Wochenende

Gruß
Iris
 
Ich nochmal, wg. Aufgabe 2.5 Asynchrones Aufrufmuster.
Ich habe gerade einen Knoten im Hirn: Noch bevor ich an der Klasse Caller irgendwas geändert habe, bekomme ich beim Debuggen 3 Fehler:
2 x "Keine Überladung für die Caller-Methode nimmt 1 Argumente an" und "AsynchronerAufruf.Caller" enthhält keine Definition für "returned".

In der Klasse Caller fehlt mir also noch die Methode Caller (also der Konstruktor), aber mit welchem Parameter lege ich ihn an, so dass er den Wert null annehmen kann? Das gleiche dann für this.

Zum 2. Fehler muss ich die Methode returned() noch definieren. Auch hier habe ich schon einiges probiert.

Ich hab leider so gut wie keine Ahnung vom Programmieren und wäre für den ein oder anderen Tipp wirklich dankbar!!

Danke Euch!
Gruß Iris
 
also Fehler 1: An die Methode wird ein Wert übergeben --> Der Wert muss auch angenommen werden. Der Typ des übergenen Wertes ist 'Client'.

zu Fehler 2: Wie du schon sagst muss hier die Methode returned() definiert werden. Die einfach nur den Status des "Caller" wiedergibt --> Du brauchst also eine Attribute Status, Typ bool.

Hinweis: Der Constructor von Caller muss noch einen neuen Thread erzeugen....

Viele Grüße

Marc
 
hier ist mal mein fehlerhafter Code. Ich krieg das Ding einfach nicht zum Laufen, sitze nun schon den ganzen Tag daran.
Wäre toll, wenn sich jemand erbarmt und mir noch einen Tipp gibt.
Der Status wird irgendwie auch nicht verarbeitet....

Danke und Gruß
Iris


Code:
    public class Caller
    {

        bool status;
        public Caller()
        {
            // neuer Thread
            NeuerThread = new Thread(new ThreadStart(new Caller().Thread));
            NeuerThread.Start();

        }
        public void Thread();
        public bool returned()
        {
            return status;
        }

     }
}
 
Iris,

Beim Erzeugen eines Objektes der Klasse "Caller" wird ein Objekt der Klasse Client übergeben -->

Siehe Aufruf der Klasse Caller in Klasse Client:
Class Client {
...
Caller caller = new Caller(null);
...
Caller caller2 = new Caller(this);
...
}
Also muss im Constructor der Classe Client auch ein Parameter dafür angeben werden. zB.:
Class Caller {
...
public Caller(Client ToDo)
...
}

Damit sollte der Aufruf der Klasse jetzt auf jeden Fall klappen.
 
Marc,
...falls Du noch Lust hast, einer Blondine zu helfen...
soweit klappt das auch mit dem Constructor. Allerdings weiß ich auch nicht, wie das mit dem neuen Thread funktioniert.
Ich hab ein bisschen gegooglet und bin dann auf

Code:
NeuerThread = new Thread(new ThreadStart(new Caller().Thread));
 NeuerThread.Start();

gekommen. Allerdings weiß ich nicht, ob die Methoden alle richtig sind, bzw. warum die neu definierte Methode

Code:
public void thread()

dann auf diesen Fehler läuft: "AsynchronerAufruf.Caller.thread()" ist nicht als abstrakt oder extern deklariert und muss daher einen Text deklarieren."
😕😕😕

Ich glaub, ich wechsel den Studiengang😱
😉

LG
Iris
 
Logo,

also den Thread aufruf habe ich mir auch nur aus der Aufgabe 2.4 abgeschaut:

new Thread(new ThreadStart(Run)).Start();

dazu habe ich dann einfach eine passende Methode angelegt:

public void Run()
{

}


Marc
 
@Iris:

Für das Callback verfahren habe ich auch einige Zeit gebraucht:

Bei der Erzeugung des Caller Objektes wird die Client Klasse ja mit übergeben.
Damit du aus dem erzeugten Thread auch noch darauf zu greifen kannst, muss das übergebene Objekt als Attribut in der Klasse gesetzt werden.
--> Attribut vom Typ Client definieren
--> Übergebenen Wert im Konstruktor im Attribut speichern.

Jetzt kannst du aus dem Thread heraus dich auf Attribut - das Objekt das den Caller aufgerufen hat - beziehen und dort die Methode Callback starten.
Da das nur funktioniert bzw. ausgeführt werden muss, wenn das Caller Objekt im Callback Verfahren läuft. Muss der Aufruf der Callback Methode in einer If Klausel erfolgen im Thread erfolgen.
 
ich bin irgendwie mit euren ER-Modellen nicht einverstanden. Habe mir grad das von 2.2 mal angesehen was hier gepostet wurde. Die haben alle eine Eigenschaft, die mir nicht so ganz passt ehrlich gesagt. Produkt-Entität ist immer mit Einzelteil verbunden. Aber so einfach ist das doch nicht. Angenommen wir haben Motorrad A und das hat 20 Einzelteile. Dann haben wir Motorrad B und das hat nur 15 Einzelteile. Einige davon hat auch A, andere nicht. Dann müssen wir doch damit rechnen, dass die Anzahl der Attribute aus der Einzelteile-Tabelle von Produkt zu Produkt schwankt und somit gar nicht feststeht, wie groß die Anzahl der Attribute in der Produkttabelle ist, oder sehe ich das falsch?

Grüße
Fresh
 
Fresh (lustiger Name),

alles frisch?? 😉

Die Attribute der Einzelteile sind schon die gleichen. Also z.B. Bezeichnung, Maße, Einkaufspreis, Lieferant. All das muss man bei einem Einzelteil angeben. Wieviele und welche Einzelteile dann in ein Produkt (und welches) eingehen (oder ob überhaupt) wird lediglich durch die Kardinalität bestimmt. Die ist demnach Produkt 1 Einzelteil 0..*, d.h. 1 Produkt enthält 0 oder mehrere Einzelteile, welche das für ein bestimmtes Produkt sind, wird nicht mehr über das ER-Modell angegeben.

Ich hoffe, ich konnte Dir helfen.
Gruß
Iris
 
Hat denn schon jemand die korriegierten Einsendeaufgaben zurückbekommen? Ich habe sie zwar aus Madrid verschickt und bekomme alles etwas später, aber so langsam mache ich mir Gedanken, dass was schief gelaufen sein könnte.
 
Hat denn schon jemand die korriegierten Einsendeaufgaben zurückbekommen? Ich habe sie zwar aus Madrid verschickt und bekomme alles etwas später, aber so langsam mache ich mir Gedanken, dass was schief gelaufen sein könnte.
Ich habe das schon vor einiger Zeit zurückbekommen, vor Weihnachten auch die EA3.
In Summe habe ich (da ich die Programmieraufgaben nicht gemacht habe) exakt 100 Punkte. Reicht.
 
Danke euch für die Antworten! Vor ein paar Tagen kam die EA 3 zurück, die 2er scheint verschollen. Ich hab das PA angeschrieben und die haben mir bestätigt, dass ich an der Klausur teilnehmen kann, also min.100 Punkte erreicht. Bin ich erleichtert!
 
ich habe eine Lösungsansatz für die EA 2.5. Könnte mir mal jemand Feedback geben.
Vielen Dank im voraus.

using System;

using System.ComponentModel;

using System.Runtime.Remoting.Messaging;

using System.Threading;


namespace TestAsyncHandler

{


delegatevoidMyCallerDelegate(Client client);





publicclassClient

{



public Client()

{

Caller caller = newCaller(null);

caller.MyTaskCompleted += caller_MyTaskCompleted;

caller.run();

while (caller.returned() == false)

{

Console.WriteLine("Do some other work...");

Thread.Sleep(1000);

}


Console.WriteLine("Continue with result");


Caller caller2 = newCaller(this);

caller2.MyTaskCompleted +=caller_MyTaskCompleted;

caller2.run();

Console.WriteLine("Do lots of other work");

}


privatevoid caller_MyTaskCompleted(object sender, AsyncCompletedEventArgs e)

{

callback();

}


[STAThread]

staticvoid Main(string[] args)

{

newClient();

}




publicvoid callback()

{

Console.WriteLine("Received result");

}

}


publicclassCaller

{

// event nach außen

publiceventAsyncCompletedEventHandler MyTaskCompleted;


privatebool finish = false;


publicbool returned()

{

return finish;

}


privateClient _client;


privatereadonlyobject _sync = newobject();


privatebool _myTaskIsRunning = false;


publicbool IsBusy

{

get { return _myTaskIsRunning; }

}


public Caller(Client client)

{

_client = client;

}


publicvoid run()

{

MyCallerDelegate worker = newMyCallerDelegate(DoSomething);

AsyncCallback completedCallback = newAsyncCallback(MyTaskCompletedCallback);


lock (_sync)

{

if (_myTaskIsRunning)

thrownewInvalidOperationException("The control is currently busy.");


AsyncOperation async = AsyncOperationManager.CreateOperation(null);

worker.BeginInvoke(_client, completedCallback, async);

_myTaskIsRunning = true;

}

}


privatevoid DoSomething(Client c)

{

Console.WriteLine("caller2 is started");

Thread.Sleep(2000);

Console.WriteLine("caller2 is finished");


}


privatevoid MyTaskCompletedCallback(IAsyncResult ar)

{

if (_client != null)

{

// get the original worker delegate and the AsyncOperation instance

MyCallerDelegate worker =

(MyCallerDelegate) ((AsyncResult) ar).AsyncDelegate;

AsyncOperation async = (AsyncOperation) ar.AsyncState;


// finish the asynchronous operation

worker.EndInvoke(ar);


// clear the running task flag

lock (_sync)

{

_myTaskIsRunning = false;

}


// raise the completed event

AsyncCompletedEventArgs completedArgs = newAsyncCompletedEventArgs(null,

false, null);

async.PostOperationCompleted(

delegate(object e) { OnMyTaskCompleted((AsyncCompletedEventArgs) e); },

completedArgs);

}

}


protectedvirtualvoid OnMyTaskCompleted(AsyncCompletedEventArgs e)

{

if (MyTaskCompleted != null)

{

MyTaskCompleted(this, e);

finish = true;

}

}


}

}
 
So mal meine Lösung zur Aufgabe 2.4 in Java (Auszug class Handler). Kann mir hierzu mal jemand ein Feedback geben? Ich hab zwar das Modul "objektorientierte
Programmierung" bestanden, hab aber arge Probleme mit der Programmierung.

Ich hab den Handler an der Stelle gelassen an der es auch vorgegeben war

public class Handler extends Server{

public Handler(){
Thread h = new Thread(new Runnable(){
public void run(){
runHandler();
}
)};
h.start();
}

}
 
@Julia1981

der Handler erbt nicht vom Server - das ist eine innere Klasse.
Anstatt "runHandler();" kannst auch eine System.out.println("do something..."); schreiben oder eine Thread.sleep(10000);

den Thread muss du nicht unbedingt in die Variable "h" Speichern --> kannst direkt "new Thread(...).start();" machen
 
Oben