?? loginwindow.c
字號:
#include "ncurlib.h"
#include "loginwindow.h"
#include <ncurses.h>
#include "public.h"
#include "oradb.h"
#include "link.h"
#include<string.h>
#include <stdlib.h>
char save_sale_id[3][19];//掛單號保存
int save_sale_count=0;//掛單數(shù)量總值統(tǒng)計
/*===================================================
function:登陸界面窗口與功能實現(xiàn)
=================================================*/
void log_in_win()
{
char dbausr[20]={'\0'};//數(shù)據(jù)庫用戶名
char dbapwd[20]={'\0'};//數(shù)據(jù)庫密碼
char user[7]="\0";//帳號
char pwd[13]="\0";//密碼
int ch,res;
int now_col,now_row;
int now_col1,now_row1;
int cnt=0;
int cnt1=0;
int l=0;
int i=0;
init_ncurses();
WINDOW *background,*front,*footer,*log_back,*account,*passwd;
WINDOW *dialog[3]={NULL};
//上方標題窗口
front=create_win(1,80,0,0);
wbkgd(front,COLOR_PAIR(1));
mvwprintw(front,0,0,"超市收銀系統(tǒng)");
wrefresh(front);
//中間部分窗口
background=create_win(22,80,1,0);
wbkgd(background,COLOR_PAIR(2));
mvwprintw(background,20,22,"前后臺提供一個F1鍵返回上一層功能");
wrefresh(background);
//登陸窗口背景窗口
log_back=create_win(10,40,8,22);
wbkgd(log_back,COLOR_PAIR(6));
wrefresh(log_back);
//底部標題窗口
footer=create_win(1,80,23,0);
wbkgd(footer,COLOR_PAIR(1));
mvwprintw(footer,0,0,"Linux POS Version 1.0 Author LiDengFeng");
wrefresh(footer);
//登陸窗口
print_dialog_box(10,40,"歡迎進入登錄窗口",1,dialog);
mvwprintw(dialog[0],2,8,"帳號:");
mvwprintw(dialog[0],4,8,"密碼:");
wrefresh(dialog[0]);
keypad(dialog[1],TRUE);
keypad(dialog[2],TRUE);
//帳戶窗口
account=create_win(1,16,9,34);
keypad(account,TRUE);
wbkgd(account,COLOR_PAIR(4));
wrefresh(account);
//密碼窗口
passwd=create_win(1,16,11,34);
keypad(passwd,TRUE);
wbkgd(passwd,COLOR_PAIR(4));
wrefresh(passwd);
scr_dump("login.scr");
ACCOUNT://帳戶ID輸入
wmove(account,0,0);
wprintw(account,user);
wrefresh(account);
while(1)
{
ch=wgetch(account);
switch (ch)
{
case KEY_BACKSPACE: //按退格鍵盤
if (cnt>0)
{
getyx(account,now_col,now_row);
mvwaddch(account,now_col,--now_row,' ');
user[--cnt]='\0';
wmove(account,0,now_row);
wrefresh(account);
}
break;
case KEY_LEFT:
case KEY_RIGHT:
case KEY_UP:
break;
case KEY_DOWN:
case '\n':
goto PASSWD;
break;
default:
//過濾掉非數(shù)字
if (ch>='0'&&ch<='9'&&cnt<6)
{
now_row++;
waddch(account,ch);
user[cnt]=ch;
user[++cnt]='\0';
wrefresh(account);
break;
}
}
}
PASSWD://帳戶密碼輸入
wmove(passwd,0,0);
l=strlen(pwd);
for ( i=0; i<=l-1; i++)
{
waddch(passwd,'*');//密碼以*號形式進行輸出
}
wrefresh(passwd);
while (1)
{
ch=wgetch(passwd);
switch (ch)
{
case KEY_BACKSPACE: //按退格鍵盤
if (cnt1>0)
{
getyx(passwd,now_col1,now_row1);
mvwaddch(passwd,now_col1,--now_row1,' ');
wmove(passwd,now_col1,now_row1);
pwd[--cnt1]='\0';
wrefresh(passwd);
}
break;
case KEY_LEFT:
case KEY_RIGHT:
break;
case KEY_UP:
goto ACCOUNT;
case KEY_DOWN:
case '\n':
goto ENSURE;
default:
if (cnt1>=12)
{
break;
}
if ( (ch>='0'&&ch<='9') || (ch>='a'&&ch<='z') || (ch>='A'&&ch<='Z') )
{
now_row1++;
waddch(passwd,'*');
pwd[cnt1]=ch;
pwd[++cnt1]='\0';
wrefresh(passwd);
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_LEFT:
case KEY_DOWN:
break;
case KEY_UP:
wattroff(dialog[1],A_REVERSE);//關閉反白顯示
mvwprintw(dialog[1],1,2, "確定");
wrefresh(dialog[1]);
goto PASSWD;
case KEY_RIGHT:
wattroff(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "確定");
wrefresh(dialog[1]);
goto CANCEL;
case '\n':
//驗證用戶名密碼格式是否正確
if (cnt!=6)
{
Message("請輸入6位數(shù)字賬號",8,38);
scr_restore("login.scr");
user[0]='\0';//帳號
pwd[0]='\0';//密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
if (cnt1<6||cnt>12)
{
Message("密碼長度錯誤,請輸入6-12位密碼",8,38);
scr_restore("login.scr");
user[0]='\0';//帳號
pwd[0]='\0';//密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
//連接數(shù)據(jù)庫
get_dba_cnf(dbausr,dbapwd);
if (connect_db(dbausr,dbapwd)==0)
{
Message("連接數(shù)據(jù)庫不成功!",10,40);
endwin();
exit(1);
}
//檢查用戶名是否存在
{
STAFF *staff = (STAFF *)malloc(sizeof(STAFF));
strcpy(staff->staff_id,user);
res = check_staff(staff);
if (res==0)
{
Message("你輸入的帳戶ID不存在!",8,38);
scr_restore("login.scr");
user[0]='\0';//賬戶帳號
pwd[0]='\0';//賬戶密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
}
//驗證用戶名密碼是否正確;
res=check_login(user,pwd);
if (res==0)
{
Message("密碼錯誤!",8,38);
scr_restore("login.scr");
user[0]='\0';//帳號
pwd[0]='\0';//密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
//驗證帳戶登陸前臺還是后臺
int isAdmin= check_admin_other(user,res);
if (isAdmin==2)
{
//收銀員登陸
deal_main_win(user);
scr_restore("login.scr");
user[0]='\0';//帳戶ID
pwd[0]='\0';//帳戶密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
if (isAdmin==1 || isAdmin==0)
{
//管理員和超級管理員登陸
manage_main_win();
scr_restore("login.scr");
user[0]='\0';//帳戶ID
pwd[0]='\0';//帳戶密碼
now_col=0;
now_row=0;
now_col1=0;
now_row1=0;
cnt=0;
cnt1=0;
goto ACCOUNT;
}
}
}
CANCEL:
wattron(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
while (1)
{
ch=wgetch(dialog[2]);
switch (ch)
{
case KEY_UP:
case KEY_DOWN:
case KEY_RIGHT:
break;
case KEY_LEFT:
wattroff(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
goto ENSURE;
case '\n':
endwin();
exit(1);
}
}
}
/*========================================================
function:收銀主窗口與功能實現(xiàn)
=========================================================*/
void deal_main_win(char *usr)
{
init_ncurses();
WINDOW *win;//主窗體
win=create_win(24,80,0,0);
keypad(win,TRUE);
box(win,0,0);
print_line(win,2);
print_line(win,4);
print_line(win,19);
print_line(win,21);
mvwprintw(win,0,32,"歡迎光臨XXX超市");
mvwprintw(win,1,1,"收銀員:");
STAFF *staff_info=(STAFF *)malloc(sizeof(STAFF));
get_staffinfo(staff_info,usr);
wprintw(win,"%s",staff_info->staff_name);
mvwprintw(win,1,19,"等級:");
if (staff_info->staff_type==2)
{
wprintw(win,"收銀員");
}
PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
SEQID *seq_id=(SEQID *)malloc(sizeof(SEQID));
mvwprintw(win,1,34,"交易號:");
get_seq_trans_id(seq_id);
wprintw(win,"%s",seq_id->seq_trans_id);
mvwprintw(win,1,49,"時間:");
char systime[20]={'\0'};
get_system_time(win,systime);
wprintw(win,"%s",systime);
mvwprintw(win,3,1,"%-5s%-10s%-23s%-6s%-6s%-10s%-6s%-12s","序號","條形碼","商品名稱","規(guī)格","單位","單價","數(shù)量","金額");
mvwprintw(win,22,1,"F2:新增明細 F3:刪除明細 F4:收銀 F5:掛單 F6:取單 F7:撤單 F8:退貨 F9:退出");
mvwprintw(win,20,50,"銷售狀態(tài):正常");
mvwprintw(win,20,1,"條形碼:");
wrefresh(win);
//打印商品信息窗口
WINDOW *print_window=NULL;
print_window=create_win(14,78,5,1);
wbkgd(print_window,COLOR_PAIR(6));
keypad(print_window,TRUE);
wrefresh(print_window);
//條形碼窗口
int ch;
char barCode[9]={"CN"};
WINDOW *code=NULL;
code=create_win(1,12,20,8);
keypad(code,TRUE);
wbkgd(code,COLOR_PAIR(1));
wprintw(code,"%s",barCode);
wrefresh(code);
int cnt=2;
int now_col=0;
int now_row=2;
wmove(code,now_col,now_row);
scr_dump("dealwin.scr");
int i=0;
int cur=0;
int res=0;
SALE *sale_info=(SALE *)malloc(sizeof(SALE));
salelist.clear_link(&salelist);
while(1)
{
wrefresh(win);
ch=wgetch(code);
switch (ch)
{
case KEY_BACKSPACE: //按退格鍵盤
if (cnt>2)
{
getyx(code,now_col,now_row);
mvwaddch(code,now_col,--now_row,' ');
barCode[--cnt]='\0';
wmove(code,0,now_row);
wrefresh(code);
}
break;
case KEY_F(2):
add_new_detail_win(cur);
scr_restore("dealwin.scr");
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(3):
if (delete_detail_win(cur)==1)
{
cur--;
}
scr_restore("dealwin.scr");
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(4):
strcpy(sale_info->sale_id,systime);
strcat(sale_info->sale_id,seq_id->seq_trans_id);
strcpy(sale_info->trans_id,seq_id->seq_trans_id);
strcpy(sale_info->staff_id,usr);
strcpy(sale_info->sale_date,systime);
if(finish_deal_win(sale_info))
{
mvwprintw(win,1,34,"交易號:");
get_seq_trans_id(seq_id);
wprintw(win,"%s",seq_id->seq_trans_id);
mvwprintw(win,1,49,"時間:");
get_system_time(win,systime);
wprintw(win,"%s",systime);
}
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(5):
strcpy(sale_info->sale_id,systime);
strcat(sale_info->sale_id,seq_id->seq_trans_id);
strcpy(sale_info->trans_id,seq_id->seq_trans_id);
strcpy(sale_info->staff_id,usr);
strcpy(sale_info->sale_date,systime);
if(suspend_deal_win(sale_info))
{
mvwprintw(win,1,34,"交易號:");
get_seq_trans_id(seq_id);
wprintw(win,"%s",seq_id->seq_trans_id);
mvwprintw(win,1,49,"時間:");
get_system_time(win,systime);
wprintw(win,"%s",systime);
}
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(6):
fetch_deal_win();
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(7):
remove_deal_win();
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(8):
return_purchase();
touchwin(win);
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_F(9):
if (salelist.count)
{
message_botton("有銷售單未結(jié)算,不可以退出!",10,40);
}
else if (save_sale_count!=0)
{
message_botton("有掛單未處理,不可以退出!",10,40);
}
else
{
if ( message_botton("確定要退出銷售界面",10,40) )
{
return;
}
}
print_sale_product(print_window,cur);
wrefresh(win);
wrefresh(print_window);;
now_row=2;
cnt=2;
mvwprintw(code,0,0,"CN ");
wmove(code,0,now_row);
barCode[2]='\0';
wrefresh(code);
break;
case KEY_UP:
if (cur>1)
{
wclear(print_window);
print_sale_product(print_window,--cur);
}
break;
case KEY_DOWN:
if (cur<salelist.count)
{
wclear(print_window);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -