28.05.2023, 13:23. Показов 961. Ответов 0
Здравствуйте, помогите, пожалуйста, с заданием (помогите с выводом минимальной и максимальной стоимости палочек, запросы я, вроде, сделал правильные):
Создать базу данных SQL и внести туда информацию о компонентах палочек и конечной стоимости палочек (файл с входными данными будет предоставлен). Таблица должна содержать:
Таблицу core. Содержит информацию о сердцевинах. Состоит из:
Столбца core_id. Является ключевым. Содержит любое уникальное значение, которое позволит идентифицировать конкретный кортеж в таблице.
Столбца core_name. Символьный тип, содержит название сердцевины.
Столбца core_cost. Тип NUMERIC или DECIMAL. Формат: 2 цифры после запятой.
Таблицу wood. Содержит информацию о древесине. Состоит из:
Столбца wood_id. Является ключевым. Содержит любое уникальное значение, которое позволит идентифицировать конкретный кортеж в таблице.
Столбца wood_name. Символьный тип, содержит название древесины.
Столбца wood_cost. Тип NUMERIC или DECIMAL. Формат: 2 цифры после запятой.
На основании этих двух таблиц вывести таблицу, которая будет содержать столбцы:
core_name из таблицы core
wood_name из таблицы wood
Столбец cost. Содержит сумму столбцов core_cost и wood_cost, умноженную на процент добавочной стоимости. Т.е. формула расчёта значения будет: (core_cost + wood_cost) * процент.
Задачи:
Вывести на экран наименьшую и наибольшую стоимости палочки.
Подсказка: чтобы найти наименьшую стоимость палочки, нужно использовать функцию:
SELECT MIN(название столбца) FROM название таблицы;
Максимальное значение можно найти с помощью функции MAX
Алгоритм действий:
Наименьшая стоимость:
1. Найти наименьшее значение из столбца core_cost (сердцевина)
2. Найти наименьшее значение из столбца wood_cost (древесина)
3. Сложить два наименьших значения
Наибольшая стоимость:
1. Найти наибольшее значение из столбца core_cost (сердцевина)
2. Найти наибольшее значение из столбца wood_cost (древесина)
3. Сложить два наибольших значения
У меня есть несколько файлов (MyForm.h конструктор, MyForm.h, SelectDB и MyForm.cpp)
MyForm.h
| C++ |
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
| #pragma once
#include "SelectDB.h"
namespace Project10 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~MyForm()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::DataGridView^ dataGridView1;
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::MenuStrip^ menuStrip1;
private: System::Windows::Forms::ToolStripMenuItem^ подробнееToolStripMenuItem;
private: System::Windows::Forms::ToolStripMenuItem^ выходToolStripMenuItem;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
protected:
private:
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
void InitializeComponent(void)
{
this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView());
this->button1 = (gcnew System::Windows::Forms::Button());
this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
this->подробнееToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
this->выходToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->BeginInit();
this->menuStrip1->SuspendLayout();
this->SuspendLayout();
//
// dataGridView1
//
this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->dataGridView1->Location = System::Drawing::Point(12, 42);
this->dataGridView1->Name = L"dataGridView1";
this->dataGridView1->RowHeadersWidth = 51;
this->dataGridView1->Size = System::Drawing::Size(595, 585);
this->dataGridView1->TabIndex = 0;
this->dataGridView1->CellContentClick += gcnew System::Windows::Forms::DataGridViewCellEventHandler(this, &MyForm::dataGridView1_CellContentClick);
//
// button1
//
this->button1->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(253)), static_cast<System::Int32>(static_cast<System::Byte>(158)),
static_cast<System::Int32>(static_cast<System::Byte>(104)));
this->button1->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button1->Font = (gcnew System::Drawing::Font(L"Times New Roman", 13.8F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->button1->Location = System::Drawing::Point(653, 42);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(265, 67);
this->button1->TabIndex = 1;
this->button1->Text = L"Посмотреть продукцию";
this->button1->UseVisualStyleBackColor = false;
this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
//
// menuStrip1
//
this->menuStrip1->ImageScalingSize = System::Drawing::Size(20, 20);
this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {
this->подробнееToolStripMenuItem,
this->выходToolStripMenuItem
});
this->menuStrip1->Location = System::Drawing::Point(0, 0);
this->menuStrip1->Name = L"menuStrip1";
this->menuStrip1->Size = System::Drawing::Size(953, 28);
this->menuStrip1->TabIndex = 2;
this->menuStrip1->Text = L"menuStrip1";
//
// подробнееToolStripMenuItem
//
this->подробнееToolStripMenuItem->Name = L"подробнееToolStripMenuItem";
this->подробнееToolStripMenuItem->Size = System::Drawing::Size(103, 24);
this->подробнееToolStripMenuItem->Text = L"Подробнее";
this->подробнееToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::подробнееToolStripMenuItem_Click);
//
// выходToolStripMenuItem
//
this->выходToolStripMenuItem->Name = L"выходToolStripMenuItem";
this->выходToolStripMenuItem->Size = System::Drawing::Size(67, 24);
this->выходToolStripMenuItem->Text = L"Выход";
this->выходToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::выходToolStripMenuItem_Click);
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(650, 139);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(44, 16);
this->label1->TabIndex = 3;
this->label1->Text = L"label1";
this->label1->Click += gcnew System::EventHandler(this, &MyForm::label1_Click);
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(650, 173);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(44, 16);
this->label2->TabIndex = 4;
this->label2->Text = L"label2";
this->label2->Click += gcnew System::EventHandler(this, &MyForm::label2_Click);
//
// MyForm
//
this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(185)), static_cast<System::Int32>(static_cast<System::Byte>(203)),
static_cast<System::Int32>(static_cast<System::Byte>(203)));
this->ClientSize = System::Drawing::Size(953, 906);
this->ControlBox = false;
this->Controls->Add(this->label2);
this->Controls->Add(this->label1);
this->Controls->Add(this->button1);
this->Controls->Add(this->dataGridView1);
this->Controls->Add(this->menuStrip1);
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;
this->MainMenuStrip = this->menuStrip1;
this->Name = L"MyForm";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
this->Text = L"MyForm";
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->EndInit();
this->menuStrip1->ResumeLayout(false);
this->menuStrip1->PerformLayout();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void dataGridView1_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
dataGridView1->DataSource = ConnectToDB();
}
private: System::Void подробнееToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show("Здравствуйте! Вы оказались в магазине волшебных палочек 'Олливандер' \nЗдесь вы можете ознакомиться с ассортиментом палочек", "Приветствие");
}
private: System::Void выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
Application::Exit();
}
private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label2_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
} |
|
SelectDB.h
| C++ |
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
97
98
99
100
101
102
103
104
105
106
| #pragma once
// Импорт необходимых пространств имён
using namespace System;
using namespace System::Windows::Forms;
using namespace Data;
using namespace Data::SqlClient;
// Функция для подключения к базе данных и выполнения SQL-запроса
DataTable^ ConnectToDB() {
// Создание объектов для подключения и выполнения SQL-запросов
SqlConnection^ conn = gcnew SqlConnection();
SqlConnectionStringBuilder^ connStringBuilder = gcnew SqlConnectionStringBuilder();
// Настройка параметров подключения
connStringBuilder->DataSource = "DESKTOP-82NBJ08"; // Имя ВАШЕГО сервера
connStringBuilder->InitialCatalog = "my_db"; // Имя ВАШЕЙ базы данных
connStringBuilder->IntegratedSecurity = true; // Использование Windows-аутентификации
// Установка настроек подключения для объекта SqlConnection
conn->ConnectionString = connStringBuilder->ToString();
// Создание SQL-запроса
String^ sql = "SELECT core.core_name, wood.wood_name, (core.core_cost + wood.wood_cost) * 1.2 AS cost FROM wood LEFT JOIN core ON wood.wood_id < 40"; //ВАШ запрос к ВАШЕЙ таблице
SqlCommand^ cmd = gcnew SqlCommand(sql, conn);
conn->Open();
//MessageBox::Show("Наименьшая стоимость палочки: " + sqlmin->ToString() + "\nНаибольшая стоимость палочки: " + sqlmax->ToString());
// Выполнение SQL-запроса и получение результатов в виде DataTable
SqlDataAdapter^ da = gcnew SqlDataAdapter(cmd);
DataTable^ dt = gcnew DataTable();
da->Fill(dt);
// Закрытие соединения
conn->Close();
// Возвращение DataTable с результатами запроса
return dt;
}
DataTable^ Min() {
// Создание объектов для подключения и выполнения SQL-запросов
SqlConnection^ conn = gcnew SqlConnection();
SqlConnectionStringBuilder^ connStringBuilder = gcnew SqlConnectionStringBuilder();
// Настройка параметров подключения
connStringBuilder->DataSource = "DESKTOP-82NBJ08"; // Имя ВАШЕГО сервера
connStringBuilder->InitialCatalog = "my_db"; // Имя ВАШЕЙ базы данных
connStringBuilder->IntegratedSecurity = true; // Использование Windows-аутентификации
// Установка настроек подключения для объекта SqlConnection
conn->ConnectionString = connStringBuilder->ToString();
// Создание SQL-запроса
String^ sql = "SELECT MIN(core_cost) + MIN(wood_cost) AS min_cost FROM core, wood";
SqlCommand^ cmd = gcnew SqlCommand(sql, conn);
conn->Open();
//MessageBox::Show("Наименьшая стоимость палочки: " + sqlmin->ToString() + "\nНаибольшая стоимость палочки: " + sqlmax->ToString());
// Выполнение SQL-запроса и получение результатов в виде DataTable
SqlDataAdapter^ da = gcnew SqlDataAdapter(cmd);
DataTable^ dt = gcnew DataTable();
da->Fill(dt);
// Закрытие соединения
conn->Close();
// Возвращение DataTable с результатами запроса
return dt;
}
DataTable^ Max() {
// Создание объектов для подключения и выполнения SQL-запросов
SqlConnection^ conn = gcnew SqlConnection();
SqlConnectionStringBuilder^ connStringBuilder = gcnew SqlConnectionStringBuilder();
// Настройка параметров подключения
connStringBuilder->DataSource = "DESKTOP-82NBJ08"; // Имя ВАШЕГО сервера
connStringBuilder->InitialCatalog = "my_db"; // Имя ВАШЕЙ базы данных
connStringBuilder->IntegratedSecurity = true; // Использование Windows-аутентификации
// Установка настроек подключения для объекта SqlConnection
conn->ConnectionString = connStringBuilder->ToString();
// Создание SQL-запроса
String^ sql = "SELECT MAX(core_cost) + MAX(wood_cost) AS max_cost FROM core, wood";
SqlCommand^ cmd = gcnew SqlCommand(sql, conn);
conn->Open();
//MessageBox::Show("Наименьшая стоимость палочки: " + sqlmin->ToString() + "\nНаибольшая стоимость палочки: " + sqlmax->ToString());
// Выполнение SQL-запроса и получение результатов в виде DataTable
SqlDataAdapter^ da = gcnew SqlDataAdapter(cmd);
DataTable^ dt = gcnew DataTable();
da->Fill(dt);
// Закрытие соединения
conn->Close();
// Возвращение DataTable с результатами запроса
return dt;
} |
|
MyForm.cpp
| C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
using namespace Data;
using namespace Data::SqlClient;
// Основная функция программы
[STAThreadAttribute] // Атрибут для установки атрибутов потока приложения
void main() {
// Установка настроек рендеринга и стилей для Windows Forms
Application::SetCompatibleTextRenderingDefault(false); // Отключение совместимого текстового рендеринга
Application::EnableVisualStyles(); // Включение стилей Windows Forms
// Создание и запуск экземпляра формы
//CLRFORM - название моего проекта, у вас оно будет другое!
Project10::MyForm form; // Создание экземпляра класса MyForm (предполагается, что такой класс существует в проекте)
Application::Run(% form); // Запуск приложения с указанием формы в качестве основного окна
} |
|