![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 11.11.2004
Beiträge: 52
|
Hallo, ich möchte einen Server programmieren, den ich mit meinem Vokabelprogramm kontaktieren kann, der mir die deutsche, lateinische, französische, englische und italienische Bedeutung eines Wortes übermittelt. Die Informationen bekommt er von Benutzern des Vokabelprogramms und speichert sie bei sich. Leider kenne ich mich micht so gut mit der Datenbankprogrammierung aus, deshalb suche ich einen Weg den Server ohne Datenbank zu programmieren. Er kann allerdings auch nicht alles im Ram behalten (zu große Datenmengen). Ich komme bei dem Problem einfach nicht weiter, habt Ihr eine Idee? Gruß der Felix |
| | |
| | Nach oben #4 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
wieso ohne datenbank? die einzige möglichkeit die dir noch übrig bleibt wenn du die daten nicht in einer datenbank speichern willst und auch nicht im ram, bleibt dir nur noch übrig sie in einfachen dateien zu speichern, z.b. in properties dateien... Code: dude=kerl noob=neuling . . . what=was world=welt das ist aber nicht unbedingt eine gute lösung, da du wann immer du ein wort übersetzen willst die datei soweit auslesen musst, bis du an die stelle kommst wo das wort steht.... nehmen wir mal an du hast 4000 wörter in deiner datei, was für eine sprache noch viel zu wenig ist. du willst also z.b. das wort "world" auf deutsch übersetzen, welches sagen wir mal in zeile 3600 steht, da du nicht weißt in welcher zeile welches wort steht musst du also die datei so lange auslesen bis du an die position kommst wo das wort steht. das ganze verfahren produziert einen großen overhead, denn du vermeiden kannst indem du eine datenbank benutzt. datenbanken sind im endeffekt auch nur dateien, welche aber in von dem datenbankserver verwaltet werden um dem benutzer/programmierer arbeit zu ersparen. also ach dir lieber die arbeit und lerne wie man mit datenbanken umgeht, früher oder später wirst du damit arbeiten müssen... hab mir dein vokabelprog mal von deiner site runtergeladen und so wie der quelltext ausschaut, musst du noch einiges mehr lernen, als mit datenbanken umzugehen.... mein tip: (warscheinlich einer der häufigsten lösungsvorschläge in diesem forum...) kauf dir das buch : java ist auch eine insel isbn: 3-89842-365-4 50 euro ist zwar ein schwinegeld..... aber es lohnt sich! mfg beny |
| | |
| | Nach oben #5 |
| Benutzer Registriert seit: 11.11.2004
Beiträge: 52
|
hm, ok, ich werde Datenbanken lernen. Zum alten Quelltext: ich setzte das Programm komplett neu auf. Aber mich würde es echt interessieren, was dir so alles nicht gefällt... (ok, ok das Programm ist recht unübersichtlich programmiert) Also, ich würde mich echt freuen, wenn du mir mal deine Kritik auf irgendeinen Weg (ICQ, E-Mail, PM, Forum, usw...) mitteilen würdest, schließlich will ich ja was lernen Gruß der Felix Ach, ja, das Buch gibts auch kostenlos zu Download als e-book... einfach mal googlen |
| | |
| | Nach oben #6 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
//-> package de.texes.voko; //-> jede java klasse sollte in einem package sein import javax.swing.*; . . . import java.io.*; //-> klassennamen beginnen immer mit einem großbuchstaben //-> methoden und variablennamen mit einem kleinen buchstaben //-> bei zusammengesetzen namen, wird der anfang jedes folgenden wortes groß geschrieben! //-> also endOfLine nicht endofline... class voko extends JFrame implements ActionListener, WindowListener, KeyListener{ /********************** *Komponenten erzeugen* **********************/ //-> varialennamen am besten in englischer sprache, //-> so bekommt man die probleme mit sonderzeichen, welche man bei der namensgebung nicht verwenden sollte //-> falls du kein englisch kannst, die umlaute ausschreiben... also ä wird zu ae, ü wird zu ue..... events x = new events(this); JButton no = new JButton("weiß ich nicht"); JButton end = new JButton("Projekt öffnen"); JMenu Programm = new JMenu("Programm"); . . . JMenu dfragen = new JMenu("deutsche Bedeutung fragen"); JMenu Einstellungen = new JMenu("Einstellungen"); JMenu zurück = new JMenu("zurück setzten"); JMenuItem fzurück = new JMenuItem("Fremdsprachenteil zurücksetzten"); JMenuItem dzurück = new JMenuItem("deutschen Teil zurücksetzten"); String answer; int richtig,falsch,gesamt,what; ArrayList aktu, next; int isalt = 0; dia d = new dia(); //-> dieses kommentar ist sinnloß, da ja jeder sieht das das hier der konstruktor ist! /************* *Konstruktor* *************/ Voko (){ super ("voko"); //LAYOUT SETZTEN getContentPane().setLayout(new BorderLayout()); south.setLayout(new FlowLayout()); center.setLayout(new GridLayout(2,1)); north.setLayout(new FlowLayout()); //MENU ERZEUGEN setJMenuBar(mb); mb.add(Programm); Programm.add(load); Programm.add(beb); . . . mb.add(Einstellungen); Einstellungen.add(bigletter); Einstellungen.add(falschrum); //Panels anordnen getContentPane().add(center,BorderLayout.CENTER); . . . north.add(end); //Visible setzten no.setVisible(false); . . . falschrum.setVisible(false); exportieren.setVisible(false); //-> methoden namen sollten für sich sprechen! //-> also besser den namen so wählen, das man ihn nicht mit einer extra kommentarzeile erklären muss... //-> z.b. readLastConfiguration(); oder initConfig() //VORHERIGE EINSTELLUNGEN EINLESEN readitin(); //Größe des dia setzten d.setSize(250,170); } //-> wieder ein sinnloses kommentar..... /**************** *main()-Methode* ****************/ public static void main (String [] args){ voko v = new voko(); v.setSize(400,210); v.setVisible(true); } //-> wieder ein sinnloses kommentar..... //-> du solltest nicht alle aktionen mit einem listener bearbeiten... //-> bei vielen aktionen kann dein prog ins hängen geraten, weil der awt thread damit beschäftigt ist nach einem button druck //-> eine if else kette mit hunderten von gliedern zu durchlaufen um zur richtigen aktion zu gelangen und nicht mehr mit dem zeichnen nachkommt... //-> schau dir mal die klasse Action und AbstractAction aus javax.swing an, is meiner meinung fast besser actions statt listeners zu benutzen /**************** *ActionListener* ****************/ public void actionPerformed(ActionEvent ae){ try{ // ganz böse!!!!!!!!! beim vergleichen von objekten, niemals mit == vergleichen sonder immer mit der funktion equals eines der beiden objekte // nur primitive typen mit == vergleichen, in bestimmten fällen wirst du sonst auf komische ergebnisse stoßen! if (ae.getSource() == ok){ if (ok.getLabel() == "Programm beenden"){ endtheProg(); } else if(ok.getLabel() == "Projekt schließen"){ closeProject(); } else{ checkit(); } } else if (ae.getSource() == no){ jop.showMessageDialog(this,answer,"Antwort:",JOpti onPane.INFORMATION_MESSAGE); boolean andsrum = false; if (what == 1){ aktu = x.f1; next = x.f2; } . . . } else if (ae.getSource() == end){ if (end.getLabel() == "Wort hinzufügen"){ worddialog wd = new worddialog(x,this); } else if (end.getLabel() == "Projekt öffnen"){ openProject(); } else{ endofA(); } } else if (ae.getSource() == load){ openProject(); } //-> hier sind 3 unterscheidliche fälle, aber in allen 3 führst du die gleichen aktionen durch! else if (ae.getSource() == beb){ bebframe bebf = new bebframe(x,false); bebf.setSize(800,450); bebf.setVisible(true); } else if (ae.getSource() == fbearbeiten){ bebframe bebf = new bebframe(x,false); bebf.setSize(800,450); bebf.setVisible(true); } else if (ae.getSource() == dbearbeiten){ bebframe bebf = new bebframe(x,true); bebf.setSize(800,450); bebf.setVisible(true); } else if (ae.getSource() == close){ closeProject(); } else if (ae.getSource() == newpro){ newpro(); } else if (ae.getSource() == exit){ endtheProg(); } else if (ae.getSource() == k1){ if (falschrum.getState()){ out.setText((String)x.f1.get(1)); answer = (String)x.f1.get(0); } else{ out.setText((String)x.f1.get(0)); answer = (String)x.f1.get(1); } gesamt = x.f1.size()/2; what = 1; end.setLabel("Abfrage beenden"); ok.setLabel("OK"); no.setVisible(true); Programm.setVisible(false); altAbfrage.setVisible(false); falschrum.setVisible(false); d.setVisible(true); d.aktu(0,0,gesamt); } //-> nochmals, jede der folgenden else if blöcke beinhaltet fast genau die selben anweisungen //-> sowas solltest du zusammenfassen else if (ae.getSource() == k2){ if (falschrum.getState()){ out.setText((String)x.f2.get(1)); answer = (String)x.f2.get(0); } else{ out.setText((String)x.f2.get(0)); answer = (String)x.f2.get(1); } gesamt = x.f2.size()/2; what = 2; end.setLabel("Abfrage beenden"); ok.setLabel("OK"); no.setVisible(true); Programm.setVisible(false); altAbfrage.setVisible(false); falschrum.setVisible(false); d.setVisible(true); d.aktu(0,0,gesamt); } . . . else if (ae.getSource() == d5){ out.setText((String)x.d5.get(0)); answer = (String)x.d5.get(1); gesamt =x.d5.size()/2; what = 50; end.setLabel("Abfrage beenden"); ok.setLabel("OK"); no.setVisible(true); Programm.setVisible(false); altAbfrage.setVisible(false); falschrum.setVisible(false); d.setVisible(true); d.aktu(0,0,gesamt); } . . . else if (ae.getSource() == dzurück){ int n = x.d2.size(); for (int i = 0;i<n;i++) x.d1.add(x.d2.get(i)); n = x.d3.size(); for (int i = 0;i<n;i++) x.d1.add(x.d3.get(i)); n = x.d4.size(); for (int i = 0;i<n;i++) x.d1.add(x.d4.get(i)); n = x.d5.size(); for (int i = 0;i<n;i++) x.d1.add(x.d5.get(i)); n = x.da.size(); for (int i = 0;i<n;i++) x.d1.add(x.da.get(i)); x.d2 = new ArrayList(); x.d3 = new ArrayList(); x.d4 = new ArrayList(); x.d5 = new ArrayList(); x.da = new ArrayList(); } else if (ae.getSource() == exportieren){ if (x.export()){ altAbfrage.setVisible(false); beb.setVisible(false); falschrum.setVisible(false); pzurück.setVisible(false); exportieren.setVisible(false); Abfrage.setVisible(true); projektBearbeiten.setVisible(true); zurück.setVisible(true); } } } catch (IndexOutOfBoundsException e){ jop.showMessageDialog(this,"Der gewählte Kasten ist leer","keine Vokabeln",JOptionPane.INFORMATION_MESSAGE); } } /************************* *Neues Projekt erstellen* *************************/ //-> mal wieder die namesgebung, dies methode könnte z.b. newProject heißen... private void newpro(){ boolean b = x.newpro(); if (b){ load.setVisible(false); newpro.setVisible(false); projektBearbeiten.setVisible(true); close.setVisible(true); end.setLabel("Wort hinzufügen"); ok.setLabel("Projekt schließen"); altAbfrage.setVisible(true); zurück.setVisible(false); } } /************ *Neues Wort* ************/ //-> newWord private void newword(){ if (falschrum.getState()){ if (richtig+falsch < gesamt){ out.setText((String)aktu.get(1)); answer = (String)aktu.get(0); } else{ endofA(); } } else{ if (richtig+falsch < gesamt){ out.setText((String)aktu.get(0)); answer = (String)aktu.get(1); } else{ endofA(); } } } /****************** *Ende der Abfrage* ******************/ //-> methodennamen sollten selbsterklärend sein, keine kryptischen abkürzungen //-> hier währe also der name enderDerAbfrage angebracht, oder endOfQuery private void endofA(){ Programm.setVisible(true); if (isalt == 1){ altAbfrage.setVisible(true); falschrum.setVisible(true); } else{ Abfrage.setVisible(true); } out.setText(""); in.setText(""); end.setLabel("Wort hinzufügen"); ok.setLabel("Projekt schließen"); no.setVisible(false); long lrichtig = (long) richtig; long lfalsch = (long) falsch; if ((lrichtig+lfalsch) != 0) jop.showMessageDialog(this,(100/(lrichtig+lfalsch))*lrichtig + "% richtig, "+(richtig+falsch)+" Vokabeln insgesamt","Übung beendet",JOptionPane.INFORMATION_MESSAGE); richtig = 0; falsch = 0; gesamt = 0; } |
| | |
| | Nach oben #7 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
so hab mal ein paar kommentare direkt in deinen quelltext reingeschrieben... alles was mit //-> beginnt kommt von mir! ist sicher nicht alles, vielleicht fällt jemand anderem noch was auf... was das buch angeht so ist es meiner meinung nach besser, die ganzen grundlagen im gedruckten format zu haben, weil man immer mal auch wenn man gerade nicht vorm rechner sitzt ein bischen blättern kann. ausserdem, wenn du die gut tausend seiten auf dem monitor ließt fickst du dir dabei deine augen um bekommst kopfschmerzen... |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Welchen Application Server? | la-finest | Tools, Server, Betriebssysteme | 4 | 15.02.2007 13:24 |
| Apache kann nicht gestartet werden. | Jan | Tools, Server, Betriebssysteme | 11 | 23.11.2006 09:26 |
| Virtual Server? | xardias | Plauderecke | 11 | 29.03.2006 18:47 |
| MySQL 5.1 kommt in die Beta-Phase | Ben | Nachrichten | 1 | 02.03.2006 14:31 |
| fehler am server oder fehler am script | vodan | PHP-Programmierung | 26 | 23.05.2005 00:28 |