📄 dongyi.c
字号:
//界面函数库
#include "fPublic.h"
#include "fDongYi.h"
#include "fWorkFnc.h"
#include "Messagebox.h"
#define FIELD_LEN_FIELD 16 //默认的表单长度(英文)
#define FIELD_LEN_START 4 //默认的表单长度(中文)
int sfxFormRecCnt(char *sBillName,DB_HANDLE hRec,DB_HANDLE hInfo,char *sMsg,char *sBillNo,char *sCount,char *sTmpBuff);
void Sfx_MenuMain(void);
int sfxMenuMain(void);
void Sfx_FormRecCnt(char *sBillName);
void Sfx_FormDelete(void);
int sfxFormDelete(void);
void Sfx_FormCodeId(void);
int sfxFormCodeId(void);
int main(void)
{
int Item_no,Item_sub,Is_Run=1;
char msg[20]={0};
initscr(); // 对ncurses包进行初始化
cbreak(); // 控制程序--读取除了DELETE或者CTRL等特殊字符以外的所有字符
noecho(); // 使键盘输入的字符不需要直接在屏幕上显示出来
keypad(stdscr, TRUE);
DB_Initial() ; // 初始化数据库系统
Sfx_MenuMain();
//stAddNewRec();
exit:
DB_Uninitial() ; // 释放数据库系统所占用的资源
endwin() ;
return 0 ;
}
void Sfx_MenuMain(void)
{
int iRunState=SFX_CYC_START;
int iResult=SFX_RUN_START;
DB_HANDLE hdb;
int iItem_No;
char sBillName[50];
while(iRunState)
{
switch(iResult)
{
case SFX_RUN_START:
{
//调用主功能函数
iItem_No=sfxMenuMain();
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
switch(iItem_No)
{
case 0:case -1:
{
iResult=SFX_RUN_CANCEL;//停止执行
break;
}
case 1://出库
{
if(sfxPreRecCnt(sBillName)>0)
{
sfxTrim(sBillName);
if(!sfxIsNull(sBillName)) Sfx_FormRecCnt(sBillName);
}
else
{
MessageBox("请设置操作员代码!",ONLY_OK);
}
break;
}
case 2://通讯
{
if(MessageBox("上传将清除所有记录\n是否上传!",OK_CANCEL)!=KEY_F(12))
{
sfxUploadFiles(SFX_BAND_RATE_DEF);
}
break;
}
case 3://查询及删除
{
Sfx_FormDelete();
break;
}
case 4: //操作员代码
{
Sfx_FormCodeId();
}
break;
case 5://版权
{
MessageBox("广州一维 版权所有\n\n服务请登陆\nwww.ewaytech.com.cn\n查询联系方式",ONLY_OK);
break;
}
}
break;
}
case SFX_RUN_CANCEL:
{
//退出循环,返回上层菜单
iRunState=SFX_CYC_STOP;
iResult=SFX_RUN_START;
break;
}
case SFX_RUN_ERROR:
{
//调用错误处理界面
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
default:
{
iResult=SFX_RUN_START;//默认继续执行
iRunState=SFX_CYC_START;
break;
}
}
}
}
int sfxMenuMain(void)
{
MENU *Menu;
int Item_No;
char Items_Name[5][ITEM_LEN]={"1.出库","2.通讯","3.查询及删除","4.操作员代码","5.版权"};
sys_select_ime(IME_NUM|IME_LOWER|IME_UPPER|IME_CN);
clear() ; // 清空屏幕内容
mvprintw( 0 , 0 , "广州一维数据采集系统" ) ;
mvprintw( 1 , 0 , "──────────" ) ;
mvprintw( 8 , 0 , "──────────" ) ;
mvprintw( 9 , 0 , "返回 确定" ) ;
Menu = Creat_Window_Menu( Items_Name , 0 , 5 , 5 , 2 , 0 ) ;
if(Menu==0)
{
//内存不足或Item_Name超长则无法建立菜单
mvprintw( 2 , 0 , "建立菜单失败!!" ) ; // 打印错误信息
getch() ; // 等待用户按键
goto exit ;
}
Item_No=Get_Selected_Menu_Item(Menu);
Free_Menu(Menu);
return Item_No;
exit:
return SFX_RUN_CANCEL;
}
void Sfx_FormRecCnt(char *sBillName)
{
int iRunState=SFX_CYC_START;
int iResult=SFX_RUN_START;
char sMsg[20]={0};
char sBillNo[30]={0},sCount[30]={0};
char sTmpBuff[50]={0};
DB_HANDLE hRec, hInfo;
//打开数据库
//盘点
sfxDetailOpen(&hRec);
//库存
sfxWorkIdOpen(&hInfo);
while(iRunState)
{
switch(iResult)
{
case SFX_RUN_START:
{
//调用主功能函数
iResult=sfxFormRecCnt(sBillName,hRec,hInfo,sMsg,sBillNo,sCount,sTmpBuff);
iRunState=SFX_CYC_START;
break;
}
case SFX_RUN_CANCEL:
{
//退出循环,返回上层菜单
iResult=SFX_RUN_START;
iRunState=SFX_CYC_STOP;
break;
}
case SFX_RUN_ERROR:
{
//调用错误处理界面
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
default: //扩展功能处理
{
//switch(iResult)
//{
//}
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
}
}
DB_Close(hRec);
DB_Close(hInfo);
}
void Sfx_FormDelete(void)
{
int iRunState=SFX_CYC_START;
int iResult=SFX_RUN_START;
while(iRunState)
{
switch(iResult)
{
case SFX_RUN_START:
{
//调用主功能函数
iResult=sfxFormDelete();
iRunState=SFX_CYC_START;
break;
}
case SFX_RUN_CANCEL:
{
//退出循环,返回上层菜单
iResult=SFX_RUN_START;
iRunState=SFX_CYC_STOP;
break;
}
case SFX_RUN_ERROR:
{
//调用错误处理界面
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
default: //扩展功能处理
{
//switch(iResult)
//{
//}
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
}
}
}
int sfxFormDelete(void)
{
//创建表单
// 域指针数组
FIELD *Field[5 + 1 ];
FORM *Form; // 表单指针
int i,IsRun,key;
int k,iErrCode;
char sBuff[50]={0};
char sCurValue[30];
char sBillNo[30]={0},sCount[30]={0};
char sKey[50]={0};
int iReCode=SFX_RUN_START;
DB_HANDLE hRec, hInfo;
clear(); // 清屏
//打开数据库
//盘点
sfxDetailOpen(&hRec);
//库存
sfxWorkIdOpen(&hInfo);
keypad(stdscr, TRUE);
// 创建域
// new_field( 行数 , 列数 , 行位置 , 列位置 , 可显示行数(一般为0) , 缓冲区编号(一般为0) )
Field[0] = new_field( 1 , FIELD_LEN_FIELD, 2, 1, 0 , 0);
Field[1] = new_field( 1 , FIELD_LEN_FIELD, 3, 1, 0 , 0);
Field[2] = new_field( 1 , FIELD_LEN_FIELD, 4, 1, 0 , 0);
Field[3] = new_field( 1 , FIELD_LEN_FIELD, 5, 1, 0 , 0);
Field[4] = new_field( 1 , FIELD_LEN_FIELD, 6, 1, 0 , 0);
Field[5] = 0 ; // 域数组最后一个成员指针以0结束
for( i = 0 ; i < 5; i++ ){
if( Field[i] == 0 ){ // 域创建失败
// 显示消息框
// ONLY_OK 表示按任意键继续
MessageBox( "域创建失败" , ONLY_OK ) ;
goto exit ;
}
// 取消 当域输入满之后自动跳到下一个域的选项
field_opts_off( Field[i], O_AUTOSKIP);
// 设置域的背景为下划线
//set_field_back(Field[i], A_UNDERLINE );
// 设置域填充字符为0x81
set_field_pad(Field[i], 0x81);
}
// 根据域指针数组,生成表单
Form = new_form( Field );
// 显示表单
post_form( Form);
//sprintf(sMsg,"单号[%s]",sCurBillNo);
//sfxTrim(sMsg);
mvprintw(0,0,"查询及删除");
mvprintw(1,0,"──────────");
mvprintw(8,0,"──────────");
//mvprintw(8,0,"按F3键删除此单记录");
mvprintw(9,0,"返回 确定");
// 将输入位置定于第一个字段
form_driver( Form, REQ_FIRST_FIELD );
// 设置商品名称的背景为反白
//set_field_back(Field[field_index(current_field(Form))], A_STANDOUT );
set_field_back(Field[field_index(current_field(Form))], A_REVERSE );
refresh();
IsRun = 1 ;
//设置初值
iErrCode=DB_Go_Top(hRec);
for(k=0;k<5;k++)
{
if(iErrCode!=DB_NO_ERROR) break;
iErrCode=sfxDetailGetValue(hRec,sBillNo,sCount);
if(iErrCode==DB_NO_ERROR)
{
if(DB_Is_Deleted(hRec)==DB_RECORD_NOT_DELETE)
{
sprintf(sBuff,"%s %s",sBillNo,sCount);
set_field_buffer(Field[k],0,sBuff);
}
else
{
k--;
}
}
else
{
break;
}
iErrCode=DB_Go_Next(hRec);
}
//sys_open_laser();
while( IsRun )
{
// 刷新屏幕 并 读入用户按键
switch( key = getch() )
{
case _KEY_LASER_BEGIN:
form_driver( Form, REQ_CLR_FIELD );
break ;
case _KEY_LASER_END:
form_driver( Form, REQ_VALIDATION ); // 校验
break ;
case _KEY_ENTER: // LK9000 '确认'键
case _KEY_G: // LK9000 'G'键
case KEY_ENTER: // PC键盘的回车键
form_driver( Form, REQ_VALIDATION );
set_field_back(Field[field_index(current_field(Form))], A_NORMAL );
sprintf(sCurValue,"%s",FIELD_VAL(field_index(current_field(Form))));
sfxTrim(sCurValue);
sprintf(sBuff,"确定删除[%s]",sCurValue);
if(MessageBox(sBuff, OK_CANCEL )!=KEY_F(12))
{
DB_Close(hRec);
DB_Close(hInfo);
sfxDeleteFile(sCurValue);
sfxDetailOpen(&hRec);
sfxWorkIdOpen(&hInfo);
iReCode=SFX_RUN_CANCEL;
IsRun=0;
}
break;
case KEY_F(12):
iReCode=SFX_RUN_CANCEL;
IsRun = 0 ;
break ;
case KEY_RIGHT:
// 下一个字符
form_driver( Form, REQ_NEXT_CHAR);
break;
case KEY_LEFT:
// 上一个字符
form_driver( Form, REQ_PREV_CHAR );
break;
case KEY_DOWN:
// 下一个域
form_driver( Form, REQ_VALIDATION );
strcpy(sKey,FIELD_VAL(field_index(current_field(Form))));
sfxTrim(sKey);
set_field_back(Field[field_index(current_field(Form))], A_NORMAL );
sfxScrollDBEx(Form,Field,hRec,"BILLNO",sKey,1);
set_field_back(Field[field_index(current_field(Form))], A_REVERSE );
break;
case KEY_UP:
// 上一域
form_driver( Form, REQ_VALIDATION );
strcpy(sKey,FIELD_VAL(field_index(current_field(Form))));
sfxTrim(sKey);
set_field_back(Field[field_index(current_field(Form))], A_NORMAL );
sfxScrollDBEx(Form,Field,hRec,"BILLNO",sKey,0);
set_field_back(Field[field_index(current_field(Form))], A_REVERSE );
break;
case _KEY_BS: // LK9000 clr键
case KEY_BACKSPACE: // PC 退格键
// 删除光标前一个字符
form_driver( Form, REQ_DEL_PREV );
break;
default:
// 向当前的域输出字符
//form_driver( Form, key );
break;
}
}
exit:
unpost_form( Form ); // 清除屏幕上的表单
free_form( Form); // 释放表单资源
for( i = 0 ; i < 5; i++ )
free_field( Field[i]); // 释放域所占的资源
//sys_close_laser();
dbExit:
DB_Close(hRec);
DB_Close(hInfo);
return iReCode;
}
void Sfx_FormCodeId(void)
{
int iRunState=SFX_CYC_START;
int iResult=SFX_RUN_START;
while(iRunState)
{
switch(iResult)
{
case SFX_RUN_START:
{
//调用主功能函数
iResult=sfxFormCodeId();
iRunState=SFX_CYC_START;
break;
}
case SFX_RUN_CANCEL:
{
//退出循环,返回上层菜单
iResult=SFX_RUN_START;
iRunState=SFX_CYC_STOP;
break;
}
case SFX_RUN_ERROR:
{
//调用错误处理界面
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
default: //扩展功能处理
{
//switch(iResult)
//{
//}
iResult=SFX_RUN_START;
iRunState=SFX_CYC_START;
break;
}
}
}
}
int sfxFormCodeId(void)
{
//创建表单
// 域指针数组
FIELD *Field[1 + 1 ];
FORM *Form; // 表单指针
int i,IsRun,key;
char sMsg[50];
int iReCode=SFX_RUN_START;
clear(); // 清屏
keypad(stdscr, TRUE);
// 创建域
// new_field( 行数 , 列数 , 行位置 , 列位置 , 可显示行数(一般为0) , 缓冲区编号(一般为0) )
Field[0] = new_field( 1 , 5, 4, FIELD_LEN_START, 0 , 0);
Field[1] = 0 ; // 域数组最后一个成员指针以0结束
for( i = 0 ; i < 1; i++ ){
if( Field[i] == 0 ){ // 域创建失败
// 显示消息框
// ONLY_OK 表示按任意键继续
MessageBox( "域创建失败" , ONLY_OK ) ;
goto exit ;
}
// 取消 当域输入满之后自动跳到下一个域的选项
field_opts_off( Field[i], O_AUTOSKIP);
// 设置域的背景为下划线
set_field_back(Field[i], A_UNDERLINE );
// 设置域填充字符为0x81
set_field_pad(Field[i], 0x81);
}
// 根据域指针数组,生成表单
Form = new_form( Field );
// 显示表单
post_form( Form);
mvprintw(0,0,"操作员代码");
mvprintw(1,0,"──────────");
mvprintw(4,0,"代码");
mvprintw(8,0,"──────────");
mvprintw(9,0,"返回 确定");
// 将输入位置定于第一个字段
form_driver( Form, REQ_FIRST_FIELD );
refresh();
IsRun = 1 ;
//sys_open_laser();
while( IsRun )
{
// 刷新屏幕 并 读入用户按键
switch( key = getch() )
{
case _KEY_LASER_BEGIN:
form_driver( Form, REQ_CLR_FIELD );
break ;
case _KEY_LASER_END:
form_driver( Form, REQ_VALIDATION ); // 校验
break ;
case _KEY_ENTER: // LK9000 '确认'键
case _KEY_G: // LK9000 'G'键
case KEY_ENTER: // PC键盘的回车键
form_driver( Form, REQ_VALIDATION );
//校验位长
if(sfxCheckBillLen(FIELD_VAL(0)))
{
if(sfxSetWorkId(FIELD_VAL(0))==0)
{
sprintf(sMsg,"%s","新建代码成功!");
}
else
{
sprintf(sMsg,"%s","切换代码成功!");
}
MessageBox( sMsg , ONLY_OK ) ;
iReCode=SFX_RUN_CANCEL;
IsRun=0;
}
else
{
MessageBox( "位长不符!", ONLY_OK ) ;
}
break;
case KEY_F(12):
iReCode=SFX_RUN_CANCEL;
IsRun = 0 ;
break ;
case KEY_RIGHT:
// 下一个字符
form_driver( Form, REQ_NEXT_CHAR);
break;
case KEY_LEFT:
// 上一个字符
form_driver( Form, REQ_PREV_CHAR );
break;
case KEY_DOWN:
// 下一个域
form_driver( Form, REQ_VALIDATION );
break;
case KEY_UP:
// 上一域
form_driver( Form, REQ_VALIDATION );
break;
case _KEY_BS: // LK9000 clr键
case KEY_BACKSPACE: // PC 退格键
// 删除光标前一个字符
form_driver( Form, REQ_DEL_PREV );
break;
default:
// 向当前的域输出字符
form_driver( Form, key );
}
}
exit:
unpost_form( Form ); // 清除屏幕上的表单
free_form( Form); // 释放表单资源
for( i = 0 ; i < 1; i++ )
free_field( Field[i]); // 释放域所占的资源
//sys_close_laser();
dbExit:
return iReCode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -