Skip to content

Added all progress from del1/main to del2 #4

Merged
merged 32 commits into from
Mar 24, 2026
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
20e38b5
Test Commit 2
Feb 13, 2026
a73f9e8
test 2
elisab3 Feb 13, 2026
c5abc66
test 3
elisab3 Feb 13, 2026
0ec9bd5
Add TransactionCalculator interface
Feb 20, 2026
bc38441
Added Stock class
elisab3 Feb 24, 2026
ce3580d
Added Share class
elisab3 Feb 24, 2026
99d7fc9
Added Portfolio class
elisab3 Feb 24, 2026
233303b
Added Exchange class
elisab3 Feb 24, 2026
cca567e
Add PurchaseCalculator
Feb 25, 2026
d770dbe
Added StockTest class
elisab3 Feb 25, 2026
6992382
Merge branch 'mappe_del1' of https://git.ntnu.no/solvena/Programmerin…
elisab3 Feb 25, 2026
d379010
Added ExchangeTest class
elisab3 Feb 25, 2026
e6e8a10
Add SaleCalculator
Feb 26, 2026
a6df231
Ignore build files
Feb 26, 2026
7136c2a
Merge remote changes
Feb 26, 2026
214ea96
Uses salesPrice from the share object
Feb 27, 2026
7df9db2
PurchaseCalculator and SalaCalculator implements TransactionCalculator
Feb 27, 2026
ffe1266
Add Transaction
Feb 28, 2026
32b5cb7
Add Player
Feb 28, 2026
2aa2af0
Added PortfolioTest class
elisab3 Mar 10, 2026
6baafb4
Moved test-classes
elisab3 Mar 10, 2026
b42502d
Added more tests to PortfolioTest class
elisab3 Mar 10, 2026
cb88b74
Added ShareTest class
elisab3 Mar 10, 2026
5ec6c53
Add TransactionArchive
Mar 22, 2026
cbf8f06
Merge remote-tracking branch 'refs/remotes/origin/mappe_del1' into ma…
Mar 22, 2026
95653ae
Add commit method
Mar 22, 2026
ba7303a
Add commit method
Mar 22, 2026
33cebc4
Fix price retrieval in commit method
Mar 22, 2026
0d24756
Add SaleTest.java
Mar 23, 2026
35ca87a
Updated missing methods in Exchange class
elisab3 Mar 24, 2026
4b12887
Merge branch 'mappe_del1' of git.ntnu.no:solvena/Programmering2_mappe…
Mar 24, 2026
ba8f76e
Add PurchaseTest
Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target/
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Branch test
Branch test 3
114 changes: 114 additions & 0 deletions src/main/java/Exchange.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Exchange {

private final String name;
private int week;
private final Map<String, Stock> stockMap;
private final Random random;

public Exchange(String name, List<Stock> stocks) {
this.name = name;
this.week = 1;
this.stockMap = new HashMap<>();
this.random = new Random();

for (Stock stock : stocks) {
stockMap.put(stock.getSymbol(), stock);
}

}

public String getName() {
return name;
}

public int getWeek() {
return week;
}

public boolean hasStock(String symbol) {
return stockMap.containsKey(symbol);
}

public Stock getStock(String symbol) {
return stockMap.get(symbol);
}

public List<Stock> findStocks(String searchTerm) {
List<Stock> result = new ArrayList<>();
String lowerSearch = searchTerm.toLowerCase();

for (Stock stock : stockMap.values()) {
if (stock.getSymbol().toLowerCase().contains(lowerSearch)
|| stock.getCompany().toLowerCase().contains(lowerSearch)) {
result.add(stock);
}
}

return result;
}

public Transaction buy(String symbol, BigDecimal quantity, Player player) {
Stock stock = getStock(symbol);

// unngå nullpointerexception
if (stock == null) {
return null;
}

// lager en ny "andel" basert på nåværende salgspris
Share shareToBuy = new Share(stock, quantity, stock.getSalesPrice());

// oppretter kjøpstransaksjonen for den uka
Purchase purchase = new Purchase(shareToBuy, this.week);

// committer til player
purchase.commit(player);

return purchase;
}

public Transaction sell(Share share, Player player) {
// unngå nullpointerexception
if (share == null) {
return null;
}

// oppretter salgstransaksjonen for den uka
Sale sale = new Sale(share, this.week);

// commiter til player
sale.commit(player);

return sale;
}

public void advance() {

week++;

for (Stock stock : stockMap.values()) { // henter stock-objektene

BigDecimal currentPrice = stock.getSalesPrice(); // henter siste pris fra Stock

double changePercent = (random.nextDouble() - 0.5) * 0.1;

BigDecimal change = currentPrice.multiply(BigDecimal.valueOf(changePercent));

BigDecimal newPrice = currentPrice.add(change);

if (newPrice.compareTo(BigDecimal.ZERO) > 0) { // unngå negativ pris
stock.addNewSalesPrice(newPrice);
}
}
}



}
43 changes: 43 additions & 0 deletions src/main/java/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import java.math.BigDecimal;

public class Player {
private String name;
private BigDecimal startingMoney;
private BigDecimal money;
private Portfolio portfolio;
private TransactionArchive transactionArchive;

public Player(String name, BigDecimal startingMoney) {
this.name = name;
this.startingMoney = startingMoney;
this.money = startingMoney;
this.portfolio = new Portfolio();
this.transactionArchive = new TransactionArchive();
}

public String getName() {
return this.name;
}

public BigDecimal getMoney() {
return this.money;
}

public void addMoney(BigDecimal amount) {
this.money = this.money.add(amount);
}

public void withdrawMoney(BigDecimal amount) {
this.money = this.money.subtract(amount);
}

public Portfolio getPortfolio() {
return this.portfolio;
}

public TransactionArchive getTransactionArchive() {
return this.transactionArchive;
}


}
38 changes: 38 additions & 0 deletions src/main/java/Portfolio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import java.util.ArrayList;
import java.util.List;

public class Portfolio {

private final List<Share> shares;

public Portfolio() {
this.shares = new ArrayList<>();
}

public boolean addShare(Share share) {
return shares.add(share);
}

public boolean removeShare(Share share) {
return shares.remove(share);
}

public List<Share> getShares() {
return new ArrayList<>(shares);
}

public List<Share> getShares(String symbol) {
List<Share> result = new ArrayList<>();
for (Share share : shares) {
if (share.getStock().getSymbol().equals(symbol)) {
result.add(share);
}
}
return result;
}

public boolean contains(Share share) {
return shares.contains(share);
}

}
22 changes: 22 additions & 0 deletions src/main/java/Purchase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import java.math.BigDecimal;

public class Purchase extends Transaction {
public Purchase(Share share, int week) {
super(share, week, new PurchaseCalculator(share));
}

@Override
public void commit(Player player) {
BigDecimal price = this.getCalculator().calculateTotal();

if (isCommitted() || (player.getMoney().compareTo(price) < 0)) {
return;
}

player.withdrawMoney(price);
player.getPortfolio().addShare(this.getShare());
player.getTransactionArchive().add(this);

this.committed = true;
}
}
29 changes: 29 additions & 0 deletions src/main/java/PurchaseCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import java.math.BigDecimal;

public class PurchaseCalculator implements TransactionCalculator {
private BigDecimal purchasePrice;
private BigDecimal quantity;

public PurchaseCalculator(Share share) {
this.purchasePrice = share.getPurchasePrice();
this.quantity = share.getQuantity();
}

public BigDecimal calculateGross() {
return this.purchasePrice.multiply(this.quantity);
}

public BigDecimal calculateCommission() {
BigDecimal rate = new BigDecimal("0.005");
return calculateGross().multiply(rate);
}

public BigDecimal calculateTax() {
BigDecimal tax = new BigDecimal("0");
return tax;
}

public BigDecimal calculateTotal() {
return calculateGross().add(calculateCommission()).add(calculateTax());
}
}
21 changes: 21 additions & 0 deletions src/main/java/Sale.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import java.math.BigDecimal;

public class Sale extends Transaction {
public Sale(Share share, int week) {
super(share, week, new SaleCalculator(share));
}

public void commit(Player player) {
BigDecimal price = getCalculator().calculateTotal();

if (isCommitted() || !player.getPortfolio().contains(this.getShare())) {
return;
}

player.addMoney(price);
player.getPortfolio().removeShare(this.getShare());
player.getTransactionArchive().add(this);

this.committed = true;
}
}
36 changes: 36 additions & 0 deletions src/main/java/SaleCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import java.math.BigDecimal;

public class SaleCalculator implements TransactionCalculator{
private BigDecimal purchasePrice;
private BigDecimal salesPrice;
private BigDecimal quantity;

public SaleCalculator(Share share) {
this.purchasePrice = share.getPurchasePrice();
this.salesPrice = share.getStock().getSalesPrice();
this.quantity = share.getQuantity();
}

public BigDecimal calculateGross() {
return this.salesPrice.multiply(this.quantity);
}

public BigDecimal calculateCommission() {
BigDecimal rate = new BigDecimal("0.01");
return calculateGross().multiply(rate);
}

public BigDecimal calculateTax() {
BigDecimal sellingCost = this.purchasePrice.multiply(this.quantity);
BigDecimal profit = calculateGross().subtract(calculateCommission()).subtract(sellingCost);
BigDecimal rate = new BigDecimal("0.3");
return profit.multiply(rate);
}

public BigDecimal calculateTotal() {
return calculateGross().subtract(calculateCommission()).subtract(calculateTax());
}



}
27 changes: 27 additions & 0 deletions src/main/java/Share.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import java.math.BigDecimal;

public class Share {

private final Stock stock;
private final BigDecimal quantity;
private final BigDecimal purchasePrice;

public Share(Stock stock, BigDecimal quantity, BigDecimal purchasePrice) {
this.stock = stock;
this.quantity = quantity;
this.purchasePrice = purchasePrice;
}

public Stock getStock() {
return stock;
}

public BigDecimal getQuantity() {
return quantity;
}

public BigDecimal getPurchasePrice() {
return purchasePrice;
}

}
33 changes: 33 additions & 0 deletions src/main/java/Stock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class Stock {

private final String symbol;
private final String company;
private final List<BigDecimal> prices;

public Stock(String symbol, String company, BigDecimal salesPrice) {
this.symbol = symbol;
this.company = company;
this.prices = new ArrayList<>();
this.prices.add(salesPrice);
}

public String getSymbol() {
return symbol;
}

public String getCompany() {
return company;
}

public BigDecimal getSalesPrice() {
return prices.get(prices.size() - 1);
}

public void addNewSalesPrice(BigDecimal price) {
prices.add(price);
}
}
Loading