cen_oper.ec
来自「在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便」· EC 代码 · 共 266 行
EC
266 行
/*
*
* 周国祥 2001/04/14 针对新库表进行修改
*
* 2001/04/16 added get_role_purview()
* 2001/04/29 added get_role_name()
*/
#include <stdio.h>
#include <curses.h>
#include "tool.h"
#include "mytools.h"
#include "pub_form.h"
#define POWERWIDTH 256
EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
/*
* 根据操作员号查取操作员名
*/
int get_cen_oper_name(char *no, char *name)
{
$char oper_no[7], oper_name[11];
name[0] = 0;
strcpy(oper_no, no);
EXEC SQL SELECT oper_name
INTO :oper_name
FROM center_oper
WHERE oper_no = :oper_no;
if (sqlca.sqlcode == 0) {
DelSpace(oper_name);
strcpy(name, oper_name);
}
return(sqlca.sqlcode);
}
/*
* 根据操作员号查取所属行行号
*/
int get_cen_oper_bankid(char *no, char *id)
{
$char oper_no[7], bank_id[12];
id[0] = 0;
strcpy(oper_no, no);
EXEC SQL SELECT bank_id
INTO :bank_id
FROM center_oper
WHERE oper_no = :oper_no;
if (sqlca.sqlcode == 0) {
DelSpace(bank_id);
strcpy(id, bank_id);
}
return(sqlca.sqlcode);
}
/*
* 获取操作员角色代码及系统角色操作权限
*/
int get_role_purview(oper_no, role_code, role_purview)
char *oper_no;
char *role_code;
char *role_purview;
{
$char operno[7];
$char rolecode[4], lpurview[257];
strcpy(operno, oper_no);
$select A.role_code, B.role_purview
into $rolecode, $lpurview
from center_oper A, sys_role B
where A.role_code = B.role_code
and A.oper_no = $operno;
if (SQLCODE)
return(-1);
DelSpace(rolecode);
DelSpace(lpurview);
strcpy(role_code, rolecode);
strcpy(role_purview, lpurview);
return(0);
}
/*
* 检察系统角色代码的合法性,并获取角色名称
*/
int get_role_name(role_code, role_name)
$parameter char *role_code;
char *role_name;
{
$char rolename[11];
$select role_name into $rolename
from sys_role
where role_code = $role_code;
if (SQLCODE) {
return(-1);
}
DelSpace(rolename);
strcpy(role_name, rolename);
return(0);
}
/*
* 修改密码的菜单项处理函数
*/
int password(int item_no)
{
WINDOW *my_win;
char str[200],filename[128],long_power[POWERWIDTH],old_pwd[7],tmp[7];
$char father[7], in_oper[7], oper_name[11];
$char oper_pwd[7];
$char short_power[65];
int ch;
sprintf(filename, "/tmp/.password.%d", getpid());
scr_dump(filename);
DispBelow("修改密码");
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "修改密码", 0, 0);
my_win = newwin(18, 80, 3, 0);
wrefresh(my_win);
set_prompt(PROMPT_OFF);
strcpy(in_oper, G_oper_no);
clear_screen(my_win);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
strcpy(in_oper, G_oper_no);
$select oper_name, oper_pwd, father, role_code into :oper_name,:oper_pwd,:father,:short_power from center_oper where oper_no = :in_oper;
if (sqlca.sqlcode) {
h_winprompt(my_win, 17, 4, "该柜员不存在!", 1, 0);
goto end_passwd;
}
sqlca.sqlcode = 0;
DelSpace(oper_name);
DelSpace(oper_pwd);
DelSpace(father);
if (!strcmp(G_oper_no, in_oper)) {
sqlca.sqlcode = -1;
}
else {
if (!strcmp(G_oper_no, "00")) {
sqlca.sqlcode = 0;
}
else {
while (strcmp(father, G_oper_no) && !sqlca.sqlcode) {
$select father into :father from center_oper where oper_no = :father;
DelSpace(father);
}
}
}
/*
* 若修改者为“00”或为被修改者的父,则无需输入旧密码
* 初始旧密码为“0000”
*/
if (!sqlca.sqlcode) {
oper_pwd[0] ^= 0x01; oper_pwd[1] ^= 0x09;
oper_pwd[2] ^= 0x09; oper_pwd[3] ^= 0x06;
oper_pwd[4] ^= 0x06; oper_pwd[5] ^= 0x01;
get_long_power(short_power,long_power);
} else {
old_pwd[0] = 0;
mvwprintw(my_win, 2, 4, "请输入旧密码: [ ]");
ch = in_item(my_win, "", 2, 19, old_pwd, 6, NULL, NULL, 2, 1);
if (ch != ENTER) goto end_passwd;
DelSpace(old_pwd);
strcpy(tmp, old_pwd);
cy_oper(old_pwd);
#ifdef wyz020423_mod
if (memcmp(old_pwd, oper_pwd, 6)) {
#else
if (strcmp(old_pwd, oper_pwd)) {
#endif
h_winprompt(my_win, 17, 4, "密码核查有误!", 1, 0);
goto end_passwd;
}
get_long_power(short_power, long_power);
}
while (1) {
tmp[0] = 0;
while (1) {
mvwprintw(my_win, 4, 4, "请输入新密码: [ ]");
ch = in_item(my_win, "", 4, 19, tmp, 6, NULL, NULL, 2, 1);
if (ch != ENTER) goto end_passwd;
if ((strlen(tmp)) == 0) {
h_winprompt(my_win, 17, 4, "密码不允许为空,请重新输入!", 1, 0);
continue;
} else {
DelSpace(tmp);
break;
}
}
oper_pwd[0] = 0;
mvwprintw(my_win, 6, 4, "请再次输入新密码: [ ]");
ch = in_item(my_win, "", 6, 23, oper_pwd, 6, NULL, NULL, 2, 1);
if (ch != ENTER) goto end_passwd;
DelSpace(oper_pwd);
if (strcmp(tmp, oper_pwd)) {
h_winprompt(my_win, 17, 4, "新密码核查有误,请重新输入!", 1, 0);
continue;
} else {
break;
}
}
get_short_power(short_power, long_power);
cy_oper(oper_pwd);
begin_tran();
$update center_oper set oper_pwd = :oper_pwd where oper_no = :in_oper;
if (sqlca.sqlcode) {
rollback_tran();
h_winprompt(my_win, 17, 4, "修改失败!", 1, 0);
goto end_passwd;
}
sprintf(str, "修改表 center_oper : oper_no[%s] oper_pwd[*][%s] power[*][%s]", in_oper, oper_pwd, short_power);
if (misc_audit(str, my_win, 17, 4)) {
rollback_tran();
wgetch(my_win);
goto end_passwd;
}
commit_tran();
h_winprompt(my_win, 17, 4, "修改成功!", 1, 0);
goto end_passwd;
end_passwd:
delwin(my_win);
scr_restore(filename);
unlink(filename);
return (0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?