Zum Inhalt springen

musti

Mitglieder
  • Gesamte Inhalte

    27
  • Benutzer seit

  • Letzter Besuch

  1. Hallo Informatiker, ich habe ein kleines Problem. Ich habe ein Programm geschrieben, wobei man ein Guthaben- und Darlehenkonto anlegen kann. Und diese Berechnet werden. Man kann auch die Anfangs-Konto-Stände in eine Datei schreiben und auslesen. Mir fehlt aber, das man den Namen des Kontoinhabers eingeben kann. Wie könnte ich dies am besten lösen? Der Name soll in einem eigenen Array vorbesetzt werden und alle Ausgaben aus dem Hauptprogramm, die ein Konto betreffe, sollen auch den Namen des Inhabers haben. #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define KONTANZ 10 #define BANKNR 10000 #define DARLEHENSZINS 0.05 #define GUTHABENZINS 0.03 struct Konto { char *namptr; /*Name des Besitzers */ unsigned int kontoNr; /*Kontonummer*/ char artDktos; /*Art des kontos*/ float kontoStd; /*Kontostand*/ float zinsSz; /*Zinssatz*/ unsigned int laufZt; /*Laufzeit*/ float annuitaet; /*Annuität*/ }; // Globale Variablen // struct Konto Konten[10]; int f=0; char eingabe; FILE *speicher; // Funktions Prototypen // int KontoAnlegen(void); int getKontoByNr(int KontoNr); int BerechneGutKonto(int); int BerechneDaKonto(int); void SchreibeDatei(int Kontonummer); void oeffneDatei(char dateiname[]); //----------------------------------------------------------------------------// int main(int argc, char *argv[]) { int i; int zahl; int anfang = 1; int berechnung; float berechne; int nBerechnung; printf("\n\t Struktur Kontodaten,"); printf("\n\tvon xyz\n"); printf("\tuebersetzt am %s", __DATE__); printf("\tum %s Uhr", __TIME__); printf("\n\n"); /* Führt den Vorgang solange aus bis Exit gedrückt wurde */ while(anfang !=0) { printf("\t(1) Konto anlegen (2) Konto berechnen (3) Exit \n\t " "(4) Konto in Datei schreiben (5) Konto aus Datei auslesen"); scanf("%i",&zahl); if(zahl == 1) { int Ergebnis; do { Ergebnis = KontoAnlegen(); switch(Ergebnis) { case 0: printf("\tGuthabenkonto wurde erfolgreich angelegt.\n\n"); break; case 1: printf("\tDarlehenskonto wurde erfolgreich angelegt.\n\n"); break; case 2: printf("\tFehler beim erstellen des Kontos. \n \t" "Bitte ueberpruefen sie ihre Eingabe\n\n"); break; } } while(Ergebnis == 2); } else if (zahl == 2) { printf("\tBitte kontoNr eingeben: "); scanf("%i",&berechnung); nBerechnung = BerechneGutKonto(berechnung); nBerechnung = BerechneDaKonto(berechnung); switch(nBerechnung) { case 0: printf("\n\t Guthabenkonto erfolgreich berechnet.\n\n"); break; case 1: printf("\n\t Darlehen erfolgreich berechnet.\n\n"); break; case 2: printf("\n\t Unendliche Wiederholzahlen\n\n"); break; default: printf("\n\t Unbekannter Fehler\n\n"); break; } } else if(zahl == 3) { anfang = 0; } else if(zahl ==4) { printf("\tBitte kontoNr eingeben: "); scanf("%i", &berechnung); SchreibeDatei(berechnung); } else if(zahl == 5) { char dateiname[100]; printf("Bitte geben Sie einen Dateinamen an "); scanf("%s",&dateiname); oeffneDatei(dateiname); } else { printf("\tFalsche Eingabe, bitte wiederholen sie die Eingabe richtig.\n"); }//Ende Auswahl Prüfung } //while system("PAUSE"); return 0; } //----------------------------------------------------------------------------// int BerechneGutKonto(int KontoNummer) { // Ermittelt das Konto zur KontoNummer struct Konto AktKonto = Konten[getKontoByNr(KontoNummer)]; printf("\n"); /* Berechnung für Guthabenkonto */ if(AktKonto.artDktos == 'g') { int i; /* Index */ for(i = 1; i <= AktKonto.laufZt; i++) { AktKonto.kontoStd = AktKonto.kontoStd*(1+AktKonto.zinsSz); printf("\t Zwischen-Ergebnis zinsSchl = %f\n", AktKonto.kontoStd); } printf("\n\t Endkontostandt %f",AktKonto.kontoStd); return 0; } }// int BerechneGutKonto(int KontoNummer) //----------------------------------------------------------------------------// int BerechneDaKonto(int KontoNummer) { // Ermittelt das Konto zur KontoNummer struct Konto AktKonto = Konten[getKontoByNr(KontoNummer)]; printf("\n"); // Berechnung für Darlehenskonto // if(AktKonto.artDktos == 'd') { // Fehlerbehandlung von Endlosschleifen // if(AktKonto.kontoStd*(AktKonto.zinsSz + 0.01) >= AktKonto.annuitaet) { return 2; } if(AktKonto.kontoStd*(AktKonto.zinsSz + 0.01) <= AktKonto.annuitaet) { float i; /* zaehlt Jahre */ float zinsBez = 0; /* bis dahin bezahlten Zinsen */ for(i=1;AktKonto.kontoStd >= AktKonto.annuitaet;i++) { zinsBez = zinsBez + AktKonto.kontoStd * AktKonto.zinsSz; AktKonto.kontoStd = AktKonto.kontoStd * (1 + AktKonto.zinsSz) - AktKonto.annuitaet; printf("\n\t ZwischenErg: Restdarlehen = %.2f, bez.Zinsen gesamt = %.2f", AktKonto.kontoStd,zinsBez); } printf("\n\t Tilgung im %.1f ten Jahr\n",i); return 1; } else { return 3; } } } // int BerechneDaKonto(int KontoNummer) // --------------------------------------------------------------------------- // // Ermittelt Konto mithilfe der KontoNummer // int getKontoByNr(int KontoNr) { int i; //Durchläuft alle Konten bis die Kontonummer gefunden wurde // for(i=0; i < sizeof(Konten); i++) { if(KontoNr == Konten[i].kontoNr) { return i; // Gibt dann Konten Index aus // } } } // Ende int getKontoByNr(int KontoNr) // -------------------------------------------------------------------------- // // Funktion zum Anlegen der Konten.Gibt je nach Status eine Prüfziffer wieder // int KontoAnlegen(void) { printf("\n\tKontoart g fuer Guthaben, d fuer Darlehen = "); scanf("%s",&eingabe); int NameIndex; char Name[25]; switch(eingabe) { // Bei Wahl eines Guthabenkontos // case 'g': Konten[f].artDktos ='g'; printf("\n\t\tKontonummer = "); scanf("%i",&Konten[f].kontoNr); printf("\n\t\tKontostand = "); scanf("%f",&Konten[f].kontoStd); Konten[f].zinsSz= GUTHABENZINS; printf("\n\t\tLaufzeit= "); scanf("%i",&Konten[f].laufZt); Konten[f].annuitaet=0; f++; printf("\n\n"); return 0; break; // Bei Wahl eines Darlehenkontos // case 'd': Konten[f].artDktos='d'; printf("\n\t\tKontonummer = "); scanf("%i",&Konten[f].kontoNr); printf("\n\t\tKontostand = "); scanf("%f",&Konten[f].kontoStd); Konten[f].zinsSz=DARLEHENSZINS; Konten[f].laufZt=0; printf("\n\t\tAnnuitaet = "); scanf("%f",&Konten[f].annuitaet); f++; printf("\n\n"); return 1; break; // Bei sonstigen Eingaben // default: return 2; break; } } // Ende int KontoAnlegen(void) //----------------------------------------------------------------------------// //Funktion zum schreiben von Kontaktdaten in eine Datei // void SchreibeDatei(int Kontonummer) { struct Konto AktKonto = Konten[getKontoByNr(Kontonummer)]; speicher = fopen("Kontodaten.txt","a"); system("cls"); if(AktKonto.artDktos == 'g') { fprintf(speicher, "Kontonummer:\t%i\n", AktKonto.kontoNr); fprintf(speicher, "Kontostand:\t%.2f\n", AktKonto.kontoStd); fprintf(speicher, "KontoArt:\t%c\n", AktKonto.artDktos); fprintf(speicher, "Zinsen:\t%.2f\n", AktKonto.zinsSz); fprintf(speicher, "Laufzeit:\t%i\n", AktKonto.laufZt); fclose(speicher); } else if(AktKonto.artDktos == 'd') { fprintf(speicher, "Kontonummer:\t%i\n", AktKonto.kontoNr); fprintf(speicher, "Kontostand:\t%.2f\n", AktKonto.kontoStd); fprintf(speicher, "KontoArt:%c\n", AktKonto.artDktos); fprintf(speicher, "Zinsen:\t%.2f\n", AktKonto.zinsSz); fprintf(speicher, "Annuität:\t%i\n", AktKonto.annuitaet); fclose(speicher); } } //---------------------------------------------------------------------------// //Öffnet eine Datei und gibt sie am Bildschrim wieder// void oeffneDatei(char dateiname[]) { FILE *stream; if((stream = fopen(dateiname,"r")) == NULL) { printf("Fehler beim oeffnen"); exit(1); } int ch; ch = fgetc(stream); while(!feof(stream)) { putchar(ch); ch = fgetc(stream); } fclose(stream); } Ich wäre auf eure Hilfe sehr Dankbar. Mir geht es jetzt nur noch darum, das man den Namen des Kontoinhabers eingeben kann. LG Musti
  2. so hab das mit dem Serialisiern hinbekommen public void serialSpeichern(Spielzeugkiste dieSpielzeugkiste, String dateiname) { OutputStream fos = null; try { fos = new FileOutputStream(dateiname + ".txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(dieSpielzeugkiste); } catch (IOException e) { System.err.println(e); } finally { try { fos.close(); } catch (Exception e) {} } } public Spielzeugkiste deserial(String dateiname) { InputStream fis = null; try { fis = new FileInputStream( dateiname + ".txt"); ObjectInputStream ois = new ObjectInputStream(fis); return (Spielzeugkiste) ois.readObject(); } catch (IOException e) { System.err.println(e); } catch (ClassNotFoundException e) { System.err.println(e); } finally { try { fis.close(); } catch (Exception e) {} } return null; } } Doch die aufgabe mit dem scnner macht mir riesige sorgen danke für die hilfe
  3. Hab hier mal die Aufgabe angehängt, damit ihr wisst um was es geht. ist denk ich mal hilfreicher. Wurde mit BlueJ implementiert danke für die hilfe Bauklötze_emel.rar
  4. Hey Leute, wir haben in Programmieren 2 eine Hausarbeit bis morgen zu machen. Ich quäl mich schon seid wochen mit der aufgabe. hab die ersten aufgaben alle hinbekomme. doch zum ende hin klappt gar nix mehr 1.h) Der Anwender des Projektes soll die Möglichkeit erhalten, einen vorher in einer Textdatei gespeicherten Zustand einzulesen. Stellen Sie sicher, dass dabei die gleiche Information nicht mehrfach im Programm gespeichert wird. Wie mache ich das??? Ich kapier das nicht. und Serialisierung: i) Entwerfen und erstellen Sie eine Methode, welche die gesamte Datenbank bzw. den Inhalt der Spielzeugkiste in binärer Form in eine Datei zu serialisiert. j) Entwerfen und erstellen Sie eine Methode, mit deren Hilfe die serialisierten Inhalte im Programm wieder zur Verfügung gestellt werden können. k) Nutzen die Möglichkeiten aus i) und j) um den Programmzustand beim Verlassen des Programms zu sichern und die Datenstrukturen der Anwendung bei der Erstellung wieder mit diesem Zustand zu initialisieren. Davon habe ich Gar keine ahnung. wäre echt lieb, wenn ihr mir etwas weiterhilft. hier mein Quelltext import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.io.*; import java.util.Scanner; import java.util.*; /** * Beschreiben Sie hier die Klasse DateiManager. * * @author (Ihr Name) * @version (eine Versionsnummer oder ein Datum) */ public class DateiManager implements Serializable { private String[] splitArray; public void schreiben(Spielzeugkiste dieSpielzeugkiste, String dateiname) { ArrayList<Baukloetze> baukloetze; baukloetze = dieSpielzeugkiste.gibBaukloetze(); try { File datei = new File(dateiname + ".txt"); if(datei.exists()) { System.out.println("Datei gibt es schon."); } else { FileWriter writer = new FileWriter(datei); for(Baukloetze bauklotz : baukloetze) { writer.write(bauklotz.toString()); writer.write('\n'); writer.write('\n'); } writer.close(); } } catch (IOException e) { // beim Zugriff auf die Datei ist etwas schief gegangen } } public void lesen(String dateiname) { String name = dateiname; String zeile = null; try { BufferedReader in = new BufferedReader(new FileReader(name + ".txt")); while ((zeile = in.readLine()) != null) { System.out.println(zeile); } } catch (IOException e) { // beim Zugriff auf die Datei ist etwas schief gegangen } } public void Scan(String dateiname) throws FileNotFoundException { BufferedReader reader = new BufferedReader(new FileReader (dateiname + ".txt")); Scanner scanner = new Scanner(reader); while(scanner.hasNextLine()) { String line = scanner.nextLine(); splitArray = line.split(" "); for(int a = 2; a<= splitArray.length-1; a= a+3) { System.out.println(splitArray[a]); } } } } ist ein anfängerprogramm was mit bluej geschrieben worden ist. also wenn fehler entdeckt werden, könnt ihr mir das sagen. wäre echt lieb, wenn ihr mir weiterhelfen könntet danke
  5. danke leute, das hat sich geklärt.
  6. das mim programmieren ist wirklich nicht so einfach und für einen anfäger wie ich erst recht
  7. wie ist es hiermit. klappt auch try { System.out.println("Geben sie bitte die erste Zahl ein"); zahl1 = Double.parseDouble(in.readLine()); } catch (NumberFormatException g) { System.err.println("FEHLER:Bitte geben Sie eine Zahl ein:"); zahl1 = Double.parseDouble(in.readLine()); } try { System.out.println("Geben sie bitte die zweite Zahl ein"); zahl2 = Double.parseDouble(in.readLine()); } catch (NumberFormatException f) { System.err.println("FEHLER:Bitte geben Sie eine Zahl ein:"); zahl2 = Double.parseDouble(in.readLine()); }
  8. also ist die lösung so eigentlich richtig?
  9. so hoffe das ist schon besser... package rechner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Rechner { double ergebnis = 0; public double plus(double zahl1, double zahl2) { ergebnis = zahl1 + zahl2; return ergebnis; } public double minus(double zahl1, double zahl2) { ergebnis = zahl1 - zahl2; return ergebnis; } public double multiplizieren(double zahl1, double zahl2) { ergebnis = zahl1 * zahl2; return ergebnis; } public double teilen(double zahl1, double zahl2) { ergebnis = zahl1 / zahl2; return ergebnis; } public static void main(String[] args) throws NumberFormatException,IOException { double zahl1 = 0; double zahl2 = 0; String operation = ""; Rechner Calculate = new Rechner(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (operation != "0") { try { System.out.println("Zum BEENDEN = # eingeben!"); System.out.println("Geben sie bitte die Operation ein (+,-,*,/,#)"); operation = in.readLine(); } catch (NumberFormatException e) { System.err.println("FEHLER: Bitte geben Sie +,-,*, / ein!"); } if (operation.equals("#")) { System.out.println("Beendet"); break; } try { System.out.println("Geben sie bitte die erste Zahl ein"); zahl1 = Double.parseDouble(in.readLine()); } catch (NumberFormatException e) { System.err.println("FEHLER:Bitte geben Sie eine Zahl ein:"); } try { System.out.println("Geben sie bitte die zweite Zahl ein"); zahl2 = Double.parseDouble(in.readLine()); } catch (NumberFormatException e) { System.err.println("FEHLER:Bitte geben Sie eine Zahl ein:"); } System.out.println("Rechnung:"); System.out.println(zahl1 + " " + operation + " " + zahl2); System.out.println("Ergebnis:"); // entsprechende Methode ausführen if (operation.equals("+")) { System.out.println(Calculate.plus(zahl1, zahl2)); } else if (operation.equals("-")) { System.out.println(Calculate.minus(zahl1, zahl2)); } if (operation.equals("*")) { System.out.println(Calculate.multiplizieren(zahl1, zahl2)); } if (operation.equals("/")) { System.out.println(Calculate.teilen(zahl1, zahl2)); } } } } toll wie ich grad merke... wenn ich buchstaben eintippe statt zahlen, werden die buchstaben als 0 genommen und gerechnet. ist das normal?
  10. danke ich werds mir mal ansehen
  11. ihr habt recht leute... exceptions abfangen. hmmm. mit try und catch oder wie mach ich das?
  12. also das ist dann wohl richtig. funktioniert ja auch einwandfrei. danke euch allen bei der hilfe. package rechner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Rechner{ double ergebnis = 0; public double plus(double zahl1, double zahl2) { ergebnis = zahl1 + zahl2; return ergebnis; } public double minus(double zahl1, double zahl2) { ergebnis = zahl1 - zahl2; return ergebnis; } public double multiplizieren(double zahl1, double zahl2) { ergebnis = zahl1 * zahl2; return ergebnis; } public double teilen(double zahl1, double zahl2) { ergebnis = zahl1 / zahl2; return ergebnis; } public static void main(String[] args) throws NumberFormatException, IOException { double zahl1 = 0; double zahl2 = 0; String operation = ""; // Instanz eines neuen Rechners mit Namen Taschenrechner erstellen Rechner Calculate = new Rechner(); // Instanz des BufferedReader erstellen (einlesen der console) BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (operation != "0") { System.out.println("Geben sie bitte die Operation ein (+,-,*,/,0)"); // Einlesen der Operation - 0 bedeudet Beenden operation = in.readLine(); // Wenn operation = 0 dann spring aus while if (operation.equals("0")) { System.out.println("Beendet"); break; } System.out.println("Geben sie bitte die erste Zahl ein"); // Einlesen erste Zahl zahl1 = Double.parseDouble(in.readLine()); System.out.println("Geben sie bitte die zweite Zahl ein"); // Einlesen zweite Zahl zahl2 = Double.parseDouble(in.readLine()); System.out.println("Rechnung:"); System.out.println(zahl1 + " " + operation + " " + zahl2); System.out.println("Ergebnis:"); // entsprechende Methode ausführen if (operation.equals("+")) { System.out.println(Calculate.plus(zahl1, zahl2)); } else if (operation.equals("-")) { System.out.println(Calculate.minus(zahl1, zahl2)); } if (operation.equals("*")) { System.out.println(Calculate.multiplizieren(zahl1, zahl2)); } if (operation.equals("/")) { System.out.println(Calculate.teilen(zahl1, zahl2)); } } } }
  13. oh okay... danke. dann nochmal ran an die arbeit. hatte mich schon gefreut, weil es geklappt hatte
  14. danke erstaml für den quelltext aber ich hab da mal selbst was gemacht, was auch funktioniert. package rechner; import java.io.*; public class Rechner { public static void main ( String[] args ) throws IOException { double zahl1; double zahl2; double ergebnis; String operation; String zeile; BufferedReader x = new BufferedReader (new InputStreamReader( System.in )); System.out.println("Geben Sie die erste Zahl ein:"); zeile = x.readLine(); zahl1 = Double.parseDouble(zeile.trim()); System.out.println("Geben Sie die Rechenoperation ein:"); operation = x.readLine(); System.out.println("Geben Sie die zweite Zahl ein:"); zeile = x.readLine(); zahl2 = Double.parseDouble(zeile.trim()); if (operation.equals("+")) { ergebnis = zahl1 + zahl2; } else if (operation.equals("-")) { ergebnis = zahl1 - zahl2; } else if (operation.equals("*")) { ergebnis = zahl1 * zahl2; } else if (operation.equals(":")) { ergebnis = zahl1 / zahl2; } else { System.err.println("Fehlerhafte Eingabe"); return; } System.out.println( "Ihr Ergebnis lautet: " + ergebnis ); } } ist es eurer meinung nach so akzeptabel?
  15. ist es vllh sowas, was mit dem bufferdreader gemeint ist. ich hab mir mal das kapitel durchgelesen. hab auch etwas verstanden was gemeint ist. aber kann mir das vllh jemand präziser erklären? wie was genau funktionier? BufferedReader x = new BufferedReader (new InputStreamReader( System.in )); System.out.println("Geben Sie die erste Zahl ein:"); zeile = x.readLine(); i = Double.parseDouble(zeile); System.out.println("Geben Sie die Rechenoperation ein:"); j = x.readLine(); System.out.println("Geben Sie die zweite Zahl ein:"); zeile = x.readLine(); k = Double.parseDouble(zeile);

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...