Java (Spring + Swing/JavaFX), Система учета результатов биржевых торгов по акциям, осуществляющая по запросу расчет за период максимально возможной доходности портфеля из выбранного набора акций

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Java
  • 87 87 страниц
  • 13 + 13 источников
  • Добавлена 03.02.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
ВВЕДЕНИЕ 2
1. Постановка задачи 4
2. Описание предметной области 5
3. Актуальность приложения 6
4. Описание программы 7
4.1. Алгоритмические решения 8
4.1.1 Сервер 8
4.1.2 Клиент 8
4.2 Описание интерфейса программы 9
Вход 10
Окно программы 10
4.3 Состав приложения 14
4.3.1 База данных 14
4.3.2. Настройка базы данных 14
4.3.3 Сервер 18
4.3.4 Клиент 19
5. Назначение и состав классов программы 20
5.1 Сервер 20
Пакеты 21
5.2 Клиент 22
Пакеты 23
ЗАКЛЮЧЕНИЕ 25
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЕ 28
ЛИСТИНГ ПРОГРАММНОГО КОДА 28

Фрагмент для ознакомления

boardId,tradingSessionsTemp.tradeDate,tradingSessionsTemp.shortName,tradingSessionsTemp.secId,tradingSessionsTemp.numTrades,tradingSessionsTemp.value,tradingSessionsTemp.open,tradingSessionsTemp.low,tradingSessionsTemp.high,tradingSessionsTemp.warPrice,tradingSessionsTemp.close,tradingSessionsTemp.volume);//TradingSessionsпомещаемвмассивtradingSessions_data_msng, другимисловами, втаблицудляотображенияданныхtradingSessions_data_sber.add(tradingSessions);tableView_sber.setItems(tradingSessions_data_sber);boardId_sber.setCellValueFactory(cellData -> cellData.getValue().boardIdProperty());tradeDate_sber.setCellValueFactory(cellData -> cellData.getValue().tradeDateProperty());shortName_sber.setCellValueFactory(cellData -> cellData.getValue().shortNameProperty());secId_sber.setCellValueFactory(cellData -> cellData.getValue().secIdProperty());numTrades_sber.setCellValueFactory(cellData -> cellData.getValue().numTradesProperty());value_sber.setCellValueFactory(cellData -> cellData.getValue().valueProperty());open_sber.setCellValueFactory(cellData -> cellData.getValue().openProperty());low_sber.setCellValueFactory(cellData -> cellData.getValue().lowProperty());high_sber.setCellValueFactory(cellData -> cellData.getValue().highProperty());warPrice_sber.setCellValueFactory(cellData -> cellData.getValue().warPriceProperty());close_sber.setCellValueFactory(cellData -> cellData.getValue().closeProperty());volume_sber.setCellValueFactory(cellData -> cellData.getValue().volumeProperty());} } catch (JsonSyntaxException e){ } }//***************************************************************************************** //***************************************************************************************** //ВкладкаЛукойлprivate ObservableList tradingSessions_data_lkoh= FXCollections.observableArrayList();@FXMLprivate TableColumn boardId_lkoh= new TableColumn("BOARDID");@FXMLprivate TableColumn tradeDate_lkoh= new TableColumn("TRADEDATE");@FXMLprivate TableColumn shortName_lkoh= new TableColumn("SHORTNAME");@FXMLprivate TableColumn secId_lkoh= new TableColumn ("SECID");@FXMLprivate TableColumn numTrades_lkoh= new TableColumn("NUMTRADES");@FXMLprivate TableColumn value_lkoh= new TableColumn("VALUE");@FXMLprivate TableColumn open_lkoh= new TableColumn("OPEN");@FXMLprivate TableColumn low_lkoh= new TableColumn("LOW");@FXMLprivate TableColumn high_lkoh= new TableColumn("HIGH");@FXMLprivate TableColumn warPrice_lkoh= new TableColumn("WARPRICE");@FXMLprivate TableColumn close_lkoh= new TableColumn("CLOSE");@FXMLprivate TableColumn volume_lkoh= new TableColumn("VOLUME");@FXMLprivate TableViewtableView_lkoh= new TableView();@FXMLprivate TextFieldbeginning_lkoh= new TextField();@FXMLprivate TextFieldending_lkoh= new TextField();@FXMLprivate Button button_lkoh= new Button();/** * Методполучаетссервера JSON - сообщениеизаполняеттаблицувfxmlфайлерезультатыторговЛукойла */@FXMLprivate void getTradeSessions_lkoh() {//ЧистимтаблицупередобновлениемtradingSessions_data_lkoh.clear();//Отправляемнасервер Get-запросиполучаемданныеString text = getTradeSessions("LKOH", beginning_lkoh.getText(), ending_lkoh.getText());//ИспользуембиблиотекуGson, чтобыпарситьобъекты JSONGsongson = new Gson();JsonParserjsonParser = new JsonParser(); try {JsonArrayjsonArray = jsonParser.parse(text).getAsJsonArray(); for (JsonElementjsonElement: jsonArray) {//ПомещаемjsonElementвклассTradingSessionsTemp(временныйкласс)TradingSessionsTemptradingSessionsTemp = gson.fromJson(jsonElement, TradingSessionsTemp.class);//TradingSessionsTempпомещаемвклассTradingSessionsTradingSessionstradingSessions = new TradingSessions(tradingSessionsTemp.boardId,tradingSessionsTemp.tradeDate,tradingSessionsTemp.shortName,tradingSessionsTemp.secId,tradingSessionsTemp.numTrades,tradingSessionsTemp.value,tradingSessionsTemp.open,tradingSessionsTemp.low,tradingSessionsTemp.high,tradingSessionsTemp.warPrice,tradingSessionsTemp.close,tradingSessionsTemp.volume);//TradingSessionsпомещаемвмассивtradingSessions_data_msng, другимисловами, втаблицудляотображенияданныхtradingSessions_data_lkoh.add(tradingSessions);tableView_lkoh.setItems(tradingSessions_data_lkoh);boardId_lkoh.setCellValueFactory(cellData -> cellData.getValue().boardIdProperty());tradeDate_lkoh.setCellValueFactory(cellData -> cellData.getValue().tradeDateProperty());shortName_lkoh.setCellValueFactory(cellData -> cellData.getValue().shortNameProperty());secId_lkoh.setCellValueFactory(cellData -> cellData.getValue().secIdProperty());numTrades_lkoh.setCellValueFactory(cellData -> cellData.getValue().numTradesProperty());value_lkoh.setCellValueFactory(cellData -> cellData.getValue().valueProperty());open_lkoh.setCellValueFactory(cellData -> cellData.getValue().openProperty());low_lkoh.setCellValueFactory(cellData -> cellData.getValue().lowProperty());high_lkoh.setCellValueFactory(cellData -> cellData.getValue().highProperty());warPrice_lkoh.setCellValueFactory(cellData -> cellData.getValue().warPriceProperty());close_lkoh.setCellValueFactory(cellData -> cellData.getValue().closeProperty());volume_lkoh.setCellValueFactory(cellData -> cellData.getValue().volumeProperty());} } catch (JsonSyntaxException e){ } }//*****************************************************************************************private ObservableList auctionsData= FXCollections.observableArrayList();@FXMLprivate TableColumn date = new TableColumn("Дата");@FXMLprivate TableColumn close = new TableColumn("Закрытие");@FXMLprivate TableColumn stock = new TableColumn("Акция");@FXMLprivate TableColumn count = new TableColumn("Количество");@FXMLprivate TableViewtableView= new TableView();@FXMLprivate TextFieldmoney_first= new TextField();@FXMLprivate TextFieldbeginning = new TextField();@FXMLprivate TextFieldending = new TextField();@FXMLpublic TextFieldpercentage = new TextField();@FXMLpublic TextFieldfinal_amount= new TextField();@FXMLpublic TextFieldannual_return= new TextField();@FXMLprivate Button buttonGetProfitability= new Button();/** * Методполучаетссервера JSON - сообщениеизаполняеттаблицувfxmlфайлерезультатымаксимальнойдоходностипортфеля * @throws IOException */@FXMLprivate void getProfitability() throws IOException {percentage.clear();final_amount.clear();annual_return.clear();auctionsData.clear();//Отправляемнасервер Get-запросиполучаемданныеString text = getActions(money_first.getText(), beginning.getText(), ending.getText());//ИспользуембиблиотекуGson, чтобыпарситьобъекты JSONGsongson = new Gson();JsonParserjsonParser = new JsonParser(); try {JsonArrayjsonArray = jsonParser.parse(text).getAsJsonArray(); for (JsonElementjsonElement: jsonArray) {//ПомещаемjsonElementвклассAuctionTemp(временныйкласс)AuctionTempauctionTemp = gson.fromJson(jsonElement, AuctionTemp.class);//AuctionTempпомещаемвкласс auctionAuctionauction = new Auction(auctionTemp.id,auctionTemp.date,auctionTemp.close,auctionTemp.stock,auctionTemp.count);//Auction помещаемвмассивauctionsData, другимисловами, втаблицудляотображенияданныхauctionsData.add(auction);tableView.setItems(auctionsData);date.setCellValueFactory(cellData -> cellData.getValue().dateProperty());close.setCellValueFactory(cellData -> cellData.getValue().closeProperty());stock.setCellValueFactory(cellData -> cellData.getValue().stockProperty());count.setCellValueFactory(cellData -> cellData.getValue().countProperty());} } catch (JsonSyntaxException e){ }percentage.setText(getPercentage());final_amount.setText(getFinalAmount());annual_return.setText(getAnnualReturn());}/** * * @param moneyFirstпередаемстартовыйкапитал * @param from передаемначалопериода * @param till передаемконецпериода * @return возвращаетвформате JSON сообщениессервера, данныесБД */private String getActions(String moneyFirst, String from, String till) {if (moneyFirst.equals("") || from.equals("") || till.equals("")) {return "You specified an invalid value";} else { URL url = null; try {url = new URL("http://localhost:8080/auctions/" + moneyFirst + "&" + from + "&" + till);URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); return in.readLine();} catch (IOException e) {throw new RuntimeException(e);} } }/** * * @param stock передаемидентификаторакции * @param from передаемначалопериода * @param till передаемконецпериода * @return возвращаетвформате JSON сообщениессервера, данныесБД */private String getTradeSessions(String stock, String from, String till) {if (stock.equals("") || from.equals("") || till.equals("")) {return "You specified an invalid value";} else { URL url = null; try {url = new URL("http://localhost:8080/tradesessions/" + stock + "&" + from + "&" + till);URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); return in.readLine();} catch (IOException e) {return "Server is not available";} } }/** * * @return возвращаетссерверамесячныйпроцент */private String getPercentage() { URL url = null; try {url = new URL("http://localhost:8080/getPercentage");URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); return in.readLine();} catch (IOException e) {return "The server is not available";} }/** * * @return возвращаетссерверагодовуюдоходность */private String getAnnualReturn() { URL url = null; try {url = new URL("http://localhost:8080/getAnnualReturn");URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); return in.readLine();} catch (IOException e) {return "The server is not available";} }/** * * @return возвращаетссервераконечнуюсумму */private String getFinalAmount() { URL url = null; try {url = new URL("http://localhost:8080/getFinalAmount");URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); return in.readLine();} catch (IOException e) {return "The server is not available";} }}package com.example.investmentclient;import javafx.application.Application;import javafx.fxml.FXMLLoader;import javafx.scene.Scene;import javafx.stage.Stage;import java.io.IOException;/** * Точказапускаграфическогоприложения */public class MainApplicationextends Application {@Overridepublic void start(Stage stage) throws IOException {FXMLLoaderfxmlLoader = new FXMLLoader(MainApplication.class.getResource("main.fxml"));Scene scene = new Scene(fxmlLoader.load(), 1005, 400);stage.setTitle("Торгинабирже");stage.setScene(scene);stage.show();}public static void main(String[] args) {launch(args);}}package com.example.investmentclient;import javafx.beans.property.SimpleStringProperty;import javafx.beans.property.StringProperty;/** * Классдлявзаимосвязистаблицей JavaFX */public class TradingSessions {public StringPropertyboardId; public StringPropertytradeDate; public StringPropertyshortName; public StringPropertysecId; public StringPropertynumTrades; public StringPropertyvalue; public StringPropertyopen; public StringPropertylow; public StringPropertyhigh; public StringPropertywarPrice; public StringPropertyclose; public StringPropertyvolume; public TradingSessions(String boardId, String tradeDate, String shortName,String secId, String numTrades, String value,String open, String low, String high, String warPrice,String close, String volume) {this.boardId= new SimpleStringProperty(this, "boradId", boardId);this.tradeDate= new SimpleStringProperty(this, "tradeDate", tradeDate);this.shortName= new SimpleStringProperty(this, "shortName", shortName);this.secId= new SimpleStringProperty(this, "secId", secId);this.numTrades= new SimpleStringProperty(this, "numTrades", numTrades);this.value= new SimpleStringProperty(this, "value", value);this.open= new SimpleStringProperty(this, "open", open);this.low= new SimpleStringProperty(this, "low", low);this.high= new SimpleStringProperty(this, "high", high);this.warPrice= new SimpleStringProperty(this, "warPrice", warPrice);this.close= new SimpleStringProperty(this, "close", close);this.volume= new SimpleStringProperty(this, "volume", volume);}public String getBoardId() {return boardId.get();}public StringPropertyboardIdProperty() {return boardId;}public void setBoardId(String boardId) {this.boardId.set(boardId);}public String getTradeDate() {return tradeDate.get();}public StringPropertytradeDateProperty() {return tradeDate;}public void setTradeDate(String tradeDate) {this.tradeDate.set(tradeDate);}public String getShortName() {return shortName.get();}public StringPropertyshortNameProperty() {return shortName;}public void setShortName(String shortName) {this.shortName.set(shortName);}public String getSecId() {return secId.get();}public StringPropertysecIdProperty() {return secId;}public void setSecId(String secId) {this.secId.set(secId);}public String getNumTrades() {return numTrades.get();}public StringPropertynumTradesProperty() {return numTrades;}public void setNumTrades(String numTrades) {this.numTrades.set(numTrades);}public String getValue() {return value.get();}public StringPropertyvalueProperty() {return value;}public void setValue(String value) {this.value.set(value);}public String getOpen() {return open.get();}public StringPropertyopenProperty() {return open;}public void setOpen(String open) {this.open.set(open);}public String getLow() {return low.get();}public StringPropertylowProperty() {return low;}public void setLow(String low) {this.low.set(low);}public String getHigh() {return high.get();}public StringPropertyhighProperty() {return high;}public void setHigh(String high) {this.high.set(high);}public String getWarPrice() {return warPrice.get();}public StringPropertywarPriceProperty() {return warPrice;}public void setWarPrice(String warPrice) {this.warPrice.set(warPrice);}public String getClose() {return close.get();}public StringPropertycloseProperty() {return close;}public void setClose(String close) {this.close.set(close);}public String getVolume() {return volume.get();}public StringPropertyvolumeProperty() {return volume;}public void setVolume(String volume) {this.volume.set(volume);}}package com.example.investmentclient;/** * Вспомогательныйклассдляпередачиданныхвтаблицу JavaFX */public class TradingSessionsTemp {public String boardId; public String tradeDate; public String shortName; public String secId; public String numTrades; public String value; public String open; public String low; public String high; public String warPrice; public String close; public String volume; public TradingSessionsTemp(String boardId, String tradeDate, String shortName,String secId, String numTrades, String value,String open, String low, String high, String warPrice,String close, String volume) {this.boardId= boardId;this.tradeDate= tradeDate;this.shortName= shortName;this.secId= secId;this.numTrades= numTrades;this.value= value;this.open= open;this.low= low;this.high= high;this.warPrice= warPrice;this.close= close;this.volume= volume;}}fxmlфайл

1 Прохоренок Н.А, Дронов В.А. HTML, JavaScript, PHP и MySQL Джентльменский набор Web – мастера. Санкт – Петербург, 2015. – 747 с.
2 Патрик Нимейер, Дэниэл Леук. Программирование на Java. Исчерпывающее руководство для профессионалов. Пер. с англ. Райтман С.А. Москва, 2014. – 1215 с.
3 Прохоренок Н.А, JavaFX. – СПБ.: БХВ-Петербург, 2020. – 768 с.
4 C. Gupta, Apache Maven: Beginner's Guide. Packt Publishing, 2014. - 500 с.
5 Herbert Schildt, Java: A Beginner's Guide. McGraw-Hill Education, 2014. - 720 с.
6 Joshua Bloch, Effective Java. Addison-Wesley Professional, 2017. - 416 с.
7 Kathy Sierra and Bert Bates. Head First Java. O’Reilly Media, 2005. - 720 с.
8 Brian Goetz, Java Concurrency in Practice. Addison-Wesley Professional, 2006. - 384 с.
9 Herbert Schildt, Java: The Complete Reference, McGraw-Hill Education, 2018. - 1312 с.
10 Scott Oaks, Java Performance: The Definitive Guide, O'Reilly Media, 2014. - 426 с.
11 Paul Deitel and Harvey Deitel, Java: How to Program, Pearson, 2017. - 1232 с.
12 Pratik Patel, Java Database Programming with JDBC, O'Reilly Media, 2000. – 300 с.
13 Craig Walls, "Spring Boot in Action", Manning Publications, 2016. - 384 с