第一个版本在学习java面向对象之前编写,比较初级,直接在控制台输入参数,在main方法中完成数据的模拟与输出
package stocktradingsimulation;
/*
此程序用于虚拟股票交易数值结果,模拟四只股票的交易情况
@author:wisdomcodeinside
@version:1.0.0.1
*/
import java.util.Scanner;
import java.math.BigDecimal;
class StockTradingSimulation {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//输入数据
System.out.println("请输入第一只股票的买入价格");
double stockBuy1 = scan.nextDouble();
System.out.println("请输入第一只股票的现价");
double stockNow1 = scan.nextDouble();
System.out.println("请输入第一只股票的数量");
int stockNum1 = scan.nextInt();
System.out.println("请输入第二只股票的买入价格");
double stockBuy2 = scan.nextDouble();
System.out.println("请输入第二只股票的现价");
double stockNow2 = scan.nextDouble();
System.out.println("请输入第二只股票的数量");
int stockNum2 = scan.nextInt();
System.out.println("请输入第三只股票的买入价格");
double stockBuy3 = scan.nextDouble();
System.out.println("请输入第三只股票的现价");
double stockNow3 = scan.nextDouble();
System.out.println("请输入第三只股票的数量");
int stockNum3 = scan.nextInt();
System.out.println("请输入第四只股票的买入价格");
double stockBuy4 = scan.nextDouble();
System.out.println("请输入第四只股票的现价");
double stockNow4 = scan.nextDouble();
System.out.println("请输入第四只股票的数量");
int stockNum4 = scan.nextInt();
System.out.println("请输入可用资金");
double accountAvailableFunds = scan.nextDouble();
System.out.println("请输入资金余额");
double accountBalance = scan.nextDouble();//输入数据
//计算数据
double stockCost1 =stockBuy1 * stockNum1;
BigDecimal b1 = new BigDecimal(stockCost1);
stockCost1 = b1.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockCost2 = stockBuy2 * stockNum2;
BigDecimal b2 = new BigDecimal(stockCost2);
stockCost2 = b2.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockCost3 = stockBuy3 * stockNum3;//股票总成本
BigDecimal b3 = new BigDecimal(stockCost3);
stockCost3 = b3.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockNowPrice1 = stockNow1 * stockNum1;
BigDecimal b4 = new BigDecimal(stockNowPrice1);
stockNowPrice1 = b4.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockNowPrice2 = stockNow2 * stockNum2;
BigDecimal b5 = new BigDecimal(stockNowPrice2);
stockNowPrice2 = b5.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockNowPrice3 = stockNow3 * stockNum3;//股票现市值
BigDecimal b6 = new BigDecimal(stockNowPrice3);
stockNowPrice3 = b6.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfit1 = stockNum1 * (stockNow1 - stockBuy1);
BigDecimal b7 = new BigDecimal(stockProfit1);
stockProfit1 = b7.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfit2 = stockNum2 * (stockNow2 - stockBuy2);
BigDecimal b8 = new BigDecimal(stockProfit2);
stockProfit2 = b8.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfit3 = stockNum3 * (stockNow3 - stockBuy3);//股票总盈利
BigDecimal b9 = new BigDecimal(stockProfit3);
stockProfit3 = b9.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfitMargin1 = (stockProfit1 / stockCost1)* 100;
BigDecimal b10 = new BigDecimal(stockProfitMargin1);
stockProfitMargin1 = b10.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfitMargin2 = (stockProfit2 / stockCost2)* 100;
BigDecimal b11 = new BigDecimal(stockProfitMargin2);
stockProfitMargin2 = b11.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfitMargin3 = (stockProfit3 / stockCost3)* 100;//股票利润率
BigDecimal b12 = new BigDecimal(stockProfitMargin3);
stockProfitMargin3 = b12.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockCost4 =stockBuy4 * stockNum4;
BigDecimal b13 = new BigDecimal(stockCost4);
stockCost4 = b13.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockNowPrice4 = stockNow4 * stockNum4;
BigDecimal b14 = new BigDecimal(stockNowPrice4);
stockNowPrice4 = b14.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfit4 = stockNum4 * (stockNow4 - stockBuy4);
BigDecimal b15 = new BigDecimal(stockProfit4);
stockProfit4 = b15.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double stockProfitMargin4 = (stockProfit4 / stockCost4)* 100;
BigDecimal b16 = new BigDecimal(stockProfitMargin4);
stockProfitMargin4 = b16.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
double sumStockPrice = stockNowPrice1 + stockNowPrice2 + stockNowPrice3 + stockNowPrice4;//股票总市值
double sumStockProfit = stockProfit1 + stockProfit2 + stockProfit3 + stockProfit4;//股票总盈亏
double totalAssets = accountBalance + sumStockPrice;//账户总资产
//数据输出
System.out.println("人民币总资产(元):\t" + totalAssets);
System.out.println();
System.out.println("\t总市值\t\t\t总盈亏");
System.out.println("\t" + sumStockPrice + "\t\t\t" + sumStockProfit);
System.out.println();
System.out.println("\t可用资产\t\t\t资金余额");
System.out.println("\t" + accountAvailableFunds + "\t\t\t" + accountBalance);
System.out.println("证券名称\t\t参考盈亏\t\t股份余额\t\t成本价");
System.out.println("证券市值\t\t盈亏率\t\t股份可用\t\t最新价");
System.out.println("证券名称1" + "\t\t" + stockProfit1 + "\t\t" + stockNum1 + "\t\t" + stockBuy1);
System.out.println(stockNowPrice1 + "\t\t" + stockProfitMargin1 + "%" + "\t\t" + stockNum1 + "\t\t" + stockNow1);
System.out.println("证券名称2" + "\t\t" + stockProfit2 + "\t\t" + stockNum2 + "\t\t" + stockBuy2);
System.out.println(stockNowPrice2 + "\t\t" + stockProfitMargin2 + "%" + "\t\t" + stockNum2 + "\t\t" + stockNow2);
System.out.println("证券名称3" + "\t\t" + stockProfit3 + "\t\t" + stockNum3 + "\t\t" + stockBuy3);
System.out.println(stockNowPrice3 + "\t\t" + stockProfitMargin3 + "%" + "\t\t" + stockNum3 + "\t\t" + stockNow3);
System.out.println("证券名称4" + "\t\t" + stockProfit4 + "\t\t" + stockNum4 + "\t\t" + stockBuy4);
System.out.println(stockNowPrice4 + "\t\t" + stockProfitMargin4 + "%" + "\t\t" + stockNum4 + "\t\t" + stockNow4);
}
}
第二个版本在学习完面向对象之后,创建Stock类,Account类,在类内部完成数值的计算,再创建主类,在主类中完成数据调用与输出。
股票类
package stocktradingsimulation;
import java.math.BigDecimal;
public class Stock {
private String name;
private double stockCost;//股票成本
private double stockPrice;//股票现价
private double stockNumber;//股票数量
private double stockValue;//股票市值
private double stockProfit;//股票盈亏
private double stockProfitMargin;//盈亏率
public Stock() {
super();
}
public Stock(String name,double stockCost, double stockPrice, double stockNumber) {
super();
this.name = name;
this.stockCost = stockCost;
this.stockPrice = stockPrice;
this.stockNumber = stockNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getStockCost() {
return stockCost;
}
public void setStockCost(double stockCost) {
this.stockCost = stockCost;
}
public double getStockPrice() {
return stockPrice;
}
public void setStockPrice(double stockPrice) {
this.stockPrice = stockPrice;
}
public double getstockNumber() {
return stockNumber;
}
public void setstockNumber(double stockNumber) {
this.stockNumber = stockNumber;
}
public double getStockValue() {
BigDecimal b = new BigDecimal(stockPrice * stockNumber);
return b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public double getStockProfit() {
BigDecimal b = new BigDecimal(stockNumber * (stockPrice - stockCost));
return b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public double getStockProfitMargin() {
BigDecimal b = new BigDecimal(((stockPrice - stockCost) / stockCost) * 100);
return b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
@Override
public String toString() {
return "Stock [name=" + name + ", stockCost=" + stockCost + ", stockPrice=" + stockPrice + ", stockNumber="
+ stockNumber + ", stockValue=" + stockValue + ", stockProfit=" + stockProfit + ", stockProfitMargin="
+ stockProfitMargin + "]";
}
}
账户类
package stocktradingsimulation;
import java.util.Vector;
public class Account {
private Vector stockList = new Vector();// 股票数组
private double accountAvailableFunds;// 可用资产
private double accountBalance;// 账户余额
private double sumStockPrice;// 股票总市值
private double sumStockProfit;// 股票总盈亏
private double totalAssets;// 账户总资产
public Account() {
super();
}
public Vector getStockList() {
return stockList;
}
public void setStockList(Vector stockList) {
this.stockList = stockList;
}
public double getAccountAvailableFunds() {
return accountAvailableFunds;
}
public void setAccountAvailableFunds(double accountAvailableFunds) {
this.accountAvailableFunds = accountAvailableFunds;
}
public double getAccountBalance() {
return accountBalance;
}
public void setAccountBalance(double accountBalance) {
this.accountBalance = accountBalance;
}
public void setSumStockPrice(double sumStockPrice) {
this.sumStockPrice = sumStockPrice;
}
public double getSumStockPrice() {
double sum = 0.0;
for (int i = 0; i < stockList.size(); i++) {
Stock s = (Stock)stockList.elementAt(i);
sum += s.getStockValue();
}
return sum;
}
public void setSumStockProfit(double sumStockProfit) {
this.sumStockProfit = sumStockProfit;
}
public double getSumStockProfit() {
double sum = 0.0;
for (int i = 0; i < stockList.size(); i++) {
Stock s = (Stock)stockList.elementAt(i);
sum += s.getStockProfit();
}
return sum;
}
public void setTotalAssets(double totalAssets) {
this.totalAssets = totalAssets;
}
public double getTotalAssets() {
return getSumStockPrice() + getAccountBalance();
}
public void addStock(String name,double stockCost, double stockPrice, double stockNumber) {
Stock s = new Stock(name,stockCost,stockPrice,stockNumber);
stockList.addElement(s);
}
public void deleteStock(int i) {
stockList.remove(i);
}
public Stock getStock(int i) {
return (Stock)stockList.elementAt(i);
}
}
主类
package stocktradingsimulation;
/*
此程序用于虚拟股票交易数值结果,模拟四只股票的交易情况
@author:wisdomcodeinside
@version:1.0.0.2
*/
import java.util.Scanner;
import java.math.BigDecimal;
class StockTradingSimulationV1 {
public static void main(String[] args) {
//输入数据
// Scanner scan = new Scanner(System.in);
// Account a = new Account();
// while(true) {
// if(scan.nextLine()== "quit") {
// break;
// }
// System.out.println("请输入股票名称");
// String s = scan.next();
// System.out.println("请输入股票的买入价格");
// double d = scan.nextDouble();
// System.out.println("请输入股票的买入数量");
// double d2 = scan.nextDouble();
// System.out.println("请输入股票的当前价格");
// double d3 = scan.nextDouble();
// a.addStock(s, d, d3, d2);
// }
// System.out.println("请输入可用资产");
// a.setAccountAvailableFunds(scan.nextDouble(););
// System.out.println("请输入账户余额");
// a.setAccountBalance(scan.nextDouble(););
//
//创建Account对象
Account a = new Account();
a.addStock("证券名1",6.66, 6.77, 20000);
a.addStock("证券名2",6.10, 6.20, 40000);
a.addStock("证券名3",7.11, 7.88, 41000);
a.addStock("证券名4",15.21, 17.30, 40100);
a.setAccountAvailableFunds(30518.07);
a.setAccountBalance(30518.07);
//数据输出
System.out.println("人民币总资产(元):\t" + a.getTotalAssets());
System.out.println();
System.out.println("\t总市值\t\t\t总盈亏");
System.out.println("\t" + a.getSumStockPrice() + "\t\t" + a.getSumStockProfit());
System.out.println();
System.out.println("\t可用资产\t\t\t资金余额");
System.out.println("\t" + a.getAccountAvailableFunds() + "\t\t\t" + a.getAccountBalance());
System.out.println("证券名称\t\t参考盈亏\t\t股份余额\t\t成本价");
System.out.println("证券市值\t\t盈亏率\t\t股份可用\t\t最新价");
for (int i = 0; i < a.getStockList().size(); i++) {
Stock s = a.getStock(i);
System.out.println(s.getName() + "\t\t" + s.getStockProfit() + "\t\t" + s.getstockNumber() + "\t\t" + s.getStockCost());
System.out.println(s.getStockValue() + "\t\t" + s.getStockProfitMargin() + "%" + "\t\t" + s.getstockNumber() + "\t\t" + s.getStockPrice());
}
}
}