Files
chouka/lesson_gui_3.cpp
2026-07-30 21:32:58 +08:00

357 lines
10 KiB
C++

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Button.H>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <FL/Fl_Input.H>
Fl_Input* input_name;
Fl_Input* input_phone;
Fl_Input* input_accountpassword;
Fl_Input* input_cin_accountpassword;
Fl_Box *result_box;
Fl_Button *a;
Fl_Button *b;
Fl_Button *c;
Fl_Button *d;
Fl_Button *e;
Fl_Button *f;
Fl_Button *g;
Fl_Button *h;
Fl_Button *i;
Fl_Button *j;
Fl_Button *k;
Fl_Button *l;
Fl_Button *m;
Fl_Button *n;
Fl_Button *o;
Fl_Button *p;
Fl_Button *q;
Fl_Button *r;
std::string prize ;
std::string name;
std::string phone;
Fl_Button *back_menu;
Fl_Button *show_prize;
Fl_Button *repeat_cin_password;
std::string accountpassword;
std::string cin_password;
void show_all_buttons();
void hide_all_buttons();
void repeat_cin_password_callback(Fl_Widget *widget, void *data);
void show_prize_callback(Fl_Widget *widget, void *data);
int state;
int chance;
int aa;
int AA;
void back_menu_callback(Fl_Widget *widget, void *data) {
result_box->label("");
back_menu->hide();
input_name->hide();
input_phone->hide();
input_accountpassword->hide();
show_prize->show();
show_all_buttons();
}
void hide_all_buttons() {
a->hide();
b->hide();
c->hide();
d->hide();
e->hide();
f->hide();
g->hide();
h->hide();
i->hide();
j->hide();
k->hide();
l->hide();
m->hide();
n->hide();
o->hide();
p->hide();
q->hide();
r->hide();
}
void show_all_buttons() {
a->show();
b->show();
c->show();
d->show();
e->show();
f->show();
g->show();
h->show();
i->show();
j->show();
k->show();
l->show();
m->show();
n->show();
o->show();
p->show();
q->show();
r->show();
}
void repeat_cin_password_callback(Fl_Widget *widget, void *data) {
show_prize_callback(widget, data);
}
const char* no_prize_click_back_menu = "您还没有中奖,请先抽奖。请点击回菜单。";
const char* correct_password_click_back_menu = "密码正确,请点击返回菜单领取奖品";
std::string prize_string;
std::string prize_wrong_password_string;
void show_prize_callback(Fl_Widget *widget, void *data) {
hide_all_buttons();
if(state == 0){
result_box->label(no_prize_click_back_menu);
back_menu->show();
}
else
{
prize_string = "您中的奖有:" + prize + "\n输入密码后可领取奖品";
result_box->label(prize_string.c_str());
input_cin_accountpassword->show();
if(cin_password == accountpassword)
{
result_box->label("密码正确,请点击回菜单领取奖品");
back_menu->show();
state = 0;
prize = "";
back_menu->show();
}
else
{
chance-=1;
prize_wrong_password_string = "密码错误,请重新输入, 或者返回菜单,您还有" + std::to_string(chance) +"次机会";
back_menu->show();
repeat_cin_password->show();
}
}
}
void a_callback(Fl_Widget *widget, void *data) {
AA = rand() % 20;
aa = rand() % 18;
hide_all_buttons();
show_prize->hide();
if(aa == 1) {
if(AA < 10) {
prize = "五等奖, VIP一天体验卡。为了让您更方便的领奖,请填写您的个人信息。\n填写完信息后请点击回菜单";
result_box->label(prize.c_str());
input_name->show();
input_phone->show();
input_accountpassword->show();
input_name->value(name.c_str());
input_phone->value(phone.c_str());
input_accountpassword->value(accountpassword.c_str());
back_menu->show();
state = 5;
}
else if(AA < 15) {
prize = "四等奖, VIP一周体验卡。为了让您更方便的领奖,请填写您的个人信息。\n填写完信息后请点击回菜单";
result_box->label(prize.c_str());
input_name->show();
input_phone->show();
input_accountpassword->show();
input_name->value(name.c_str());
input_phone->value(phone.c_str());
input_accountpassword->value(accountpassword.c_str());
back_menu->show();
state = 4;
}
else if(AA < 17) {
prize = "三等奖, VIP一个月体验卡。为了让您更方便的领奖,请填写您的个人信息。\n填写完信息后请点击回菜单";
result_box->label(prize.c_str());
input_name->show();
input_phone->show();
input_accountpassword->show();
input_name->value(name.c_str());
input_phone->value(phone.c_str());
input_accountpassword->value(accountpassword.c_str());
back_menu->show();
state = 3;
}
else if(AA < 19) {
prize = "二等奖, VIP三个月体验卡。为了让您更方便的领奖,请填写您的个人信息。\n填写完信息后请点击回菜单";
result_box->label(prize.c_str());
input_name->show();
input_phone->show();
input_accountpassword->show();
input_name->value(name.c_str());
input_phone->value(phone.c_str());
input_accountpassword->value(accountpassword.c_str());
back_menu->show();
state = 2;
}
else {
prize = "一等奖, VIP一年体验卡。为了让您更方便的领奖,请填写您的个人信息。\n填写完信息后请点击回菜单";
result_box->label(prize.c_str());
input_name->show();
input_phone->show();
input_accountpassword->show();
input_name->value(name.c_str());
input_phone->value(phone.c_str());
const char* jj = accountpassword.c_str();
input_accountpassword->value(jj);
back_menu->show();
state = 1;
}
}
else {
prize = "谢谢惠顾";
result_box->label(prize.c_str());
back_menu->show();
show_prize->show();
}
}
void b_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void c_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void d_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void e_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void f_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void g_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void h_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void i_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void j_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void k_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void l_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void m_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void n_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void o_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void p_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void q_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
void r_callback(Fl_Widget *widget, void *data) {
a_callback(widget, data);
}
int main() {
state =0;
cin_password = 1;
chance = 3;
std::srand(std::time(nullptr));
Fl_Window *window = new Fl_Window(1024, 768, "抽奖");
a = new Fl_Button(150, 30, 140, 50, "抽奖");
a->labelsize(18);
a->callback(a_callback);
b = new Fl_Button(350, 30, 140, 50, "抽奖");
b->labelsize(18);
b->callback(b_callback);
c = new Fl_Button(550, 30, 140, 50, "抽奖");
c->labelsize(18);
c->callback(c_callback);
d = new Fl_Button(150, 100, 140, 50, "抽奖");
d->labelsize(18);
d->callback(d_callback);
e = new Fl_Button(350, 100, 140, 50, "抽奖");
e->labelsize(18);
e->callback(e_callback);
f = new Fl_Button(550, 100, 140, 50, "抽奖");
f->labelsize(18);
f->callback(f_callback);
g = new Fl_Button(150, 170, 140, 50, "抽奖");
g->labelsize(18);
g->callback(g_callback);
h = new Fl_Button(350, 170, 140, 50, "抽奖");
h->labelsize(18);
h->callback(h_callback);
i = new Fl_Button(550, 170, 140, 50, "抽奖");
i->labelsize(18);
i->callback(i_callback);
j = new Fl_Button(150, 240, 140, 50, "抽奖");
j->labelsize(18);
j->callback(j_callback);
k = new Fl_Button(350, 240, 140, 50, "抽奖");
k->labelsize(18);
k->callback(k_callback);
l = new Fl_Button(550, 240, 140, 50, "抽奖");
l->labelsize(18);
l->callback(g_callback);
m = new Fl_Button(150, 310, 140, 50, "抽奖");
m->labelsize(18);
m->callback(m_callback);
n = new Fl_Button(350, 310, 140, 50, "抽奖");
n->labelsize(18);
n->callback(n_callback);
o = new Fl_Button(550, 310, 140, 50, "抽奖");
o->labelsize(18);
o->callback(o_callback);
p = new Fl_Button(150, 380, 140, 50, "抽奖");
p->labelsize(18);
p->callback(p_callback);
q = new Fl_Button(350, 380, 140, 50, "抽奖");
q->labelsize(18);
q->callback(q_callback);
r = new Fl_Button(550, 380, 140, 50, "抽奖");
r->labelsize(18);
r->callback(r_callback);
repeat_cin_password = new Fl_Button(200, 420, 140, 50, "重新输入密码");
repeat_cin_password->labelsize(18);
repeat_cin_password->callback(repeat_cin_password_callback);
repeat_cin_password->hide();
back_menu = new Fl_Button(200, 520, 140, 50, "返回菜单");
back_menu->labelsize(18);
back_menu->callback(back_menu_callback);
back_menu->hide();
show_prize = new Fl_Button(400, 520, 140, 50, "显示奖品");
show_prize->labelsize(18);
show_prize->callback(show_prize_callback);
input_name = new Fl_Input(200, 130, 200, 30, "姓名");
input_name->labelsize(18);
input_name->hide();
input_phone = new Fl_Input(200, 170, 200, 30, "电话");
input_phone->labelsize(18);
input_phone->hide();
input_accountpassword = new Fl_Input(200, 210, 200, 30, "密码");
input_accountpassword->labelsize(18);
input_accountpassword->hide();
input_cin_accountpassword = new Fl_Input(200, 210, 200, 30, "验证密码。");
input_cin_accountpassword->labelsize(18);
input_cin_accountpassword->hide();
result_box = new Fl_Box(50, 130, 900, 450, "");
result_box->labelsize(20);
result_box->labelcolor(FL_BLACK);
window->end();
window->show();
return Fl::run();
}