Hallo Habr!
Jeder Programmierer möchte seine Fähigkeiten verbessern und jedes Unternehmen möchte qualifizierte Spezialisten sehen, aber wie kann dies erreicht werden? Olympiaden kommen zur Rettung, in diesem Artikel geht es um die Teilnahme an einem von ihnen.
Rückzug
Der Artikel erwies sich als umfangreich, sodass sich der gesamte Code und die meisten Bilder unter den Spoilern befinden. Testen des Artikeleinreichungsformats. Wenn Ihnen dieses Format unangenehm erscheint, schreiben Sie bitte darüber. Außerdem sind alle Bilder anklickbar.
Über den Wettbewerb
WorldSkills ist ein Wettbewerb, dessen Ziel es ist, Fachleute in einem bestimmten Bereich zu identifizieren. Der Wettbewerb hat seine Wurzeln bei WorldSkills International (WSI), dem internationalen gemeinnützigen Verein.
Die Teilnahme am Wettbewerb ist kostenlos. Das Alter der Teilnehmer liegt zwischen 18 und 28 Jahren, Studenten an Hochschulen oder Universitäten.
Der Wettbewerb an der Universität dauert 5 Tage: am ersten Tag die Eröffnung und Überprüfung von Arbeitsplätzen, am letzten Tag drei Wettkampftage - Zusammenfassung und Abschluss.
Über Kompetenzauswahl und Training
Ich habe zufällig während eines der Übungen an der Universität im 2. Jahr von den Olympischen Spielen erfahren. Ich wurde eingeladen, an der Kompetenz „Entwicklung von Softwarelösungen für Unternehmen“ teilzunehmen. Um die Probleme zu lösen, waren Kenntnisse in C # oder Java, die Arbeit mit einer Datenbank und, wie ich bei den ersten Olympischen Spielen in Android herausgefunden habe, erforderlich. Die Eröffnung der Olympischen Spiele war für Anfang Juni geplant, und das Fenster war bereits Ende April. In diesem Moment wusste ich absolut nichts, was erforderlich war.
Meine Überraschung kannte keine Grenzen, als alle potenziellen Teilnehmer zum Training versammelt wurden. Es waren 7 Personen im Publikum, von denen 6 bereits Studenten im dritten Jahr waren, und ich war der siebte. Warum war ich so überrascht? Im dritten Jahr wird den Studenten ein Kurs über Datenbanken beigebracht, der zwei Semester dauert, was bedeutet, dass jeder mehr als ein Jahr Übung hatte. Ich wollte mich nicht weigern, also bat ich die Lehrer um Bücher in der Datenbank, fand
einen C #
-Kurs im Internet und begann mich vorzubereiten, wobei ich regelmäßig in Vorbereitungsklassen erschien.
Zwei Wochen vor Beginn der Olympiade haben wir erfahren, dass nicht mehr als drei Personen aus unserer Abteilung teilnehmen können. Hat die Qualifikationsrunde bestanden. In 1,5 Stunden mussten wir mit dem ER-Modell eine Datenbank im MSSQL-Datenbankverwaltungssystem erstellen, Daten aus einer Excel-Datei importieren und in der Anwendung anzeigen. Mit einem Wort, ich durfte von unserer Abteilung aus an der Olympiade teilnehmen.
Nun zum Wettbewerb
Der erste Tag des Wettbewerbs oder "C -1"
Die lang erwartete Entdeckung fand an diesem Tag statt. Alle Teilnehmer waren im Auditorium versammelt, wo sie über die Geschichte und Kompetenzen von WorldSkills berichteten und alle Experten mit den Teilnehmern vorstellten.
Nach dieser Zeremonie gingen alle zu ihren Standorten, um die Ausrüstung zu überprüfen. Es wurde ein „Widmungsritual“ abgehalten, bei dem wir unsere Jobs auswählten und aus Sicherheitsgründen unterschrieben. Zu diesem Zeitpunkt wusste ich nicht, was ich in der Software überprüfen konnte, also ging ich sofort nach der Auslosung, um mich auf den nächsten Tag vorzubereiten.
Der zweite Tag des Wettbewerbs oder der Beginn des Wettbewerbs
Was waren die Olympischen Spiele?
Für unsere Kompetenz mussten wir in 2 Tagen (drei für andere Kompetenzen) für 6 Stunden mit Pausen eine Client-Server-Anwendung in C # / Java mit Abfragen an die Datenbank schreiben. Genauer gesagt, "alles, was wir Zeit zum Schreiben haben", da das Prinzip der Olympiade lautet: "Tu, was du kannst und wie du kannst."
Experten zufolge waren die Kriterien mehrere zehn A4-Seiten. Die Kriterien werden erst nach dem Ende der Sitzung und nur an Experten ausgegeben, daher kann ich nichts dazu sagen.
Kommen wir zu den Ereignissen des zweiten Tages. Für die erste Sitzung musste Folgendes implementiert werden:
- Erstellen Sie eine Datenbank mit einem bekannten ER-Diagramm
- Importieren Sie Daten aus Excel-Dateien in die Datenbank
- Erstellen Sie 4 Bildschirme für Layouts in der Präsentation
Und für die zweite bilden Sie weitere fünf Bildschirme für Layouts.
Kurz gesagt, alle Aufgaben wurden gelöst, mit Ausnahme der Anzeige von Bildern aus der Datenbank und der Erstellung einer benutzerdefinierten Liste von Elementen.
Ein paar Screenshots:

Über die Benutzeroberfläche können Sie Spieler nach Namen (auch nach dem ersten Buchstaben), Saison und Team suchen. Durch Doppelklicken auf ein nicht implementiertes Bild werden detaillierte Informationen zum Player geöffnet. Jetzt würde ich es über DataGridViewImageColumn implementieren.

Wie ich Bilder gespeichert habeprivate void download_Click(object sender, EventArgs e) { SaveFileDialog saveFile = new SaveFileDialog(); saveFile.DefaultExt = ".jpg"; saveFile.AddExtension = true;
Weitere Screenshots, Text und Code
Die Benutzeroberfläche ist der Hauptbildschirm, auf dem Sie die Rolle "Benutzer" oder "Administrator" auswählen und die besten Momente der Spiele sehen können. Wie man die Elemente in der Mitte platziert, konnte nicht gefunden werden.
Implementierung zum Hochladen von Bildern private int countImages() { sqlConnection = new SqlConnection(connectionString); using (sqlConnection) { sqlConnection.Open(); String sqlcomm = "SELECT Count(*) FROM [Pictures$]"; SqlCommand command = new SqlCommand(sqlcomm, sqlConnection); int result = (int)command.ExecuteScalar(); return result; } } private void loadPage() { sqlConnection = new SqlConnection(connectionString); using (sqlConnection) { sqlConnection.Open(); String sqlcomm = "SELECT [Img] , [CreateTime] FROM [Pictures] P" + " Order By P.CreateTime Desc" + " Offset @click Rows FETCH NEXT @svm ROWS ONLY"; SqlCommand cmd = new SqlCommand(sqlcomm, sqlConnection); cmd.Parameters.AddWithValue("@click", click); cmd.Parameters.AddWithValue("@svm", svm); dataAdapter.SelectCommand = cmd; DataSet data = new DataSet(); dataAdapter.Fill(data); imageList1.Images.Clear(); listView1.Clear(); for (int i = 0; i < data.Tables[0].Rows.Count; i++) { imageList1.Images.Add(Image.FromFile("..\\Pictures\\" + data.Tables[0].Rows[i].ItemArray[0].ToString())); } listView1.LargeImageList = imageList1; for (int i = 0; i < imageList1.Images.Count; i++) listView1.Items.Add("").ImageIndex = i; } } private void left_Click(object sender, EventArgs e) { if (click > 0) { if (!right.Enabled) { right.Enabled = true; } click -= svm; loadPage(); } else { left.Enabled = false; } } private void right_Click(object sender, EventArgs e) { if (click + svm < totalPhotos) { if (!left.Enabled) { left.Enabled = true; } click += svm; loadPage(); } else { right.Enabled = false; } }

Eine Schnittstelle zur Autorisierung von technischen Administratoren und Match-Organisatoren, über die Sie sich den zuletzt eingegebenen Benutzernamen und das Kennwort merken können. In meinem Fall habe ich Daten ohne Verschlüsselung in eine Datei auf der Festplatte geschrieben.
Überprüfen der Existenz des eingegebenen Benutzernamens und Passworts in der Datenbank private int checkData(string jobnumber, string password) {
Wenn Sie wissen, wie Sie die Daten am besten überprüfen können, schreiben Sie bitte in die Kommentare.

Und so sieht der unfertige Bildschirm aus, hier habe ich nur Komponenten entsprechend dem Layout auf das Formular geworfen. Können Sie mir bitte sagen, wie man eine solche benutzerdefinierte Liste in C # erstellt?

Der schwierigste Bildschirm für mich, da es Arbeiten mit Diagrammen gab, auf die ich mich nicht vorbereitete.
Der dritte Tag des Wettbewerbs oder ein unerwartetes Treffen mit Android
Der Vortag könnte im Vergleich zum dritten als Aufwärmphase angesehen werden. Bei 3 Sitzungen sollten weitere 8 Bildschirme gutgeschrieben werden. In der letzten Sitzung gab es eine Änderung der Pläne, und statt einer Präsentation des entwickelten Produkts haben wir begonnen, eine vereinfachte Version für Android zu erstellen. Eine Galerie mit Bildern, die aus der Datenbank hochgeladen wurden. Jetzt klingt es einfach, aber in diesem Moment war ich froh, dass die Sitzung 15 Minuten Zeit hatte, um auf das Internet zuzugreifen. In 3 Stunden wurde eine GridView mit Elementen in Form von ImageView erstellt, ein Array von ID-Bildern wurde an den Adapter übertragen und die OnItemClickListener-Oberfläche wurde neu definiert, um eine neue Aktivität mit einem Bild zu erstellen.
Noch ein paar Screenshots:

Benutzeroberfläche für den Administrator, über die Sie Informationen zu den Playern anzeigen können. Meiner Meinung nach der nutzloseste Bildschirm, da Sie keine Änderungen vornehmen können.
|

|

|
Meine "perfekte" Galerie in 3 Stunden über das Internet und ohne Programmierkenntnisse für Android.
Weitere Bilder, Text und Code.Code zum Erstellen einer Galerie, wenn Sie nicht wissen, wie Sie mit der Datenbank arbeiten sollen class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar)

Durch Klicken auf eine Saison (rechte Tabelle) werden detaillierte Informationen zu allen Spielen geöffnet.

Eine Schnittstelle für Administratoren, über die Sie Änderungen an der Befehlsliste vornehmen und Daten nach Excel exportieren können.
Wie ich Daten nach Excel exportiert habe private void exportExcel_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Excel (*.xls)|*.xls|All files (*.*)|*.*"; saveFileDialog.DefaultExt = ".xls"; if (saveFileDialog.ShowDialog() != DialogResult.OK) return; if (saveFileDialog.FileName.Equals("")) return; DataTable dt = (DataTable)dataGridView2.DataSource;
Zusammenfassung
Um 12 Uhr fand eine Abschlussfeier statt, bei der alle Teilnehmer Zertifikate erhielten und Medaillen mit Diplomen auf Gewinner und Preisträger warteten. In unserer Kompetenz belegte ich den 2. Platz. Zwischen der Belohnung von Kompetenzen traten die Schüler mit Liedern und Tänzen auf.
Fazit
Während des Vorbereitungsmonats beherrschte ich die DDL- und DML-SQL-Teams, was die Arbeit an DB-Paaren im dritten Jahr erheblich vereinfachte. Die in C # und Windows Form erworbenen Kenntnisse lassen zu wünschen übrig, außer dass ich mit Datenbanken und der Benutzeroberfläche arbeiten musste und mit nichts arbeiten musste.
Dieses Jahr habe ich auch an der WorldSkills-Olympiade teilgenommen und den 1. Platz belegt, aber darüber, die komplizierten Aufgaben und die Folgen der Trennung des Internets auf den Websites im nächsten Artikel.