Entwickler-Ecke
WinForms - ISBN Konverter
Waryzion - Mo 11.07.11 19:47
Titel: ISBN Konverter
Nabend an alle, ich wende mich an euch, da ich absolut nicht weiter komme.
Mein Auftrag von meiner Lehrerin ist ein ISBN Konverter mit Windows Forms zu machen.
Ich habe erst mal einen in der Console gemacht, wegen den ganzen Rechnungen bevor ich mich an das "große" Projekt ran mache.
EDIT: Bin jetzt so weit gekommen, aber er gibt mir bei beiden rechnungen den fehler aus:
Die Eingabezeichenfolge hat das falsche Format.
In der Konsole funzt es, aber bei den Forms nicht.
C#-Quelltext
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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace ISBN_Konverter { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string isbn; string aus; private static String ConvertISBN10To13(String isbn) { Char[] isbn10; UInt16[] isbn13; StringBuilder sb;
isbn10 = isbn.ToCharArray(); isbn13 = new UInt16[13]; isbn13[0] = 9; isbn13[1] = 7; isbn13[2] = 8; for (UInt16 i = 0, j = 3; i < 9; i++, j++) { isbn13[j] = UInt16.Parse(isbn10[i].ToString()); } isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6] + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7] + isbn13[9] + isbn13[11]))) % 10)) % 10); sb = new StringBuilder(); for (UInt16 i = 0; i < 13; i++) { sb.Append(isbn13[i].ToString()); } return (sb.ToString()); }
private static String ConvertISBN13To10(String isbn) { Char[] isbn13; UInt16[] isbn10; StringBuilder sb; Int32 checksum;
isbn13 = isbn.ToCharArray(); isbn10 = new UInt16[10]; for (UInt16 i = 3, j = 0; i < 12; i++, j++) { isbn10[j] = UInt16.Parse(isbn13[i].ToString()); } checksum = 0; sb = new StringBuilder(); for (UInt16 i = 0; i < 9; i++) { checksum += isbn10[i] * (i + 1); sb.Append(isbn10[i].ToString()); } checksum %= 11; if (checksum == 10) { sb.Append("X"); } else { sb.Append(checksum.ToString()); } return (sb.ToString()); }
private void button1_Click(object sender, EventArgs e) { if (checkBox1.Checked==true) {
isbn = Convert.ToString(textBox1); ConvertISBN10To13(isbn); isbn = aus; } else { isbn = Convert.ToString(textBox1); ConvertISBN13To10(isbn); isbn = aus; } textBox3.Text = aus; } } } |
PS:Bin noch recht am anfang des Programmierens mit C#, also bitte nicht böse sein wenn was nicht sofort einrastet im Stübchen xD
Moderiert von
Christian S.: C#-Tags hinzugefügt
Trashkid2000 - Di 12.07.11 06:56
Hallo,
was ist das denn für ein Konstrukt? Dabei knallt es wohl.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| if (checkBox1.Checked==true) { isbn = Convert.ToString(textBox1); ConvertISBN10To13(isbn); isbn = aus; } |
Eine TextBox kann nicht in einen string konvertiert werden! Wozu auch?
Sie hat ja eine Eigenschaft ".Text". Und dann klappt das schon :wink:
Aber: eine FormatException kann trotzdem innerhalb Deiner beiden Methoden auftreten, da es keinerlei Prüfungen auf die korrekte Form der ISBN gibt. Also auf die Länge und (in Deinem Fall, dass dort nur Zahlen drin stehen dürfen).
Besser wäre es, das Format vorher mit einem regulären Ausdruck zu prüfen.
LG
Waryzion - Di 12.07.11 07:15
Erst mal Danke.
Wie gebe ich das ergebnis in der textbox3 aus, weil er will es nicht anzeigen.
Der rest klappt jetzt, nur will er mir nicht das richtige ausgeben, sondern nur das was ich eingegeben habe, aber der code ist bei der Console auch nicht anders.
Edit:
Danke an den Mod wegen den Quelltext :)
Th69 - Di 12.07.11 09:31
Hallo,
die Zeilen
C#-Quelltext
1: 2:
| ConvertISBN10To13(isbn); isbn = aus; |
machen wenig Sinn ;-)
Du möchtest doch den Rückgabewert der Methode in die Variable 'aus' schreiben:
C#-Quelltext
1:
| aus = ConvertISBN10To13(isbn); |
Waryzion - Di 12.07.11 09:46
Gemacht, aber wie kriege ich aus in die Textbox3?
habe es mit
textBox3.Text = aus mit und ohne toString versucht, beides scheitert.
So mal der neue ganze Code
C#-Quelltext
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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace ISBN_Konverter { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string isbn; string aus; private static String ConvertISBN10To13(String isbn) { Char[] isbn10; UInt16[] isbn13; StringBuilder sb;
isbn10 = isbn.ToCharArray(); isbn13 = new UInt16[13]; isbn13[0] = 9; isbn13[1] = 7; isbn13[2] = 8; for (UInt16 i = 0, j = 3; i < 9; i++, j++) { isbn13[j] = UInt16.Parse(isbn10[i].ToString()); } isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6] + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7] + isbn13[9] + isbn13[11]))) % 10)) % 10); sb = new StringBuilder(); for (UInt16 i = 0; i < 13; i++) { sb.Append(isbn13[i].ToString()); } return (sb.ToString()); }
private static String ConvertISBN13To10(String isbn) { Char[] isbn13; UInt16[] isbn10; StringBuilder sb; Int32 checksum;
isbn13 = isbn.ToCharArray(); isbn10 = new UInt16[10]; for (UInt16 i = 3, j = 0; i < 12; i++, j++) { isbn10[j] = UInt16.Parse(isbn13[i].ToString()); } checksum = 0; sb = new StringBuilder(); for (UInt16 i = 0; i < 9; i++) { checksum += isbn10[i] * (i + 1); sb.Append(isbn10[i].ToString()); } checksum %= 11; if (checksum == 10) { sb.Append("X"); } else { sb.Append(checksum.ToString()); } return (sb.ToString()); }
private void button1_Click(object sender, EventArgs e) { if (checkBox1.Checked==true) {
isbn = textBox1.Text; ConvertISBN10To13(isbn); aus = ConvertISBN10To13(isbn); } else if (checkBox2.Checked==true) { isbn = textBox1.Text; ConvertISBN13To10(isbn); aus = ConvertISBN10To13(isbn); textBox3.Text = aus; } } } } |
dark-destination1988 - Di 12.07.11 10:14
ConvertISBN10To13(isbn);
aus = ConvertISBN10To13(isbn);
Das ist schwachsinn, das erste kannst du streichen
im ersten if fehlt die ausgabe in die textbox(textBox3.Text = aus;)
Waryzion - Di 12.07.11 10:21
Die ausgabe fehlt gebe ich zu, habe mich erst mal auf eins beschränkt, danach ist ja fast nur copy und paste ^^.
habe es gestrichen, das ergebnis:
Eingegebene ISBN:9783060202287
Ausgabe:9789783060203
In der Console ist das ergebnis: 3060202281
Irgendwas stimmt da immer noch nicht.
dark-destination1988 - Di 12.07.11 10:43
hast du schon mal durchdebuggt. das sieht mir aus als ob der nicht in die funktionen geht, oder deine checkboxen hast du falsch angewählt bzw wird falsch verarbeitet
Waryzion - Di 12.07.11 10:46
In der Konsole ist ja die gleiche funktion, und durch die einzelschritte weiß ich das er erst die chekcbox abklappert, von dort zu der funktion, dann wieder zurück.
dark-destination1988 - Di 12.07.11 10:51
werden auch exakt die gleichen werte an die Funktion übermittelt? nicht das beim umwandeln der fehler liegt
Waryzion - Di 12.07.11 10:59
Gute frage ^^
Hier mal der Console Code, der mir echt einfacher fällt.
C#-Quelltext
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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ISBN_Konverter { class Program { static void Main(string[] args) { Char auswahl = Convert.ToChar(Console.ReadLine());
switch (auswahl) { case '1': Console.Write("Geben sie die ISBN 10 komplett ein\n-->"); string isbn10 = Console.ReadLine(); Console.WriteLine(ConvertISBN10To13(isbn10)); Console.ReadLine(); break; case '2': Console.WriteLine("Geben sie die ISBN 13 komplett ein\n-->"); string isbn13 = Console.ReadLine(); Console.WriteLine(ConvertISBN13To10(isbn13)); Console.ReadLine(); break;
default: Console.WriteLine("Falsche Eingabe! Sind dir Einstellige Zahlen schon zu schwer?"); Console.ReadLine(); break; } } private static String ConvertISBN10To13(String isbn1) { Char[] isbn10; UInt16[] isbn13; StringBuilder sb;
isbn10 = isbn1.ToCharArray(); isbn13 = new UInt16[13]; isbn13[0] = 9; isbn13[1] = 7; isbn13[2] = 8; for (UInt16 i = 0, j = 3; i < 9; i++, j++) { isbn13[j] = UInt16.Parse(isbn10[i].ToString()); } isbn13[12] = (UInt16)((10 - ((isbn13[0] + isbn13[2] + isbn13[4] + isbn13[6] + isbn13[8] + isbn13[10] + (3 * (isbn13[1] + isbn13[3] + isbn13[5] + isbn13[7] + isbn13[9] + isbn13[11]))) % 10)) % 10); sb = new StringBuilder(); for (UInt16 i = 0; i < 13; i++) { sb.Append(isbn13[i].ToString()); } return (sb.ToString()); }
private static String ConvertISBN13To10(String isbn3) { Char[] isbn13; UInt16[] isbn10; StringBuilder sb; Int32 checksum;
isbn13 = isbn3.ToCharArray(); isbn10 = new UInt16[10]; for (UInt16 i = 3, j = 0; i < 12; i++, j++) { isbn10[j] = UInt16.Parse(isbn13[i].ToString()); } checksum = 0; sb = new StringBuilder(); for (UInt16 i = 0; i < 9; i++) { checksum += isbn10[i] * (i + 1); sb.Append(isbn10[i].ToString()); } checksum %= 11; if (checksum == 10) { sb.Append("X"); } else { sb.Append(checksum.ToString()); } return (sb.ToString()); }
}
} |
Edit:
für circa 2 stunden off, dann aber wieder on ^^
dark-destination1988 - Di 12.07.11 11:15
das mit den checkboxen würde ich mit radiobuttons machen (aber das ist formsache)
also wie gesagt durchdebuggen und gucken ob der funktion die gleichen werte übergeben werden, den wenn die funktionen gleich sind kann nur der übergabewert anders sein.
Waryzion - Di 12.07.11 15:44
Ja Radios sehen besser aus ^^
Bei der Console ändert sich der Rückgabewert erst beim letzten Console.WriteLine komischerweise.
Bei der Forms halt nicht.
Th69 - Di 12.07.11 16:38
Hallo Waryzion,
wie sieht denn jetzt bei dir der letzte Stand deiner button1_Click-Methode aus?
Waryzion - Di 12.07.11 17:22
hat sich nichts geändert, bin bei einem freund, kann da nicht weiterarbeiten ^^.
Aber bei ideen werde ich sie gegen 8-9 umsetzen ^^
Trashkid2000 - Di 12.07.11 20:40
Waryzion hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if (checkBox1.Checked==true) { isbn = textBox1.Text; ConvertISBN10To13(isbn); aus = ConvertISBN10To13(isbn); } else if (checkBox2.Checked==true) { isbn = textBox1.Text; ConvertISBN13To10(isbn); aus = ConvertISBN10To13(isbn); textBox3.Text = aus; } | |
Siehst Du den Fehler in dem 2. else-Zweig? Du rufst da ConvertISBN10To13 auf und weist den Wert der TextBox zu. Ansonsten ist es auch sinnlos, eine Methode aufzurufen, von der Du einen Rückgabewert erwartest (also das Ergebnis), und diesen nicht verarbeitest. An dieser Stelle: Gebe Deinen Steuerelemaneten aussagekräftige Namen, denn keiner weiß, was z.B. checkBox1 repräsentieren soll. Also so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void btnConvertISBN_Click(object sender, EventArgs e) { if (cbISBN10To13.Checked == true) { tbConvertetISBN.Text = ConvertISBN10To13(tbOriginalISBN.Text); } else if (cbISBN13To10.Checked == true) { tbConvertetISBN.Text = ConvertISBN13To10(tbOriginalISBN.Text); } else { tbConvertetISBN.Text = string.Empty; } } |
Waryzion - Di 12.07.11 21:09
Trashkid ich würde dich am liebsten umarmen, es läuft, mit beiden funktionen *puh*
Der letzte fehler naja was soll man da anderes sagen als :roll: *FAIL* habe darauf nicht geachtet, durch dieses schöne Autofüllen ^^
Werde jetzt noch Radiobuttons machen, und sie dementsprechend benennen.
Danke an alle!!!
Ihr habe mir den Tag gerettet!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!