• 2023年全国大学生数学建模竞赛C题 蔬菜类商品的自动定价与补货决策


    本文仅含数据处理(编程位),且c++

    题目

    在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差,大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需求情况每天进行补货。
    由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易时间通常在凌晨 3:00-4:00,为此商家须在不确切知道具体单品和进货价格的情况下,做出当日各蔬菜品类的补货决策。蔬菜的定价一般采用“成本加成定价”方法,商超对运损和品相变差的商品通常进行打折销售。可靠的市场需求分析,对补货决策和定价决策尤为重要。从需求侧来看,蔬菜类商品的销售量与时间往往存在一定的关联关系;从供给侧来看,蔬菜的供应品种在 4 月至 10月较为丰富,商超销售空间的限制使得合理的销售组合变得极为重要。
    附件 1 给出了某商超经销的 6 个蔬菜品类的商品信息;附件 2 和附件 3 分别给出了该商超 2020 年 7 月 1 日至 2023 年 6 月 30 日各商品的销售流水明细与批发价格的相关数据;附件 4 给出了各商品近期的损耗率数据。请根据附件和实际情况建立数学模型解决以下问题:
    问题 1 蔬菜类商品不同品类或不同单品之间可能存在一定的关联关系,请分析蔬菜各品类及单品销售量的分布规律及相互关系。
    问题 2 考虑商超以品类为单位做补货计划,请分析各蔬菜品类的销售总量与成本加成定价的关系,并给出各蔬菜品类未来一周(2023 年 7 月 1-7 日)的日补货总量和定价策略,使得商超收益最大。
    问题 3 因蔬菜类商品的销售空间有限,商超希望进一步制定单品的补货计划,要求可售单品总数控制在 27-33 个,且各单品订购量满足最小陈列量 2.5 千克的要求。根据 2023年 6 月 24-30 日的可售品种,给出 7 月 1 日的单品补货量和定价策略,在尽量满足市场对各品类蔬菜商品需求的前提下,使得商超收益最大。
    问题 4 为了更好地制定蔬菜商品的补货和定价决策,商超还需要采集哪些相关数据,这些数据对解决上述问题有何帮助,请给出你们的意见和理由。
    附件 1 6 个蔬菜品类的商品信息
    附件 2 销售流水明细数据
    附件 3 蔬菜类商品的批发价格
    附件 4 蔬菜类商品的近期损耗率
    注 (1) 附件 1 中,部分单品名称包含的数字编号表示不同的供应来源。
    (2) 附件 4 中的损耗率反映了近期商品的损耗情况,通过近期盘点周期的数据计算得到。

    问题一

    计算单品的总销售额

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    //计算总销售额 
    struct goods{
    	string s[4];
    	double money[36];
    }g[N];
    signed main(){
    	IOS;
    	ifstream data1("annex1.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        getline(data1, line1);
        int k=0;
        map<string,double> mp;
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            int t=0;
            while (getline(sin1, word1, ','))
            {
                g[k].s[t++]=word1;
            }
            mp[g[k].s[0]]=0;
            k++;
        }
        data1.close();
    
    	cout<<k<<endl;
    //	fer(i,0,k)cout<
    
    	ifstream data2("annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            int i=0;
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            double res=stold(words2[3])*stold(words2[4]);
            mp[words2[2]]+=res;
        }
        data2.close();
    //    map< string,double>::iterator it;
    //    for(it=mp.begin();it!=mp.end();it++)cout<first<<" "<second<
    	map<string,double>::iterator it;
    		for(it=mp.begin();it!=mp.end();it++){
    			fer(i,0,k){
    				if(it->first==g[i].s[0]){
    					g[i].money=it->second;
    					break;
    				}
    			}
    		}
        ofstream outFile;
        outFile.open("salesVolume.csv",ios::out|ios::trunc);
        outFile<<"code,name,typeCode,typeName,money,typeMoney"<<endl;
    	fer(i,0,k){
    		outFile<<g[i].s[0]<<","<<g[i].s[1]<<","<<g[i].s[2]<<","<<g[i].s[3]<<",";
    		outFile<<g[i].money<<endl;
    	}
    	outFile.close();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    计算品类及单品的每月销售额

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    struct goods{
    	string s[4];
    	double money[36];
    }g[N];
    string type[6]={"花叶类","花菜类","水生根茎类","茄类","辣椒类","食用菌"};
    double money[6][36];
    //按月份计算销售额 
    signed main(){
    	IOS;
    	ifstream data1("annex1.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        getline(data1, line1);
        int k=0;
        map<string,double> mp;
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            int t=0;
            while (getline(sin1, word1, ','))
            {
                g[k].s[t++]=word1;
            }
            fer(i,0,36){
            	string tmp=g[k].s[0];
    			if(i<10)tmp+="0";
    			tmp+=to_string(i);
            	mp[tmp]=0;
    		}
            k++;
        }
        data1.close();
    
    //	cout<
    //	fer(i,0,k)cout<
    
    	ifstream data2("annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; //分别是日期,编码,销量,单价的字符串 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            int i=0;
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            double res=stold(words2[3])*stold(words2[4]);
            int time=0;
            int year=words2[0][3]-'0';
    		int month=(words2[0][5]-'0')*10+words2[0][6]-'0';
    		int day=(words2[0][8]-'0')*10+words2[0][9]-'0';
    		//cout<
    		if(year==0)time=month-7;
    		else if(year==1){
    			time=month+5;
    		}else if(year==2)time=month+17;
    		else time=month+29;
    		string tmp=words2[2];
    		if(time<10)tmp+="0";
    		tmp+=to_string(time);
            mp[tmp]+=res;
        }
        data2.close();
        //map< string,double>::iterator it;
        //for(it=mp.begin();it!=mp.end();it++)cout<first<<" "<second<
    	map<string,double>::iterator it;
    	for(it=mp.begin();it!=mp.end();it++){
    		string tmp=it->first;
    		string code=tmp.substr(0,15);
    		string strtime=tmp.substr(15);
    		int time=atoi(strtime.c_str());
    		//cout<second<
    		fer(i,0,k){
    			if(code==g[i].s[0]){
    				//cout<<"success"<
    				g[i].money[time]=it->second;
    				break;
    			}
    		}
    	}
    //	fer(i,0,k){
    //		cout<
    //		fer(j,0,36)cout<
    //		cout<
    //	}
        ofstream outFile;
        outFile.open("salesTypeMonthly.csv",ios::out|ios::trunc);
        outFile<<"type"<<",";
        fer(i,0,36){
        	if(i<=5)outFile<<"2020 -"<<i+7<<",";
    		else if(i<=17)outFile<<"2021 -"<<i-5<<",";
    		else if(i<=29)outFile<<"2022 -"<<i-17 <<",";
    		else if(i<35)outFile<<"2023 -"<<i-29<<",";
    		else outFile<<"2023 -"<<i-29<<endl;
    	}
    	//输出品类按月的销售额 
    	fer(i,0,k){
    		fer(j,0,6){
    			if(g[i].s[3]==type[j]){
    				fer(t,0,36)money[j][t]+=g[i].money[t];
    			}
    		}
    	}
    	fer(i,0,6){
    		outFile<<type[i]<<",";
    		fer(j,0,36){
    			outFile<<money[i][j];
    			if(j!=35)outFile<<",";
    			else outFile<<endl;
    		}
    	}
    	//输出单品按月的销售额 
    //	fer(i,0,k){
    //		outFile<
    //		fer(j,0,36){
    //			outFile<
    //			if(j!=35)outFile<<",";
    //			else outFile<
    //		}
    //	}
    	outFile.close();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139

    问题二

    打折商品的售价和销量

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    //目标:六品类的打折商品 每日  售价(卖货量*售价)  销售重量(总和)
    //日期+单品编号 映射 售价 销量 是否打折 
    //单品 映射 品类
    //综合以上两个映射 算出 日期+品类 映射 售价 销量
    struct node{
    	double price,salesV;
    	//bool discount;
    };
    signed main(){
    	IOS;
    
        map<string,node> mp;//记录日期+编码字符串单品映射的
        map<string,string> type;//code映射type 
        map<string,node> pinlei;
        
    	ifstream data2("annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            if(words2[6]=="是"){
            	string tmp=words2[0]+words2[2];
    	        struct node single=mp[tmp]; 
    	        single.price=stod(words2[4]);single.salesV+=stod(words2[3]);
    	        //single.discount=1;
    	        mp[tmp]=single;
    	        //cout<
    		}
            
        }
        data2.close();
        cout<<"success2"<<endl;
     
        ifstream data3("annex1.csv",ios::in);
    	string line3;
    	istringstream sin3;
    	vector<string> words3; 
        string word3;
        getline(data3, line3);
        while (getline(data3, line3))
        {
            sin3.clear();
            sin3.str(line3);
            words3.clear();
            while (getline(sin3, word3, ',')) 
            {
            	words3.push_back(word3); 
            }
            type[words3[0]]=words3[3];
    //        cout<
        }
        data3.close();
        cout<<"success3"<<endl;
        
        
        map<string,node>::iterator it;
        for(it=mp.begin();it!=mp.end();it++){
        	string key=it->first;
        	string date=key.substr(0,10);
        	string code=key.substr(10);
        	string tp=type[code];
        	string pinleiKey=date+tp;
        	if(pinlei.find(pinleiKey)==pinlei.end()){//没找见 
        		node solve;
        		solve.price=it->second.price*it->second.salesV;
        		solve.salesV=it->second.salesV;
        		pinlei[pinleiKey]=solve;
    		}else{//找见了 
    			node solve=pinlei[pinleiKey];
        		solve.price+=it->second.price*it->second.salesV;
        		solve.salesV+=it->second.salesV;
        		pinlei[pinleiKey]=solve;
    		}
    	}
    	for(it=pinlei.begin();it!=pinlei.end();it++){
    		node solve=it->second;
    		solve.price/=solve.salesV;
    		it->second=solve;
    	}
        ofstream outFile;
        outFile.open("discountSS.csv",ios::out|ios::trunc);
        string typeName="水生根茎类";
        outFile<<typeName<<endl;
        outFile<<"日期,平均销售价格,销量(kg)"<<endl;
    	int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	int year=0,month=7,day=1;
    	for(it=pinlei.begin();it!=pinlei.end();it++){
    		string tmp=it->first;
    		string date=tmp.substr(0,10);
    		string typ=tmp.substr(10);
    		//cout<
    		int nowyear=(tmp[3]-'0');
    		int nowmonth=(tmp[5]-'0')*10+tmp[6]-'0';
    		int nowday=(tmp[8]-'0')*10+tmp[9]-'0';
    		//cout<
    		while(year<nowyear||(nowyear==year&&month<nowmonth)||(year==nowyear&&nowmonth==month&&day<nowday)){
    			if(year>=3&&month>=7)break;
    			outFile<<"202"<<year<<"-";
    			if(month<10)outFile<<"0";
    			outFile<<month<<"-";
    			if(day<10)outFile<<"0";
    			outFile<<day<<",";
    			outFile<<"0,0"<<endl;
    			day++;
    			if(day>monthday[month-1]){
    				month++;day=1;
    			}
    			if(month>12){
    				year++;month=1;
    			}
    		}
    		if(typ==typeName){
    			node solve=it->second;
    			outFile<<date<<","<<solve.price<<","<<solve.salesV<<endl;
    			day++;
    			if(day>monthday[month-1]){
    				month++;day=1;
    			}
    			if(month>12){
    				year++;month=1;
    			}
    		}
    	}
    	outFile.close();
    	cout<<"success4";
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145

    各品类平均损耗率
    这个处理得比较粗糙,直接对损耗率求平均,没有加权重

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=1e6+1,mod=1e9+7;
    
    string typeName[6]={"花叶类","花菜类","水生根茎类","茄类","辣椒类","食用菌"};
    struct node{
    	double loss;
    	int n;
    	//bool discount;
    }tp[6];
    signed main(){
    	IOS;
    	//计算各品类的平均损耗率
    	map<string,string> type;//code映射type 
    	ifstream data1("annex1.csv",ios::in);
    	string line1;
    	istringstream sin1;
    	vector<string> words1; 
        string word1;
        getline(data1, line1);
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            words1.clear();
            while (getline(sin1, word1, ',')) 
            {
            	words1.push_back(word1); 
            }
            type[words1[0]]=words1[3];
            //cout<
        }
        data1.close();
        cout<<"success1"<<endl; 
        
        ifstream data2("annex4.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            string tmp=words2[0]+" ";
            //cout<
    		fer(i,0,6){
    			if(type[tmp]==typeName[i]){
    				tp[i].loss+=stod(words2[2]);
    				tp[i].n++;
    				//cout<
    				break;
    			} 
    		}
            
        }
        data2.close();
        cout<<"success2"<<endl;
        
        ofstream outFile;
        outFile.open("typeLoss.csv",ios::out|ios::trunc);
        outFile<<"损耗率(%)与1-损耗率"<<endl;
        fer(i,0,6){
        	tp[i].loss/=tp[i].n;
        	outFile<<typeName[i]<<","<<tp[i].loss<<","<<1-tp[i].loss<<endl;
    	}
    	outFile.close();
    	cout<<"success3"<<endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    计算各品类的利润

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    //目标:六品类 每日 批发价格(卖货量*成本) 售价(卖货量*售价) 利润率 销售重量(总和)  最后再平均 
    //日期+单品编号 映射 批发价格 售价 销量
    //单品 映射 品类
    //综合以上两个映射 算出 品类+日期 映射 批发价格 售价 销量
    
    struct node{
    	double cost,price,salesV,profitM;
    };
    signed main(){
    	IOS;
    	ifstream data1("annex3.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        vector<string> words1; 
        getline(data1, line1);
    
        map<string,node> mp;//记录日期+编码字符串单品映射的
        map<string,string> type;//code映射type 
        map<string,node> pinlei;
        
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            words1.clear();
            while (getline(sin1, word1, ','))
            {	
                words1.push_back(word1); 
            }
            string tmp=words1[0]+words1[1];
            struct node single;
            single.cost=stod(words1[2]);single.price=0;single.salesV=0;
            mp[tmp]=single;
        }
        data1.close();
    	cout<<"success1"<<endl;
    	
    	ifstream data2("annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            string tmp=words2[0]+words2[2];
            struct node single=mp[tmp]; 
            single.price=stod(words2[4]);single.salesV+=stod(words2[3]);
            mp[tmp]=single;
        }
        data2.close();
        cout<<"success2"<<endl;
     
        ifstream data3("annex1.csv",ios::in);
    	string line3;
    	istringstream sin3;
    	vector<string> words3; 
        string word3;
        getline(data3, line3);
        while (getline(data3, line3))
        {
            sin3.clear();
            sin3.str(line3);
            words3.clear();
            while (getline(sin3, word3, ',')) 
            {
            	words3.push_back(word3); 
            }
            type[words3[0]]=words3[3];
    //        cout<
        }
        data3.close();
        cout<<"success3"<<endl;
        
        
        map<string,node>::iterator it;
        for(it=mp.begin();it!=mp.end();it++){
        	string key=it->first;
        	string date=key.substr(0,10);
        	string code=key.substr(10);
        	string tp=type[code];
        	string pinleiKey=date+tp;
        	if(pinlei.find(pinleiKey)==pinlei.end()){//没找见 
        		node solve;
        		solve.cost=it->second.cost * it->second.salesV;
        		solve.price=it->second.price*it->second.salesV;
        		solve.salesV=it->second.salesV;
        		pinlei[pinleiKey]=solve;
    		}else{//找见了 
    			node solve=pinlei[pinleiKey];
    			solve.cost+=it->second.cost*it->second.salesV;
        		solve.price+=it->second.price*it->second.salesV;
        		solve.salesV+=it->second.salesV;
        		pinlei[pinleiKey]=solve;
    		}
    	}
    	for(it=pinlei.begin();it!=pinlei.end();it++){
    		node solve=it->second;
    		solve.cost/=solve.salesV;solve.price/=solve.salesV;
    		solve.profitM=(solve.price-solve.cost)/solve.cost;
    		it->second=solve;
    	}
        ofstream outFile;
        outFile.open("averageLaJiao.csv",ios::out|ios::trunc);
        string typeName="辣椒类";
        outFile<<typeName<<endl;
        outFile<<"日期,平均批发价格,平均销售价格,总销量(kg),利润率"<<endl;
    
    	for(it=pinlei.begin();it!=pinlei.end();it++){
    		string tmp=it->first;
    		string date=tmp.substr(0,10);
    		string typ=tmp.substr(10);
    		if(typ==typeName){
    			node solve=it->second;
    			outFile<<date<<","<<solve.cost<<","<<solve.price<<","<<solve.salesV<<","<<solve.profitM<<endl;
    		}
    	}
    	outFile.close();
    	cout<<"success4";
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137

    问题三

    问题三成本与售价

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    //计算售价与对应单价 
    //struct goods{
    //	string s[4];
    //	int year,month,day;
    //	int time; 
    //	double price[36];
    //}g[N];
    signed main(){
    	IOS;
    	ifstream data1("annex3.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        vector<string> words1; 
        getline(data1, line1);
    
        map<string,string> mp;//记录日期+编码字符串映射的成本价
    	map<string,string> mp2;//记录日期+编码字符串映射的售价 
        map<string,string> cdnm;//code映射name
        map<string,string> type;//code映射type 
        //int i=0;
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            words1.clear();
            while (getline(sin1, word1, ','))
            {	
                words1.push_back(word1); 
            }
            string tmp=words1[0]+words1[1];
            mp[tmp]=words1[2];
            //cout<
            //i++;
        }
        //cout<
        data1.close();
    	cout<<"success1";
    	
    	ifstream data2("annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            string tmp=words2[0]+words2[2];
            mp2[tmp]=words2[4];
            //cout<
        }
        data2.close();
        cout<<"success2";
     
        ifstream data3("annex1.csv",ios::in);
    	string line3;
    	istringstream sin3;
    	vector<string> words3; 
        string word3;
        getline(data3, line3);
        while (getline(data3, line3))
        {
            sin3.clear();
            sin3.str(line3);
            words3.clear();
            while (getline(sin3, word3, ',')) 
            {
            	words3.push_back(word3); 
            }
            cdnm[words3[0]]=words3[1];
            
            type[words3[0]]=words3[3];
    //        cout<
        }
        data3.close();
        cout<<"success3";
    //    map< string,double>::iterator it;
    //    for(it=mp.begin();it!=mp.end();it++)cout<first<<" "<second<
    	
    //    ofstream outFile;
    //    outFile.open("salesPrice2.csv",ios::out|ios::trunc);
    //    outFile<<"日期,单品编码,单品名称,类别,批发价格,售价"<
        map<string,string>::iterator it;
    	for(it=mp.begin();it!=mp.end();it++){
    		string tmp=it->first;
    		string date=tmp.substr(0,10);
    		string code=tmp.substr(10);
    //		outFile<
    //		//outFile<
    //		outFile<
    		cout<<date<<","<<code<<","<<cdnm[code]<<","<<type[code]<<","<<mp[tmp]<<","<<mp2[tmp]<<endl;
    //		cout<first<<" "<second<
    		break;
    	}
    	//outFile.close();
    	cout<<"success4";
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113

    问题三单品销量

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    const int N=300,mod=1e9+7;
    //目标:每个单品编号 名字(7天总和)品类 批发价格(卖货量*成本) 售价(卖货量*售价) 利润率 销售重量
    //日期+单品编号 映射 批发价格 售价 销量 
    //最后再处理平均和7天 
    //单品 映射 品类
    map<string,double> loss;
    struct node{
    	double cost,price,salesV,profitM;
    };
    signed main(){
    	IOS;
    	loss["花叶类"]=89.7197;
    	loss["花菜类"]=85.858;
    	loss["水生根茎类"]=88.0253;
    	loss["茄类"]=92.878;
    	loss["辣椒类"]=91.48467;
    	loss["食用菌"]=91.86903;
    	
    	ifstream data1("624-630annex3.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        vector<string> words1; 
    
        map<string,node> mp;//记录日期+编码字符串单品映射的
        map<string,string> type;//code映射type 
        map<string,string> name;//code 映射name 
        map<string,node> mp2;//记录单品编码映射的node 
        
        //获取当日单品成本价 
        while (getline(data1, line1))
        {
            sin1.clear();
            sin1.str(line1);
            words1.clear();
            while (getline(sin1, word1, ','))
            {	
                words1.push_back(word1); 
            }
            string tmp=words1[0]+words1[1];
            //tmp.pop_back();
            //cout<
            node single;
            single.cost=stold(words1[2]);
    		single.price=0;single.salesV=0;
            mp[tmp]=single;
            cout<<tmp<<","<<mp[tmp].cost<<endl;
        }
        data1.close();
    	cout<<"success1"<<endl;
    	
    	ifstream data2("624-630annex2.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        while (getline(data2, line2))//获取当日单品销售额及销量 
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            string tmp=words2[0]+words2[2];
           // tmp.pop_back();
            struct node single=mp[tmp]; 
            single.price+=stod(words2[4])*stod(words2[3]);
    		single.salesV+=stod(words2[3]);
            mp[tmp]=single;
            //cout<
        }
        data2.close();
        cout<<"success2"<<endl;
     
        ifstream data3("annex1.csv",ios::in);
    	string line3;
    	istringstream sin3;
    	vector<string> words3; 
        string word3;
        getline(data3, line3);
        while (getline(data3, line3))//编号映射单品名和种类名 
        {
            sin3.clear();
            sin3.str(line3);
            words3.clear();
            while (getline(sin3, word3, ',')) 
            {
            	words3.push_back(word3); 
            }
            //words3[0].pop_back();
            type[words3[0]]=words3[3];
            name[words3[0]]=words3[1];
        }
        data3.close();
        cout<<"success3"<<endl;
        
        map<string,node>::iterator it;
        for(it=mp.begin();it!=mp.end();it++){
        	string key=it->first;
        	string date=key.substr(0,10);
        	string code=key.substr(10);
    		//cout<
        	if(mp2.find(code)==mp2.end()){//没找见 
        		node solve;
        		solve.cost=it->second.cost * it->second.salesV;
        		solve.price=it->second.price;
        		solve.salesV=it->second.salesV;
        		mp2[code]=solve;
    		}else{//找见了 
    			node solve=mp2[code];
    			solve.cost+=it->second.cost*it->second.salesV;
        		solve.price+=it->second.price;
        		solve.salesV+=it->second.salesV;
        		mp2[code]=solve;
    		}
    	}
    	
    	for(it=mp2.begin();it!=mp2.end();it++){
    		node solve=it->second;
    		if(solve.salesV!=0){
    			solve.cost/=solve.salesV;solve.price/=solve.salesV;
    			solve.profitM=(solve.price-solve.cost)/solve.cost;
    			solve.salesV/=7;
    			it->second=solve;
    		}
    		
    	}
    	
        ofstream outFile;
        outFile.open("Q3.csv",ios::out|ios::trunc);
        outFile<<"单品编号,单品名称,单品种类,平均批发价格,平均销售价格,总销量(kg),利润率,真实成本,每日总利润"<<endl;
    	for(it=mp2.begin();it!=mp2.end();it++){
    		node solve=it->second;
    		if(solve.salesV!=0){
    			string code=it->first;
    			outFile<<code<<","<<name[code]<<","<<type[code]<<",";
    			outFile<<solve.cost<<","<<solve.price<<","<<solve.salesV<<","<<solve.profitM<<",";
    			outFile<<solve.cost/loss[type[code]]*100<<endl;
    		}
    	}
    	outFile.close();
    	cout<<"success4";
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153

    问题三品类对应

    #include
    using namespace std;
    #define int long long
    #define fer(i,a,b) for(int i=a;i<b;i++)
    #define cf int T;cin>>T;while(T--)
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    struct node{
    	double a[7];
    }nd[28];
    const int N=1e6+1,mod=1e9+7;
    signed main(){
    	IOS;
    	map<string,string> type;//code映射type 
    	
    	ifstream data2("annex1.csv",ios::in);
    	string line2;
    	istringstream sin2;
    	vector<string> words2; 
        string word2;
        getline(data2, line2);
        while (getline(data2, line2))
        {
            sin2.clear();
            sin2.str(line2);
            words2.clear();
            while (getline(sin2, word2, ',')) 
            {
            	words2.push_back(word2); 
            }
            type[words2[1]]=words2[3];
            //cout<
        }
        data2.close();
        cout<<"success2"<<endl;
        
    	ifstream data1("type.csv",ios::in);
    	string line1;
        istringstream sin1;    
        string word1;
        vector<string> words1; 
        getline(data1, line1);
        ofstream outFile;
        outFile.open("typeMatch.csv",ios::out|ios::trunc);
        outFile<<"单品名称,单品类型,总销量(kg),真实成本,实际利润率,平均销售价格,成本,销售额,利润"<<endl;
        while (getline(data1, line1))
        {
        	//cout<<1;
            sin1.clear();
            sin1.str(line1);
            words1.clear();
            while (getline(sin1, word1, ','))
            {	
                words1.push_back(word1); 
            }
            //cout<
            outFile<<words1[0]<<","<<type[words1[0]]<<",";
    		fer(i,1,7)outFile<<words1[i]<<",";
    		outFile<<words1[7]<<endl;
        }
        data1.close();
    	cout<<"success1"<<endl;
    	
        outFile.close();
        cout<<"success3"<<endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
  • 相关阅读:
    Java集合List去重的几种方式
    C++11 新特性
    【项目】云备份系统基础功能实现
    云渲染的“公”“私”技术!
    spring注解开发
    NOIP2023模拟2联测23 负责
    YII 优雅的实现软删
    Effective Modern C++[实践]->理解auto类别推导
    关于java8新特性 Stream流的常规用法总结
    精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来
  • 原文地址:https://blog.csdn.net/sylviiiiiia/article/details/134492737