• ProductManager


     
    /* 
     * File:   Product.h
     * Author: 88250
     *
     * Created on May 2, 2008, 5:51 PM
     
    */

    #ifndef _PRODUCT_H
    #define    _PRODUCT_H

    #include 
    <string>

    class Product {
    public:

        Product(std::string productName) {
            name 
    = productName;
        }

        std::string name;
    };

    #endif    
    /* _PRODUCT_H */


    /* 
     * File:   RecordRow.h
     * Author: 88250
     *
     * Created on May 2, 2008, 5:54 PM
     
    */


    #ifndef _RECORDROW_H
    #define    _RECORDROW_H

    #include 
    <string>

    class RecordRow {
    public:

        RecordRow(std::
    string n, std::string dir, int am, float p, int m, int d) {
            name 
    = n;
            direction 
    = dir;
            amount 
    = am;
            price 
    = p;
            month 
    = m;
            day 
    = d;
        }

        std::
    string name;
        std::
    string direction;
        
    int amount;
        
    float price;
        
    int month;
        
    int day;
    };


    #endif    /* _RECORDROW_H */


    /* 
     * File:   ProductManager.h
     * Author: 88250
     *
     * Created on May 2, 2008, 5:57 PM
     
    */


    #ifndef _PRODUCTMANAGER_H
    #define    _PRODUCTMANAGER_H

    #include 
    <vector>

    #include 
    "Product.h"
    #include 
    "RecordRow.h"

    using namespace std;

    class ProductManager {
    public:
        
    void init();
        
    void saveProduct(std::vector<Product> products);
        
    void readProduct(std::vector<Product> &products);
        
    void saveRecord(std::vector<RecordRow> records);
        
    void readRecord(std::vector<RecordRow> &records);
        
    void newProduct(string name);
        
    void newRecord(RecordRow rr);
        
    void displayName(void);
        
    void displayRecords(void);
        
    void displayStat(int productNum, int startM, int endM, int startD, int endD);
        
    void displayAllStat(int startM, int endM, int startD, int endD);
        vector
    <Product> productVector;
        vector
    <RecordRow> recordVector;
    private:
        vector
    <RecordRow> getRRByName(string name, vector<RecordRow> rrs);
        vector
    <string> getNames(vector<RecordRow> rrs);
        
    bool containsName(vector<string> names, string name);
        
    void displayAProduct(vector<RecordRow> rr, float &mao, float &chun);
    }
    ;

    #endif    /* _PRODUCTMANAGER_H */


    /*
     * File:   ProductManager.cpp
     * Author: 88250
     *
     * Created on May 2, 2008, 7:7 PM
     
    */

    #include 
    "ProductManager.h"

    #include 
    <vector>
    #include 
    <string>
    #include 
    <fstream>
    #include 
    <iostream>

    using namespace std;

    void ProductManager::displayAllStat(int startM, int endM, int starD, int endD) {
        vector
    <RecordRow> rrs;
        
    for (int i = 0; i < recordVector.size(); i++) {
            RecordRow rr 
    = recordVector[i];
            
    if (rr.month > startM && rr.month < endM) {
                rrs.push_back(rr);
                
    continue;
            }
            
    if (rr.month == startM || rr.month == endM) {
                
    if (rr.day >= starD && rr.day <= endD) {
                    rrs.push_back(rr);
                }
            }
        }

        vector
    <string> names = getNames(rrs);
        vector
    <vector<RecordRow> > rrss;
        
    for (int i = 0; i < names.size(); i++) {
            rrss.push_back(getRRByName(names[i], rrs));
        }
        cout 
    << "品种 " << "进总数 " << "出总数 " << "进总价 "
                
    << "出总价 " << "阶段利润 " << "总金额流量" << endl;
        
    float mao = 0.0// 毛利
        float chun = 0.0// 纯利

        
    for (int i = 0; i < rrss.size(); i++) {
            displayAProduct(rrss[i], mao, chun);
        }

        cout 
    << "当前的总毛收入:" << mao << endl;
        cout 
    << "当前的总纯收入:" << chun << endl;
        cout 
    << endl;

    }

    void ProductManager::displayStat(int productNum,
            
    int startM, int endM, int starD, int endD) {
        vector
    <RecordRow> rrs;
        
    for (int i = 0; i < recordVector.size(); i++) {
            RecordRow rr 
    = recordVector[i];
            
    if (rr.name == productVector[productNum].name) {
                
    if (rr.month > startM && rr.month < endM) {
                    rrs.push_back(rr);
                    
    continue;
                }
                
    if (rr.month == startM || rr.month == endM) {
                    
    if (rr.day >= starD && rr.day <= endD) {
                        rrs.push_back(rr);
                    }
                }
            }
        }

        cout 
    << "品种 " << "进总数 " << "出总数 " << "进总价 "
                
    << "出总价 " << "阶段利润 " << "总金额流量" << endl;

        
    float mao = 0.0;
        
    float chun = 0.0;
        displayAProduct(rrs, mao, chun);

        cout 
    << "当前的总毛收入:" << mao << endl;
        cout 
    << "当前的总纯收入:" << chun << endl;
        cout 
    << endl;
    }

    void ProductManager::displayAProduct(vector<RecordRow> rr,
            
    float &mao, float &chun) {
        
    int iam = 0;
        
    int oam = 0;
        
    float ip = 0.0;
        
    float op = 0.0;
        
    float pro = 0.0;
        
    float ppro = 0.0;
        
    float iavg = 0.0;
        
    int inum = 0;
        
    if (rr[0].name.length() >= 8){
           cout 
    << rr[0].name << " ";
        } 
    else {
          cout 
    << rr[0].name << " ";
          }
       
        
    for (int i = 0; i < rr.size(); i++) {
            
    if (rr[i].direction == "") {
                iam 
    += rr[i].amount;
                iavg 
    += rr[i].price;
                ip 
    += rr[i].amount * rr[i].price;
                inum
    ++;
            } 
    else {
                oam 
    += rr[i].amount;
                op 
    += rr[i].amount * rr[i].price;
            }
        }
        iavg 
    = iavg / inum;
        pro 
    = op - ip;
        ppro 
    = op - oam * iavg;
        cout 
    << iam << " " << oam << " " << ip << " " << op << " "
                
    << ppro << " " << pro << " " << endl;
        
        chun 
    += ppro;
        mao 
    += op;
    }

    vector
    <RecordRow> ProductManager::getRRByName(string name,
            vector
    <RecordRow> rrs) {
        vector
    <RecordRow> ret;
        
    for (int i = 0; i < rrs.size(); i++) {
            
    if (rrs[i].name == name) {
                ret.push_back(rrs[i]);
            }
        }
        
    return ret;
    }

    vector
    <string> ProductManager::getNames(vector<RecordRow> rrs) {
        vector
    <string> ret;

        
    for (int i = 0; i < rrs.size(); i++) {
            
    if (!containsName(ret, rrs[i].name)) {
                ret.push_back(rrs[i].name);
            }
        }
        
    return ret;
    }

    bool ProductManager::containsName(vector<string> names, string name) {
        
    for (int i = 0; i < names.size(); i++) {
            
    if (names[i] == name) {
                
    return true;
            }
        }
        
    return false;
    }

    void ProductManager::init() {
        std::vector
    <Product> products;
        readProduct(products);
        productVector 
    = products;

        std::vector
    <RecordRow> rrs;
        readRecord(rrs);
        recordVector 
    = rrs;
    }

    void ProductManager::newProduct(string name) {
        vector
    <Product>::iterator i;
        
    bool isExisted = false;
        
    for (i = productVector.begin(); i != productVector.end(); i++) {
            
    if ((*i).name == name) {
                isExisted 
    = true;
            }
        }
        
    if (!isExisted) {
            productVector.push_back(Product(name));
        }
        saveProduct(productVector);
    }

    void ProductManager::newRecord(RecordRow rr) {
        recordVector.push_back(rr);
        saveRecord(recordVector);
    }

    void ProductManager::displayName(void) {
        
    for (int i = 0; i < productVector.size(); i++) {
            cout 
    << i << "" << productVector[i].name << endl;
        }
        cout 
    << endl;
    }

    void ProductManager::displayRecords(void) {
        
    if (!recordVector.empty()) {
            cout 
    << "品种 " << "流向 " << "数量 " << "单价 " << "日期" << endl;
            
    for (int i = 0; i < recordVector.size(); i++) {
                
    if (recordVector[i].name.length() >= 8){
                   cout 
    << recordVector[i].name << " " << recordVector[i].direction << " "
                        
    << recordVector[i].amount << " " << recordVector[i].price
                        
    << " " << recordVector[i].month << "-" << recordVector[i].day
                        
    << endl;
                } 
    else {
                  cout 
    << recordVector[i].name << " " << recordVector[i].direction << " "
                        
    << recordVector[i].amount << " " << recordVector[i].price
                        
    << " " << recordVector[i].month << "-" << recordVector[i].day
                        
    << endl;
                }
            }
            cout 
    << endl;
        }
    }

    void ProductManager::saveProduct(std::vector<Product> products) {
        ofstream fout(
    "name");

        
    if (!fout) {
            cout 
    << "Cannot open output file! ";
            
    return;
        }

        
    for (int i = 0; i < products.size(); i++) {
            fout 
    << products[i].name << endl;
        }

        fout.close();
    }

    void ProductManager::saveRecord(std::vector<RecordRow> records) {
        ofstream fout(
    "data");

        
    if (!fout) {
            cout 
    << "Cannot open output file! ";
            
    return;
        }

        
    for (int i = 0; i < records.size(); i++) {
            fout 
    << "Record " << endl
                    
    << records[i].name << endl
                    
    << records[i].direction << endl
                    
    << records[i].amount << endl
                    
    << records[i].price << endl
                    
    << records[i].month << endl
                    
    << records[i].day << endl;
        }

        fout.close();
    }

    void ProductManager::readProduct(std::vector<Product> &products) {
        ifstream fin(
    "name");

        
    if (!fin) {
            cout 
    << "Cannot open input file! ";
            
    return;
        }

        
    string aLine;
        
    while (getline(fin, aLine)) {
            products.push_back(Product(aLine));
        }

        fin.close();
    }

    void ProductManager::readRecord(std::vector<RecordRow> &records) {
        ifstream fin(
    "data");

        
    if (!fin) {
            cout 
    << "Cannot open input file! ";
            
    return;
        }

        
    string aLine;
        
    while (getline(fin, aLine)) {
            
    string n, dir;
            
    int am, m, d;
            
    float pr;

            
    if (aLine.at(0== 'R') {
                getline(fin, aLine);
                n 
    = aLine;
                getline(fin, aLine);
                dir 
    = aLine;
                getline(fin, aLine);
                am 
    = atoi(aLine.c_str());
                getline(fin, aLine);
                pr 
    = atof(aLine.c_str());
                getline(fin, aLine);
                m 
    = atoi(aLine.c_str());
                getline(fin, aLine);
                d 
    = atoi(aLine.c_str());
                records.push_back(RecordRow(n, dir, am, pr, m, d));
            }
        }

        fin.close();
    }

    /*
     * File:   Main.cpp
     * Author: 88250
     *
     * Created on May 2, 2008, 9:36 PM
     
    */

    #include 
    "ProductManager.h"

    #include 
    <iostream>

    using namespace std;

    int main(int argc, char** argv) {
        ProductManager pm;
        pm.init();

        
    int input;
        
    int num = 0;
        
    string name;
        
    int amount = 0;
        
    float price = 0.0;
        
    int month = 1;
        
    int day = 1;
        
    int dir = 1;
        
    int sm = 1;
        
    int sd = 1;
        
    int em = 2;
        
    int ed = 1;
        
    int pn = 0;
        
    string d;
        
    char confirm = 'n';
        
    while (true) {
            cout 
    << "1. 查看现有品种" << endl;
            cout 
    << "2. 增加新品种" << endl;
            cout 
    << "3. 添加销售记录" << endl;
            cout 
    << "4. 查看所有销售记录" << endl;
            cout 
    << "5. 统计帐目" << endl;

            cout 
    << "请选择:" << "  ";
            cin 
    >> input;

            
    switch (input) {
                
    case 1:
                    pm.displayName();
                    
    break;
                
    case 2:
                    cout 
    << "请输入品种名称(111返回):" << "  ";
                    cin 
    >> name;
                    
    if (name == "111") {
                        
    break;
                    }
                    pm.newProduct(name);
                    cout 
    << "新建品种成功!" << endl;
                    
    break;
                
    case 3:
                    pm.displayName();

                    cout 
    << "请输入产品编号(111返回):  ";
                    cin 
    >> num;
                    
    if (num == 111) {
                        
    break;
                    }
                    
    if (num >= 0 && num <= pm.productVector.size()) {
                        name 
    = pm.productVector[num].name;
                    }
    else {
                        cout 
    << "输入有误!";
                        
    break;
                    }
                    cout 
    << "请选择流向(1. 进;2. 出):  ";
                    cin 
    >> dir;
                    
    if (dir == 1) {
                        d 
    = "";
                        cout 
    << "请输入进货数量:  ";
                        cin 
    >> amount;
                        cout 
    << "请输入进货单价:  ";
                        cin 
    >> price;

                        cout 
    << "请输入进货月:  ";
                        cin 
    >> month;

                        cout 
    << "请输入进货日:  ";
                        cin 
    >> day;
                    }
    else if (dir == 2) {
                        d 
    = "";
                        cout 
    << "请输入卖出数量:  ";
                        cin 
    >> amount;

                        cout 
    << "请输入卖出单价:  ";
                        cin 
    >> price;

                        cout 
    << "请输入销售月:  ";
                        cin 
    >> month;

                        cout 
    << "请输入销售日:  ";
                        cin 
    >> day;
                    }
    else {
                        cout 
    << "输入有误!";
                        
    break;
                    }

                    cout 
    << "确定?(y. 确定 n.放弃)" << endl;
                    cin 
    >> confirm;
                    
    if (confirm == 'y') {
                        pm.newRecord(RecordRow(name, d, amount, price, month, day));
                    }
                    
    break;
                
    case 4:
                    pm.displayRecords();
                    
    break;
                
    case 5:
                    cout 
    << "开始月(111返回):  ";
                    cin 
    >> sm;
                    
    if (sm == 111) {
                        
    break;
                    }

                    cout 
    << "开始日:  ";
                    cin 
    >> sd;

                    cout 
    << "结束月:  ";
                    cin 
    >> em;

                    cout 
    << "结束日:  ";
                    cin 
    >> ed;

                    cout 
    << "请选择统计方式(1. 单项品种 2. 所有品种):  ";
                    cin 
    >> num;
                    
    if (num == 1) {
                        pm.displayName();
                        cout 
    << "请输入产品编号:  ";
                        cin 
    >> pn;
                        pm.displayStat(pn, sm, em, sd, ed);
                    } 
    else if (num == 2) {
                        pm.displayAllStat(sm, em, sd, ed);
                    } 
    else {
                        cout 
    << "选择有误,返回!" << endl;
                    }
                    
    break;
                
    default:
                    cout 
    << "选择有误!" << endl;
            }


        }

        
    return (EXIT_SUCCESS);
    }

  • 相关阅读:
    poj3468(A Simple Problem with Integers)线段树+树状数组
    关于JVM——JVM内存模型
    关于JVM——类加载机制
    关于JVM(二)
    关于JVM(一)
    关于LongAdder
    关于Future
    关于Fork/Join
    关于Atomic
    关于LockSupport
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470298.html
Copyright © 2020-2023  润新知