⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 front.c

📁 linux平台下用C开发的一个超市管理系统(结合了ORACLE数据库)
💻 C
📖 第 1 页 / 共 2 页
字号:
#include"window.h"
#include"login.h"
#include"front.h"

char s_time[20]="";//时间
char sale_id[5]="";//交易号最后4位
C_CLASS LINKLIST hang;//挂单信息链表

/**********************************************************************
功能:前台界面及流程
参数:无
返回值:无
***********************************************************************/
void show_front()
{
	
	init_color_info();
	refresh();	
	C_CLASS LINKLIST list;
	NODE *start;
	NODE *cur;
	NODE *temp;	
	int i,j=1,k=1,res;		
	GOD *p=(GOD *)malloc(sizeof(GOD));	
	WIN mainwin1={25,80,0,0,4,"欢迎光临博洋超市",1};
	WIN mainwin2={15,78,5,1,1,"",0};
	TEXT txt1={21,8,2,1,"CN"};
    TEXT txt2={21,10,10,1,""};
	WIN *cashwin1=make_win(&mainwin1);
	WIN *cashwin2=make_win(&mainwin2);		
	TEXT *t1=make_textbox(&txt1);
	TEXT *t2=make_textbox(&txt2);
	draw_line(cashwin1->win,2,80);
	draw_line(cashwin1->win,4,80);
	draw_line(cashwin1->win,20,80);
	draw_line(cashwin1->win,22,80);
	TrimSpace(login.staff_name);
	get_saleID(sale_id);
	get_time(s_time);
	mvwprintw(cashwin1->win,1,1,"%-24s%-19s%-16s%-5s%s","收银员:","等级:普通职员","交易号:","时间:",s_time);
	mvwprintw(cashwin1->win,3,1,"%-6s%-10s%-25s%-8s%-8s%-8s%-5s%7s","序号","条形码","商品名称","规格","单位","单价","数量","金额");
	mvwprintw(cashwin1->win,23,1,"   F2:新增明细 F3:删除明细 F4:收银 F5:挂单 F6:取单 F7:撒单 F8:退货 F9:退出");
	mvwprintw(cashwin1->win,21,1,"%-4s%-40s%-5s%-4s","条形码:","","销售状态: ","正常");
	mvwprintw(cashwin1->win,1,8,"%s",login.staff_name);
	mvwprintw(cashwin1->win,1,51,"%s",sale_id);	
	cashwin1->show_win(cashwin1);
	cashwin2->show_win(cashwin2);
	t1->show_text(t1);
	t2->show_text(t2);	
	link_init(&list);
	link_init(&hang);	
	do
	{
	if(list.count!=0)	
		{
		Print_Data(cashwin2->win,&list,start,cur,0);
		}
	do
		{	
			char code[7]="";
			wclear(t2->win);
			i=GetString(t2->win,code,6,1);
			if(i==0)
			{
				char barcode[9]="CN";
				strcat(barcode,code);
				temp=link_get_node_by_key(&list,barcode,(int (*)(void *,void *))God_Compare);
				if(temp!=NULL&&list.count>0)
				{
					((GOD *)temp->data)->num=1+((GOD *)temp->data)->num;
					cur=temp;
					if(list.count<=15)
					{
						start=list.head->next;
					}
					else
					{
						start=temp;
					}
					break;
				}
				if(insert_goodslink(&list,p,barcode)==1)
				{
					show_msg("该条形码商品不存在",0);
					continue;
				}				
				if(list.count<=15)
				{
					start=list.head->next;
				}
				else
				{
				start=link_get_node_by_index(&list,list.count-14);				
				}
				cur=link_get_node_by_index(&list,list.count);
				Print_Data(cashwin2->win,&list,start,cur,0);
			}
			if(i!=0)
			{
				break;
			}
		}
		while (1);
		if(list.count!=0)
		{
			j = list.get_index_by_key( &list,cur->data,(int (*)(void *,void *))God_Compare );
			k = list.get_index_by_key( &list,start->data,(int (*)(void *,void *))God_Compare );
		}		
		if ( i==1 )		//向上键 
		{
			if ( j==1 )
			{
				continue;
			}
			j--;
			cur = cur->prior;			
			if ( j<k&&k>0 )
			{
				k--;
				start = start->prior;
			}
			continue;
		}
		if ( i==2 )		//向下键 
		{
			if ( j<list.count )
			{
				
				j++;
				cur = cur->next;
			}
			if ( j-k>=15 && j<=list.count )
			{
				k++;
				start = start->next;
			}
			continue;
		}
		if(i==3)//F2
		{
			add_delete_goods(&list,cur,0);	
			continue;
		}
		if(i==4)//F3
		{
				
			if(add_delete_goods(&list,cur,1)==0)//删除后商品为0并删链表该节点的情况
			{
				if(list.count==0)//删除只有一条
				{
					werase(cashwin2->win);
					wrefresh(cashwin2->win);
					continue;
				}
				else
				{
					if(j==k)//当前删除行为第一行
					{
						if(k>1)
						{
							start=start->prior;
						}
						else
						{
							start=start->next;
						}
						cur=start;
					}
					else
					{						
						if(j==list.count+1)
						{
							cur=link_get_node_by_index(&list,j-1);
						}
						else
						{
							cur=link_get_node_by_index(&list,j);
						}
						if(k+14==list.count+1&&(list.count+1)>15)
						{
							start=start->prior;
						}
					}					
					continue;
				}
			}
		}
		if(i==5)//F4
		{
			if(list.count==0)
			{
				show_msg("当前无商品需要结帐",0);
				continue;
			}
			else
			{
				if(cash_money(&list)==0)
				{
					wclear(cashwin2->win);
					wrefresh(cashwin2->win);
					link_del(&list);
					link_init(&list);
					get_saleID(sale_id);
					get_time(s_time);
					mvwprintw(cashwin1->win,1,51,"%s",sale_id);
					mvwprintw(cashwin1->win,1,65,"%s",s_time);
					wrefresh(cashwin1->win);
				}
				continue;
			}			
		}
		if(i==6)//F5
		{
			if(list.count==0)
			{
				show_msg("当前无商品需要挂单",0);
				continue;
			}
			link_del(&hang);
			link_init(&hang);
			get_hang_list(&hang,login.staff_id);
			if(hang.count>=5)
			{
				show_msg("挂单5条空间已满",0);
				continue;
			}			
			if(hang_list(&list)==0)
			{
				wclear(cashwin2->win);
				wrefresh(cashwin2->win);
				get_saleID(sale_id);
				get_time(s_time);
				mvwprintw(cashwin1->win,1,51,"%s",sale_id);
				mvwprintw(cashwin1->win,1,65,"%s",s_time);
				wrefresh(cashwin1->win);
				link_del(&list);
				link_init(&list);									
			}
			continue;
			
		}
		if(i==7)//F6
		{			
			if(list.count!=0)
			{
				show_msg("还未结账,不能取单",0);
				continue;
			}
			link_del(&hang);
			link_init(&hang);
			get_hang_list(&hang,login.staff_id);
			if(hang.count==0)
			{
				show_msg("没有挂单,无单可取",0);
				continue;
			}
			link_del(&list);
			link_init(&list);
			if(get_list(&list)!=0)
			{
				start=list.head->next;
				cur=start;
			}
			continue;
		}
		if(i==8)//F7
		{
			if(list.count==0)
			{
				show_msg("当前窗口无商品,不能撤单",0);
				continue;
			}
			if(delete_list(&list)==0)
			{				
				link_del(&list);
				link_init(&list);
				wclear(cashwin2->win);
				wrefresh(cashwin2->win);
			}
			continue;

		}
		if(i==9)//F8
		{
			if(list.count!=0)
			{
				show_msg("还未结账,无法退货",0);
				continue;
			}
			else
			{
				if(back_products(&list)==0)
					continue;
			}
		}		
		if(i==10)//F9
		{
			if(list.count!=0)
			{
				show_msg("还未结账,不能退出",0);
				continue;
			}
			res=show_msg("确定是否退出",1);
			if(res==1)
			{
				continue;
			}
			if(res==0)
			{
				break;
			}
		}

	}
	while (1);
	endwin();
}
/**********************************************************************
功能:插入前台商品信息到链表表
参数:链表 结构体 条形码
返回值:0成功 1失败
***********************************************************************/
int insert_goodslink(C_CLASS LINKLIST *link,GOD *good,char *barcode)
{
	GOODS *p=(GOODS *)malloc(sizeof(GOODS));
	if(getgoods_by_barcode(p,barcode)==1)
	{
		return 1;
	}
	strcpy(good->bar_code,p->bar_code);	
	strcpy(good->goods_name,p->goods_name);	
	strcpy(good->unit,p->unit);	
	strcpy(good->spec,p->spec);	
	good->sale_price=p->sale_price;
	good->purchase_price=p->purchase_price;
	good->stock=p->stock;
	good->discount=p->discount;
	good->num=1;	
	link->insert_rear(link,good,sizeof(GOD));
	return 0;
}
/**********************************************************************
功能:增加,删除明细 
参数:链表 当前反白位置节点指针 模式(0-增加 1-删除)
返回值:0成功 非0失败
***********************************************************************/
int add_delete_goods(C_CLASS LINKLIST *link,NODE *cur,int type)
{	
	int cur_num,stock_num,j;
	char num[3]="1";
	scr_dump("front.scr");	
	WIN mainatt1={13,40,7,20,4,"新增明细",1};	
	WIN mainatt2={13,40,7,20,4,"删除明细",1};	
	TEXT box1={9,38,16,1,""};
    TEXT box2={11,38,16,1,""};
	TEXT box3={9,27,11,4,"商品条形码:"};
	TEXT box4={11,29,9,4,"商品名称:"};
	TEXT box5={13,29,9,4,"增加数量:"};
	TEXT box6={13,29,9,4,"删除数量:"};
	TEXT box7={13,38,16,1,""};
    BUTTON but1={8,3,15,27,"确定",4,4};
	BUTTON but2={8,3,15,44,"返回",4,4};
	WIN *w1=NULL;
	TEXT *t5=NULL;
	if(type==0)//增加
	{
		w1=make_win(&mainatt1);
		t5=make_textbox(&box5);		
	}
	if(type==1)//删除
	{
		w1=make_win(&mainatt2);
		t5=make_textbox(&box6);		
	}
	TEXT *t1=make_textbox(&box1);
	TEXT *t2=make_textbox(&box2);
	TEXT *t3=make_textbox(&box3);
	TEXT *t4=make_textbox(&box4);
	TEXT *t6=make_textbox(&box7);
    BUTTON *b1=make_button(&but1);
	BUTTON *b2=make_button(&but2);	
	wprintw(t1->win,"%s",((GOD *)cur->data)->bar_code);
	wprintw(t2->win,"%s",((GOD *)cur->data)->goods_name);
	wprintw(t6->win,"%s",num);
	w1->show_win(w1);
	t1->show_text(t1);
	t2->show_text(t2);
	t3->show_text(t3);
	t4->show_text(t4);
	t5->show_text(t5);
	t6->show_text(t6);
	b1->show_button(b1);
	b2->show_button(b2);
	int i=1,res;	
	do
	{
		if(i==1)
		{
			
			res=GetString(t6->win,num,2,1);
			if(res==0||res==2||res==13)
			{
				i=2;
				continue;
			}
		}
		if(i==2)
		{
			  
			  b1->print_white(b1);
			  noecho();
			  cbreak();					
			  keypad(b1->win3,true );
			  res=wgetch(b1->win3);				 
			  if(res==259)
			  {	
				  i=1;
				  b1->delete_white(b1);
				  continue;
			  }
			  if(res==27||res==261)
			   {
				  i=3;
				  b1->delete_white(b1);
				  continue;
			   }
			  if(res==10)
			  {				  
				  if(type==0)
				  {					
					cur_num=((GOD *)cur->data)->num+atoi(num);
					((GOD *)cur->data)->num=cur_num;
				  }					 
				  if(type==1)
				  {
					cur_num=((GOD *)cur->data)->num-atoi(num);
					if(cur_num<0)
					 {
						show_msg("删除数量超出当前商品数量",0);
						i=1;
						continue;
					 }
					 else if(cur_num==0)
					 {						
						j=link->get_index_by_key(link,cur->data,(int (*)(void *,void *))God_Compare);						
						link->link_delete_node_by_index(link,j);
						scr_restore("front.scr");	
						refresh();
						return 0;
					 }
					 else
					 {
						 ((GOD *)cur->data)->num=cur_num;
					 }
				  }
				  scr_restore("front.scr");	
				  refresh();
				  return 1;
			  }
		  
		}
		if(i==3)
		{
			 
			  b2->print_white(b2);
			  noecho();
			  cbreak();					
			  keypad(b2->win3,true );
			  res=wgetch(b2->win3);
			  if(res==259)
			  {	
				  i=1;
				  b2->delete_white(b2);
				  continue;
			  }
			  if(res==260)
			  {
				  i=2;
				  b2->delete_white(b2);
				  continue;
			  }
			  if(res==10)
			  {
				  b2->focus_button(b2);				     
				  scr_restore("front.scr");	
				  refresh();
				  return 1;
			  }
			 
		}
	}while (1);		
		
}
/**********************************************************************
功能:收银结账 
参数:链表
返回值:0成功 非0失败

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -