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

📄 loginwindow.c

📁 福建博洋教育C/C++软件项目实战:POS收银系统
💻 C
📖 第 1 页 / 共 5 页
字号:
				print_sale_product(print_window,++cur);
			}	
			break;
		case '\n':
			//读取数据库的商品信息
			{
				PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
				NODE *n=NULL;
				strcpy(pro_info->bar_code,barCode);
				if(get_product_info(pro_info)==0)
				{
					scr_dump("dealwin.scr");
					Message("没有这种商品",10,40);
					scr_restore("dealwin.scr");
					wrefresh(win);
					wrefresh(print_window);
					barCode[2]='\0';
					mvwprintw(code,0,0,"CN      ");
					wrefresh(code);	
					cnt=2;
					now_col=0;
					now_row=2;
					wmove(code,now_col,now_row);
					break;
				}
				if(pro_info->count==0)
				{
					Message("这种商品已经售完",10,40);
					scr_restore("dealwin.scr");
					wrefresh(win);
					wrefresh(print_window);
					barCode[2]='\0';
					mvwprintw(code,0,0,"CN      ");
					wrefresh(code);	
					cnt=2;
					now_col=0;
					now_row=2;
					wmove(code,now_col,now_row);
					break;
				}
				res=code_in_list(barCode);
				if ( res )
				{				
					cur = res;
					NODE *n = salelist.get_node_by_index(&salelist,cur);
					PRODUCT *pro = (PRODUCT *)malloc(sizeof(PRODUCT));
					pro = (PRODUCT *)n->data;
					pro->count++;
					salelist.replace_node_by_index(&salelist,cur,pro,sizeof(PRODUCT));
					wclear(print_window);				
					print_sale_product(print_window,cur);
				}
				else
				{
					Trim(pro_info->product_name);
					Trim(pro_info->spec);
					Trim(pro_info->unit);
					pro_info->count=1;
					salelist.insert_rear(&salelist,(void *)pro_info,sizeof(PRODUCT));
					wclear(print_window);
					print_sale_product(print_window,salelist.count);
					cur=salelist.count;
				}
				barCode[2]='\0';
				mvwprintw(code,0,0,"CN      ");
				wrefresh(code);	
				cnt=2;
				now_col=0;
				now_row=2;
				wmove(code,now_col,now_row);
				break;
				
			}
		default:
			if (ch>='0'&&ch<='9'&&cnt<8)
			{
				now_row++;
				waddch(code,ch);
				barCode[cnt]=ch;
				barCode[++cnt]='\0';			
				wrefresh(code);				
				break;
			}	
		}		
	}
}
/*====================================================
function:打印销售产品信息
=====================================================*/
void print_sale_product(WINDOW *print_window,int cur)
{
	int i=1,row=0;
	wclear(print_window);
	if(salelist.count==0)
	{
		return;
	}
	NODE *n=NULL;
	PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
	if (cur>14)
	{
		i=cur-13;
	}
	for(;i<=salelist.count;i++,row++)
	{
		if(cur>=14 && i==cur+1)
		{
			break;
		}
		n=salelist.get_node_by_index(&salelist,i);
		if(n!=NULL)
		{
			pro_info=(PRODUCT *)n->data;
		}
		if(pro_info!=NULL)
		{
			if(i==cur)
			{
				wattron(print_window,A_REVERSE);
			}
			mvwprintw(print_window,row,0,"%-5d%-10s%-23s%-6s%-6s%-10.2f%-6d%-12.2f",i,
					pro_info->bar_code, pro_info->product_name, pro_info->spec, pro_info->unit, 
					pro_info->sale_price, pro_info->count, (pro_info->sale_price*pro_info->count));
			if(i==cur)
			{
				wattroff(print_window,A_REVERSE);
			}
		}
	}
	wrefresh(print_window);
}
/*===========================================================
function:新增明细窗口与功能实现
===========================================================*/
void add_new_detail_win(int index)
{
	if (!salelist.count)
	{
		Message("没有销售商品",10,40);
		return ;
	}
	int ch;
	int now_col=0;
	int now_row=0;
	char bar_code[9]={'\0'};
	char numberStr[5]="\0";
	int number=0;
	int cnt=0;
	PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
	NODE *node=salelist.get_node_by_index(&salelist,index);
	if (node!=NULL)
	{
		pro_info=(PRODUCT *)node->data;
	}
	strcpy(bar_code,pro_info->bar_code);
	PRODUCT *pro_dba_info=(PRODUCT *)malloc(sizeof(PRODUCT));
	strcpy(pro_dba_info->bar_code,pro_info->bar_code);	
	get_product_info(pro_dba_info);
	WINDOW *ware,*num;
	WINDOW *dialog[3]={NULL};	
	print_dialog_box(10,40,"新增明细",1,dialog);
	mvwprintw(dialog[0],2,2,"商品条形码:");
	mvwprintw(dialog[0],4,8,"数量:");
	wrefresh(dialog[0]);
	keypad(dialog[1],TRUE);
	keypad(dialog[2],TRUE);
	//商品条形码窗口
	ware=create_win(1,16,9,34);
	keypad(ware,TRUE);
	wbkgd(ware,COLOR_PAIR(4));
	wprintw(ware,bar_code);
	wrefresh(ware);
	//商品数量窗口
	num=create_win(1,16,11,34);
	keypad(num,TRUE);
	wbkgd(num,COLOR_PAIR(4));
	wrefresh(num);
	scr_dump("addware.scr");
	NUMBER:
		wmove(num,0,0);			
		while (1)
		{
			ch=wgetch(num);
			switch (ch)
			{
			case  KEY_BACKSPACE:  //按退格键盘
				if (cnt)
				{
					getyx(num,now_col,now_row);
					mvwaddch(num,now_col,--now_row,' ');				
					numberStr[--cnt]='\0';
					wmove(num,0,now_row);
					wrefresh(num);
				}				
				break;
			case KEY_F(1):
				return;						
			case KEY_DOWN:
			case '\n':
				goto ENSURE;
			default:		
				if ( cnt<3 && (ch>='1'&&ch<='9') || (ch=='0'&&cnt!=0))
				{
					now_row++;
					waddch(num,ch);
					numberStr[cnt]=ch;
					numberStr[++cnt]='\0';
					wrefresh(num);				
					break;
				}	
			}
		}		
	ENSURE:	
		wattron(dialog[1],A_REVERSE);
		mvwprintw(dialog[1],1,2, "确定");		
		wrefresh(dialog[1]);		 
		while (1)
		{
			ch=wgetch(dialog[1]);
			switch (ch)
			{		
			case KEY_F(1):
				return;	
			case KEY_UP:
				wattroff(dialog[1],A_REVERSE);
				mvwprintw(dialog[1],1,2, "确定");
				wrefresh(dialog[1]);					
				goto NUMBER;
			case KEY_RIGHT:
				wattroff(dialog[1],A_REVERSE);
				mvwprintw(dialog[1],1,2, "确定");
				wrefresh(dialog[1]);			
				goto CANCEL;
			case '\n':	
				//修改链表中count值并重新打印一下商品信息
				if (cnt==0)
				{
					Message("请输入数量",10,40);
					scr_restore("addware.scr");
					wrefresh(dialog[0]);
					numberStr[0]='\0';
					cnt=0;
					now_row=0;
					goto NUMBER;
				}
				number=atoi(numberStr);
				if ( !(number>0&&number<=99) )
				{					
					Message("数量只能输入[0-100]",10,40);
					scr_restore("addware.scr");
					wrefresh(dialog[0]);
					numberStr[0]='\0';
					cnt=0;
					now_row=0;
					goto NUMBER;
				}
				else if (pro_dba_info->count<number)
				{
					Message("没有这么多的库存",10,40);
					scr_restore("addware.scr");
					wrefresh(dialog[0]);
					numberStr[0]='\0';
					cnt=0;
					now_row=0;
					goto NUMBER;
				}
				else 
				{
					pro_info->count+=number;				
					return;	
				}
			}			
		}
	CANCEL:	
		wattron(dialog[2],A_REVERSE);
		mvwprintw(dialog[2],1,2, "取消");		
		wrefresh(dialog[2]);		 
		while (1)
		{
			ch=wgetch(dialog[2]);
			switch (ch)
			{
			case KEY_F(1):
				return;	
			case KEY_LEFT:		
				wattroff(dialog[2],A_REVERSE);
				mvwprintw(dialog[2],1,2, "取消");
				wrefresh(dialog[2]);
				goto ENSURE;		
			case '\n':		
				return;						
			}
		}
}
/*========================================================
function:删除明细窗口与功能实现
=========================================================*/
int delete_detail_win(int index)
{
	if (!salelist.count)
	{
		Message("没有销售商品",10,40);
		return -1;
	}
	int ch;
	int now_col=0;
	int now_row=0;
	char bar_code[9]={'\0'};
	char numberStr[5]="\0";
	int number=0;
	int cnt=0;
	PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
	NODE *node=salelist.get_node_by_index(&salelist,index);
	if (node!=NULL)
	{
		pro_info=(PRODUCT *)node->data;
	}
	strcpy(bar_code,pro_info->bar_code);
	PRODUCT *pro_dba_info=(PRODUCT *)malloc(sizeof(PRODUCT));
	strcpy(pro_dba_info->bar_code,pro_info->bar_code);	
	get_product_info(pro_dba_info); 
	WINDOW *ware,*num;
	WINDOW *dialog[3]={NULL};	
	print_dialog_box(10,40,"删除明细",1,dialog);
	mvwprintw(dialog[0],2,2,"商品条形码:");
	mvwprintw(dialog[0],4,8,"数量:");
	wrefresh(dialog[0]);
	keypad(dialog[1],TRUE);
	keypad(dialog[2],TRUE);
	//条形码窗口
	ware=create_win(1,16,9,34);
	keypad(ware,TRUE);
	wbkgd(ware,COLOR_PAIR(4));
	wprintw(ware,bar_code);
	wrefresh(ware);
	//数量输入窗口
	num=create_win(1,16,11,34);
	keypad(num,TRUE);
	wbkgd(num,COLOR_PAIR(4));
	wrefresh(num);
	scr_dump("deletetail.scr");
	NUMBER://数量输入
		wmove(num,0,0);		
		while (1)
		{
			ch=wgetch(num);
			switch (ch)
			{
			case  KEY_BACKSPACE:  //按退格键盘
				if (cnt)
				{
					getyx(num,now_col,now_row);
					mvwaddch(num,now_col,--now_row,' ');				
					numberStr[--cnt]='\0';
					wmove(num,0,now_row);
					wrefresh(num);
				}
				
				break;
			case KEY_F(1):
				return 0;					
			case KEY_DOWN:
			case '\n':
				goto ENSURE;
			default:		
				if ( cnt<3 && (ch>='1'&&ch<='9') || (ch=='0'&&cnt!=0))
				{
					now_row++;
					waddch(num,ch);
					numberStr[cnt]=ch;
					numberStr[++cnt]='\0';
					wrefresh(num);				
					break;
				}	
			}
		}		
	ENSURE:	
		wattron(dialog[1],A_REVERSE);
		mvwprintw(dialog[1],1,2, "确定");		
		wrefresh(dialog[1]);		 
		while (1)
		{
			ch=wgetch(dialog[1]);
			switch (ch)
			{		
			case KEY_F(1):
				return 0;	
			case KEY_UP:
				wattroff(dialog[1],A_REVERSE);
				mvwprintw(dialog[1],1,2, "确定");
				wrefresh(dialog[1]);					
				goto NUMBER;
			case KEY_RIGHT:
				wattroff(dialog[1],A_REVERSE);
				mvwprintw(dialog[1],1,2, "确定");
				wrefresh(dialog[1]);			
				goto CANCEL;
			case '\n':	
				//修改链表中count值并重新打印一遍;
				if (cnt==0)
				{
					Message("请输入数量",10,40);
					scr_restore("deletetail.scr");
					wrefresh(dialog[0]);
					numberStr[0]='\0';
					cnt=0;
					now_row=0;
					goto NUMBER;
				}
				number=atoi(numberStr);
				if ( number>pro_info->count )
				{					
					Message("输入数量大于顾客购买的数量",10,40);
					scr_restore("deletetail.scr");
					wrefresh(dialog[0]);
					numberStr[0]='\0';
					cnt=0;
					now_row=0;
					goto NUMBER;
				}		
				else 
				{
					if (message_botton("确定要删除明细",10,40))
					{
						pro_info->count=pro_info->count-number;
						if (pro_info->count==0)
						{
							salelist.delete_node_by_index(&salelist,index);	
							return 1;
						}
					}				
					return 0;	
				}
			}			
		}
	CANCEL:	
		wattron(dialog[2],A_REVERSE);
		mvwprintw(dialog[2],1,2, "取消");		
		wrefresh(dialog[2]);		  
		while (1)
		{
			ch=wgetch(dialog[2]);
			switch (ch)
			{
			case KEY_F(1):
				return;	
			case KEY_LEFT:		
				wattroff(dialog[2],A_REVERSE);
				mvwprintw(dialog[2],1,2, "取消");
				wrefresh(dialog[2]);
				goto ENSURE;		
			case '\n':
				return 0;						
			}
		}
}
/*==============================================================
function:收银窗口与功能实现
===============================================================*/
int finish_deal_win(SALE *sale_info)
{
	if (!salelist.count)
	{
		Message("没有销售商品",10,40);
		return 0;
	}
	int ch;
	int now_col1,now_row1;
	int now_col2,now_row2;
	char secondStr[9]={'\0'};
	char thirdStr[9]={'\0'};
	float cashReceive=real_cash();//购买商品的总价格
	float cashTotal=0;
	float cashGive=0;
	int cnt1=0;
	int radixPoint=0;
	NODE* n=NULL;	
	int i=0;
	WINDOW *real,*given,*change;
	WINDOW *dialog[3]={NULL};	
	print_dialog_box(12,40,"收银",1,dialog);
	mvwprintw(dialog[0],2,8,"应收:");
	mvwprintw(dialog[0],4,8,"实收:");
	mvwprintw(dialog[0],6,8,"找零:");
	wrefresh(dialog[0]);
	keypad(dialog[1],TRUE);
	keypad(dialog[2],TRUE);
	real=create_win(1,16,8,34);
	keypad(real,TRUE);
	wbkgd(real,COLOR_PAIR(4));
	wprintw(real,"%.2f",cashReceive);
	wrefresh(real);
	given=create_win(1,16,10,34);
	keypad(given,TRUE);
	wbkgd(given,COLOR_PAIR(4));
	wrefresh(given);
	change=create_win(1,16,12,34);
	keypad(change,TRUE);
	wbkgd(change,COLOR_PAIR(4));
	wrefresh(change);	
	scr_dump("finish.scr");
	MONEY:
		wmove(given,0,0);
		wprintw(given,secondStr);
		wrefresh(given);		
		while (1)
		{
			ch=wgetch(given);
			switch (ch)
			{
			case  KEY_BACKSPACE:  //按退格键盘
				if (cnt1)
				{
					if (secondStr[cnt1-1]=='.')
					{
						radixPoint--;
					}
					getyx(given,now_col1,now_row1);
					mvwaddch(given,now_col1,--now_row1,' ');		
					secondStr[--cnt1]='\0';
					wmove(given,0,now_row1);
					wrefresh(given);
				}
				break;
			case KEY_F(1):
				return 0;					
			case KEY_DOWN:				
			case '\n':			
				goto ENSURE;
			default:				
				if ( (cnt1<8) && (ch>='1'&&ch<='9') || (ch=='0'&&cnt1!=0) || (ch=='.'&&radixPoint==0)  )
				{
					now_row1++;
					waddch(given,ch);
					if (ch=='.')
					{
						radixPoint++;
					}					
					secondStr[cnt1]=ch;
					secondStr[++cnt1]='\0';

⌨️ 快捷键说明

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