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

📄 sellfunction.c

📁 在LINUX下实现的一个超市的收银系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	while(buf != NULL)
	{
		if(!Save_Sell_Detail(System_Time,SELL_NO,buf->bar_code,buf->mer_amount,buf->sell_price,SELL_DETAIL_NO))

		{
			save_sell_detail_state = 0;
		}		
		sell_detail_no = atoi(SELL_DETAIL_NO);
		sell_detail_no++;
		sprintf(SELL_DETAIL_NO,"%04d",sell_detail_no);
		buf = buf->next;	
	}
	if(1 == save_sell_detail_state)
	{
		ShowMessage("         保存销售明细成功");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
	}
	else
	{
		ShowMessage("        保存销售明细失败...... ");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
	}

	//把销售出去的商品所对应的商品库存去掉
	//修改数据库中的库存
	
	buf = head->next;
	while(buf != NULL)
	{
		if(!Alter_Mer_Stock(buf->bar_code,buf->mer_amount))
		{
			alter_state = 0;
		}
		
		buf = buf->next;	
	}
			
	if(0 == alter_state)
	{
		ShowMessage("          更新商品库存失败......");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
	}
	else
	{
		ShowMessage("          更新商品库存成功");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
	}
	//删除链表
	FreeList(head);
	head=p1=p2;
	p1->next = NULL;
	
	delwin(get_money_win);
	wclear(sellinfo_win);
	touchwin(sell_main_win);
	wrefresh(sell_main_win);
	
	business_no = atoi(BUSINESS_NO);
	business_no++;
	sprintf(BUSINESS_NO,"%04d",business_no);
	SELL_STATE = 0 ;//销售状态置为0,说明都已经结账了
	Cashier();
}

/*============撤单==========*/
void CancelOrder()
{	
	//判断有没有数据,如果没有的话,不可以撤单
	if(head->next == NULL)
	{
		ShowMessage("          没有数据,不允许撤单");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}

	struct Sell* buf;
	char ch;
	
	WINDOW *cancel_order_win = newwin(8,30,8,25);
	wbkgd(cancel_order_win,COLOR_PAIR(2));
	box(cancel_order_win,0,0);
	mvwprintw(cancel_order_win,0,12,"撤单");
	
	mvwprintw(cancel_order_win,2,8,"确认要撤单吗?");
	wrefresh(cancel_order_win);
	
	WINDOW *ok_win = subwin(cancel_order_win,3,10,12,27);
	wbkgd(ok_win,COLOR_PAIR(3));
	box(ok_win,0,0);
	mvwprintw(ok_win,1,1,"  确定  ");
	touchwin(cancel_order_win);
	wrefresh(cancel_order_win);
	wrefresh(ok_win);
	   
	WINDOW *cancel_win = subwin(cancel_order_win,3,10,12,43);
	wbkgd(cancel_win,COLOR_PAIR(3));
	box(cancel_win,0,0);
	mvwprintw(cancel_win,1,1,"  取消  ");
	touchwin(cancel_order_win);
	wrefresh(cancel_order_win);
	wrefresh(cancel_win);

	do
	{
		wattron(ok_win,A_REVERSE);	
		mvwprintw(ok_win,1,1,"  确定  ");
		ch = mvwgetch(ok_win,1,8);
		wattroff(ok_win,A_REVERSE);
		wrefresh(ok_win);	
		//当用户输入回车
		if(ch == '\n')
		{
			//删除链表	
			delwin(cancel_order_win);
			FreeList(head);
			head=p1=p2;
			p1->next = NULL;
			wclear(sellinfo_win);
			Cashier();
		}
		
		else
		{
			mvwprintw(ok_win,1,1,"  确定  ");
			wrefresh(ok_win);
			wattron(cancel_win,A_REVERSE);
			mvwprintw(cancel_win,1,1,"  取消  ");
			ch = mvwgetch(cancel_win,1,8);
			wattroff(cancel_win,A_REVERSE);
			wrefresh(cancel_win);
			if(ch == '\n')
			{
				//用户不要撤单,返回销售界面
				break;	                   
			}
			else 
			{	
				mvwprintw(cancel_win,1,1,"  取消  ");
				wrefresh(cancel_win);
				continue;
			}
		}			
	}while(1);

	delwin(cancel_order_win);
	touchwin(sellinfo_win);
	wrefresh(sellinfo_win);
}

/*===================挂单=========================*/
void Hang_List()
{
	//判断有没有数据,如果没有的话,不可以挂单
	if(head->next == NULL)
	{
		ShowMessage("         没有数据,不允许挂单");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}
	if(1 == Hang_List_State)
	{
		ShowMessage("         对不起,只允许挂一单");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}

	struct Sell *buf,*tem;
	char ch;
	
	WINDOW *hang_list_win = newwin(8,30,8,25);
	wbkgd(hang_list_win,COLOR_PAIR(2));
	box(hang_list_win,0,0);
	mvwprintw(hang_list_win,0,12,"挂单");
	
	mvwprintw(hang_list_win,2,8,"确认要挂单吗?");
	wrefresh(hang_list_win);
	
	WINDOW *ok_win = subwin(hang_list_win,3,10,12,27);
	wbkgd(ok_win,COLOR_PAIR(3));
	box(ok_win,0,0);
	mvwprintw(ok_win,1,1,"  确定  ");
	touchwin(hang_list_win);
	wrefresh(hang_list_win);
	wrefresh(ok_win);
	   
	WINDOW *cancel_win = subwin(hang_list_win,3,10,12,43);
	wbkgd(cancel_win,COLOR_PAIR(3));
	box(cancel_win,0,0);
	mvwprintw(cancel_win,1,1,"  取消  ");
	touchwin(hang_list_win);
	wrefresh(hang_list_win);
	wrefresh(cancel_win);

	do
	{
		wattron(ok_win,A_REVERSE);	
		mvwprintw(ok_win,1,1,"  确定  ");
		ch = mvwgetch(ok_win,1,8);
		wattroff(ok_win,A_REVERSE);
		wrefresh(ok_win);	
		//当用户输入回车
		if(ch == '\n')
		{	
			//初始化要保存挂单信息的链表
			hang_list = head;

			ShowMessage("             挂单成功");
						
			delwin(hang_list_win);
			wclear(sellinfo_win);
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(sellinfo_win);
			wrefresh(sellinfo_win);
			//Hang_List_State;    挂单状态,1为有挂单,0为没有挂单
			Hang_List_State = 1;			
			Cashier();
		}
		
		else
		{
			mvwprintw(ok_win,1,1,"  确定  ");
			wrefresh(ok_win);
			wattron(cancel_win,A_REVERSE);
			mvwprintw(cancel_win,1,1,"  取消  ");
			ch = mvwgetch(cancel_win,1,8);
			wattroff(cancel_win,A_REVERSE);
			wrefresh(cancel_win);
			if(ch == '\n')
			{
				//用户不要撤单,返回销售界面
				break;	                   
			}
			else 
			{	
				mvwprintw(cancel_win,1,1,"  取消  ");
				wrefresh(cancel_win);
				continue;
			}
		}			
	}while(1);

	delwin(hang_list_win);
	touchwin(sellinfo_win);
	wrefresh(sellinfo_win);
}

/*====================取单========================*/
void Take_List()
{
	if(head->next != NULL)
	{
		ShowMessage("     有销售单没有结账,不允许取单");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}
	//判断是否有挂单
	if(Hang_List_State != 1)
	{
		ShowMessage("     对不起,您没有挂单,不允许取单");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}
	struct Sell* buf;
	char ch;
	int i;
	i=1;
	
	WINDOW *take_list_win = newwin(8,30,8,25);
	wbkgd(take_list_win,COLOR_PAIR(2));
	box(take_list_win,0,0);
	mvwprintw(take_list_win,0,12,"取单");
	
	mvwprintw(take_list_win,2,8,"确认要取单吗?");
	wrefresh(take_list_win);
	
	WINDOW *ok_win = subwin(take_list_win,3,10,12,27);
	wbkgd(ok_win,COLOR_PAIR(3));
	box(ok_win,0,0);
	mvwprintw(ok_win,1,1,"  确定  ");
	touchwin(take_list_win);
	wrefresh(take_list_win);
	wrefresh(ok_win);
	   
	WINDOW *cancel_win = subwin(take_list_win,3,10,12,43);
	wbkgd(cancel_win,COLOR_PAIR(3));
	box(cancel_win,0,0);
	mvwprintw(cancel_win,1,1,"  取消  ");
	touchwin(take_list_win);
	wrefresh(take_list_win);
	wrefresh(cancel_win);

	do
	{
		wattron(ok_win,A_REVERSE);	
		mvwprintw(ok_win,1,1,"  确定  ");
		ch = mvwgetch(ok_win,1,8);
		wattroff(ok_win,A_REVERSE);
		wrefresh(ok_win);	
		//当用户输入回车
		if(ch == '\n')
		{
			//进行取单操作	
			//遍历保存挂单链表,并打印
				
			wclear(sellinfo_win);
			touchwin(sell_main_win);
			wrefresh(sellinfo_win);
			
			head = hang_list;

			PrintSellInfo();

			//Hang_List_State;    挂单状态,1为有挂单,0为没有挂单
			Hang_List_State = 0;	
			delwin(take_list_win);
			return;
		}		
		else
		{
			mvwprintw(ok_win,1,1,"  确定  ");
			wrefresh(ok_win);
			wattron(cancel_win,A_REVERSE);
			mvwprintw(cancel_win,1,1,"  取消  ");
			ch = mvwgetch(cancel_win,1,8);
			wattroff(cancel_win,A_REVERSE);
			wrefresh(cancel_win);
			if(ch == '\n')
			{
				//用户不要撤单,返回销售界面
				break;	                   
			}
			else 
			{	
				mvwprintw(cancel_win,1,1,"  取消  ");
				wrefresh(cancel_win);
				continue;
			}
		}			
	}while(1);

	delwin(take_list_win);
	touchwin(sellinfo_win);
	wrefresh(sellinfo_win);
}

/*=====================退货=======================*/
void Good_Return()
{
	if(head->next != NULL)
	{
		ShowMessage("     有销售单没有结账,不允许退货");
		touchwin(sell_main_win);
		wrefresh(sell_main_win);
		return;
	}
	char sell_no[20];
	char bar_code[20];
	char mer_amount[20];

	int amount;
	int buf;
	
	char SELL_DETAIL_NO[20];
	char ch;
	int i,temp,sell_detail_no;
	temp = 0;
	
	WINDOW *good_return_win = newwin(8,35,8,22);
	WINDOW *sell_no_win = subwin(good_return_win,1,20,10,33);
	WINDOW *bar_code_win = subwin(good_return_win,1,20,12,33);
	WINDOW *mer_amount_win = subwin(good_return_win,1,20,14,33);


	wbkgd(good_return_win,COLOR_PAIR(2));
	wbkgd(sell_no_win,COLOR_PAIR(10));
	wbkgd(bar_code_win,COLOR_PAIR(10));
	wbkgd(mer_amount_win,COLOR_PAIR(10));

	box(good_return_win,0,0);
	mvwprintw(good_return_win,0,17,"退货");	
	mvwprintw(good_return_win,2,2,"销售单号:");
	mvwprintw(good_return_win,4,4,"条形码:");
	mvwprintw(good_return_win,6,6,"数量:");

	wrefresh(good_return_win);
	
	//要求输入销售单号
	do
	{
		memset(sell_no,0,sizeof(sell_no));
		mvwgetnstr(sell_no_win,0,0,sell_no,20);
		
		for(i=0;i<strlen(sell_no);i++)
		{	
			if(isdigit(sell_no[i]))
			{
				continue;
			}
			temp = 1;
			ShowMessage("   销售单号只允许输入数字");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(sell_no_win);
			break;
		}
		if(1 == temp)
		{
			temp  = 0;
			continue;
		}
		if(strlen(sell_no) != 18)
		{
			ShowMessage("      销售单号必须位18位数字");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(sell_no_win);
			continue;
		}
		//判断销售单号是否存在

		if(!Is_Sell_No_Exist(sell_no))
		{
			ShowMessage("       您输入的销售单号不存在");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(sell_no_win);
			continue;
		}

		break;
	}while(1);
	
	//输入商品条形码
	do
	{
		memset(bar_code,0,sizeof(bar_code));
		mvwgetnstr(bar_code_win,0,0,bar_code,20);
				
		//判断输入的条形码在但前销售单号中存在不存在

		if(!Is_Mer_In_Sell_List(sell_no,bar_code,&buf))
		{
			ShowMessage("       您输入条形码不存在销售单中");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(bar_code_win);
			continue;
		}		
		break;
	}while(1);

	//输入数量
	do
	{
		memset(mer_amount,0,sizeof(mer_amount));
		mvwgetnstr(mer_amount_win,0,0,mer_amount,20);
		
		for(i=0;i<strlen(mer_amount);i++)
		{	
			if(isdigit(mer_amount[i]))
			{
				continue;
			}
			temp = 1;
			ShowMessage("      销售单号只允许输入数字");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(mer_amount_win);
			break;
		}
		if(1 == temp)
		{
			temp  = 0;
			continue;
		}
		amount = atoi(mer_amount);
		
		if(amount > buf)
		{
			ShowMessage("         你输入的商品数量太大了");
			touchwin(sell_main_win);
			wrefresh(sell_main_win);
			touchwin(good_return_win);
			wrefresh(good_return_win);
			wclrtoeol(mer_amount_win);
			continue;
		}			
		break;
	}while(1);

	/*数据输入并验证过了后,对2张表修改,商品表中的库存已经
	明细表中的销售数量,销售明细表中生成一个数量位负数的单
	*/

	//退货商品的后面4个识别位已9001开始
	strncpy(SELL_DETAIL_NO,"9001",strlen("9001"));

	sell_detail_no = atoi(SELL_DETAIL_NO);
	sprintf(SELL_DETAIL_NO,"%04d",sell_detail_no);
	//通过这个语句查询商品价格
	if(SearchBarCode(bar_code,MER_NAME,MER_UNIT,MER_SPEC,&MER_PRICE,&MER_STOCK))
	{
		;
	}
	//Alter_Mer_Stock--修改库存,Save_Sell_Detail
	if(Alter_Mer_Stock(bar_code,-amount) && Save_Sell_Detail(System_Time,sell_no,bar_code,-amount,MER_PRICE,SELL_DETAIL_NO))
	{
			ShowMessage("             退货成功");
			touchwin(good_return_win);
			wrefresh(good_return_win);
	}
	else
	{
			ShowMessage("             退货失败");
			touchwin(good_return_win);
			wrefresh(good_return_win);
	}
	//销售号的后4位+1
	sell_detail_no = atoi(SELL_DETAIL_NO);
	sell_detail_no++;
	sprintf(SELL_DETAIL_NO,"%04d",sell_detail_no);

	delwin(good_return_win);
	touchwin(sell_main_win);
	wrefresh(sell_main_win);
	touchwin(sellinfo_win);
	wrefresh(sellinfo_win);
}

⌨️ 快捷键说明

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