1

私はC ++で割り当てを行っており、ユーザー定義のnumSharesとpricePerShareを使用して、自分の仕事に新しいトランザクションを追加する方法に固執しています。

私は次のようなトランザクション構造を持っています:

struct Transaction
{
string stockSymbol;     // String containing the stock symbol, e.g. "AAPL"
string buyerName;       // String containing the buyer's name e.g. "Mr Brown"
int buyerAccount;       // Integer containing an eight digit account code
int numShares;          // Integer containing the number of sold shares
int pricePerShare;      // Integer containing the buy price per share
};

これは buildTransaction クラスです:

static Transaction* buildTransactions(int numTransactions)
{
    int maxShareVolume = 100000;
    int maxSharePrice = 1000;

    Transaction *transactions = new Transaction[numTransactions];

        for(int idx = 0; idx < numTransactions; idx++)
        {
            transactions[idx].stockSymbol = pickRandomStockSymbol();

            std::string buyerName = pickRandomBuyer();
            transactions[idx].buyerName = buyerName;
            transactions[idx].buyerAccount = lookupBuyerAccount(buyerName);

            transactions[idx].numShares = 1 + rand() % maxShareVolume;
            transactions[idx].pricePerShare = 1 + rand() % maxSharePrice;       
        }

        return transactions;
    }

これを使用してトランザクション配列にデータを追加するにはどうすればよいですか:

void Analyser::addTransactions(Transaction* transactions, int numTransactions)

このことから、ユーザー入力として本当に必要なのは株数と株あたりの価格だけであると仮定しますが、他の情報は配列から選択することで自動的に入力されます。

4

2 に答える 2

2

配列を使用する代わりに、ベクトルを使用する必要があります。buildTransactions は次のように記述されます。

std::vector<Transaction> buildTransactions(int numTransactions)
{
    int maxShareVolume = 100000;
    int maxSharePrice = 1000;
    std::vector<Transaction> transactions;

    for(int idx = 0; idx < numTransactions; idx++)
    {
        Transaction t;
        t.stockSymbol = pickRandomStockSymbol();
        std::string buyerName = pickRandomBuyer();
        t.buyerName = buyerName;
        t.buyerAccount = lookupBuyerAccount(buyerName);
        t.numShares = 1 + rand() % maxShareVolume;
        t.pricePerShare = 1 + rand() % maxSharePrice;

        transactions.push_back(t);
    }

    return transactions;
}

buildTransactions 関数を編集することで、addTransactions 関数にこれを行うことで簡単にデータを追加できます。

void Analyser::addTransactions(std::vector<Transaction> &transactions, int numTransactions)
{
    for(int idx = 0; idx < numTransactions; idx++)
    {
        Transaction t;
        t.stockSymbol = pickRandomStockSymbol();
        std::string buyerName = pickRandomBuyer();
        t.buyerName = buyerName;
        t.buyerAccount = lookupBuyerAccount(buyerName);

        std::cout << "Enter number of shares for transaction: ";
        std::cin >> t.numShares;
        std::cout << "Enter price per share for transaction: ";
        std::cin >> t.pricePerShare;

        transactions.push_back(t);
    }
}

それが役に立てば幸い :)

于 2013-03-19T09:00:00.830 に答える
0

次のような addTransactions() メソッドのループで、株数と株あたりの価格を入力として取得できます。

for(int idx = 0; idx < numTransactions; idx++)
    {
        transactions[idx].stockSymbol = pickRandomStockSymbol();

        std::string buyerName = pickRandomBuyer();
        transactions[idx].buyerName = buyerName;
        transactions[idx].buyerAccount = lookupBuyerAccount(buyerName);

        ctd::cout<<"Enter number of shares for transaction "<<idx+1<<std::endl;
        std::cin>>transactions[idx].numShares;
        ctd::cout<<"Enter price per share for transaction "<<idx+1<<std::endl;
        std::cin>>transactions[idx].pricePerShare;    
    }
于 2013-03-19T07:24:58.667 に答える