#include "recommend.h" #include "ui_recommend.h" #include "home.h" #include"time.h" #include #include #include #include #include #include #include #include #include using namespace std; #define N 99 QString addapt_pet = ""; int num[6] = {1,1,1,1,1,1}; int dog_num[11] = {1,1,1,1,1,1,1,1,1,1,1}; int back_index; //A:1,B:2,C:3 int the_type; int *next_test; QString the_result(int type,int type2) { QString result; if(type==1) { if(type2==1) result = "阿拉斯加"; if(type2==2) result = "哈士奇"; if(type2==3) result = "金毛"; if(type2==4) result = "柯基"; if(type2==5) result = "拉布拉多"; if(type2==6) result = "雪纳瑞"; if(type2==7) result = "斗牛犬"; if(type2==8) result = "比熊犬"; if(type2==9) result = "松狮"; if(type2==10) result = "吉娃娃"; if(type2==11) result = "柴犬(中华田园犬)"; if(type2==12) result = "秋田犬"; if(type2==13) result = "萨摩耶"; if(type2==14) result = "巴哥"; if(type2==15) result = "贵宾犬"; if(type2==16) result = "德牧"; } if(type==2) { if(type2==1) result = "美国短毛猫"; if(type2==2) result = "英国短毛猫"; if(type2==3) result = "加菲猫"; if(type2==4) result = "波斯猫"; if(type2==5) result = "布偶猫"; if(type2==6) result = "暹罗猫"; if(type2==7) result = "狸花猫"; if(type2==8) result = "缅因猫"; if(type2==9) result = "孟加拉豹猫"; } return result; } int Question_1(int value[])//第一部分问题 { int result = 0; for (int i = 0; i < 5; i++) { if (value[i] == 1)//'A' result++; else//'B' result--; } if (value[5] == 1)//'A' { if (result > 0) return 1;//dog else return 2;//cat } else if (value[5] == 2)//'B' return 3;//rabbit else return 4;//tortoise } int* Question_2(int type, int value[])//第二部分问题,靠type区分1:dog还是2:cat,返回在txt表中的宠物的序号 { int total_num; string cat[9]; cat[0] = "美国短毛猫 3 1 2 2 2 1 1 1 1 1"; cat[1] = "英国短毛猫 2 1 2 1 1 1 1 1 1 1"; cat[2] = "加菲猫 2 2 1 1 1 1 1 2 1 2"; cat[3] = "波斯猫 2 1 1 1 2 1 1 2 1 2"; cat[4] = "布偶猫 2 2 1 1 2 2 1 1 1 1"; cat[5] = "暹罗猫 1 1 2 1 2 1 1 2 1 1"; cat[6] = "狸花猫 3 1 2 2 2 2 2 2 2 2"; cat[7] = "缅因猫 2 1 1 2 2 1 2 2 2 2"; cat[8] = "孟加拉豹猫 1 1 1 1 1 2 1 2 2 1"; string dog[17]; dog[0] = "阿拉斯加 3 2 2 1 1 1 2 2 1 1"; dog[1] = "哈士奇 2 2 2 1 2 2 2 2 2 1"; dog[2] = "金毛 3 2 2 2 2 2 1 1 1 2"; dog[3] = "柯基 1 1 2 1 1 1 1 1 1 1"; dog[4] = "拉布拉多 3 2 2 1 2 2 1 1 1 2"; dog[5] = "雪纳瑞 2 1 2 2 1 2 1 1 1 2"; dog[6] = "斗牛犬 2 1 1 1 2 1 2 2 1 1"; dog[7] = "比熊犬 1 1 1 2 1 2 2 1 1 2"; dog[8] = "松狮 3 2 2 2 2 1 2 2 2 2"; dog[9] = "吉娃娃 1 1 1 1 2 1 2 1 1 2"; dog[10] = "博美犬 1 1 1 2 1 2 2 1 1 1"; /* dog[11] = "2 2 2 2 2 2 1 2 1 2"; dog[12] = "3 2 2 2 2 1 2 1 1 2"; dog[13] = "2 1 2 2 2 2 1 1 1 2"; dog[14] = "1 1 1 1 2 2 2 1 2 1"; dog[15] = "1 1 2 1 2 2 1 1 1 2"; dog[16] = "3 2 2 2 2 2 1 1 2 2"; */ //抛弃dog第8题,但用户仍需要回答 if (type == 1) { for (int i = 7; i < 11; i++) value[i] = value[i + 1]; } static int recommend_index[3] = { 0,0,0 }; int recommend_value[3] = { 100,100,100 }; if (type == 1) { total_num = 11; } else { total_num = 9; } string temp; int k = 0; for (int j2 = 0; j2 < total_num; j2++) { srand(time(NULL)); if (type == 2) temp = cat[j2]; if (type == 1) temp = dog[j2]; int out_value = 0; int j = 0; for (int i = 0; i <= (int)(temp.size() - 1); i++) { if (temp[i] >= '0' && temp[i] <= '9') { out_value += pow(abs(temp[i] - '0' - value[j]),2); j++; } } if (out_value <= recommend_value[2]) { if (out_value == recommend_value[2]) { if ((rand()%(N+1))/(float)(N+1) > 0.5) { recommend_index[2] = k; recommend_value[2] = out_value; } } else { recommend_index[2] = k; recommend_value[2] = out_value; } } if (out_value <= recommend_value[1]) { if (out_value == recommend_value[1]) { if ((rand() % (N + 1)) / (float)(N + 1) > 0.5) { recommend_index[2] = recommend_index[1]; recommend_value[2] = recommend_value[1]; recommend_index[1] = k; recommend_value[1] = out_value; } } else { recommend_index[2] = recommend_index[1]; recommend_value[2] = recommend_value[1]; recommend_index[1] = k; recommend_value[1] = out_value; } } if (out_value <= recommend_value[0]) { if (out_value == recommend_value[0]) { if (((rand() % (N + 1)) / (float)(N + 1)) > 0.5) { recommend_index[1] = recommend_index[0]; recommend_value[1] = recommend_value[0]; recommend_index[0] = k; recommend_value[0] = out_value; } } else { recommend_index[1] = recommend_index[0]; recommend_value[1] = recommend_value[0]; recommend_index[0] = k; recommend_value[0] = out_value; } } k++; } for (int i = 0; i < 3; i++) recommend_index[i] += 1; return recommend_index; } recommend::recommend(QWidget *parent) : QWidget(parent), ui(new Ui::recommend) { ui->setupUi(this); ui->change_page->setStyleSheet("QPushButton{border-radius:5px;background:rgb(255,43,89);color:black;}"); ui->last_page->setStyleSheet("QPushButton{border-radius:5px;background:rgb(255,43,89);color:black;}"); ui->stackWidget->setCurrentIndex(0); QFont ft; ft.setPointSize(16); ui->test_result->setFont(ft); QPalette pa; pa.setColor(QPalette::WindowText,Qt::red); ui->test_result->setPalette(pa); ui->test_result->setWordWrap(true); connect(ui->page1_A,SIGNAL(clicked(bool)),this,SLOT(q1_A())); connect(ui->page1_B,SIGNAL(clicked(bool)),this,SLOT(q1_B())); connect(ui->page2_A,SIGNAL(clicked(bool)),this,SLOT(q2_A())); connect(ui->page2_B,SIGNAL(clicked(bool)),this,SLOT(q2_B())); connect(ui->page3_A,SIGNAL(clicked(bool)),this,SLOT(q3_A())); connect(ui->page3_B,SIGNAL(clicked(bool)),this,SLOT(q3_B())); connect(ui->page4_A,SIGNAL(clicked(bool)),this,SLOT(q4_A())); connect(ui->page4_B,SIGNAL(clicked(bool)),this,SLOT(q4_B())); connect(ui->page5_A,SIGNAL(clicked(bool)),this,SLOT(q5_A())); connect(ui->page5_B,SIGNAL(clicked(bool)),this,SLOT(q5_B())); connect(ui->page6_A,SIGNAL(clicked(bool)),this,SLOT(q6_A())); connect(ui->page6_B,SIGNAL(clicked(bool)),this,SLOT(q6_B())); connect(ui->page6_C,SIGNAL(clicked(bool)),this,SLOT(q6_C())); connect(ui->dog1_A,SIGNAL(clicked(bool)),this,SLOT(dog1_A())); connect(ui->dog1_B,SIGNAL(clicked(bool)),this,SLOT(dog1_B())); connect(ui->dog1_C,SIGNAL(clicked(bool)),this,SLOT(dog1_C())); connect(ui->dog2_A,SIGNAL(clicked(bool)),this,SLOT(dog2_A())); connect(ui->dog2_B,SIGNAL(clicked(bool)),this,SLOT(dog2_B())); connect(ui->dog3_A,SIGNAL(clicked(bool)),this,SLOT(dog3_A())); connect(ui->dog3_B,SIGNAL(clicked(bool)),this,SLOT(dog3_B())); connect(ui->dog4_A,SIGNAL(clicked(bool)),this,SLOT(dog4_A())); connect(ui->dog4_B,SIGNAL(clicked(bool)),this,SLOT(dog4_B())); connect(ui->dog5_A,SIGNAL(clicked(bool)),this,SLOT(dog5_A())); connect(ui->dog6_A,SIGNAL(clicked(bool)),this,SLOT(dog6_A())); connect(ui->dog6_B,SIGNAL(clicked(bool)),this,SLOT(dog6_B())); connect(ui->dog7_A,SIGNAL(clicked(bool)),this,SLOT(dog7_A())); connect(ui->dog7_B,SIGNAL(clicked(bool)),this,SLOT(dog7_B())); connect(ui->dog8_A,SIGNAL(clicked(bool)),this,SLOT(dog8_A())); connect(ui->dog8_B,SIGNAL(clicked(bool)),this,SLOT(dog8_B())); connect(ui->dog9_A,SIGNAL(clicked(bool)),this,SLOT(dog9_A())); connect(ui->dog9_B,SIGNAL(clicked(bool)),this,SLOT(dog9_B())); connect(ui->dog10_A,SIGNAL(clicked(bool)),this,SLOT(dog10_A())); connect(ui->dog10_B,SIGNAL(clicked(bool)),this,SLOT(dog10_B())); connect(ui->dog11_A,SIGNAL(clicked(bool)),this,SLOT(dog11_A())); connect(ui->dog11_B,SIGNAL(clicked(bool)),this,SLOT(dog11_B())); connect(ui->cat1_A,SIGNAL(clicked(bool)),this,SLOT(dog1_A())); connect(ui->cat1_B,SIGNAL(clicked(bool)),this,SLOT(dog1_B())); connect(ui->cat1_C,SIGNAL(clicked(bool)),this,SLOT(dog1_C())); connect(ui->cat2_A,SIGNAL(clicked(bool)),this,SLOT(dog2_A())); connect(ui->cat2_B,SIGNAL(clicked(bool)),this,SLOT(dog2_B())); connect(ui->cat3_A,SIGNAL(clicked(bool)),this,SLOT(dog3_A())); connect(ui->cat3_B,SIGNAL(clicked(bool)),this,SLOT(dog3_B())); connect(ui->cat4_A,SIGNAL(clicked(bool)),this,SLOT(dog4_A())); connect(ui->cat4_B,SIGNAL(clicked(bool)),this,SLOT(dog4_B())); connect(ui->cat5_A,SIGNAL(clicked(bool)),this,SLOT(dog5_A())); connect(ui->cat6_A,SIGNAL(clicked(bool)),this,SLOT(dog6_A())); connect(ui->cat6_B,SIGNAL(clicked(bool)),this,SLOT(dog6_B())); connect(ui->cat7_A,SIGNAL(clicked(bool)),this,SLOT(dog7_A())); connect(ui->cat7_B,SIGNAL(clicked(bool)),this,SLOT(dog7_B())); connect(ui->cat8_A,SIGNAL(clicked(bool)),this,SLOT(dog8_A())); connect(ui->cat8_B,SIGNAL(clicked(bool)),this,SLOT(dog8_B())); connect(ui->cat9_A,SIGNAL(clicked(bool)),this,SLOT(dog9_A())); connect(ui->cat9_B,SIGNAL(clicked(bool)),this,SLOT(dog9_B())); connect(ui->cat10_A,SIGNAL(clicked(bool)),this,SLOT(dog10_A())); connect(ui->cat10_B,SIGNAL(clicked(bool)),this,SLOT(dog10_B())); } recommend::~recommend() { delete ui; } void recommend::on_commandLinkButton_clicked() { Home* recommend_to_home = new Home; recommend_to_home->set_background(); recommend_to_home->show(); delete this; } void recommend::on_RandomRecommend_clicked() { int type; int num=3; int total=6; int dog_list[11]={3,2,2,2,2,2,2,2,2,2,2}; int cat_list[10]={3,2,2,2,2,2,2,2,2,2}; int random_list[11]={1,1,1,1,1,1,1,1,1,1,1}; srand(time(NULL)); //dog { type=1; for (int i = 0; i < (int)(sizeof(dog_list) / sizeof(dog_list[0])); i++) { random_list[i] = rand() % dog_list[i]+1; } next_test = Question_2(type,random_list); for(int i=0;i<3;i++) { if(num!=0) { if(num==total) { addapt_pet += the_result(type,next_test[i]); addapt_pet += " "; num--; } else { if ((rand() % (N + 1) / (float)(N + 1) > 0.5)) { addapt_pet += the_result(type,next_test[i]); addapt_pet += " "; num--; } } } total--; } } //cat { type=2; for (int i = 0; i < (int)(sizeof(cat_list) / sizeof(cat_list[0])); i++) { random_list[i] = rand() % cat_list[i]+1; } next_test = Question_2(type,random_list); for(int i=0;i<3;i++) { if(num!=0) { if(num==total) { addapt_pet += the_result(type,next_test[i]); addapt_pet += " "; num--; } else { if ((rand() % (N + 1) / (float)(N + 1) > 0.5)) { addapt_pet += the_result(type,next_test[i]); addapt_pet += " "; num--; } } } total--; } } back_index=ui->stackWidget->currentIndex(); int next_index= 32; ui->test_result->setText(addapt_pet); addapt_pet.clear(); ui->stackWidget->setCurrentIndex(next_index); } void recommend::recommend_set_background() { this->setWindowTitle("智能推荐"); // ui->label->setStyleSheet("background-color:red");//背景色 this->setMinimumSize(1480,880); this->setMaximumSize(1480,880); this->setAutoFillBackground(true); QPalette palette; QPixmap pixmap = QPixmap(":/image/recommend_background.jpg").scaled(this->size()); palette.setBrush(QPalette::Window, QBrush(pixmap)); this->setPalette(palette); } void recommend::on_change_page_clicked() { //int nCount = ui->stackWidget->count();//总共的页数 int choose1 = Question_1(num); int current_index = ui->stackWidget->currentIndex(); //当前的页数 int next_index; if(current_index>=0&¤t_index<6) { back_index=current_index; next_index = current_index + 1; } if(current_index==6) { for(int i=0;i<6;i++) { qDebug("%d",num[i]); } choose1 = Question_1(num); if(choose1==1) { next_index = 7; the_type = 1; } else if(choose1==2) { the_type = 2; next_index=19; } else if(choose1==3) { back_index=current_index; next_index=30; } else if(choose1==4) { back_index=current_index; next_index=31; } } if(current_index>=7&¤t_index<18) { back_index=current_index; next_index = current_index + 1; } if(current_index==18) { back_index=current_index; next_index = 32; next_test = Question_2(the_type,dog_num); for(int i=0;i<3;i++) { qDebug("new:%d",next_test[i]); addapt_pet += the_result(1,next_test[i]); addapt_pet += " "; qDebug()<test_result->setText(addapt_pet); addapt_pet.clear(); } if(current_index>=19&¤t_index<=28) { back_index=current_index; next_index = current_index + 1; } if(current_index==29) { back_index=current_index; next_index = 32; next_test = Question_2(the_type,dog_num); for(int i=0;i<3;i++) { qDebug("new:%d",next_test[i]); addapt_pet += the_result(2,next_test[i]); addapt_pet += " "; qDebug()<test_result->setText(addapt_pet); addapt_pet.clear(); } if(current_index==30) { back_index=current_index; next_index = 33; } if(current_index==31) { back_index=current_index; next_index = 33; } ui->stackWidget->setCurrentIndex(next_index); // 当需要显示的页面索引大于等于总页面时,切换至首页,因为是从0开始计数的 if (current_index==32) { Home* to_home = new Home; to_home->set_background(); to_home->show(); delete this; } } void recommend::on_last_page_clicked() { int nIndex2 = ui->stackWidget->currentIndex(); //当前的页数 if(nIndex2==32 or nIndex2==33) ui->stackWidget->setCurrentIndex(back_index); else { if(nIndex2==7 or nIndex2==19 or nIndex2==30 or nIndex2==31) ui->stackWidget->setCurrentIndex(6); else { nIndex2--; if(nIndex2<0) nIndex2=0; ui->stackWidget->setCurrentIndex(nIndex2); } } } void recommend::q1_A() { num[0] = 1; } void recommend::q1_B() { num[0] = 2; } void recommend::q2_A() { num[1] = 1; } void recommend::q2_B() { num[1] = 2; } void recommend::q3_A() { num[2] = 1; } void recommend::q3_B() { num[2] = 2; } void recommend::q4_A() { num[3] = 1; } void recommend::q4_B() { num[3] = 2; } void recommend::q5_A() { num[4] = 1; } void recommend::q5_B() { num[4] = 2; } void recommend::q6_A() { num[5] = 1; } void recommend::q6_B() { num[5] = 2; } void recommend::q6_C() { num[5] = 3; } void recommend::dog1_A() { dog_num[0] = 1; } void recommend::dog1_B() { dog_num[0] = 2; } void recommend::dog1_C() { dog_num[0] = 3; } void recommend::dog2_A() { dog_num[1] = 1; } void recommend::dog2_B() { dog_num[1] = 2; } void recommend::dog3_A() { dog_num[2] = 1; } void recommend::dog3_B() { dog_num[2] = 2; } void recommend::dog4_A() { dog_num[3] = 1; } void recommend::dog4_B() { dog_num[3] = 2; } void recommend::dog5_A() { dog_num[4] = 1; } void recommend::dog5_B() { dog_num[4] = 2; } void recommend::dog6_A() { dog_num[5] = 1; } void recommend::dog6_B() { dog_num[5] = 2; } void recommend::dog7_A() { dog_num[6] = 1; } void recommend::dog7_B() { dog_num[6] = 2; } void recommend::dog8_A() { dog_num[7] = 1; } void recommend::dog8_B() { dog_num[7] = 2; } void recommend::dog9_A() { dog_num[8] = 1; } void recommend::dog9_B() { dog_num[8] = 2; } void recommend::dog10_A() { dog_num[9] = 1; } void recommend::dog10_B() { dog_num[9] = 2; } void recommend::dog11_A() { dog_num[10] = 1; } void recommend::dog11_B() { dog_num[10] = 2; } void recommend::cat1_A() { dog_num[0] = 1; } void recommend::cat1_B() { dog_num[0] = 2; } void recommend::cat1_C() { dog_num[0] = 3; } void recommend::cat2_A() { dog_num[1] = 1; } void recommend::cat2_B() { dog_num[1] = 2; } void recommend::cat3_A() { dog_num[2] = 1; } void recommend::cat3_B() { dog_num[2] = 2; } void recommend::cat4_A() { dog_num[3] = 1; } void recommend::cat4_B() { dog_num[3] = 2; } void recommend::cat5_A() { dog_num[4] = 1; } void recommend::cat5_B() { dog_num[4] = 2; } void recommend::cat6_A() { dog_num[5] = 1; } void recommend::cat6_B() { dog_num[5] = 2; } void recommend::cat7_A() { dog_num[6] = 1; } void recommend::cat7_B() { dog_num[6] = 2; } void recommend::cat8_A() { dog_num[7] = 1; } void recommend::cat8_B() { dog_num[7] = 2; } void recommend::cat9_A() { dog_num[8] = 1; } void recommend::cat9_B() { dog_num[8] = 2; } void recommend::cat10_A() { dog_num[9] = 1; } void recommend::cat10_B() { dog_num[9] = 2; }