Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы вариант 4 / ЛР7студенты.docx
Скачиваний:
6
Добавлен:
15.12.2020
Размер:
170.36 Кб
Скачать

3. Текст программы

Для формы:

#pragma once

#include "Student's.h"

#include <stdlib.h>

namespace CppCLRWinformsProjekt {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

using namespace System::Collections::Generic;

using namespace System::IO;

public ref class Form1 : public System::Windows::Forms::Form

{

array<Student^>^ arr_stud; // Группа студентов (массив)

unsigned int stud_count; // Число студентов в группе

unsigned int add; // Число добавленных студентов на данный момент

String^ result;

public:

Form1(void)

{

InitializeComponent();

gender_cb->SelectedIndex = 0;

}

protected:

~Form1()

{

if (components)

{

delete components;

}

}

private: System::Windows::Forms::Button^ add_student_button;

private: System::Windows::Forms::Button^ start_button;

protected:

private: System::Windows::Forms::Button^ save1_button;

private: System::Windows::Forms::Button^ write_button;

private: System::Windows::Forms::Button^ save2_button;

private: System::Windows::Forms::Button^ read_button;

private: System::Windows::Forms::TextBox^ surname_tb;

private: System::Windows::Forms::TextBox^ city_tb;

private: System::Windows::Forms::TextBox^ city2_tb;

private: System::Windows::Forms::ComboBox^ gender_cb;

private: System::Windows::Forms::NumericUpDown^ birthday_num;

private: System::Windows::Forms::NumericUpDown^ number_num;

private: System::Windows::Forms::NumericUpDown^ add_stud_num;

private: System::Windows::Forms::NumericUpDown^ stud_num;

private: System::Windows::Forms::Label^ label1;

private: System::Windows::Forms::Label^ label2;

private: System::Windows::Forms::Label^ label3;

private: System::Windows::Forms::Label^ label4;

private: System::Windows::Forms::Label^ label5;

private: System::Windows::Forms::Label^ label6;

private: System::Windows::Forms::Label^ label7;

private: System::Windows::Forms::Label^ label8;

private: System::Windows::Forms::ListBox^ student_list;

private: System::Windows::Forms::Label^ label9;

private:

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

void InitializeComponent(void)

{

this->add_student_button = (gcnew System::Windows::Forms::Button());

this->start_button = (gcnew System::Windows::Forms::Button());

this->save1_button = (gcnew System::Windows::Forms::Button());

this->write_button = (gcnew System::Windows::Forms::Button());

this->save2_button = (gcnew System::Windows::Forms::Button());

this->read_button = (gcnew System::Windows::Forms::Button());

this->surname_tb = (gcnew System::Windows::Forms::TextBox());

this->city_tb = (gcnew System::Windows::Forms::TextBox());

this->city2_tb = (gcnew System::Windows::Forms::TextBox());

this->gender_cb = (gcnew System::Windows::Forms::ComboBox());

this->birthday_num = (gcnew System::Windows::Forms::NumericUpDown());

this->number_num = (gcnew System::Windows::Forms::NumericUpDown());

this->add_stud_num = (gcnew System::Windows::Forms::NumericUpDown());

this->stud_num = (gcnew System::Windows::Forms::NumericUpDown());

this->label1 = (gcnew System::Windows::Forms::Label());

this->label2 = (gcnew System::Windows::Forms::Label());

this->label3 = (gcnew System::Windows::Forms::Label());

this->label4 = (gcnew System::Windows::Forms::Label());

this->label5 = (gcnew System::Windows::Forms::Label());

this->label6 = (gcnew System::Windows::Forms::Label());

this->label7 = (gcnew System::Windows::Forms::Label());

this->label8 = (gcnew System::Windows::Forms::Label());

this->student_list = (gcnew System::Windows::Forms::ListBox());

this->label9 = (gcnew System::Windows::Forms::Label());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->birthday_num))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->number_num))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->add_stud_num))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->stud_num))->BeginInit();

this->SuspendLayout();

//

// add_student_button

//

this->add_student_button->Location = System::Drawing::Point(468, 70);

this->add_student_button->Name = L"add_student_button";

this->add_student_button->Size = System::Drawing::Size(147, 41);

this->add_student_button->TabIndex = 0;

this->add_student_button->Text = L"Добавить студента в группу";

this->add_student_button->UseVisualStyleBackColor = true;

this->add_student_button->Click += gcnew System::EventHandler(this, &Form1::add_student_button_Click);

//

// start_button

//

this->start_button->Location = System::Drawing::Point(325, 70);

this->start_button->Name = L"start_button";

this->start_button->Size = System::Drawing::Size(137, 41);

this->start_button->TabIndex = 1;

this->start_button->Text = L"СТАРТ";

this->start_button->UseVisualStyleBackColor = true;

this->start_button->Click += gcnew System::EventHandler(this, &Form1::start_button_Click);

//

// save1_button

//

this->save1_button->Location = System::Drawing::Point(507, 118);

this->save1_button->Name = L"save1_button";

this->save1_button->Size = System::Drawing::Size(75, 50);

this->save1_button->TabIndex = 2;

this->save1_button->Text = L"Сохранить в файл";

this->save1_button->UseVisualStyleBackColor = true;

this->save1_button->Click += gcnew System::EventHandler(this, &Form1::save1_button_Click);

//

// write_button

//

this->write_button->Location = System::Drawing::Point(356, 116);

this->write_button->Name = L"write_button";

this->write_button->Size = System::Drawing::Size(75, 52);

this->write_button->TabIndex = 3;

this->write_button->Text = L"Прочитать из файла";

this->write_button->UseVisualStyleBackColor = true;

this->write_button->Click += gcnew System::EventHandler(this, &Form1::write_button_Click);

//

// save2_button

//

this->save2_button->Location = System::Drawing::Point(541, 369);

this->save2_button->Name = L"save2_button";

this->save2_button->Size = System::Drawing::Size(75, 49);

this->save2_button->TabIndex = 4;

this->save2_button->Text = L"Сохранить в файл";

this->save2_button->UseVisualStyleBackColor = true;

this->save2_button->Click += gcnew System::EventHandler(this, &Form1::save2_button_Click);

//

// read_button

//

this->read_button->Location = System::Drawing::Point(12, 365);

this->read_button->Name = L"read_button";

this->read_button->Size = System::Drawing::Size(122, 50);

this->read_button->TabIndex = 5;

this->read_button->Text = L"Вывести учащихся проживающих в Москве";

this->read_button->UseVisualStyleBackColor = true;

this->read_button->Click += gcnew System::EventHandler(this, &Form1::read_button_Click);

//

// surname_tb

//

this->surname_tb->Location = System::Drawing::Point(149, 17);

this->surname_tb->Name = L"surname_tb";

this->surname_tb->Size = System::Drawing::Size(139, 20);

this->surname_tb->TabIndex = 6;

//

// city_tb

//

this->city_tb->Location = System::Drawing::Point(149, 43);

this->city_tb->Name = L"city_tb";

this->city_tb->Size = System::Drawing::Size(139, 20);

this->city_tb->TabIndex = 7;

//

// city2_tb

//

this->city2_tb->Location = System::Drawing::Point(149, 69);

this->city2_tb->Name = L"city2_tb";

this->city2_tb->Size = System::Drawing::Size(139, 20);

this->city2_tb->TabIndex = 8;

//

// gender_cb

//

this->gender_cb->FormattingEnabled = true;

this->gender_cb->Items->AddRange(gcnew cli::array< System::Object^ >(2) { L"Мужской (М)", L"Женский (Ж)" });

this->gender_cb->Location = System::Drawing::Point(149, 95);

this->gender_cb->Name = L"gender_cb";

this->gender_cb->Size = System::Drawing::Size(139, 21);

this->gender_cb->TabIndex = 9;

//

// birthday_num

//

this->birthday_num->Location = System::Drawing::Point(149, 122);

this->birthday_num->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2002, 0, 0, 0 });

this->birthday_num->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1945, 0, 0, 0 });

this->birthday_num->Name = L"birthday_num";

this->birthday_num->Size = System::Drawing::Size(139, 20);

this->birthday_num->TabIndex = 10;

this->birthday_num->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2002, 0, 0, 0 });

//

// number_num

//

this->number_num->Location = System::Drawing::Point(149, 148);

this->number_num->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 5000, 0, 0, 0 });

this->number_num->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

this->number_num->Name = L"number_num";

this->number_num->Size = System::Drawing::Size(139, 20);

this->number_num->TabIndex = 11;

this->number_num->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

//

// add_stud_num

//

this->add_stud_num->Location = System::Drawing::Point(476, 17);

this->add_stud_num->Name = L"add_stud_num";

this->add_stud_num->ReadOnly = true;

this->add_stud_num->Size = System::Drawing::Size(139, 20);

this->add_stud_num->TabIndex = 12;

//

// stud_num

//

this->stud_num->Location = System::Drawing::Point(476, 43);

this->stud_num->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

this->stud_num->Name = L"stud_num";

this->stud_num->Size = System::Drawing::Size(139, 20);

this->stud_num->TabIndex = 13;

this->stud_num->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

//

// label1

//

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(100, 20);

this->label1->Name = L"label1";

this->label1->Size = System::Drawing::Size(43, 13);

this->label1->TabIndex = 14;

this->label1->Text = L"Ф.И.О:";

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(50, 46);

this->label2->Name = L"label2";

this->label2->Size = System::Drawing::Size(93, 13);

this->label2->TabIndex = 15;

this->label2->Text = L"Город рождения:";

//

// label3

//

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(38, 72);

this->label3->Name = L"label3";

this->label3->Size = System::Drawing::Size(105, 13);

this->label3->TabIndex = 16;

this->label3->Text = L"Город проживания:";

//

// label4

//

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(113, 98);

this->label4->Name = L"label4";

this->label4->Size = System::Drawing::Size(30, 13);

this->label4->TabIndex = 17;

this->label4->Text = L"Пол:";

//

// label5

//

this->label5->AutoSize = true;

this->label5->Location = System::Drawing::Point(62, 124);

this->label5->Name = L"label5";

this->label5->Size = System::Drawing::Size(81, 13);

this->label5->TabIndex = 18;

this->label5->Text = L"Год рождения:";

//

// label6

//

this->label6->AutoSize = true;

this->label6->Location = System::Drawing::Point(9, 150);

this->label6->Name = L"label6";

this->label6->Size = System::Drawing::Size(134, 13);

this->label6->TabIndex = 19;

this->label6->Text = L"Номер зачетной книжки:";

//

// label7

//

this->label7->AutoSize = true;

this->label7->Location = System::Drawing::Point(412, 45);

this->label7->Name = L"label7";

this->label7->Size = System::Drawing::Size(58, 13);

this->label7->TabIndex = 20;

this->label7->Text = L"Студенты:";

//

// label8

//

this->label8->AutoSize = true;

this->label8->Location = System::Drawing::Point(322, 19);

this->label8->Name = L"label8";

this->label8->Size = System::Drawing::Size(148, 13);

this->label8->TabIndex = 21;

this->label8->Text = L"Студентов было добавлено:";

//

// student_list

//

this->student_list->FormattingEnabled = true;

this->student_list->Location = System::Drawing::Point(13, 200);

this->student_list->Name = L"student_list";

this->student_list->Size = System::Drawing::Size(603, 160);

this->student_list->TabIndex = 22;

//

// label9

//

this->label9->AutoSize = true;

this->label9->Location = System::Drawing::Point(10, 184);

this->label9->Name = L"label9";

this->label9->Size = System::Drawing::Size(101, 13);

this->label9->TabIndex = 23;

this->label9->Text = L"Список студентов:";

//

// Form1

//

this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(627, 430);

this->Controls->Add(this->label9);

this->Controls->Add(this->student_list);

this->Controls->Add(this->label8);

this->Controls->Add(this->label7);

this->Controls->Add(this->label6);

this->Controls->Add(this->label5);

this->Controls->Add(this->label4);

this->Controls->Add(this->label3);

this->Controls->Add(this->label2);

this->Controls->Add(this->label1);

this->Controls->Add(this->stud_num);

this->Controls->Add(this->add_stud_num);

this->Controls->Add(this->number_num);

this->Controls->Add(this->birthday_num);

this->Controls->Add(this->gender_cb);

this->Controls->Add(this->city2_tb);

this->Controls->Add(this->city_tb);

this->Controls->Add(this->surname_tb);

this->Controls->Add(this->read_button);

this->Controls->Add(this->save2_button);

this->Controls->Add(this->write_button);

this->Controls->Add(this->save1_button);

this->Controls->Add(this->start_button);

this->Controls->Add(this->add_student_button);

this->Name = L"Form1";

this->Text = L"Лабораторная работа 6";

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->birthday_num))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->number_num))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->add_stud_num))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->stud_num))->EndInit();

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

// Кнопка "Добавить студента в группу"

private: System::Void add_student_button_Click(System::Object^ sender, System::EventArgs^ e)

{

// Обработка ошибок ввода

if (String::IsNullOrEmpty(surname_tb->Text))

{

MessageBox::Show("Совершен некорректный ввод,введите Ф.И.О");

}

else if (String::IsNullOrEmpty(city_tb->Text))

{

MessageBox::Show("Совершен некорректный ввод,введите город рождения");

}

else if (String::IsNullOrEmpty(city2_tb->Text))

{

MessageBox::Show("Совершен некорректный ввод,введите город проживания");

}

else if (add < stud_count) // Если группа не заполнена

{

Student^ stud = gcnew Student; // создать объект класса студента

stud->surname = surname_tb->Text; // Ф.И.О

stud->city = city_tb->Text; // Город рождения

stud->city_2 = city2_tb->Text; // Город проживания

stud->gender = gender_cb->Text; // Пол

stud->birthday = (int)birthday_num->Value; // Год рождения

stud->number = (int)number_num->Value; // Номер зачетной книжки

arr_stud[add] = stud; // Добавить студента в группу

add++; // Увеличить число "добавленных студентов"

student_list->Items->Add(stud->surname + ", Пол: " + stud->gender + ", Город рождения: " + stud->city + ", Город проживания: " + stud->city_2 + ", Год рождения: " + stud->birthday + ", Номер зачетки: " + stud->number);

add_stud_num->Value = (int)add_stud_num->Value + 1; // Увеличить число добавленных студентов на форме

}

if (add >= stud_count) // Если группа уже заполнена

{

student_list->Items->Clear();

Array::Sort(arr_stud);

for (unsigned int i = 0; i < add; i++)

{

// Добавить полученные значения в список на форме:

student_list->Items->Add(arr_stud[i]->surname + ", Пол: " + arr_stud[i]->gender + " , Город рождения: " + arr_stud[i]->city + ", Город проживания: " + arr_stud[i]->city_2 + ", Год рождения: " + arr_stud[i]->birthday + ", Номер зачетки: " + arr_stud[i]->number);

}

// Деактивация кнопок:

add_student_button->Enabled = false;

save1_button->Enabled = false;

// Активация кнопки сохранения

save2_button->Enabled = true;

// Активация кнопка вывода

start_button->Enabled = true;

}

}

// Кнопка "СТАРТ"

private: System::Void start_button_Click(System::Object^ sender, System::EventArgs^ e)

{

stud_count = (int)stud_num->Value; // Общее число студентов в группе

arr_stud = gcnew array<Student^>(stud_count); // Новый массив для студентов

add = 0; // Число добавленных студентов

stud_num->ReadOnly = true; // Активация окна добавленных студентов

// Активация кнопки добавления:

add_student_button->Enabled = true;

save1_button->Enabled = true;

write_button->Enabled = false; // Активация кнопки "СТАРТ"

}

// Кнопка "Прочитать из файла"

private: System::Void write_button_Click(System::Object^ sender, System::EventArgs^ e)

{

String^ filename;

OpenFileDialog^ ofd = gcnew OpenFileDialog();

if (ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK)

{

filename = ofd->FileName;

try

{

StreamReader^ din = File::OpenText(filename); // Открытие файла

String^ delimStr = ";"; // Разделитель

array<Char>^ delimiter = delimStr->ToCharArray(); // Преобразовать строку разделителей в символьный массив

String^ str;

while ((str = din->ReadLine()) != nullptr && add < stud_count) // Если файл не пустой & группа не заполнена

{

// Разбиваем строку по разделителям:

array<String^>^ words;

words = str->Split(delimiter);

Student^ st = gcnew Student;

st->surname = words[0]; // Ф.И.О

st->city = words[1]; // Город рождения

st->city_2 = words[2]; // Город проживания

st->gender = words[3]; // Пол

st->birthday = Convert::ToInt32(words[4]); // Год рождения

st->number = Convert::ToInt32(words[5]); // Номер зачетной книжки

System::Diagnostics::Debug::WriteLine(str);

arr_stud[add] = st; // Добавить студента в группу

add++; // Увеличить число добавленных студентов

student_list->Items->Add(st->surname + ", Пол: " + st->gender + ", Город рождения: " + st->city + ", Город проживания: " + st->city_2 + ", Год рождения: " + st->birthday + ", Номер зачетки: " + st->number);

add_stud_num->Value = (int)add_stud_num->Value + 1;

if (add >= stud_count)

{

student_list->Items->Clear();

Array::Sort(arr_stud);

for (unsigned int i = 0; i < add; i++)

// Вывод:

student_list->Items->Add(arr_stud[i]->surname + ", Пол: " + arr_stud[i]->gender + " , Город рождения: " + arr_stud[i]->city + ", Город проживания: " + arr_stud[i]->city_2 + ", Год рождения: " + arr_stud[i]->birthday + ", Номер зачетки: " + arr_stud[i]->number);

add_student_button->Enabled = false;

start_button->Enabled = true;

save2_button->Enabled = true;

}

}

save1_button->Enabled = false;

}

// Обработчик если открыть файл не удалось

catch (Exception^ e)

{

if (dynamic_cast<FileNotFoundException^>(e))

{

MessageBox::Show("Файл " + filename + " был не найден");

}

else

{

MessageBox::Show("Неудачная попытка открытия файла " + filename);

}

}

}

}

// Кнопка "Сохранить в файл"

private: System::Void save1_button_Click(System::Object^ sender, System::EventArgs^ e)

{

String^ filename;

String^ info = ""; // Строковое представление

SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;

saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

saveFileDialog1->FilterIndex = 1;

saveFileDialog1->RestoreDirectory = true;

if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)

{

filename = saveFileDialog1->FileName;

for each (Student ^ st in arr_stud)

{

info += st->surname + ";" + st->city + ";" + st->city_2 + ";" + st->gender + ";" + st->birthday + ";" + st->number + "\n";

}

File::WriteAllText(filename, info); // Запись в файл

}

}

// Кнопка "Сохранить в файл[2]"

private: System::Void save2_button_Click(System::Object^ sender, System::EventArgs^ e)

{

String^ filename;

SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;

saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

saveFileDialog1->FilterIndex = 1;

saveFileDialog1->RestoreDirectory = true;

if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)

{

filename = saveFileDialog1->FileName;

File::WriteAllText(filename, result); // Запись в файл

}

}

// Кнопка "Вывести список в файл"

private: System::Void read_button_Click(System::Object^ sender, System::EventArgs^ e)

{

int cnt = 0; // Число проживающих в Москве

for each (Student ^ st in arr_stud)

{

if (String::Equals(st->city_2, "Москва")) // Если город проживания студента - это Москва

{

cnt++;

}

}

MessageBox::Show(cnt.ToString(), "Число студентов проживающих в Москве"); // Вывод результата

save2_button->Enabled = true; // Активация кнопки сохранения результата в файл

}

};

}

Для студентов:

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

public ref class Apprentice // Класс для описания человека

{

public:

String^ surname; // ФИО

String^ city; // Место рождения

String^ city_2; // Место проживания

String^ gender; // Пол

unsigned int birthday; // Год рождения

};

public ref class Student : public Apprentice, public IComparable // Класс для студента

{

public:

unsigned int number; // Номер зачетной книжки

Student() {}

virtual int CompareTo(Object^ obj) // Метод сравнения с другим студентом

{

Student^ other = dynamic_cast<Student^>(obj);

int result = 0; // Сравнения на равенство

if (result == 0)

{

result = this->surname->CompareTo(other->surname); // Сравнение по Ф.И.О

}

if (result == 0)

{

result = this->city->CompareTo(other->city); // Сравнение по городу рождения

}

if (result == 0)

{

result = this->city_2->CompareTo(other->city_2); // Сравнение по городу проживания

}

return result;

}

int getAge()

{

return 2019 - birthday;

}

void SetNumber(unsigned int n)

{

number = n;

}

};

Соседние файлы в папке лабы вариант 4