📄 ebcsav.c
字号:
#include </u/ebcsav/include/sav.h>
short menu();
short menusel();
void get_op();
void block();
void num_date();
void addspace();
void mess();
void query();
void data_in();
void abate();
short settl_op();
short statement();
short fix();
short demand();
short dated();
short large();
short call();
short house();
void adjust_inte();
void add_inte();
void carry();
void change();
char s[46];
char sp[7];
short year,month,day,op_num;
main()
{
FILE *pf;
short i,j,num_c,num_c1,num_c2,m_c,flag=0;
static char *title[8]={"0. 退出 ","1.操作员 ","2.用 户 ",
"3.凭 证 ","4.利汇率 ","5.开 业 ","6.日 终 ","7.储 蓄 "};
static char *remind[8]={" 退出本程序 ",
" 对操作员的权限、操作方式等和对营业部门名称进行管理 ",
" 处理用户的特殊业务,如查询信息、挂失、冻结、修改密码等 ",
" 对发放的重要凭证进行登记 ",
" 对各种储蓄利率、保值率、外汇汇率进行管理 ",
" 做开始营业的初始准备工作 "," 做日终停业后的帐目整理工作 ",
" 接待用户处理日常储蓄业务 "};
static short menu_row[8]={1,1,1,1,1,1,1,1},
menu_col[8]={4,13,22,31,40,49,58,67};
static char *title1[7]={"0. 返 回 ","1. 增 加 ","2. 修 改 ",
"3. 删 除 ","4. 列目录 ","5. 营业所 ","6. 重要更正"};
static char *remind1[7]={" 返回主选择单 "," 增加新的操作员 ",
" 修改操作员的名称、密码、操作方式、权限 "," 删除操作员 ",
" 在屏幕上列出操作员的有关信息 "," 管理营业部门的名称、简称 ",
" 对事后发现帐户的错误信息做重要更正(必须从主管部门索取密码) "};
static short menu_row1[11]={4,5,6,7,8,9,10,11,12,13,14},
menu_col1[7]={10,10,10,10,10,10,10};
static char *title2[10]={"0. 返 回 ","1. 查 询 ","2. 挂 失 ",
"3. 解 挂 ","4. 冻 结 ","5. 解 冻 ","6. 修 改 ",
"7. 冲 正 ","8. 转 存 户 ","9. 移 植"};
static char *remind2[10]={" 返回主选择单 "," 查询储户的各项档案资料 ",
" 储户存款凭证丢失,在此登记,停止该帐户支取 ",
" 对已挂失的帐户,在此取销挂失状态,允许该帐户支取 ",
" 暂时停止某帐户使用 ",
" 对已冻结的帐户,在此取销冻结状态,恢复该帐户使用 ",
" 按照储户的要求,为之修改姓名、地址、密码 ",
" 冲销操作错误的业务 "," 管理人民币活期储蓄帐户转存业务的有关信息 ",
" 将本系统以外的数据转入本系统 "};
static short menu_col2[10]={19,19,19,19,19,19,19,19,19,19};
static char *title3[6]={"0. 返 回 ","1. 发放凭证","2. 回收凭证",
"3. 报废凭证","4. 显示清单","5. 凭证类型"};
static char *remind3[6]={" 返回主选择单 "," 操作员领取凭证,在此登记 ",
" 操作员交回凭证,在此登记 "," 凭证作废, 在此登记 ",
" 显示输出凭证使用的情况 "," 定义凭证类型编号与名称的对照表 "};
static short menu_col3[6]={28,28,28,28,28,28};
static char *title4[5]={"0. 返 回 ","1. 利 率 ","2. 保值率 ",
"3. 汇 率 ","4. 打 印 "};
static char *remind4[5]={" 返回主选择单 "," 管理各种储蓄利率 ",
" 管理储蓄保值率 "," 管理外汇汇率 "," 打印各种利、汇率 "};
static short menu_col4[5]={37,37,37,37,37};
static char *title5[3]={"0. 返 回 ","1. 日初始化 ","2. 开 业 "};
static char *remind5[3]={" 返回主选择单 ",
" 做开始营业的准备工作, 将有关表置成初始状态 ",
" 允许操作员做储蓄业务 "};
static short menu_col5[3]={46,46,46};
static char *title6[11]={"0. 返 回 ","1.操作员结帐","2. 停止营业",
"3. 轧 帐 ","4. 打印报表","5. 数据后备","6. 数据写盘",
"7. 调整利息","8. 计 息 ","9. 手工入帐","a. 总帐结转"};
static char *remind6[11]={" 返回主选择单 "," 操作员处理自己的结帐事务 ",
" 停止普通操作员工作, 停止办理储蓄业务 ",
" 日终停业后进行系统轧帐 "," 打印各种统计报表 ",
" 将全部数据写到磁带或软盘上去, 或从磁带或软盘将全部数据装入 ",
" 将有关数据写入软盘,转给事后监督 ",
" 利率调整时, 将活期和零存整取储蓄的累计利息按新的利率折算 ",
" 在计息日, 将活期储蓄的累计利息计入本金 ",
" 从键盘将数据手工输入总帐 "," 月、季、年末时结转总帐余额 "};
static short menu_col6[11]={55,55,55,55,55,55,55,55,55,55,55};
static char *title7[9]={"0. 返 回 ","1. 整存整取","2. 活 期 ",
"3. 零存整取","4. 存本取息","5. 定活两便","6. 大 额 ",
"7. 通知存款","8. 住房基金"};
static char *remind7[9]={" 返回主选择单 "," 办理整存整取储蓄业务 ",
" 办理活期储蓄业务 "," 办理零存整取储蓄业务 ",
" 办理存本取息储蓄业务 "," 办理定活两便储蓄业务 ",
" 办理大额储蓄业务 "," 办理通知存款储蓄业务 ",
" 办理住房基金业务 "};
static short menu_col7[9]={64,64,64,64,64,64,64,64,64};
static char *(*p_tit[7])={title1,title2,title3,title4,title5,title6,title7};
static char *(*p_rem[7])={remind1,remind2,remind3,remind4,
remind5,remind6,remind7};
static short *p_col[7]={menu_col1,menu_col2,menu_col3,
menu_col4,menu_col5,menu_col6,menu_col7};
static short num[7]={6,9,5,4,2,10,8};
num_c=num_c1=num_c2=m_c=0;
num_date(&year,&month,&day);
initscr();
system("/u/ebcsav/bin/sav_clock");
while((pf=fopen("/u/ebcsav/data/sav_op.dat","r"))==NULL);
for(i=0;i<3;i++)
{
move(9,30);
op.name[0]='\0';
mess((short)7);
clrtoeol();
scanw("%hd",&op_num);
fseek(pf,(op_num-1)*17,0);
fread(&op,17,1,pf);
move(22,30);
if(op_num<1||feof(pf)||op.name[0]=='\0')
{
printw("代号输入错, ");
mess((short)2);
continue;
}
else clrtoeol();
move(11,30);
printw("操作员名称: ");
clrtoeol();
for(j=0;j<6;j++) if(op.name[j]!='\0') s[j]=op.name[j]^0xff;
else s[j]='\0';
addstr(s);
move(13,30);
printw("请输入操作员密码: ");
noecho();
scanw("%s",sp);
echo();
for(j=0;j<6;j++) if(sp[j]!='\0') sp[j]^=0xff;
move(22,30);
if(strcmp(op.pass,sp)!=0)
{
move(22,30);
printw("密码输入错, ");
mess(2);
continue;
}
i=10;
break;
}
fclose(pf);
if(i!=10)
{
clear();
refresh();
endwin();
printf(" 输入出错太多, 停止运行!\n");
return;
}
if((op.priv&0xc0)!=0)
{
if((op.priv&3)==0)
{
move(22,20);
printw("未开业、或该操作员已经在工作, ");
mess((short)3);
getch();
clear();
refresh();
endwin();
return;
}
else
{
num[6]=0;
if((op.priv&0x80)!=0) flag=2;
else flag=1;
}
}
op.priv|=0x40;
while((pf=fopen("/u/ebcsav/data/sav_op.dat","r+"))==NULL);
fseek(pf,(op_num-1)*17,0);
fwrite(&op,17,1,pf);
fclose(pf);
if((op.type&(short)1)==0&&num[6]!=0) num[6]=2;
for(i=1;i<7;i++)
{
if(((op.priv>>(6-i))&1)==0)
{
if(i==6)
{
num[5]=1;
op.priv|=1;
}
else for(j=2;j<8;j++) title[i][j]=' ';
}
}
while(1)
{
clear();
block(0,2,3,76);
num_c=menu(title,remind,menu_row,menu_col,7,num_c);
if(m_c==0) num_c=menusel(title,remind,menu_row,menu_col,7,num_c,1);
if(num_c==0)
{
while((pf=fopen("/u/ebcsav/data/sav_op.dat","r+"))==NULL);
fseek(pf,(op_num-1)*17,0);
fread(&op,17,1,pf);
op.priv&=0xbf;
fseek(pf,(op_num-1)*17,0);
fwrite(&op,17,1,pf);
fclose(pf);
clear();
refresh();
endwin();
break;
}
if(m_c==0) m_c=1;
while(1)
{
block(3,num_c*9-1,num[num_c-1]+3,16);
if(num_c1>num[num_c-1])num_c1=0;
num_c1=menu(p_tit[num_c-1],p_rem[num_c-1],menu_row1,
p_col[num_c-1],num[num_c-1],num_c1);
if(m_c==1) num_c1=menusel(p_tit[num_c-1],p_rem[num_c-1],menu_row1,
p_col[num_c-1],num[num_c-1],num_c1,0);
if(num_c1==0)
{
move(3,0);
clrtobot();
m_c=0;
break;
}
switch (num_c)
{
case 1:
switch (num_c1)
{
case 1:
sprintf(s,"/u/ebcsav/bin/op_add %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 2:
sprintf(s,"/u/ebcsav/bin/op_change %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 3:
sprintf(s,"/u/ebcsav/bin/op_delete %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 4:
sprintf(s,"/u/ebcsav/bin/op_list %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 5:
sprintf(s,"/u/ebcsav/bin/sections %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 6:
change();
}
break;
case 2:
switch (num_c1)
{
case 1:
query();
break;
case 2:
sprintf(s,"/u/ebcsav/bin/hang_on %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 3:
sprintf(s,"/u/ebcsav/bin/hang_off %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 4:
sprintf(s,"/u/ebcsav/bin/freeze_on %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 5:
sprintf(s,"/u/ebcsav/bin/freeze_off %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 6:
sprintf(s,"/u/ebcsav/bin/change_acc %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 7:
abate();
break;
case 8:
sprintf(s,"/u/ebcsav/bin/tran_acc %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
/*
case 9:
data_in();
*/
}
break;
case 3:
switch (num_c1)
{
case 1:
sprintf(s,"/u/ebcsav/bin/cred_issu %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 2:
sprintf(s,"/u/ebcsav/bin/cred_recov %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 3:
sprintf(s,"/u/ebcsav/bin/cred_canc %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 4:
sprintf(s,"/u/ebcsav/bin/cred_list %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 5:
sprintf(s,"/u/ebcsav/bin/cred_type %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
}
break;
case 4:
switch (num_c1)
{
case 1:
sprintf(s,"/u/ebcsav/bin/rate_inte %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 2:
sprintf(s,"/u/ebcsav/bin/rate_main %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 3:
sprintf(s,"/u/ebcsav/bin/rate_exch %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
break;
case 4:
sprintf(s,"/u/ebcsav/bin/rate_prt %c%c sys%c%c",
op_num/10+48,(op_num%10)+48,(month%10)+97,
(day%10)+97);
system(s);
}
break;
case 5:
switch (num_c1)
{
case 1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -