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

📄 accountmanager.c

📁 在linux平台下模拟超市的收银系统即POS机
💻 C
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////
//					帐户管理
//////////////////////////////////////////////////////////////////////////
#include <ncurses.h>
#include <stdlib.h>
#include "PosSystem.h"
#include "OracleDB.h"
//帐户管理窗品  
//返回0为返回后台管理界面 
//返回1为进入查询帐户
//返回2为进入添加帐户
//返回3为进入修改帐户
//返回4为进入删除帐户
int AccountManagerWin()
{
	int ch,choose=0;
	//后台管理界面的背景窗口
	WINDOW * AccountManagerWin=CreateWindow(25,80,0,0,Yes,BLUE_WHITE);
	StringCenterPrint(AccountManagerWin,5,"帐户管理");
	char menu1[]="1.查询帐户";
	char menu2[]="2.添加帐户";
	char menu3[]="3.修改帐户";
	char menu4[]="4.删除帐户";
	char menu5[]="0.返回后台管理界面";
	mvwprintw(AccountManagerWin,9,35,menu1);
	mvwprintw(AccountManagerWin,11,35,menu2);
	mvwprintw(AccountManagerWin,13,35,menu3);
	mvwprintw(AccountManagerWin,15,35,menu4);
	mvwprintw(AccountManagerWin,17,35,menu5);
	wrefresh(AccountManagerWin);
	curs_set(0);//参数0为不显示光标 如参数为1时为显示
	while(1)
	{
SearchCommodity://查询商品
		while(1)
		{
			StringRevers(AccountManagerWin,9,35,menu1);
			ch=GetChar(AccountManagerWin,9,35);
			switch(ch)
			{
			case KEY_DOWN:
				mvwprintw(AccountManagerWin,9,35,menu1);
				goto AddCommodity;
				break;
			case '\n':
				choose=1;
				goto exit;
			}
		}

AddCommodity://添加商品
		while(1)
		{
			StringRevers(AccountManagerWin,11,35,menu2);
			ch=GetChar(AccountManagerWin,11,35);
			switch(ch)
			{
			case KEY_UP:
				mvwprintw(AccountManagerWin,11,35,menu2);
				goto SearchCommodity;
				break;
			case KEY_DOWN:
				mvwprintw(AccountManagerWin,11,35,menu2);
				goto ModifyCommodity;
				break;
			case '\n':
				choose=2;
				goto exit;
			}
		}
ModifyCommodity://修改商品
		while(1)
		{
			StringRevers(AccountManagerWin,13,35,menu3);
			ch=GetChar(AccountManagerWin,13,35);
			switch(ch)
			{
			case KEY_UP:
				mvwprintw(AccountManagerWin,13,35,menu3);
				goto AddCommodity;
				break;
			case KEY_DOWN:
				mvwprintw(AccountManagerWin,13,35,menu3);
				goto DelCommodity;
				break;
			case '\n':
				choose=3;
				goto exit;
			}
		}

DelCommodity://删除商品
		while(1)
		{
			StringRevers(AccountManagerWin,15,35,menu4);
			ch=GetChar(AccountManagerWin,15,35);
			switch(ch)
			{
			case KEY_UP:
				mvwprintw(AccountManagerWin,15,35,menu4);
				goto ModifyCommodity;
				break;
			case KEY_DOWN:
				mvwprintw(AccountManagerWin,15,35,menu4);
				goto ReturnToBackManager;
				break;
			case '\n':
				choose=4;
				goto exit;
			}
		}
ReturnToBackManager:// 退出进入后台界面
		while(1)
		{
			StringRevers(AccountManagerWin,17,35,menu5);
			ch=GetChar(AccountManagerWin,17,35);
			switch(ch)
			{
			case KEY_UP:
				mvwprintw(AccountManagerWin,17,35,menu5);
				goto DelCommodity;
				break;
			case '\n':
				choose=0;
				goto exit;
			}
		}		
	}
exit:
	DestroyWindow(AccountManagerWin);
	curs_set(1);//参数0为不显示光标 如参数为1时为显示
	return choose;
}




//添加帐户窗口
int AddAccountWin()
{
	int ch,result=0;
	//帐户管理界面的背景窗口
	WINDOW * AddAccountWindow=CreateWindow(25,80,0,0,Yes,BLUE_WHITE);
	StringCenterPrint(AddAccountWindow,0,"欢迎光临XXX超市");
	StringCenterPrint(AddAccountWindow,3,"添加帐户");
	
	char IDStr[10]={'\0'};//存放帐户ID
	char nameStr[20]={'\0'};//存放帐户名称
	char passwordStr[20]={'\0'};//存放密码
	char typeStr[30]={'\0'};//存放身份
	char remarkStr[40]={'\0'};//存放备注

	mvwprintw(AddAccountWindow,6,12,"帐户ID:");
	mvwprintw(AddAccountWindow,8,12,"用户名:");
	mvwprintw(AddAccountWindow,10,14,"密码:");
	mvwprintw(AddAccountWindow,12,14,"身份:");
	mvwprintw(AddAccountWindow,14,14,"备注:");

	wrefresh(AddAccountWindow);	
	//输入框
	WINDOW * ID=CreateWindow(1,45,6,21,No,WHITE_BLACK);//帐户ID窗口
	WINDOW * name=CreateWindow(1,45,8,21,No,WHITE_BLACK);//帐户名称窗口
	WINDOW * password=CreateWindow(1,45,10,21,No,WHITE_BLACK);//密码窗口
	WINDOW * type=CreateWindow(1,45,12,21,No,WHITE_BLACK);//身份窗口
	WINDOW * remark=CreateWindow(1,45,14,21,No,WHITE_BLACK);//备注窗口


	//刷新输入框
	wrefresh(ID);
	wrefresh(name);
	wrefresh(password);
	wrefresh(type);
	wrefresh(remark);

	WINDOW * ok_button=CreateWindow(3,8,20,25,Yes,RED_WHITE);
	mvwprintw(ok_button,1,2,"确定");
	wrefresh(ok_button);

	WINDOW * exit_button=CreateWindow(3,8,20,45,Yes,RED_WHITE);
	mvwprintw(exit_button,1,2,"退出");
	wrefresh(exit_button);

	//wgetch(AddCommodityWin);
 	curs_set(1);//参数0为不显示光标 如参数为1时为显示
	while(1)
	{
ID://帐户ID
		while(1)
		{
			ch=GetNumber(ID,0,0,IDStr,6);
			switch(ch)
			{
			case KEY_DOWN:
			case '\n':
				goto name;
				break;
			}
		}

name://帐户名
		while(1)
		{
			ch=GetString(name,0,0,nameStr,15);
			switch(ch)
			{
			case KEY_UP:
				goto ID;
				break;
			case KEY_DOWN:
			case '\n':
				goto password;
				break;
			}
		}
password://密码
		while(1)
		{
			ch=GetString(password,0,0,passwordStr,16);
			switch(ch)
			{
			case KEY_UP:
				goto name;
				break;
			case KEY_DOWN:
			case '\n':
				goto type;
				break;
			}
		}

type://身份 
		while(1)
		{
			ch=GetNumber(type,0,0,typeStr,1);
			switch(ch)
			{
			case KEY_UP:

				goto password;
				break;
			case KEY_DOWN:
			case '\n':
				goto remark;
				break;
			}
		}

remark://备注
		while(1)
		{
			ch=GetNumber(remark,0,0,remarkStr,29);
			switch(ch)
			{
			case KEY_UP:

				goto type;
				break;
			case KEY_DOWN:
			case '\n':
				//开启"正确"按钮的回显
				wmove(ok_button,1,2);
				//mvchgat(1,2,4,A_BLINK,RED_WHITE,NULL);  //在ncurses书的第26页有注释
				//对 "正确"字符反白
				wattron(ok_button,A_REVERSE);
				mvwprintw(ok_button,1,2,"正确");
				wrefresh(ok_button);
				goto ok_button;
				break;
			}
		}
ok_button:// 确定按钮
		while(1)
		{
			ch=GetChar(ok_button,1,6);
			//ch=GetChar(ok_button,0,0);
			switch(ch)
			{
				//case KEY_LEFT:
				case KEY_UP://转上面
					wattroff(ok_button,A_REVERSE);
					wmove(ok_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);
					goto remark;
					break;
				case KEY_RIGHT:
				case KEY_DOWN:
					//关掉正确按钮的回显
					wattroff(ok_button,A_REVERSE);
					wmove(ok_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);

					//开启退出按钮的回显
					wmove(exit_button,1,2);
					wattron(exit_button,A_REVERSE);
					mvwprintw(exit_button,1,2,"退出");
					wrefresh(exit_button);
					goto exit_button;
					break;
				case '\n':
					{
						int isExist;
						if(isNull(IDStr))
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","员工ID不能为空");
							goto ID;
						}
						isExist=search_staff_id_exist(IDStr);
						if(isExist==0)//为0代表员工号存在
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","该员工号以存在请重新输入");
							goto ID;
							break;
						}

						if(isNull(nameStr))
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","用户名称不能为空");
							goto name;
						}
						if(isNull(passwordStr))
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","用户密码不能为空");
							goto password;
						}
						if(strlen(passwordStr)<6 || strlen(passwordStr)>12)
						{
							Message_Box(10,36,10,10,RED_BLACK,"提示","用户密码只能是6-12个字符");
							goto password;
						}
						if(isNull(typeStr))
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","身份类型不能为空");
							goto type;
						}
						if(atoi(typeStr)<0 || atoi(typeStr)>2)
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","身份类型只能是0,1,2");
							goto type;
						}
						if(isNull(remarkStr))
						{
							sprintf(remarkStr," ");
						}


						Insert_Into_Staff(IDStr,nameStr,passwordStr,atoi(typeStr),remarkStr);
					}
					result=0;
					goto exit;		
			}
		}
exit_button://退出按钮		
		while(1)
		{
			ch=GetChar(exit_button,1,6);
			switch(ch)
			{
				case KEY_UP:
				case KEY_LEFT://转上面

					//关掉'退出'回显
					wattroff(exit_button,A_REVERSE);
					wmove(exit_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(exit_button,1,2,"退出");
					wrefresh(exit_button);

					//开启"正确"按钮的回显
					wmove(ok_button,1,2);
					//mvchgat(1,2,4,A_BLINK,RED_WHITE,NULL);  //在ncurses书的第26页有注释
					//对 "正确"字符反白
					wattron(ok_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);

					goto ok_button;
					break;
				case '\n':
					result=1;//返回1为退出
					goto exit;
			}		
		}
	}

exit:

	DestroyWindow(AddAccountWindow);
	DestroyWindow(ID);
	DestroyWindow(name);
	DestroyWindow(password);
	DestroyWindow(type);
	DestroyWindow(remark);
	DestroyWindow(ok_button);
	DestroyWindow(exit_button);
	wclear(stdscr);
	return result;
}


//帐户ID输入窗口
int AccountIDInputWin(char * title,char * staff_id,staff * pStaff)
{
	int ch,result=0;
	//帐户管理界面的背景窗口
	WINDOW * AccountIDInputWin=CreateWindow(25,80,0,0,Yes,BLUE_WHITE);
	StringCenterPrint(AccountIDInputWin,0,"欢迎光临XXX超市");
	StringCenterPrint(AccountIDInputWin,3,title);
	
	//char IDStr[10]={'0'};//存放帐户ID
	
	mvwprintw(AccountIDInputWin,10,12,"帐户ID:");

	wrefresh(AccountIDInputWin);	
	//输入框
	WINDOW * ID=CreateWindow(1,45,10,21,No,WHITE_BLACK);//帐户ID窗口

	//刷新输入框
	wrefresh(ID);

	WINDOW * ok_button=CreateWindow(3,8,20,25,Yes,RED_WHITE);
	mvwprintw(ok_button,1,2,"确定");
	wrefresh(ok_button);

	WINDOW * exit_button=CreateWindow(3,8,20,45,Yes,RED_WHITE);
	mvwprintw(exit_button,1,2,"退出");
	wrefresh(exit_button);

	//wgetch(AddCommodityWin);
 	curs_set(1);//参数0为不显示光标 如参数为1时为显示
	while(1)
	{
ID://帐户ID
		while(1)
		{
			ch=GetNumber(ID,0,0,staff_id,6);
			switch(ch)
			{
			case KEY_DOWN:
			case '\n':
				//开启"正确"按钮的回显
				wmove(ok_button,1,2);
				//mvchgat(1,2,4,A_BLINK,RED_WHITE,NULL);  //在ncurses书的第26页有注释
				//对 "正确"字符反白
				wattron(ok_button,A_REVERSE);
				mvwprintw(ok_button,1,2,"正确");
				wrefresh(ok_button);
				goto ok_button;
				break;
			}
		}

ok_button:// 确定按钮
		while(1)
		{
			ch=GetChar(ok_button,1,6);
			//ch=GetChar(ok_button,0,0);
			switch(ch)
			{
				//case KEY_LEFT:
				case KEY_UP://转上面
					wattroff(ok_button,A_REVERSE);
					wmove(ok_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);
					goto ID;
					break;
				case KEY_RIGHT:
				case KEY_DOWN:
					//关掉正确按钮的回显
					wattroff(ok_button,A_REVERSE);
					wmove(ok_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);

					//开启退出按钮的回显
					wmove(exit_button,1,2);
					wattron(exit_button,A_REVERSE);
					mvwprintw(exit_button,1,2,"退出");
					wrefresh(exit_button);
					goto exit_button;
					break;
				case '\n':
					{
						int isExist;
						isExist=Get_Staff_By_ID(staff_id,pStaff);
						//mvwprintw(AccountIDInputWin,0,0,staff_id);
						//wrefresh(AccountIDInputWin);
						if(isExist!=0)
						{
							Message_Box(10,30,10,10,RED_BLACK,"提示","输入的员工ID不存在");
							
							//关掉正确按钮的回显
							wattroff(ok_button,A_REVERSE);
							wmove(ok_button,1,2);
							//wattron(exit_button,A_REVERSE);
							mvwprintw(ok_button,1,2,"正确");
							wrefresh(ok_button);
							
							wclear(AccountIDInputWin);
							wrefresh(AccountIDInputWin);

							goto ID;
							break;
						}
					}
					result=0;
					goto exit;		
			}
		}
exit_button://退出按钮		
		while(1)
		{
			ch=GetChar(exit_button,1,6);
			switch(ch)
			{
				case KEY_UP:
				case KEY_LEFT://转上面

					//关掉'退出'回显
					wattroff(exit_button,A_REVERSE);
					wmove(exit_button,1,2);
					//wattron(exit_button,A_REVERSE);
					mvwprintw(exit_button,1,2,"退出");
					wrefresh(exit_button);

					//开启"正确"按钮的回显
					wmove(ok_button,1,2);
					//mvchgat(1,2,4,A_BLINK,RED_WHITE,NULL);  //在ncurses书的第26页有注释
					//对 "正确"字符反白
					wattron(ok_button,A_REVERSE);
					mvwprintw(ok_button,1,2,"正确");
					wrefresh(ok_button);

					goto ok_button;
					break;
				case '\n':
					result=1;//返回1为退出
					goto exit;
			}		
		}
	}

exit:

	DestroyWindow(AccountIDInputWin);
	DestroyWindow(ID);
	DestroyWindow(ok_button);
	DestroyWindow(exit_button);
	wclear(stdscr);
	return result;
}







//修改帐户窗口
int ModifyAccountWin(staff * staff_info)
{
	int ch,result=0;
	//帐户管理界面的背景窗口
	WINDOW * ModifyAccountWin=CreateWindow(25,80,0,0,Yes,BLUE_WHITE);
	StringCenterPrint(ModifyAccountWin,0,"欢迎光临XXX超市");
	StringCenterPrint(ModifyAccountWin,3,"修改帐户");
	
	char IDStr[10]={'\0'};//存放帐户ID
	char nameStr[20]={'\0'};//存放帐户名称
	char passwordStr[20]={'\0'};//存放密码
	char typeStr[30]={'\0'};//存放身份
	char remarkStr[40]={'\0'};//存放备注
	Trim(staff_info->id);
	Trim(staff_info->name);
	Trim(staff_info->pwd);
	Trim(staff_info->remark);

	strcpy(IDStr,staff_info->id);
	strcpy(nameStr,staff_info->name);
	strcpy(passwordStr,staff_info->pwd);
	sprintf(typeStr,"%d",staff_info->type);
	strcpy(remarkStr,staff_info->remark);



	mvwprintw(ModifyAccountWin,6,12,"帐户ID:");
	mvwprintw(ModifyAccountWin,8,12,"用户名:");
	mvwprintw(ModifyAccountWin,10,14,"密码:");
	mvwprintw(ModifyAccountWin,12,14,"身份:");
	mvwprintw(ModifyAccountWin,14,14,"备注:");

	wrefresh(ModifyAccountWin);	
	//输入框
	WINDOW * ID=CreateWindow(1,45,6,21,No,WHITE_BLACK);//帐户ID窗口
	WINDOW * name=CreateWindow(1,45,8,21,No,WHITE_BLACK);//帐户名称窗口
	WINDOW * password=CreateWindow(1,45,10,21,No,WHITE_BLACK);//密码窗口
	WINDOW * type=CreateWindow(1,45,12,21,No,WHITE_BLACK);//身份窗口
	WINDOW * remark=CreateWindow(1,45,14,21,No,WHITE_BLACK);//备注窗口

	Trim(IDStr);
	Trim(nameStr);
	Trim(passwordStr);
	Trim(typeStr);
	Trim(remarkStr);
	mvwprintw(ID,0,0,IDStr);
	mvwprintw(name,0,0,nameStr);
	mvwprintw(password,0,0,passwordStr);
	mvwprintw(type,0,0,typeStr);
	mvwprintw(remark,0,0,remarkStr);

	//刷新输入框
	wrefresh(ID);

⌨️ 快捷键说明

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