Ім'я файлу: CPP_RGR.docx
Розширення: docx
Розмір: 127кб.
Дата: 28.05.2020
скачати

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ПОЛТАВСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

ІМЕНІ ЮРІЯ КОНДРАТЮКА
Навчально-науковий інститут інформаційних технологій та механотроніки

Кафедра комп’ютерних та інформаційних технологій і систем

Розрахунково-графічна робота
з навчальної дисципліни
Кросплатформенне програмування
Варіант 1

Виконав:

студент групи 301 - ТН

Бойко Владислав Вячеславович

Перевірила:

Заїка Світлана Олександрівна


Полтава

2019

Міністерство освіти і науки України

Полтавський національний технічний університет імені Юрія Кондратюка

Навчально-науковий інститут інформаційних технологій та механотроніки

Кафедра комп’ютерних та інформаційних технологій і систем

ЗАВДАННЯ

до розрахунково-графічної роботи

з дисципліни

„ Кросплатформенне програмування”

Група: 301-ТН .

Студент: Бойко Владислав Вячеславович

Керівник: Заїка Світлана Олександрівна
Варіант № 1

Перукарня

Описание предметной области,вы являетесь частным владельцем салона,в котором стрижут людей в соответствии с их пожеланиями.Вашей задачей является отслеживание финансовых показателей прибыли от клиентов.В ваш салон входит некоторое количество людей которые заказывают различные стрижки разных стоимостей. В пункт обслуживания обращаются клиенты. Клиенты проходят обязательную запись в салон по телефону, при которой о них собирается стандартная информация (фамилия, имя, отчество, адрес, телефон).Все заказы клиентов фиксируются, при этом по каждом заказе запоминается дата назначения стрижки и дата выполнения заказа.Таблицы Стрижки(Код стрижки,,Стоимость,Стоимость покраски волос,Стиль). Клиенты (Код клиента, Фамилия, Имя, Отчество, Адрес, Телефон).Сделанные заказы (Код стрижки, Код клиента,Оценка клиента,Качество).Развитие постановки задачи теперь ситуация изменилась. Несложный анализ показал, что стоимость стрижки должна зависеть не только от самой стрижки, но и от качества, а также от время. Также нужно ввести систему штрафов для работников за плохую или испорченную стрижку и систему скидок для постоянных клиентов. Внести в структуру таблиц изменения, учитывающие эти факты, и изменить существующие запросы. Добавить новые запросы.

ЗМІСТ

ЗАВДАННЯ 1

ВСТУП 3

РОЗДІЛ 1. ПОСТАНОВКА ЗАДАЧІ 5

РОЗДІЛ 2. ПРАКТИЧНА ЧАСТИНА 6

ВИСНОВОК 19


ВСТУП

Кросплатформність — властивість програмного забезпечення працювати більш ніж на одній програмній (в тому числі — операційній системі) або апаратній платформі, та технології, що дозволяють досягти такої властивості. Кросплатформність дозволяє суттєво скоротити витрати на розробку нового або адаптацію існуючого програмного забезпечення.

Залежно від засобів реалізації поділяється на кросплатформність на рівні мов програмування (а також інструментів таких мов: компіляторів та редакторів зв'язків), середовища виконання, операційної системи та апаратної платформи.

Кросплатформність на рівні мов програмування досягається шляхом забезпечення незалежності програмного коду від платформи. Багатоплатформними є більшість сучасних високорівневих мов програмування, для яких реалізовані транслятори, що можуть виконуватись на різних платформах. Наприклад, CС++ і Pascal — кросплатформні мови на рівні компіляції, тобто для цих мов є компілятори під різні платформи.

Кросплатформність на рівні редакторів зв'язків досягається реалізацією для різних платформ кросплатформних бібліотек, які реалізують незалежний від платформи інтерфейс, в тому числі — стандартизованих бібліотек. Зокрема, стандартизовані багато бібліотек мови Сі (див. POSIX). Існує також велика кількість нестандартних кросплатформних бібліотек: QtGTK+FLTKSTLBoostOpenGLSDLOpenALOpenCL.

Java — об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems у 1995 році як основний компонент платформи Java. Зараз мовою займається компанія Oracle, яка придбалаSun Microsystems у 2009 році. Синтаксис мови багато в чому схожий на C та C++. У офіційній реалізації Java-програмикомпілюються у байт-код, який при виконанні інтерпретується віртуальною машиною для конкретної платформи.

Oracle надає компілятор Java та віртуальну машину Java, які задовольняють специфікації Java Community Process, під ліцензією GNU General Public License.

Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині. Передусім Java розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням. За необхідності таких дій java дозволяє викликати підпрограми, написані іншими мовами програмування.

Java вплинула на розвиток J++, що розроблялась компанією Microsoft. Роботу над J++ було зупинено через судовий позов компанії Sun Microsystems, оскільки ця мова програмування була модифікацією Java. Пізніше в новій платформі Microsoft.NET випустило J#, щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом нова мова програмування С# стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію Microsoft Visual Studio 2005. Мова сценаріїв JavaScript має схожу із Java назву і синтаксис, але не пов'язана із Java.

РОЗДІЛ 1. ПОСТАНОВКА ЗАДАЧІ

Распределение учебной нагрузки

Описание предметной области

Вы работаете в высшем учебном заведении и занимаетесь распределением нагрузки между преподавателями кафедры. В Вашем распоряжении имеются сведения о преподавателях кафедры, включающие наряду с анкетными данными сведения об их ученой степени, занимаемой административной должности и стаже работы. Преподаватели Вашей кафедры должны обеспечить проведение занятий по некоторым предметам. По каждому из них существует определенное количество часов. В результате распределения нагрузки у Вас должна получится информация следующего рода: «Такой-то преподаватель проводит занятия по такому-то предмету с такой-то группой».

Таблиці.

Преподаватели (Код преподавателя, Фамилия, Имя,

Отчество, Ученая степень, Должность, Стаж).

Предметы (Код предмета, Название, Количество часов).

Нагрузка (Код преподавателя, Код предмета, Номер группы).

Развитие постановки задачи

Теперь ситуация изменилась. Выяснилось, что все проводимые занятия делятся на лекционные и практические. По каждому виду занятий устанавливается свое количество часов. Кроме того, данные по нагрузке нужно хранить несколько лет. Внести в структуру таблиц изменения, учитывающие эти факты, и изменить существующие запросы. Добавить новые запросы.

Реалізувати графічний користувальницький інтерфейс.
РОЗДІЛ 2. ПРАКТИЧНА ЧАСТИНА
Нижче представлено лістинги 1.1 – 1.9 . програми, написаний мовою программування високого рівня Java та в інтегрованому середовище програмування IntellijIDEA. На екран виводиться іноформація задана у завданні.

package com.company.main;

import com.company.gui.Gui;

public final class Main {

private static Gui gui = new Gui();

public static void main(String[] args) {

StartGui();

}

public static void StartGui()

{

gui.InitGui("База данных", 800, 400);

}

public static void RestartGuiTable()

{

gui.InitTable();

}

public static Gui GetGui()

{

return gui;

}

}

Лістинг 1.1. Файл Main.java

package com.company.gui;

import com.company.db.Config;

import com.company.db.Save;

import com.company.db.SaveItem;

import com.company.main.Main;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import com.company.engine.Search;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.table.DefaultTableModel;

import javax.swing.text.BadLocationException;

public class ListenerHandler implements IActionListener, ITableModelListener, IListSelectionListener, IDocumentListener {

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource().getClass() == JMenuItem.class)

{

JMenuItem item = (JMenuItem)e.getSource();

switch(item.getText())

{

case "Преподаватели": Config.CURRENT_TABLE = "hairstyle"; break;

case "Предметы": Config.CURRENT_TABLE = "type_hairstyle"; break;

case "Нагрузка": Config.CURRENT_TABLE = "type_hairstyle"; break;

}
System.out.println("[INFO] Item " + item.getText() + " was clicked");
Save.changed_data.clear();

Main.RestartGuiTable();

}

if(e.getSource().getClass() == JButton.class)

{

JButton item = (JButton)e.getSource();

JTable table = Main.GetGui().GetTable();

DefaultTableModel model = (DefaultTableModel)table.getModel();

switch(item.getText())

{

case "Добавить новую строку":

DefaultTableModel dtm = new DefaultTableModel(0, 0);
Object[] row = new Object[table.getColumnCount()];

model.addRow(row);

SaveItem s = new SaveItem();

s.SetInsert(table.getModel().getRowCount() - 1);
Save.changed_data.add(s);

break;

case "Удалить выбраную строку":

if(table.getSelectedRow() != -1)

{

if(table.getModel().getValueAt(table.getSelectedColumn(), 0) != null)

{

s = new SaveItem();

s.SetDelete((int)table.getModel().getValueAt(table.getSelectedColumn(), 0));
Save.changed_data.add(s);

}

model.removeRow(table.getSelectedRow());

}

break;

case "Сохранить измененния":

Save.Do();;

break;

}

System.out.println("[INFO] Button '" + item.getText() + "' was clicked");

}

}

@Override

public void valueChanged(ListSelectionEvent event) {

System.out.println("Row was select");

}
@Override

public void changedUpdate(DocumentEvent e) {

System.out.println("[INFO] Text changed. Start stop search");

}

@Override

public void removeUpdate(DocumentEvent e) {

System.out.println("[INFO] Text changing. Start searching " + Main.GetGui().GetSearchFieldText().getText() + " in table");

Search.Do(Main.GetGui().GetSearchFieldText().getText());

}

@Override

public void insertUpdate(DocumentEvent e) {

System.out.println("[INFO] Text changing. Start searching " + Main.GetGui().GetSearchFieldText().getText() + " in table");

Search.Do(Main.GetGui().GetSearchFieldText().getText());

}

@Override

public void tableChanged(TableModelEvent e){

int row = e.getLastRow();

int column = e.getColumn();

if(column != -1 && row != -1)

{

System.out.println("[INFO] Smth change in the table at row = " + row + " and column " + column);
DefaultTableModel table = (DefaultTableModel)e.getSource();

SaveItem s = new SaveItem();

if(Main.GetGui().GetTable().getModel().getValueAt(row, 0) != null)

s.SetUpdate((int)Main.GetGui().GetTable().getModel().getValueAt(row, 0), row);

Save.changed_data.add(s);
System.out.println("[INFO] Value that was changed = " + table.getValueAt(row, column));

}

}

}

interface IActionListener extends ActionListener{

}
interface ITableModelListener extends TableModelListener{

}
interface IListSelectionListener extends ListSelectionListener{

}
interface IDocumentListener extends DocumentListener{

}

Лістинг 1.3. Файл ListenerHandler.java

package com.company.gui;

import javax.swing.*;

import java.awt.*;

import com.company.db.*;

import java.sql.SQLException;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableColumn;

public class Gui extends JFrame {

private JFrame main_frame = null;

private JTable main_table = null;

JScrollPane scrollPane = new JScrollPane();

JTextField search = new JTextField();

DB_Helper db_helper = new DB_Helper();

public void InitGuiComponents()

{

InitMenuBar();

InitTable();

InitButtonsAndSearchComponents();

}

public void InitGui(String window_name, int width, int height)

{

main_frame = new JFrame(window_name);

main_frame.setSize(width, height);

main_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

InitGuiComponents();

main_frame.setVisible(true);

}

public JFrame GetMainFrame()

{

return this.main_frame;

}

public JTable GetTable()

{

return main_table;

}

public void SetMainTable(JTable table)

{

main_table = table;

}

public void InitTable()

{

String query = null;

switch(Config.CURRENT_TABLE)

{

case "cars":

query = "SELECT id AS 'id_car', surname AS surname', namr AS 'name’, patronymic AS patronymic, acad_client AS 'academic client', position AS 'position', experience AS 'experience' FROM cars";

break;

case "rental_cars":

query = "SELECT id AS 'rental_car', name AS 'Name', type AS 'Type', hours AS 'Hours' FROM rental_cars";

break;

case "rental_car":

query = "SELECT id_car AS 'id_car', id_rental_car AS 'rental_car', group AS 'group' FROM rental_car";
break;

}

try

{

db_helper.SetDataToTable(query);

}

catch (SQLException e)

{

System.out.println( e.getMessage() + " Gui" );

}

scrollPane.setViewportView(main_table);

main_frame.getContentPane().add(scrollPane);

main_table.getModel().addTableModelListener(new ListenerHandler());

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

centerRenderer.setHorizontalAlignment( JLabel.CENTER );

for(int i = 0; i < main_table.getModel().getColumnCount(); i++)

main_table.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);
}

public void InitButtonsAndSearchComponents()

{

JPanel button_panel = new JPanel((new FlowLayout(FlowLayout.LEFT)));

JButton add_new_row = new JButton("Добавить новую строку");

add_new_row.addActionListener(new ListenerHandler());

add_new_row.setPreferredSize( new Dimension( 175, 24 ) );

JButton add_remove_row = new JButton("Удалить выбраную строку");

add_remove_row.addActionListener(new ListenerHandler());

add_remove_row.setPreferredSize( new Dimension( 190, 24 ) );

JButton add_update = new JButton("Сохранить измененния");

add_update.addActionListener(new ListenerHandler());

add_update.setPreferredSize( new Dimension( 170, 24 ) );

JLabel l_search = new JLabel("Поиск:");

search.setPreferredSize( new Dimension( 180, 24 ) );

search.getDocument().addDocumentListener(new ListenerHandler());

button_panel.add(add_new_row);

button_panel.add(add_remove_row);

button_panel.add(add_update);

button_panel.add(l_search);

button_panel.add(search);

main_frame.add(button_panel, BorderLayout.SOUTH);

}

public JTextField GetSearchFieldText()

{

return search;

}

public void InitMenuBar()

{

JPanel menu_panel = new JPanel((new FlowLayout(FlowLayout.LEFT)));

JMenuBar menuBar = new JMenuBar();

JMenu menu_bd = new JMenu("База данных");

JMenuItem menu_item_cars = new JMenuItem("Преподаватели");

JMenuItem menu_item_rental_cars = new JMenuItem("Предметы");

JMenuItem menu_item_rental_car = new JMenuItem("Нагрузка");

menu_bd.addActionListener(new ListenerHandler());

menu_item_cars.addActionListener(new ListenerHandler());

menu_item_rental_cars.addActionListener(new ListenerHandler());

menu_item_rental_car.addActionListener(new ListenerHandler());

menu_bd.add(menu_item_rental_car);

menu_bd.add(menu_item_rental_cars);

menu_bd.add(menu_item_cars);

menuBar.add(menu_bd);


menu_panel.add(menuBar);

main_frame.add(menu_panel, BorderLayout.NORTH);

}

}

Лістинг 1.4. Файл Gui.java

package com.company.engine;
import com.company.main.*;

import javax.swing.JTable;

import javax.swing.RowFilter;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableRowSorter;
public final class Search {

public static void Do(String id)

{

System.out.println("[INFO] id which need find = '" + id + "'");

JTable main_table = Main.GetGui().GetTable();

DefaultTableModel model = (DefaultTableModel)main_table.getModel();

TableRowSorter sorter = new TableRowSorter(model);

main_table.setRowSorter(sorter);

if(id.length() == 0)

{

System.out.println("[INFO] Nothing to search");

sorter.setRowFilter(null);

}

else

sorter.setRowFilter(RowFilter.regexFilter(id));

}

}

Лістинг 1.5. Файл Search.java
package com.company.db;
public class SaveItem {

private int OPERATION = -1;

private int ID = -1;

private int ROW = -1;

public void SetDelete(int id)

{

OPERATION = Save.Operation.DELETE.ordinal();

ID = id;

}

public void SetUpdate(int id, int row)

{

OPERATION = Save.Operation.UPDATE.ordinal();

ID = id;

ROW = row;

}

public void SetInsert(int row)

{

OPERATION = Save.Operation.INSERT.ordinal();

ROW = row;

}

public int GetRow()

{

return ROW;

}

public int GetOperation()

{

return OPERATION;

}

public int GetId()

{

return ID;

}

}

Лістинг 1.6. Файл SaveItem.java
package com.company.db;
import java.util.Vector;

public class ResponseData {

public Vector column_table_names = null;

public Vector table_data = null;
private DB_Helper db_helper = new DB_Helper();

public ResponseData GetData()

{

String query = null;

switch(Config.CURRENT_TABLE)

{

case "hairstyle":

query = "SELECT id AS 'id_hairstyle', surname AS surname', namr AS 'name’, patronymic AS patronymic, acad_client AS 'academic client', position AS 'position', experience AS 'experience' FROM hairstyle";

break;

case "type_hairstyle":

query = "SELECT id AS 'type_hairstyle', name AS 'Name', type AS 'Type', hours AS 'Hours' FROM type_hairstyle";

break;

case "type_hairstyle":

query = "SELECT id_hairstyle AS 'id_hairstyle', id_type_hairstyle AS 'type_hairstyle', group AS 'group' FROM type_hairstyle";
break;

} ResponseData data = db_helper.GetData(query);

return data;

}

}

Лістинг 1.7. Файл ResponseData.java

package com.company.db;
import com.company.main.Main;

import java.sql.*;

import java.util.*;

import javax.swing.*;

import javax.swing.table.TableColumn;
public class DB_Helper {

private Statement statment = null;

public DB_Helper()

{

Connect();

}

public void Connect()

{

try

{

Connection connection = DriverManager.getConnection(Config.URL, Config.LOGIN, Config.PASSWORD);

statment = connection.createStatement();

}

catch (SQLException e)

{

System.out.println( e.getMessage() );

}

}

public void ExecuteQuery(String query)

{

try

{

statment.execute(query);

}

catch (SQLException e)

{

System.out.println( e.getMessage() );

}

}

public void SetDataToTable(String query) throws SQLException

{

ArrayList columnNames = new ArrayList();

ArrayList data = new ArrayList();

try

{

ResultSet rs = statment.executeQuery(query);

ResultSetMetaData md = rs.getMetaData();

int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++)

{

columnNames.add( md.getColumnLabel(i) );

System.out.println("[INFO] Get column name " + md.getColumnLabel(i));

}
while (rs.next())

{

ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++)

{

row.add( rs.getObject(i) );

}
data.add( row );

}

}

catch (SQLException e)

{

System.out.println( e.getMessage() );

}

Vector columnNamesVector = new Vector();

Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)

{

ArrayList subArray = (ArrayList)data.get(i);

Vector subVector = new Vector();

for (int j = 0; j < subArray.size(); j++)

{

subVector.add(subArray.get(j));

}

dataVector.add(subVector);

}
for (int i = 0; i < columnNames.size(); i++ )

columnNamesVector.add(columnNames.get(i));

Main.GetGui().SetMainTable(new JTable(dataVector, columnNamesVector));

}

public ResponseData GetData(String query)

{

ResponseData ans = new ResponseData();

ArrayList columnNames = new ArrayList();

ArrayList data = new ArrayList();

try

{

ResultSet rs = statment.executeQuery(query);

ResultSetMetaData md = rs.getMetaData();

int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++)

{

columnNames.add( md.getColumnLabel(i) );

System.out.println("[INFO] Get column name " + md.getColumnLabel(i));

}
while (rs.next())

{

ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++)

{

row.add( rs.getObject(i) );

}
data.add( row );

}

}

catch (SQLException e)

{

System.out.println( e.getMessage() );

}

Vector columnNamesVector = new Vector();

Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)

{

ArrayList subArray = (ArrayList)data.get(i);

Vector subVector = new Vector();

for (int j = 0; j < subArray.size(); j++)

{

subVector.add(subArray.get(j));

}

dataVector.add(subVector);

}
for (int i = 0; i < columnNames.size(); i++ )

columnNamesVector.add(columnNames.get(i));

ans.column_table_names = columnNamesVector;

ans.table_data = dataVector;

return ans;

}

}

Лістинг 1.8. Файл DB_Helper.java

package com.company.db;

public final class Config {

public static String URL = "jdbc:mysql://localhost/cross-platform";

public static String LOGIN = "root";

public static String PASSWORD = "";

public static String CURRENT_TABLE = "hairstyle";

}

Лістинг 1.9. Файл Config.java
На рис.1-3 , представлено обчислення та розрахунки за допомогою яких можливо вирішити задачу у вигляді алгоритмічної мови програмування Java, введення вхідних даних у програму, виконання логічних операцій та отриманий результат після введення цих даних.




Рис. 1.1 Робота програми



Рис. 1.2 Робота програми



Рис. 1.3 Робота програми

ВИСНОВОК

Для вирішення поставлених завдань була використана інтегрована середа розробки програм IntelliIDEA для розробки програм на мові програмування Java. В ході розрахунково-графічної роботи було створена база даних MySQL, та програма яка реалізує підключення бази даних, введення даних у БД, зміну елемента БД, видалення елемента БД та пошук в БД за одним критерієм. Реалізовано графічний користувальницький інтерфейс. Було розроблено 3 таблиці “hairstyle”, “type_hairstyle”, “clients” з запитами: додати запис, редагувати запис, видалити запис.

скачати

© Усі права захищені
написати до нас