#include "lcd.h"
#include "restrant.h"
#include <stdio.h>
#include <stdlib.h>
int pages=1;
/*
构建一个带头商品链表
*/
Head * creat_linkedlist()
{
Head * h = (struct head*)malloc(sizeof(*h)); //创建一个头,并分配对应的空间
h->first =NULL;
h->last=NULL;
//先罗列商品信息
Shop s[6]={
{"./doufu.bmp", 1,70,0,0,1/*单价*/, 158,351,278,351,NULL,NULL},
{"./niurou.bmp", 1,315,0,0,2/*单价*/, 403,351,523,351,NULL,NULL},
{"./xiaren.bmp", 1,560,0,0,3/*单价*/, 648,351,768,351,NULL,NULL},
{"./xilanhua.bmp", 2,70,0,0,4/*单价*/, 158,351,278,351,NULL,NULL},
{"./kourou.bmp" ,2,315,120,0,5/*单价*/,403,351,523,351,NULL,NULL},
{"./chaorou.bmp" ,2,560,240,0,6/*单价*/,648,351,768,351,NULL,NULL}
//.....
};
int i = 0;
while(i<6)
{
//往h里面添加结点
Shop * p = malloc(sizeof(*p)); //给商品分配空间
int j = 0;
while((*(s[i].name+j))) //一个字母一个字母的赋值
{
*(p->name+j) = *(s[i].name+j);
j++;
}
*(p->name+j)= *(s[i].name+j); //把结束标志'\0'拷贝
p->page = s[i].page;
p->x_idex = s[i].x_idex;//图片起始位置
p->y_idex = s[i].y_idex;
p->num = s[i].num; //商品的起始购买数量(0)
p->price = s[i].price;
p->price_x_idex = s[i].price_x_idex;//显示单价的价格
p->price_y_idex = s[i].price_y_idex;
p->num_x_idex = s[i].num_x_idex;//显示单个商品数目的位置
p->num_y_idex = s[i].num_y_idex;
//p->price_x_idex = s[i].price_x_idex;
//p->price_y_idex = s[i].price_y_idex;
p->next = s[i].next;
p->prev = s[i].prev;
//....
if(h->first == NULL) //从无到有
{
h->first=p;
h->last=p;
}
else //从少到多,尾插
{
h->last->next = p;
p->prev = h->last;
h->last = p;
}
i++;
}
return h;
}
/*
打印链表
*/
void print_linkedlist(Head * h)
{
Shop * p = h->first;
while(p)
{
printf("%s-----%d\n",p->name,p->price);
p = p->next;
}
}
void original_picture(void)
{
//加号
lcd_draw_bmppicture(70, 340, "./jia.bmp");
lcd_draw_bmppicture(315, 340, "./jia.bmp");
lcd_draw_bmppicture(560, 340, "./jia.bmp");
//显示-
lcd_draw_bmppicture(270,340, "./jian.bmp");
lcd_draw_bmppicture(515, 340, "./jian.bmp");
lcd_draw_bmppicture(760, 340, "./jian.bmp");
//显示左右页
lcd_draw_bmppicture(0, 410, "./zuo.bmp");
lcd_draw_bmppicture(730, 410, "./you.bmp");
//显示结算
//lcd_draw_bmppicture(500, 360, "./jiesuan.bmp");
//主题
lcd_draw_bmppicture(4, 0, "./canting.bmp");
//单价
lcd_draw_bmppicture(70, 340, "./danjia.bmp");
lcd_draw_bmppicture(315, 340, "./danjia.bmp");
lcd_draw_bmppicture(560, 340, "./danjia.bmp");
//logo
//lcd_draw_bmppicture(0, 360, "./logo.bmp");
//数目
lcd_draw_bmppicture(190, 340, "./shumu.bmp");
lcd_draw_bmppicture(435, 340, "./shumu.bmp");
lcd_draw_bmppicture(680, 340, "./shumu.bmp");
}
void page_init(Head * h)
{
pages = 1;
//初始化固定的图片
original_picture();
//先显示第一页的商品
Shop * p = h->first;
while(p->page ==1)//打印第一页
{
//printf("%d",123);
//printf("restrant.c void page_init line 100 loop %d\n",loop_times);
lcd_draw_bmppicture(p->x_idex, p->y_idex, p->name);//显示商品名称
//printf("restrant.c void page_init line 102 loop %d\n",loop_times);
lcd_draw_number(p->price_x_idex, p->price_y_idex, p->price/*初始购买数量*/, 0x00000000);//显示商品单价
//printf("restrant.c void page_init line 104 loop %d\n",loop_times);
lcd_draw_number(p->num_x_idex, p->num_y_idex, p->num/*初始购买数量*/, 0x00ffffff);//显示商品数量
//printf("restrant.c void page_init line 103 loop %d\n",loop_times++);
p = p->next;
}
}
void updata_pages(Head * h)
{
/* 更新数量区域 */
plcd_clear(250, 310, 340, 410, 0x006B8E23);
plcd_clear(495, 555, 340, 410, 0x006B8E23);
plcd_clear(740, 800, 340, 410, 0x006B8E23);
/*更新单价区域 */
plcd_clear(130, 190, 340, 410, 0x006B8E23);
plcd_clear(375, 435, 340, 410, 0x006B8E23);
plcd_clear(610, 680, 340, 410, 0x006B8E23);
Shop * p = h->first;
while(p) //遍历整个链表,更新图片和购买数量
{
if(p->page == pages) //当前页商品
{
lcd_draw_bmppicture(p->x_idex, p->y_idex, p->name);//显示商品名称
lcd_draw_number(p->price_x_idex, p->price_y_idex, p->price, 0x00000000);//显示商品单价
lcd_draw_number(p->num_x_idex, p->num_y_idex, p->num/*初始购买数量*/, 0x007F00FF);//显示商品数量
}
p=p->next;
}
}
void get_touchoscreen_add(int x , int y , Head *h)
{
x = x * 0.8;
y = y * 0.8;
Shop * p = h->first;
while(p) //遍历整个链表
{
if(p->page == pages) //当前页商品
{
if( x > p->x_idex && x < p->x_idex + 40 && y > p->y_idex +300 && y < p->y_idex + 340)
{
p->num++;
updata_pages(h);
}
}
p=p->next;
}
}
void get_touchoscreen_minus(int x , int y , Head *h)
{
x = x * 0.8;
y = y * 0.8;
Shop * p = h->first;
while(p) //遍历整个链表
{
if(p->page == pages) //当前页商品
{
// printf("%d----%d\n",x,y);
if( x > p->x_idex + 200 && x < p->x_idex + 240 && y > p->y_idex +300 && y < p->y_idex + 340 && p->num != 0)
{
p->num--;
updata_pages(h);
// printf("%d----%d----%d\n",p->x_idex ,p->y_idex,p->num);
}
}
p=p->next;
}
}
void get_touchoscreen_next(int x , int y , Head *h)
{
x = x * 0.8;
y = y * 0.8;
Shop * p = h->first;
if( x > 730 && x < 800 && y > 410 && y <480)
{
pages++;
while(p) //遍历整个链表
{
if(p->page == pages) //当前页商品
{
updata_pages(h);
}
p=p->next;
}
}
}
void get_touchoscreen_prev(int x , int y , Head *h)
{
x = x * 0.8;
y = y * 0.8;
Shop * p = h->first;
if( x > 0 && x < 70 && y > 410 && y <480 && pages >=2 )
{
pages--;
while(p) //遍历整个链表
{
if(p->page == pages) //当前页商品
{
updata_pages(h);
}
p=p->next;
}
}
}
int get_touchoscreen_account(int x , int y , Head *h)
{
x = x * 0.8;
y = y * 0.8;
int account=0;
Shop * p = h->first;
if( x > 720 && x < 800 && y > 360 && y <480 )
{
while(p) //遍历整个链表
{
account += p->price * p->num;
/* 更新合计区域 */
plcd_clear(640, 720, 360, 460, 0x00c3c3c3);
lcd_draw_number(690, 390, account, 0x00000000);
printf("%d\n",account);
p=p->next;
}
}
return account;
}
int get_money(int money)
{
//自己算出总的价格
return money;
}