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 + -
显示快捷键?