第一篇:C语言模拟ATM机
一、实验目的
通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、实验要求
要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。
1.程序具有以下功能:
1)登录系统:
输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统; 2)操作功能:
查询:查询帐户的存款余额。按任意键返回主菜单;
修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。之后可返回主菜单;
取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;
存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。之后可返回主菜单;
转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; 退出:退出系统。
2.定义如下结构体类型:
“日期”结构体Date:成员有:year(年)、month(月)、day(日);
“帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额) “存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)3.帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中; 4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。5.附加功能:
储户一天内输错密码的次数不能超过3次,否则无法进入系统; 应避免输入存款金额、取款金额为负数等异常情况的出现。
三、程序已经实现的功能点
实验要求均已实现。此外还有:
1.卡号、密码位数输错时,提示并返回重新输入,2.简化取款时的输入
3.转账时,转账账户为原账户时,提示并返回重新输入 4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统 5.在查询模块中加入了存取记录明细查询
四、程序运行截图及说明
1.登陆模块
1)卡号不为16位时,输出提示并返回重新输入
2)卡号不存在时,输出提示并返回重新输入
3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号
4)密码连续输错三次时,锁定卡号,今日无法登录
2.登录后的系统主菜单
3.查询模块
1)查询模块主菜单
2)查询明细
4.取款模块
1)当余额不足50时,无法进入取款模块
2)取款模块主菜单
3)便捷取款
4)手动输入取款金额
输错时,返回重新输入
5)取款后的菜单
6)取款完成后选择显示余额
5.存款模块
1)解决输入错误问题
2)存款成功
6.密码修改模块
1)原密码输错时,返回重新输入,不提供退出功能
2)密码位数输错、两次输入新密码不一致时,返回重新输入
3)输入无误时
7.转账模块
1)转入卡号位数输错时,提示并返回重新输入
2)未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入
3)转入卡号与当前卡号相同时,输出提示
4)输出转入卡账户的部分用户名
5)解决转账金额输错的问题
6)转账成功
五、采用的主要技术
1.宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替 2.链表:账户信息采用链表结构,内存动态分配,使用内存无限制,可以扩展到所有可以使用的内存 3.switch多分支选择结构 4.文本文件的读写
5.利用time.h头文件,简便地获取系统日期 6.system()函数和fflush()函数的简单使用
六、设计心得
1.各函数的功能要相对独立,逐步求精。
2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体内被意外修改
附:程序代码
/*** * 运行本程序前,请在本程序根目录下建立文件“accounts.txt”,格式如下: * 卡号1(16位)
姓名1 账户余额1 密码1 * 卡号2(16位)
姓名2 账户余额2 密码2 * …… ****/
#include
typedef struct {
short int year;short int month;short int day;}Date;//日期
typedef struct Account { char no[17];char name[20];double balance;char password[7];struct Account* next;}Account;
typedef struct { char no[17];Date date;double number;}Record;//记录
Account *head = NULL;//账户信息链表表头 Account *now_acc = NULL;//当前账户
/************函数申明************/ void InitializeAccount();//导入账户信息 //-------char LockAccountTopic(const char *no);//检测账户是否被锁定 void LockAccount(const char *no);//锁定账户 //-------void Login();//登录
Account* FindbyNo(const char *no);//查找卡号对应账户信息在链表中的地址 //-------void Demand();//查询主菜单 void PrintBalance();//输出余额 void Printetail();//输出明细 //-------void Modifiy();//修改密码 //-------void Withdrawal();//取款主界面
void WithdrawalOt(long money);//取款 //-------void Depositing();//存款 //-------void Transfer();//转账
char *CoverUpName(const char *name);//掩盖部分用户名 //-------void Log(double money, const char *no);//将存款记录写入文件中 void Save();//保存账号信息 void FreeData();//释放链表空间 //-------
int main(){ char choose;
InitializeAccount();//导入账户信息 Login();//登录 do { system(“cls”);PR(“tt
n”);PR(“tt
请选择服务
n”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|5|33转账|
|查询32|1|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“tt
+---------+-+n”);
PR(“tt
|取款32|2|n”);PR(“tt
+---------+-+nn”);PR(“tt
+---------+-+n”);PR(“tt
|存款32|3|n”);PR(“tt
+---------+-+nn”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|0|33退出系统|
|修改密码32|4|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);choose = getchar();switch(choose){ case '1': Demand();break;//查询 case '2': Withdrawal();break;//取款 case '3': Depositing();break;//存款 case '4': Modifiy();break;//修改密码 case '5': Transfer();break;//转账 case '0': FreeData();return 0;//退出 default:
printf(“输入错误,请重新选择n”);//解决用户可能的输入错误
system(“pause”);
} } while(1);return 0;}
/**********导入账户信息**********/ void InitializeAccount(){ FILE *fp;Account temp;PR(“系统初始化中,请稍侯...n”);if(!(fp = fopen(“accounts.txt”, “r”))){
PR(“ 7”);//响铃
PR(“读取帐户信息失败,请在本程序根目录建立帐户信息文件(accounts.txt)。格式如下:n”);
PR(“卡号1(16位)
姓名1 账户余额1 密码1n”);
PR(“卡号2(16位)
姓名2 账户余额2 密码2n”);
PR(“……n”);
exit(0);} while(fscanf(fp, “%s %s %lf %s”, temp.no, temp.name, &temp.balance, temp.password)== 4)
} {//读入账户信息
Account *t = head;head =(Account*)malloc(sizeof(Account));*head = temp;head->next = t;} fclose(fp);system(“cls”);//清除“系统初始化中,请稍侯...”提示
/**********登录**********/ void Login(){ do {
char no[17];
system(“cls”);
PR(“nnnnttt请输入16位卡号:”);
fflush(stdin);
gets(no);if(strlen(no)!= 16){ PR(“卡号应为16位n”);system(“pause”);system(“cls”);continue;} if(LockAccountTopic(no))
{//当该卡号被锁定时
PR(“ 7”);//响铃
PR(“nn您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。nn”);
system(“pause”);
continue;
}
if(!(now_acc = FindbyNo(no)))//将卡号对应信息在链表的地址赋给now_acc {//当卡号不存在时
PR(“nn此卡号不存在,请重新输入!nn”);system(“pause”);continue;} char a = '2';//计算剩余可输错密码次数 do { char password[7];system(“cls”);
PR(“nnnnttt请输入16位卡号:%sn”, now_acc->no);
PR(“nnttt请输入6位密码:”);
fflush(stdin);
scanf(“%s”, password);
if(strlen(password)!= 6)
{
PR(“密码应为6位n”);
system(“pause”);
system(“cls”);
continue;
}
if(!strcmp(now_acc->password, password))
return;//密码正确,回到主函数
if(a == '0')
{//输错密码三次,锁定账户
PR(“nn您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。nn”);
}
LockAccount(no);
break;
}
PR(“ 7”);//响铃
PR(“密码输入错误,您还可以尝试%c次nn”, a--);
system(“pause”);} while(1);} while(1);/**********检测账户是否被锁定**********/ char LockAccountTopic(const char *no)//被锁定则返回0 { FILE *fp;
char CruuentTime[11];//当前日期 char ArchiveTime[11];//锁卡档案日期 char t[17];if(!(fp = fopen(“LockAccount.txt”, “a+”)))//课本上讲以“a”方式打开文件,若文件不存在,会出错。VS2013实测,并不会出错,而是新建。为免第一次使用本程序时,根目录下没有LockAccount.txt而导致出错,故此处不采用“r”方式。
{
PR(“ 7”);//响铃
PR(“LockAccount.txt无法打开nn”);
exit(0);} rewind(fp);{//获取当前日期
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);//获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构
strftime(CruuentTime, 11, “%Y-%m-%d”, timeinfo);//格式化时间
} fgets(ArchiveTime, 11, fp);//获取锁卡档案时间
if(strcmp(ArchiveTime, CruuentTime))
{//若无锁卡档案,或锁卡档案日期与当前日期不同,则无账户被锁定
fclose(fp);return 0;} while(fscanf(fp, “%s”, t)== 1){ if(!strcmp(t, no)){//锁卡档案中,包含此卡号,返回1
fclose(fp);
return 1;} } fclose(fp);return 0;//锁卡档案中,不含此卡号,返回0 }
/**********查找卡号对应账户信息在链表中的地址**********/ Account* FindbyNo(const char *no){ for(Account *i = head;i;i = i->next){
if(!strcmp(i->no, no))
return i;} return NULL;}
/**********锁定账户**********/ void LockAccount(const char *no){ FILE *fp;
char CruuentTime[11];//当前日期 char ArchiveTime[11];//锁卡档案日期 if(!(fp = fopen(“LockAccount.txt”, “r”))){ PR(“ 7”);//响铃
PR(“error on open LockAccount.txt file!nn”);exit(0);} {//获取当前日期
time_t rawtime;struct tm * timeinfo;time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构
strftime(CruuentTime, 11, “%Y-%m-%d”, timeinfo);//格式化时间 } fgets(ArchiveTime, 11, fp);fclose(fp);if(strcmp(ArchiveTime, CruuentTime)){//若档案日期与当前日期不同,则说明档案已过期或无档案,新建记录。
if(!(fp = fopen(“LockAccount.txt”, “w”))){
PR(“ 7”);//响铃
}
} PR(“error on open LockAccount.txt file!nn”);exit(0);} fprintf(fp, “%sn”, CruuentTime);else//若记录日期与当前日期相同,则追加记录 { if(!(fp = fopen(“LockAccount.txt”, “a”))){
}
} PR(“ 7”);//响铃
PR(“error on open LockAccount.txt file!nn”);exit(0);//添加记录
fprintf(fp, “%sn”, no);fclose(fp);/**********查询函数主菜单**********/ void Demand(){ char choose;do {
system(“cls”);
PrintBalance();
PR(“ttttt
+---------+-+n”);
PR(“ttttt
|查询明细32|1|n”);
PR(“ttttt
+---------+-+nn”);
PR(“tt+-+---------+
+---------+-+n”);
PR(“tt|0|33退出系统|
| 返回 32|2|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);choose = getchar();switch(choose){ case '1': Printetail();break;//查询明细 case '2': return;//返回
case '0': FreeData();exit(0);//退出系统 default: printf(“输入错误,请重新选择n”);//解决用户可能的输入错误
}
system(“pause”);} } while(1);/**********输出余额**********/ void PrintBalance(){ system(“cls”);PR(“nnnnnnnnntt+---------------+---------------+n”);
} PR(“tt| 您的账户余额 32|%-15.2f|n”, now_acc->balance);PR(“tt+---------------+---------------+nnnnnnn”);/**********输出明细**********/ void Printetail(){ FILE *fp;Record temp;int flag = 1;//当有记录时,置0 if(!(fp = fopen(“records.txt”, “r”))){
PR(“无存取记录,请进行存取后再使用本功能nn”);
system(“pause”);
return;} system(“cls”);PR(“+---------+--------------+n”);PR(“|
日期
|
存取金额
|n”);PR(“+---------+--------------+n”);while(fscanf(fp, “%s%d-%d-%d%lf”, temp.no, &temp.date.year, &temp.date.month, &temp.date.day, &temp.number)== 5){
if(!(strcmp(temp.no, now_acc->no)))
{
flag = 0;
PR(“|%d-%d-%d|%-14.2f|n”, temp.date.year, temp.date.month, temp.date.day, temp.number);
PR(“+---------+--------------+n”);
} } PR(“|
日期
|
存取金额
|n”);//未免记录太多看不到表头,在最后加个表头
PR(“+---------+--------------+n”);if(flag)
} { system(“cls”);//无记录时,清除表头
PR(“该卡号未有任何存取记录nn”);system(“pause”);return;} system(“pause”);//当有存取记录时,输出后等待
/**********将存款记录写入文件中**********/ void Log(double money, const char *no){ FILE *fp;Date CruuentTime;//当前日期
if(!money)//存取为零时
return;if(!(fp = fopen(“records.txt”, “a”))){
PR(“ 7”);//响铃
PR(“error on open records.txt file!”);
exit(0);} {//获取当前日期
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime
timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构
CruuentTime.year = timeinfo->tm_year + 1900, CruuentTime.month = timeinfo->tm_mon + 1, CruuentTime.day = timeinfo->tm_mday;} fprintf(fp, “%sn%d-%d-%dn%fn”, no, CruuentTime.year, CruuentTime.month, CruuentTime.day, money);fclose(fp);}
/**********取款主界面**********/ void Withdrawal(){ char choose;if(now_acc->balance < 50.0){//当余额不足50时,无法取款
PR(“ 7”);//响铃
PR(“您的余额不足50,无法取款nn”);
} do {
system(“pause”);return;system(“cls”);PR(“nn”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|1|33 100
|
| 2000 32|5|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|2|33 500
|
| 5000 32|6|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|3|33 1000 |
|其它金额32|7|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“tt+-+---------+
+---------+-+n”);PR(“tt|4|33退出系统|
|返回32|0|n”);PR(“tt+-+---------+
+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);scanf(“%c”, &choose);switch(choose){ case '1': WithdrawalOt(100);break;case '2': WithdrawalOt(500);break;case '3': WithdrawalOt(1000);break;case '4': FreeData();exit(0);case '5': WithdrawalOt(2000);break;case '6': WithdrawalOt(5000);break;case '7': do {
long money;
PR(“请输入取款金额(50的倍数):”);
fflush(stdin);
scanf(“%ld”, &money);
if(money < 0 || money % 50)
{//解决输入金额为负数、不是50的倍数的情况
PR(“输入有误,请重新输入n”);
system(“pause”);
continue;
}
WithdrawalOt(money);
}
break;} while(1);break;case '0': return;default:
} PR(“ 7”);//响铃
printf(“输入错误,请重新选择n”);//解决用户可能的输入错误 system(“pause”);continue;{//取款完成后的菜单
char choose;system(“cls”);PR(“nn”);PR(“tt
+---------+-+n”);PR(“tt
|继续取款32|1|n”);PR(“tt
+---------+-+nn”);PR(“tt
+---------+-+n”);PR(“tt
|显示余额32|2|n”);PR(“tt
+---------+-+nn”);PR(“tt
n”);PR(“tt
n”);PR(“tt
nn”);PR(“tt+-+---------+
+---------+-+n”);
PR(“tt|0|33退出系统|
|返回32|3|n”);
PR(“tt+-+---------+
+---------+-+nn”);
PR(“请选择服务:”);
fflush(stdin);
scanf(“%c”, &choose);
switch(choose)
{
case '1': continue;//继续取款
case '2': PrintBalance();system(“pause”);break;//输出余额
case '3': return;//返回主函数
case '0': FreeData();exit(0);//退出系统
default:
PR(“ 7”);//响铃
printf(“输入错误,请重新选择n”);//解决用户可能的输入错误
system(“pause”);
} } } while(1);/**********取款**********/ void WithdrawalOt(long money){ if(now_acc->balance < money){
} PR(“ 7”);//响铃
PR(“您的余额不足%ldnn”, money);system(“pause”);return;PR(“正在处理,请稍候...n”);now_acc->balance-= money;Save();Log(-money, now_acc->no);PR(“取款成功nn”);system(“pause”);}
/**********存款**********/ void Depositing(){ long money;do {
} PR(“请输入存款金额(50的倍数),单次存款金额不得超过20000元:”);fflush(stdin);scanf(“%ld”, &money);if(money < 0 || money > 20000 || money % 50){//解决输入金额为负数、超过20000、不是50的倍数的情况
PR(“ 7”);//响铃
PR(“输入有误,请重新输入n”);
system(“pause”);
continue;} PR(“正在处理,请稍候...n”);now_acc->balance += money;Save();//保存账户数据
Log(money, now_acc->no);//保存存取数据
PR(“存款成功nn”);system(“pause”);break;} while(1);/**********保存账户信息**********/ void Save(){ FILE *fp;int i = 1;char ch;if(!(fp = fopen(“accounts.txt”, “w”))){
}
} PR(“ 7”);//响铃
PR(“读取帐户信息失败!accounts.txt无法打开n”);exit(0);for(Account *i = head;i;i = i->next)//写入账户信息
fprintf(fp, “%s %s %f %sn”, i->no, i->name, i->balance, i->password);fclose(fp);/**********修改密码**********/ void Modifiy(){ char oldpass[7], newpass1[7], newpass2[7];do {
PR(“请输入原密码:”);
fflush(stdin);
gets(oldpass);
if(strlen(oldpass)!= 6)
{
PR(“密码应为6位n”);
system(“pause”);
continue;
}
if(strcmp(oldpass, now_acc->password))
{//解决密码输入有误,出于安全性的考虑,原密码输入错误时不提供返回功能
PR(“密码有误,请重新输入nn”);
system(“pause”);
continue;
}
else
break;} while(1);do {
PR(“请输入六位新密码:”);
fflush(stdin);scanf(“%s”, newpass1);if(strlen(newpass1)!= 6){
} PR(“密码应为6位n”);system(“pause”);continue;PR(“请再次输入新密码:”);fflush(stdin);scanf(“%s”, newpass2);if(strcmp(newpass1, newpass2))
{//两次输入密码不一致时
PR(“密码不一致(输入*取消修改)n”);
fflush(stdin);
if(getchar()== '*')
break;
}
else
{//输入一致时
strcpy(now_acc->password, newpass1);//修改密码
Save();//保存用户数据
PR(“密码修改成功!nn”);
system(“pause”);
break;
} } while(1);}
/**********转账**********/ void Transfer(){
Account* aimsite;//转入卡号在链表中的地址 long money;//转账金额 if(now_acc->balance < 50){//当账户余额不足50时
PR(“ 7”);//响铃
PR(“您的余额不足50,无法转账nn”);system(“pause”);return;} do { char aim[17];//转入卡号
PR(“请输入转入卡/折号(16位):”);fflush(stdin);gets(aim);if(strlen(aim)!= 16){ PR(“卡号应为16位n”);system(“pause”);continue;} if(!(strcmp(aim, now_acc->no))){//解决转账双方卡号相同的情况
PR(“双方账户相同,请核对后重试(输入*取消转账)n”);if(getchar()== '*')
return;continue;} if(aimsite = FindbyNo(aim))break;//找到转入卡号对应信息时 else {
PR(“未找到该卡号,输入*取消转账n”);
if(getchar()== '*')
return;
continue;} } while(1);PR(“汇款目标用户名为:%sn”, CoverUpName(aimsite->name));PR(“是否确认无误?(输入*确认,否则退出)”);fflush(stdin);if(getchar()!= '*')return;do { PR(“请输入转账金额(50的倍数):”);fflush(stdin);scanf(“%lu”, &money);if(now_acc->balance < money){
PR(“ 7”);//响铃
PR(“您的余额不足%lu,请重新输入转账金额nn”, money);
system(“pause”);
continue;} if(money % 50)
}
{//当输入金额不是50的倍数时
PR(“ 7”);//响铃
PR(“输入有误,请重新输入n”);continue;} PR(“转账中,请稍候...n”);now_acc->balance-= money;aimsite->balance += money;Save();//保存账户数据
Log(-money, now_acc->no);//当前账户存取记录
Log(money, aimsite->no);//转入卡存取记录
PR(“转账成功nn”);system(“pause”);break;} while(1);/**********掩盖部分用户名**********/ char *CoverUpName(const char *name){ char temp[20];strcpy(temp, name);
int words = 0;//用于存放姓名的字数 for(char* i = temp;*i;i += 2)words++;//计算姓名的字数 switch(words){ case 2: temp[0] = '*', temp[1] = '*';//当姓名字数为2时,掩盖姓
strcpy(temp + 1, temp + 2);//消除一个*号
break;case 3:
temp[2] = '*', temp[3] = '*';//当姓名字数为3时,掩盖名字中的第一个字
strcpy(temp + 3, temp + 4);//消除一个*号
break;default:
temp[0] = '*', temp[1] = '*', temp[2] = '*', temp[3] = '*';//姓名字数大于3时,掩盖姓和名字中的第一个字
strcpy(temp + 2, temp + 4);//消除两个*号
} return temp;}
/**********释放链表空间**********/ void FreeData(){ Account* t;while(head){
t = head;
head = head->next;
free(t);} }
第二篇:模拟ATM机流程
模拟ATM机流程
package com.igeekhome.demo2;
import java.util.Scanner;
//银行帐户类
public class Account { // 属性
private int id;private String name;private String pass;private double balance;private static int currentID = 1;// 记录当前的卡
// get/set public int getId(){
return this.id;}
public String getName(){
return this.name;}
public String getPass(){
return this.pass;}
public double getBalance(){
return this.balance;}
//构造函数
public Account(String name,String pass,double money){
this.name = name;
this.pass = pass;
this.balance = money;
this.id = currentID++;}
/*******业务方法*********/
//存款
public void saveMoney(){ Scanner in = new Scanner(System.in);//接收存款的金额
System.out.print(“请输入存款的金额:”);int money = in.nextInt();
//修改余额
this.balance+=money;
//给出提示
System.out.println(“存款成功,当前的余额是:”+this.balance);}
//取款
public void drawMoney(){ Scanner in = new Scanner(System.in);//接收取款的金额
System.out.print(“请输入取款的金额:”);int money = in.nextInt();//判断余额是否大于取款金额,如果满足上面的条件,则修改余额,并给出提示
if(this.balance>money){
this.balance-=money;
System.out.println(“取款成功,当前的余额是:”+this.balance);}else{//如果不满足,则给出取款 失败的动提示
System.out.println(“余额不足,取款失败”);}
}
//修改密码
public void modifyPass(){ Scanner in = new Scanner(System.in);//接收原密码
System.out.print(“请输入原密码:”);String oldPass = in.nextLine();//判断密码是否正确,如果不正确,则给出提示,结束方法
if(this.pass.equals(oldPass)==false){
System.out.println(“原密码不正确,修改密码失败”);
return;//返回,不再往下执行
}
//如果正确,则接收新密码
System.out.print(“请输入新密码:”);String newPass1 = in.nextLine();
//再次接收新密码
System.out.print(“请再次输入新密码:”);
String newPass2 = in.nextLine();
//判断两次新密码是否一致,如果一致,修改密码,给出提示
if(newPass1.equals(newPass2)){
this.pass = newPass1;
System.out.println(“修改密码成功”);
}else{ //如果不一致,给出修改密码失败提示
System.out.println(“两次新密码不一致,修改密码失败”);
}
}
}
package com.igeekhome.demo2;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
//创建一个帐户对象,进行模拟操作
Account a = new Account(“张三”,“888888”,1000);
//System.out.println(a.getId()+“,”+a.getPass());
//调用登录方法,并得到返回结果
boolean flag = Test.login(a.getId(), a.getPass());
if(flag){//如果返回值为true,才进行到主菜单进行相关的操作
Test.showMenu(a);
}
}
//进行登录操作,如果成功,则返回true,否则返回false /*
* 用户在ATM机进行操作时,可以有三次输入密码的机会,如果三次中任何一次输入正确,可以进入到主界面进行相关操作,如果三次都不正确,则输出“请与管理员联系”
*/ public static boolean login(int id,String pass){//id,pass现有卡的卡号和密码
Scanner in = new Scanner(System.in);
for(int i=1;i<=3;i++){
System.out.print(“请输入卡号:”);
String s = in.nextLine();
int curID = Integer.parseInt(s);
System.out.print(“请输入密码:”);
String curPass = in.nextLine();
//如果卡号和密码都正确,则返回 true
if(id==curID && pass.equals(curPass))
return true;
if(i<3)
System.out.println(“卡号或密码不正确,请重新输入!”);
else
System.out.println(“三次输入错误,请与管理员进行联系”);}
return false;}
//显示菜单,进行相关操作
public static void showMenu(Account a){ Scanner in = new Scanner(System.in);
System.out.println(“欢迎使用ATM取款机”);while(true){
System.out.println(“请选择:1.查询余额;2.取款;3.存款;4.修改密码;5.退出:”);
int choose = in.nextInt();//接收用户的选择
if(choose==5)
break;
switch(choose){
case 1:System.out.println(“您的余额是:”+a.getBalance());break;
case 2:a.drawMoney();break;
case 3:a.saveMoney();break;
case 4:a.modifyPass();break;
default:System.out.println(“您的输入有误,请重新输入”);break;
} }
System.out.println(“感谢您再次使用!”);} }
第三篇:ATM机C语言程序
直接运行没有错误的代码c----n ==>==>请输入你要转入的金额:“);
scanf(”%f“,&zj);
if(zj>0.00 && zj<0.01)zj=0.01;
if(zj<0){system(”cls“);
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>对不起,转入的金额不能为负值!n“);
break;}
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>你要将本账户中的 %.2f 元 RMB 转入账户 %d 中:nn ==>==>确认请按1nn ==>==>==> 重新输入请按其他键nn“,zj,zh[j]);
for(i=1;i<=80;i++)printf(”=“);
printf(”n“);
scanf(”%d“,&c);
if(c==1){
system(”cls“);
printf(”n“);
if(ck[m]>=zj){
for(i=1;i<=80;i++)printf(”=“);
ck[m]=ck[m]-zj;
ck[j]+=zj;
jf[j]+=zj/100;
printf(”n ==>恭喜你,转账成功!n“);}
else {
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==>==>对不起,你的余额不足,请重新选择操作!n“);}
break;}
}
}
else {system(”cls“);
printf(”n“);
for(i=1;i<=80;i++)printf(”=“);
printf(”n ==> 操作错误!nn ==>==> 请重新选择操作!n“);
}
}
}
else {system(”cls“);
printf(”n“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>>>>> 你输入的账号或密码错误,请重新输入!nn “);
for(i=1;i<80;i++)printf(”=“);}
}
else if(kk==1){system(”cls“);
printf(”nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>对不起,此功能暂时不能实现!nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”n“);} else {system(”cls“);
printf(”nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”nn“);
printf(” ==>对不起,你的输入有误!nn“);
for(i=1;i<80;i++)printf(”=“);
printf(”n");} } } }
第四篇:JAVA课程设计-ATM机模拟系统
《Java语言程序设计》
课程设计报告
题
目:
ATM柜员机
专
业:
信息与计算科学
学
号:
姓
名:
单
焱
指导教师:
李
又
良
成绩:
2010 年 12 月 10 日
目 录
1课程设计研究背景及意义.......................................2 2 课程设计题目描述和基本功能设计要求...........................2 3 系统需求分析.................................................2 3.1 功能需求分析............................................2 3.2 其他需求分析............................................3 4 系统设计.....................................................3 4.1 总体设计................................................3 4.2 ATM柜员机界面设计......................................4 4.3 各功能模块设计..........................................5
4.3.1 登陆页面模块设计................................5 4.3.2 选择服务模块设计................................6 4.3.3 取款模块设计....................................7 4.3.4 修改密码模块设计................................8 4.3.5 查询余额模块设计................................9 4.3.6 退卡模块设计....................................9 4.4 异常处理情况说明.......................................10 5 系统实现与测试..............................................10 6 课程设计总结................................................13 6.1 遇到的问题及解决办法...................................13 6.2 心得体会...............................................14 参考文献......................................................14 附录(源码)..................................................14
1课程设计研究背景及意义
这次课程设计是通过JAVA编程来实现ATM柜员机的功能。以前,人们用手算取钱,不管从方便的角度还是速度的角度来看都不及现在。电子技术的不断发展使得ATM自动化的功能不断完善。在二十一世纪的今天,ATM柜员机是人们生活中重要的工具,所以,对ATM柜员机的研究的课程设计具有重大意义。
这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。课程设计题目描述和基本功能设计要求
本次设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。组员分工:
组长(单焱): 负责分配其他组员的任务,构建需求分析,系统实现及异常处理情况,调试程序等,把握ATM柜员机的整体布局。
组员1(刘星):负责登陆界面模块,选择服务模块及退卡模块,编写相应代码。组员2(王玲玲):负责取款、修改密码、查询余额模块,编写相应代码。系统需求分析 3.1 功能需求分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.2 其他需求分析
(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束 开发工具:Eclipse3.2.运行环境:Windows 2000以上。(3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。系统设计 4.1 总体设计
本次设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。如图:
图1
ATM功能结构示意图
4.2 ATM柜员机界面设计
一个系统的界面应该要简单明了,当然样式美观就更好了。本次设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s){super(s);}、Selection(String s,Account act){ } 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);super(s);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//处理窗口关闭事件
{ System.exit(0);} });}(2)窗体的主要结构的设计(网格布局)
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
4.3 各功能模块设计 4.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。
我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:
public void actionPerformed(ActionEvent e){
Account act;
String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*选择各种服务*/
if(e.getSource()== button1){
String number1,number2;
number1=tf1.getText();
number2=tf2.getText();
/*判断密码和卡号是否正确*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡号和密码都正确则进入功能选择窗口*/
Selection s = new Selection(“选择服务”,act);
}else{
dispose();
JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);
new WindowBox(“登录界面”);
}
}
/*退卡*/ if(e.getSource()==button2){
dispose();
JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);
} } 4.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:
p.add(new Label(“请选择你要的服务”));
this.add(p);
button1 = new Button(“存款”);
p1.add(button1);
this.add(p1);
button2 = new Button(“取款”);
p2.add(button2);
this.add(p2);
button3 = new Button(“查询余额”);
p3.add(button3);
this.add(p3);
button4 = new Button(“退出”);
p4.add(button4);
this.add(p4);
button5 = new Button(“修改密码”);
p5.add(button5);
this.add(p5);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
});button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300,300,300,300);setVisible(true);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==button2){//取款
dispose();
GetBalance gb = new GetBalance(“取款”,act);} if(e.getSource()==button3){//查询余额
Query q =new Query(“查询余额”,act);
dispose();} else if(e.getSource()==button4){//退出
dispose();
} JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);
} else if(e.getSource()==button5){//修改密码
ChangePassword cp = new ChangePassword(“修改密码”,act);
dispose();} 4.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:
if(e.getSource()== button){
if(act.get_Money()< 0){// 判断余额是否为负
dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额
if(money % 100 == 0){
dispose();
JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}
if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口
}
”每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服} else if(money > act.get_Money()){// 判断取款数额是否大于余额
dispose();
JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
} Selection s = new Selection(“选择服务”, act);} 4.3.4 修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:
/*判断旧密码是是否正确*/ if(pwd2.equals(act.get_Password())){ /*判断两次输入的密码是否匹配*/
if(pwd3.equals(pwd4)){
/*如果都正确的话就设置新密码*/
act.setPassword(pwd3);
dispose();
Selection s = new Selection(“选择”,act);}else{
dispose();
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);
} }else{
this.setVisible(false);
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();} 4.3.5 查询余额模块设计
在查询余额模块设计中, 和其他的界面的结构相差不多。有一个余额显示和一个按钮还有标签组成的。查询时用到的方法:
Query(String s, Account act){// 构造函数
super(s);this.act = act;button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的button.addActionListener(this);panel.add(button);this.add(panel);this.add(panel1);this.setLayout(new GridLayout(2, 1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });setBounds(300, 300, 300, 300);setVisible(true);
方法
} 4.3.6 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==button4){//退出
dispose();JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} 这个方法就可以实现了,这里就不再多说了。
4.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException(3)加载类时的异常处理
需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。
(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。系统实现与测试
(1)编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。
图5 输入错误1 当取款时如果超过卡里的余额的话就会报图6的错误。
图6 输入错误2(4)查询余额界面,如图7所示。
图7 查询余额界面
(5)修改密码界面,如图8所示。
图8 修改密码界面
当输入的初始密码不正确会报图9所示错误。
图9 输入错误1
当2次输入的新密码不同会报图10所示错误。
图10 输入错误2
经过测试,所有的功能基本上都实现了,而且运行正常。课程设计总结
6.1 遇到的问题及解决办法
在此次课程设计中遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进
行实际的练习与操作,才能有大的进步。
6.2 心得体会
在这次的课程设计中,主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
通过这次课程设计我学到了一些东西,这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。
通过努力,这次课程设计终于完成了,在这个过程当中,学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。
参考文献
[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录(源码)
/******登陆页面首窗口*******/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
import java.io.*;
public class WindowBox extends Frame implements ActionListener { Box baseBox, box1, box2;TextField tf1, tf2;Button button1;Button button2;
WindowBox(String s){// 构造方法
super(s);tf1 = new TextField(6);tf2 = new TextField(6);box1 = Box.createVerticalBox();
box1.add(new Label(“请输入你的卡号”));// 输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(“请输入你的密码”));// 输入密码 box2 = Box.createVerticalBox();box2.add(tf1);// box2.add(new TextField(16));
box2.add(Box.createVerticalStrut(8));box2.add(tf2);// box2.add(new TextField(16));
baseBox = Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1 = new Button(“确定”);// 加入按钮 button1.addActionListener(this);add(button1);button2 = new Button(“退卡”);// 退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/* 监听器 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });setBounds(300,300,220,220);setVisible(true);} public void actionPerformed(ActionEvent e){
Account act;String card;String pwd;act = new Account(“000000”, “Devil”, “123456”, 50000);// 初始化 /* 选择各种服务 */
if(e.getSource()== button1){
String number1, number2;// 输入的两个卡号和密码的变量 number1 = tf1.getText();number2 = tf2.getText();/* 判断两次输入的卡号和密码是否正确 */
if((act.get_Code().equals(number1))
&&(act.get_Password().equals(number2))){ dispose();Selection s = new Selection(“选择服务”, act);} else { dispose();
JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);
// 报输入密码或卡号不正确
new WindowBox(“登录界面”);
}
}
if(e.getSource()== button2){
System.exit(0);
dispose();// 退出
} } }
/*************主函数****************/ public class ATM { public static void main(String[] args){
new WindowBox(“登录页面”);} } /********* 选择服务窗口 ***************/ import java.awt.*;import java.awt.event.*;
public class Selection extends Frame implements ActionListener { Button button1, button2, button3, button4, button5;
Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;public Selection(){ } Selection(String s, Account act){ super(s);this.act = act;this.setLayout(null);this.setLayout(new GridLayout(6, 1));
p.add(new Label(“请选择你要的服务”));this.add(p);/* 各种服务功能 */
button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查询余额”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密码”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300, 300, 300, 300);setVisible(true);validate();
} } public void actionPerformed(ActionEvent e){
} if(e.getSource()== button2){// 取款
dispose();GetBalance gb = new GetBalance(“取款”, act);} if(e.getSource()== button3){// 查询余额
Query q = new Query(“查询余额”, act);dispose();} else if(e.getSource()== button4){// 退出
dispose();
JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} else if(e.getSource()== button5){// 修改密码
ChangePassword cp = new ChangePassword(“修改密码”, act);dispose();} /**********取款功能************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
public class GetBalance extends Frame implements ActionListener { Box baseBox, box1, box2;Button button;TextField tf;Account act;
GetBalance(String s, Account act){// 构造函数
super(s);this.act = act;
button = new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2, 1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);
this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
} });setBounds(300, 300, 300, 300);this.setVisible(true);} public void actionPerformed(ActionEvent e){ // System.out.println(e.getActionCommand());
double money;money = Double.parseDouble(tf.getText().trim());if(e.getSource()== button){
if(act.get_Money()< 0){// 判断余额是否为负
dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额
if(money % 100 == 0){
dispose();
JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}
if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口
”每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服 // dispose();} } else if(money > act.get_Money()){// 判断取款数额是否大于余额
dispose();JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入
你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);口
Selection s = new Selection(“选择服务”, act);// 返回选择服务窗
} } } }
/********修改密码功能*************/ import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JOptionPane;
public class ChangePassword extends Frame implements ActionListener { Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();TextField tf4, tf5, tf6;Button button;Account act;ChangePassword(String s, Account act){
super(s);
this.act = act;
tf4 = new TextField(6);
tf5 = new TextField(6);
tf6 = new TextField(6);
button = new Button(“确定”);button.addActionListener(this);/* 建立新密码 */
panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);
} panel3.add(new Label(“请再次输入你的新密码”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4, 1));setBounds(300, 300, 300, 300);this.setVisible(true);/* 窗口事件 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);} });/* 判断事件源,看条件是否成立再修改密码 */
public void actionPerformed(ActionEvent e){ if(e.getSource()== button){
String pwd2, pwd3, pwd4;
pwd2 = tf4.getText();
pwd3 = tf5.getText();
pwd4 = tf6.getText();
if(pwd2.equals(act.get_Password())){// 判断旧密码是否正确
if(pwd3.equals(pwd4)){// 判断两次输入的新密码是个匹配
act.setPassword(pwd3);// 启用新的密码
dispose();
JOptionPane.showMessageDialog(null, “密码修改成功!”, “消息
JOptionPane.INFORMATION_MESSAGE);
”,Selection s = new Selection(“选择”, act);// 返回服务窗口 } else { this.setVisible(true);
// ErrorWarn2 ew = new ErrorWarn2(“消息”,act);dispose();JOptionPane.showMessageDialog(null, “两次密码输入不匹配”, “
JOptionPane.INFORMATION_MESSAGE);
消息”,Selection s = new Selection(“选择”, act);// 返回服务窗口
} } else { this.setVisible(false);dispose();
“,} JOptionPane.showMessageDialog(null, ”初始密码输入错误“, ”消息
JOptionPane.INFORMATION_MESSAGE);
Selection s = new Selection(“选择”, act);// 返回选择服务窗口
} } } /**************查询余额功能******************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;
public class Query extends Frame implements ActionListener { Button button;Account act;
Query(String s, Account act){// 构造函数
super(s);this.act = act;
button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();
panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的方法
// panel1.add(tf);
button.addActionListener(this);
panel.add(button);
this.add(panel);
this.add(panel1);
this.setLayout(new GridLayout(2, 1));
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(300, 300, 300, 300);
setVisible(true);} public void actionPerformed(ActionEvent e){
if(e.getSource()== button){
dispose();
Selection s = new Selection(“选择服务”, act);// 返回选择服务窗口
} } }
/***********账户****************/ import java.io.*;/* 该类为实现客户信息及部分功能 */ public class Account {
{
} private String code = null;// 信用卡号 private String name = null;// 客户姓名
private String password = null;// 客户密码 private double money = 0.0;// 卡里金额
public Account(String code, String name, String password, double money)
} this.code = code;this.name = name;this.password = password;this.money = money;public String get_Code(){// 取得卡号
return code;} public String get_Name(){// 取得名字
return name;} public String get_Password(){// 取得密码
return password;} public double get_Money(){// 重置余额
return money;} /* 得到剩余的钱的数目 */
protected void set_Balance(double mon){ money-= mon;} /* 重置密码的方法 */
public String setPassword(String pwd){ password = pwd;return password;}
第五篇:ATM机岗位职责
自助业务营业网点职责
1、负责所属自助设备的管理及运行环境的检查工作,保证自助设备的正常运行;每日都要对自助设备进行常规测试和检查,重点检查现金库存和打印纸,保证正常支付和打印机正常工作。
2、严格按照自助设备的操作规程,做好加钞、清洁保养、耗材领用与更换、巡检、报障、宣传引导等日常运行管理工作,及时清除自助设备机身或周围的非法张贴物。
3、对新投入运行或排除故障后再投入运行的自助设备进行测试验收后方可对外开放使用。
4、发现自助设备故障时,须立即检查自助设备工作状态,一般性故障要及时排除,遇有技术上的故障,应立即通知总部自助设备管理部门,积极协助总部排除故障,并做好相关记录。
5、负责自助服务业务日常账务管理,配合做好自助设备发生的差错核对和账务调整。
6、宣传引导客户使用自助设备,做好柜面分流,及时处理客户投诉。
7、负责自助设备电子摄像监控设备的日常操作与维护,发现问题应立即上报总部保卫部门。
8、负责确定自助设备管理人员并上报总部存档备案。自助业务专管员及出纳员职责
1、自助设备保险柜钥匙和密码必须双人分别保管,即专管员(管理员)保管自助设备保险柜密码,出纳员(加钞员)保管自助设备保险柜和钱箱钥匙。钥匙用毕,不得随身携带,必须入库(柜)保管。
2、专管员(管理员)工作调动时,应及时更换密码;密码须不定期更换,每月至少更换一次。在更改密码过程中必须打开保险箱门,密码更改后应至少3次测试新密码并开锁,在未验证保险箱密码正确设臵之前,严禁关闭保险箱门。
3、办理钥匙、密码交接时,必须在会计出纳交接登记簿中做好记录。为防止遗忘保险箱密码,专管员(管理员)在设臵密码后,将设备的新密码封入不透明信封,并在封口加盖名章由主办会计检验盖章后入库保存。备用密码记录和钥匙由专管员(管理员)和出纳员(加钞员)分别密封后交由总部保卫部门入保险柜保管。如需启封,按总部有关规定办理。
4、装入或取出自助设备现钞,必须做到双人【专管员(管理员)和出纳员(加钞员)】操作、武装守护、及时清点、交叉复核、不得中途换人。装取现钞时,必须做到“同装、同取、同清点”;钱箱启闭时,必须做到“同开、同闭、同加锁”;
5、因特殊情况无法开箱取钞时,专管员(管理员)必须立即报告总部技术部门,迅速查明原因,并会同营业网点和总部有关技术人员共同开箱;开箱后,其他人员一律不得接触现钞;
6、每次自助设备装填现钞前进行轧账处理,装钞后对外营业前,专管员(管理员)必须进行实地测试,测试无误后方可投入使用。测试情况在“自助设备运行维护登记簿”记载,测试的内容包括:
(1)、检查钞箱设臵与装载的币种面额是否相符;
(2)、检查钱箱有无串位;
(3)、做一笔取款交易(测试金额应为350元),检查吐钞面额是否准确。
7、自助设备备付金现钞必须是无破损、无断裂、无透明纸粘贴、无褶皱及卷角等7-8成新的同版人民币。禁止使用原封新钞和潮湿的现钞。自助设备备付金现钞在装机前,须经识别假币功能的点钞机及人工反假、过数。
8、每日结账时必须清点剩余备付金,与综合业务网络系统自助设备柜员的现金轧账单核对一致。轧账清单数据与箱内现金金额不符或取款人提出疑问时,必须当时清点机内库存现金。自助设备的现金库存必须控制在财会部门核定的限额内。
9、自助设备出现现金长短款,应登记“自助设备运行维护登记簿”,先在银联卡差错处理账户挂账,待查明原因后按照《陕西省农村信用社银行卡业务差错处理办法》进行处理。
10、自助服务业务按照省联社统一的账务核算要求,设臵和使用会计科目,会计处理按照《陕西省农村信用社富秦卡会计核算办法》执行。篇二:atm机
全国银行atm机服务工程师
招聘简章
编号:14-04-03
一、岗位名称:全国银行atm机服务工程师
二、岗位职责: atm服务工程师是负责银行atm等自助设备的运维管理工作。工作内容包括:对银行atm硬件故障的维修、日常运行维护、清机加钞,现金清分整点,设备运行监控值守,卡钞处理,回收卡处理,软件运维与升级服务、预防性保养服务、安装与移机服务以及耗材补充与更换服务等工作。
三、职业概况:
随着银行atm自助设备数量的提升,atm的维修和软件的运维也日益增加,实用型atm运维人才的供需矛盾日益突出。与庞大的市场需求相比,我国的atm运维人才的供应缺口仍然很大,尤其是掌握atm硬件维修与atm软件运维技能与技术的专业人才(即atm服务工程师),目前已成为市场急需的人才之一。当前我国高校的课程设置、教学目标的差异,导致高校培养的人才难以符合银行实际的用人需要,只有专业化的培训,才能解决市场的供需矛盾。atm服务工程师是国内金融it行业的热门职业,国际权威研究机构rbr的研究成果表明,未来5年,我国atm市场每年的增长速度超过30%,因此,该职业目前处于上升期并被列为发展前景最好的职业之一。与同类职业相比,atm服务工程师的职业地位与薪酬收入也具有较为明显的优势,因此,atm服务工程师师是国内现阶段最好的就业选择之一。
四、招聘要求:
1.遵纪守法,品行端正,身体健康,有固定住所,无刑事犯罪记录; 2.男性,18-30周岁。3.统招本科、大专毕业生(学信网可查),理工科专业,财政金融类,计算机科学与技术类,电子信息与自动化类,会计与审计类,机械类等相关专业的毕业生优先。可接收实习生。学历不同,待遇不同。
五、培训时间和内容:
培训班学制6个月,免费提供住宿,吃饭自理,有食堂。培训采用“封闭脱产”形式
分两阶段进行,第一阶段为技能培训期(1.5个月-2个月),第二阶段为各地服务站实战训练期(3-4个月)(实训期间补助1500-2000元)。培训内容为计算机基础、电子电工基础、atm基础、atm故障诊断、atm故障处理、atm维修工具、服务与atm服务、wnc外设、wnc取款机、db取款机、ncr取款机、oki取款机、db取款机和服务外包流程培训。
六、工资待遇:
学历不同,待遇不同。每天8个小时,每周5天工作日,第一年月工资2000-3000元,第二年月工资3000-4000元,第三年4000-8000元,免费提供住宿,提供工作餐或餐补,缴纳五险一金,享受相关福利待遇。
关于三级九节制:
三个月一次考核,考核通过晋升一节 a.基本工资的基础上晋升一节是200元,以此类推一节、两节、三节这是一级 b.第二级是在第一级的基础上(200乘以1.5)还是经过三次考核,一节、两节、三节这是第二级 c.第三级是在第二级的基础之上再乘上1.5,在经过三次考核完成第三级工资
七、就业安置:
经考试合格的学员,直接到全国各大银行上班,签订劳动合同,缴纳五险一金(部分企业六险一金),享受相关福利待遇。后期转正。关于学员就业安置,原则上以其户籍所在地银行为依据,并结合个人意愿来决定工作地点,如遇户籍地暂无需求,须服从工作安排。
八、分配原则:
一、户籍地和就业意愿指向原则。以劳动者的户籍所在地和劳动者的就业意愿为参考。若就业者的户籍所在地和就业意愿所指地有用人需求的,由用人单位直接安排劳动者至就业者的户籍所在地或就业者的就业意愿所指地工作。若用人单位在就业者的户籍所在地和就业者的就业意愿所指地无需求的,须无条件服从用人单位的工作安排,用人单位的工作安排遵循第二条原则。
二、一次分配二次调整的原则。该原则是指劳动者首次工作地与其户籍所在地和劳动者的就业意愿所指地不同时,用人单位首先在其他工作地点对劳动者进行工作安置,待劳动者在用人单位工作满一定时间后由劳动者向用人单位以书面形式提出申请,调整工作所在地,用人单位根据实际情况在本系统内进行工作所在地的调整。
三、特别说明。户籍地是指劳动者户口所在市(市指的是地级市,非县级市)。劳动者的工作所在地的安排,行为主体为用人单位。与招聘人员、培训单位无关。招聘宣传人员和培训单位只具有向用人单位的建议权,故劳动者在用人单位面试时或劳动者在与用人单位签订劳动合同时,劳动者对工作所在地这一款项应充分了解。否则因此而产生的一切不良后果均由劳动者承担。
九、合同性质:atm机厂商,直签,首签三年,续签五年,随后转为长期。
十、报名准备资料:学历证原件、身份证原件、户口本原件、复印件、无犯罪记录证明。
下发时间:2014年4月24日篇三:电子银行部岗位职责 xxxx农村信用社合作联社电子银行
部岗位职责
为加强xxxx农村信用合作联社电子银行部各项业务的管理,有效防范业务风险,促进电子银行部各项业务健康、有序发展,根据《电子银行业务管理办法》、《pos收单业务管理办法》、《固定资产、低值易耗品管理办法》以及相关业务制度,制定本岗位职责。xxxx农村信用合作联社电子银行部的职责是对市场业务需求统筹和业务发展规划与市场营销、规章制度建设与监督执行、电子银行部各项业务系统运营管理等工作的职能部门。
部门负责人(经理)岗职责(买买提艾力)
一、电子银行业务
一、负责与当地银监局、人民银行等监管机构的沟通协调及新产品报批报备工作,落实各项监管要求;
二、负责落实风险管理要求,控制部门主管业务的风险;
三、负责组织辖内主管业务检查工作,审批、指导本社主管业务工作的开展,监督各项规章制度的执行落实;
四、负责组织编制及分解下达全联社主管业务指标,考核、评价网点相关工作考评;
五、对电子银行系统在运行过程中发生的重大事项进行跟踪和报送;
六、负责业务系统机构号和柜员的新建、删除、调整;
七、领导交办的其他工作;
具体工作内容包括:
(1)受理网点提交的《网上银行机构信息维护申请表》、《网上银行操作员增加、变更、删除申请表》(附件i)。另外为辖区网点操作员进行密码重臵。统计网点开办网银业务情况以及企业、个人网银用户数量,作为本部门年底考核的依据。
(2)负责编写《xxxx联社电子银行业务客户操作图解教程(维、汉文)》,条件允许的情况首在办公室亲自指导做一个简单的现场培训。培训内容包括:如何安装电子银行助手、如何转账、查询历史交易、查询余额、账单打印、网吧、公共计算机上使用网银授权设备时应注意哪些、如何防范病毒、黑客入侵、防止密钥盗窃等。为了避免日后工作中操作人员因误操作产生经济纠纷,培训结束后让操作员或财务人员《电子银行业务培训确认单》上签字确认,并且装订入档保管。
(3)每个月对辖区网点网银业务的开展情况进行统计,内管系统打印汇总表,形成书面报告报联社领导。按网点统计并在辖区公布开展情况。
(4)每个月统计ukey、动态口令卡的使用情况、库存结余情况;
(5)针对网银业务的开展情况每个月进行一次经营分析,并生成经营分析报告提交给分管领导;
(6)本部门负责人组织部门人员对辖区网点进行抽查;
(7)结合部门季度自律监管工作编制检查实施方案、调查通知书等资料;
二、pos收单业务(特约商户审批岗职责)
1、负责与当地银监局、人民银行等监管机构的沟通协调及新产品报批报备工作;
2、可根据收单业务相关制度和规定制订实施细则,并报自治区联社信用卡中心备案;
3、依据区联社的拓展规划,负责业务的组织落实;
4、负责组织辖内主管业务检查工作,审批、指导本部主管业务工作的开展,监督各项规章制度的执行落实;
5、负责新拓展商户入网资格审核、扣率标准、商户类别码(mcc码)确定以及商户受理功能审查核对等工作;
5、负责对辖内特约商户管辖网点日常巡检工作的检查、督促;
6、负责上报助农取款业务开办申请
7、负责清算和开支手续费和佣金
8、负责监督助农取款点业务办理合规性、助农取款点标示牌发放等工作 具体工作内容包括:
(1)受理营业网点提交的特约商户入网初审资料;
(2)督促pos机具密钥的申请、灌入以及安装进度;
(3)联系供应商更换机具,同时重新配pos机具保证商户正常营业;
(4)每天需要解决特约商户遇到的问题,如:商户业务的咨询、投诉、故障排查、差错交易调整、刷卡消费不成功、流水打印机卡纸、线路故障、清算中心不及时清算跨行交易等;(5)根据故障情况上报商户提交的手工处理申请单、商户调帐表等资料;
(6)每个月底导出月交易量统计表,按照商户手续费收入情况对辖区特约商户进行排行统计,作为今后的金牌商户、高效益商户奖励的依据。
(7)向联社经营班子报优惠政策实施方案,经分管领导批准可根据收单业务需求制定特约商户利益返还、奖励等优惠政策),对收单业务的开展情况形成书面资料报联社分管领导批阅。
(8)联系各营业网点将本辖区有良好的企业信誉、较为完善的内部管理、能认真履行特约商户协议中的各项条款的商户作为发展对象,根据联社领导下达的计划指标,每个月保证营销10台pos机(拟定)。
三、atm自助设备业务(atm业务审批岗职责)
1、负责atm设立的可行性论证、申请报批等工作
2、负责根据业务需要上报atm机型,并负责业务培训、管理及宣传推广;
3、负责atm业务统计和效益考核;
4、负责atm突发事件的紧急处臵;
5、负责保险柜钥匙等重要物品的登记和保管;
6、负责规划atm机具编号、ip地址;
7、负责辖区内组织季度自律监管检查;
8、负责制定本项业务违规操作处罚细则,并进行处罚;
具体工作内容:
1、负责选址分析报告的编写、机具型号、数量的选定;
2、负责制定业务培训计划、宣传推广方案;
3、atm机运行情况的监督检查、突发事件的紧急处臵
4、负责督促机具故障处理、监控设备的安装进度、ups供电设备的运行情况等;
5、每个月对辖区atm机盈利情况进行统计,编写经营分析报告;
6、每个月对辖区自助设备的开机率、停机率、假钞情况、吞卡情况、故障情况、交易成功率、综合交易排名等情篇四:网点各岗位职责
网点各岗位职责
一、营业主管兼综合柜员
1、负责协助营业部主任进行网点基础管理工作
2、负责营业部在行式atm机清机加钞工作
3、坚持库存现金限定,做到不超库存,大额存取款及时上缴
4、严格管理重要空白凭证,按月使用量请领相关单册
5、定期检查各柜员账务,加强现场监管,对柜员的工作情况做好检查和评价。
6、按制度规定处理会计出纳工作中的重要事项和疑难问题,对发生的各类会计出纳差错和事故,及时组织追查、补救和上报工作。
7、按规定掌管有关登记簿,并做好纪录。
8、定期检查各柜员现金、重要凭证、有价单证保管使用情况。
9、随时对监控系统进行检查,发现问题及时解决,确保系统正常运行。
10、每日营业终了,检查各柜员保管的现金、重要空白凭证、卡片账、有价单证等是否相符,账簿的登记是否合规,并对检查事项在有关登记簿上做好记录。
11、履行综合柜员日常职责,完成领导和上级管理部门交办的其他事项。
二、会计主管兼大堂主管
1、负责大堂内卫生检查,秩序维护,安排大堂经理日常工作
2、负责公司业务柜员进行业务学习,负责对柜员业务知识和业务技能的定期考核工作。
3、定期检查公司业务柜员账务,加强现场监管,对柜员的工作情况做好检查和评价。
4、履行会计主管日常职责,完成领导和上级管理部门交办的其他事项。
5、严格管理公司业务重要空白凭证,按月使用量请领相关单册
6、、负责vip客户现场维护工作
7、兼职网点理财经理,在发现理财客户后进行理财购买,保险出单,大客户大额取款等工作。
8、负责网点离行式atm机日常加钞工作。
9、在规定权限内对前台柜员有关业务进行授权。
10、监督对公单位的开销户、账号、户名的变更和挂失、冻结与扣划是否符合有关规定。
11、审核汇票、本票、支票签发、解付、退票、挂失以及电汇的汇出、汇入、退汇是否符合规定;委托收款、托收承付以及承兑汇票的贴现处理手续是否合规;各种查询查复是否及时
三、公司业务柜员
1、受理公司业务前台业务,开立对公存款账户
2、负责公司业务优质客户经办人员维护工作
3、负责网点离行式atm机日常加钞以及在行市atm机日常维护工作
四、普通柜员工作职责
1、认真执行各项规章制度,规范业务操作,严格按规程处理业务。
2、办理储蓄业务、电子银行业务、各类中间业务等业务。
3、负责临柜业务查询、挂失、解挂、冻结、解冻等事项,并登记相关登记簿。
4、随时检查现金箱、凭证箱,保持合理库存,超限额部分及时上缴综柜。
5、营业终了,按规定打印有关报表、资料,核对当日库存现金和凭证,经核实无误后签退。篇五:银行卡部门职责与岗位职责
长子县融汇村镇银行卡部职责
岗位结构图
职能
负责组织银行卡业务营销和管理,atm、pos等自主设备管理。
职责一 负责执行卡业务风险内控各项规章制度及格式化文本 1.负责贯彻执行国家有关方针政策和法律法规 2.负责执行全行卡业务的各项内控工作制度和流程 3.负责制定本部门各项规章制度和流程并组织实施
职责二 拟定本行卡业务发展政策、发展规划和本部门工作计划,并组织实施 1.根据全行工作重点,拟定全行卡业务发展政策、发展规划和部门工作计划 2.负责监督工作计划的完成情况,并及时纠偏
职责三 负责全行个人存款、贷款的中间业务的营销和管理 1.负责制定授权范围内个人存款、贷款和中间业务的营销方案,并组织实施,对实施过程进行指导、协调、检查和监督,对营销方案的实施效果进行评估 2.进行市场调研,搜集行业及客户信息,分析卡业务市场情况 3.开展对持卡客户群的调查、统计和分析,进行持卡客户的市场细分和目标市场定位,组织全行卡业务系统的挖掘及培育优质客户群,提高市场份额
职责四 负责卡业务的各项调研统计,按照要求开展调查工作 职责五 负责银行卡业务及银联业务的管理工作
职责六 完成pos商户的相关工作以及与其他机构的联络协调工作
职责七 负责自主设备的选址、布设与管理 1.负责自主设备的市场调研、选址,协调安装、验收、承担材料的报备工作 2.负责统计本行自助设备的基本情况 3.负责各支行的自助设备管理情况及运行情况进行监督 4.负责培训指导支行设备管理员
职责八 负责卡业务的政策研究、新产品开发、培训和推广工作 1.负责个人业务新产品的开发工作 2.负责组织专业人员对新产品进行培训和业务交流 3.负责已开发新产品的推广工作
职责九 负责配合做好本部门案件转向治理和案件防控工作 1.负责本部门员工案件治理工作目标责任书的签订工作,并进行考核 2.负责定期对本部门员工进行风险排查 3.负责制定本部门员工合规和案件警示教育培训工作、职责十 负责本部门新上线计算机应用系统的管理
1.配合新业务品种的开发,对系统提出业务需求,并编制管理规定和操作流程 2.配合科技信息部不断改进和完善计算机应用系统,提高计算机处理业务水平 3.负责配合相关部门完成系统的测试、验收、上线推广和培训,制定和完善操作手册 职责十一 负责本部门预案演练及风险控制
职责十二 负责内部沟通与人员管理
职责十三 负责体系有关的工作
职责十四 完成领导交办的其他工作
经理(副经理)岗位职责
(副职协助工作,按分工做好岗位职责工作)
一、主持本部门全面工作,负责本部门日常管理工作,组织本部门人员完成计划任务
二、拟定本部门工作计划、工作实施方案,提出工作措施,报批后组织实施。
三、拟定、调整、完善本部门人员岗位职责和考核办法,报批后组织实施。
四、负责提出、修订本部门的岗位责任制、操作规程和业务流程,做好各岗位的分工合作,协调各项业务工作的顺利开展,对员工进行绩效考核。
五、组织拟定银行卡业务发展目标、工作计划及考核指标,并负责组织实施、知道、检查,定期将考核情况向领导汇报。
六、制定、组织落实银行卡业务营销方案,宣传方案;制定银行卡业务培训计划并组织人员培训。
七、做好银行卡业务风险控制和业务监测,预防利用银行卡、atm自助银行设备、pos中断等各种犯罪活动。
八、负责银行卡部人员岗位调配及日常管理工作。
九、撰写、审核银行卡部各类文字上报材料,把好材料文字质量关。
十、负责本部门员工的教育、培训和管理工作。
十一、贯彻国家法律法规和单位各项规章制度、工作要求,做好工作调研,提出工作意见、建议,报批后执行。
十二、按时上报工作计划、工作总结、报表等相关工作资料,定期向领导报告工作。做好单位上下、内外的协调沟通。
十三、遵守法律规章和单位各项制度、工作职责、工作纪律,讲职业道德、职业操守。按照单位各项工作事务和业务操作规程做好各项工作。
十四、完成单位分配和领导安排的其他工作任务。
综合岗位职责
一、做好部门办公室事务管理、会务、文件草拟和收发、传达等日常工作和各项后勤事务工作。保管、使用业务业务印章、重要资料。值守本部门电话,做好电话记录,及时准确向相关人员和相关部门传递紧要电话资讯。
二、对本部门的文件、资料、会议记录等的手机、整理和分类装订保管,并建立业务档案。完成本部门业务档案的手机、整理、利用和归档工作。
三、做好本部门工作例会、学习的准备、召开工作。
四、编制、汇总填报有关工作报表,起草、审核本部门工作文件、报告和工作计划、总结。做好报表统计、报告和各种书面报告收集、你写报送工作。