模拟银行存取款的业务

----模拟银行的常规业务
      ----开户
      ----存取钱,转账
      -----查询历史交易
      ----挂失
      ----修改密码
      ----催款业务
       ----统计利润率
      
      
       -----出现错误,编辑
---------------------------------------------------------员工的考核
     ----表一:用户基本信息表
     create table userInfo
     (
        uuid number(6),
        uname varchar2(20),
        uaddress varchar2(50),
        ucis varchar2(18),---身份证
        utel varchar2(11),
        primary key(uuid)
     ) 
     select * from userInfo
     ---表二:账户信息表
     create table countTnfo
     (
        cardid varchar2(20),---账户id,账号
        pwd varchar2(20),
        money number(10),---余额
        opendate date,---开户日期
        saveType varchar2(20),---账户类型,定期还是货期
        moneyType varchar2(20),---哪的账户
        ucid varchar2(18),---外键
        primary key(cardid)
     )
     drop table countTnfo
     select * from countTnfo
     ----表三:历史交易记录表
     create table transInfo(
      tid number(6),---流水编号
      cardid varchar2(20),
      ttype varchar2(10),---交易类型,转账,存款,跨行
      tdate date,
      tmoney number(10),
      primary key(tid)
      )
 --------------------------------------------------------------------------1........完成开户    
   -----第一:创建函数,这个函数的作用产生一个账号
   ----1.用函数产生一个随机考号,其中约束条件是前八位固定,后八位随机,6100 1212  **** *****   
   create or replace function make_vardid
   return varchar2
   is
      v_rand_num varchar2(20);
   begin
     select substr(to_char(dbms_random.value),2,4) ||' '||
            substr(to_char(dbms_random.value),6,4) into v_rand_num
     from dual;---产生随机数
     v_rand_num:='6100 1212' ||' '||v_rand_num;
     return v_rand_num;
     end;
     select make_vardid from dual---测试随机数
     ------第二:开户业务,开户的时候用到上面这个账号了(同时操作两个表,用户开户的时候要填写用户信息表和开户信息表)
     create or replace procedure proc_open
     (v_name varchar2, v_address varchar2,v_cid varchar2,v_tel varchar2,v_pwd varchar2,v_money number,v_savet varchar2,v_moneyt varchar2)
     is
        v_cardid varchar(20);
     begin
       v_cardid:=make_vardid;--函数调用
       savepoint bg;---两个表同时插入(两个表用到事务)
         -----sql是我自己创建的序列,sql.nextval表示产生下一个主键号
           insert into userinfo values(sql.nextval,
                v_name,v_address,v_cid,v_tel);
   
           insert into countTnfo values(v_cardid,v_pwd,v_money,
                 sysdate,v_savet,v_moneyt,v_cid);
                 dbms_output.put_line('开户成功------');
                commit;
            exception
                when others then
                 dbms_output.put_line('开户失败------');
                rollback to bg; 
                   end;
       -----测试开户
       begin
          proc_open('小白','北京','111122223333444455',
          '11011011011','888888',10,'定期','RMB');
        end; 
        select * from userinfo;
        select * from countTnfo      
----------------------------------------------------------2...................完成存取款过程
       ----写一个存储过程模拟存取款,op表示操作(存还是取),交易信息表可以创建一个触发器
      
        create or replace procedure take_save_pro
        (v_cardId varchar2,v_pwd varchar2,v_money number, v_op varchar2)
        is
           v_pwd2 varchar2(10); ---用来保存在数据库中查到的密码
        begin
          
           select pwd into v_pwd2 from countTnfo where cardId=v_cardId;---得到密码
          
           savepoint bg;---如果密码正确,如果选择了存款就加钱,如果选择取款就减钱       
           if v_pwd2 = v_pwd then
             if v_op='存款' then
                update countTnfo set money=money+v_money where cardId=v_cardId;      
             else
                update countTnfo set money=money-v_money where cardId=v_cardId;
             end if;
             insert into transInfo values(seq_tid.nextval, v_cardId,v_op,sysdate,v_money);
            
             dbms_output.put_line('交易成功------');
             commit;
           else
             dbms_output.put_line('密码错误------');
           end if;
        exception
          when others then
          dbms_output.put_line('交易失败------');
          rollback to bg;
        end;

 ---测试存款和取款
            select * from countTnfo---注意这里用到了上面的账号
            select * from transInfo
            delete  from transInfo;
              begin
                take_save_pro('6100 1212 0949 3030','888888',100,'存款');
              end;   
 ---------------------------------------------3.模拟转账
   ----转账(参数:两个账户,自己的密码,转账金额)
  
create or replace procedure  zhuan_proc
(v_cid1 varchar2,v_cid2 varchar2
,v_pwd varchar2 ,v_money number)
is
   v_pwd2 varchar2(10);   
begin
   select pwd into v_pwd2 from
    countTnfo where cardId=v_cid1;
   savepoint bg;
   if v_pwd=v_pwd2 then
       update countTnfo set money=money-v_money
       where cardId=v_cid1;
       update countTnfo set money=money+v_money
       where cardId=v_cid2;
      
       insert into transInfo values(seq_tid.nextval,
       v_cid1,'取款',sysdate,v_money);
       insert into transInfo values(seq_tid.nextval,
       v_cid2,'存款',sysdate,v_money);
       dbms_output.put_line('转账成功------');
       commit;
   else
       dbms_output.put_line('密码错误------');
   end if;
  
exception
  when others then
    dbms_output.put_line('转账失败------');
    rollback to bg;
end;
-----------------------------------------------
---测试转账业务
begin
  zhuan_proc('6100 1212 0949 3030',
  '6100 1212 4788 3274','888888',2);
end;

要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤: 步骤1:编写程序Account.java,其中定义银行账户类Account。该类中有账号、姓名、 存款余额等数据域,余额默认是0;有存款、取款、获取当前余额等方法。其中账号为长度 为12位数字的字符串,姓名为字符串,存款余额为double。 步骤2:编写名为CreditAccount类的信用卡账户类。该类继承自Account类,增加一 个透支限额(double)数据域,透支限额默认为1000。同时该类账户取款时允许透支,但不 能超过透支限额。 步骤3:编写名为SavingAccount的储蓄账户类SavingAccount。该类继承自Account 类。该类账户取款时不允许透支。 步骤4:编写名为Bank的模拟银行类,其中可以存储多个类型可能是信用卡账户或储 蓄账户的对象(可以用数组或ArrayList实现)。该类包含以下方法: <1>开户:即增加一个新的账户,注意:不允许两个账户的账号相同 <2>销户:即删除一个已有的账户 <3>查询账户:根据一个账号,查询有无该账号的账户 <4>统计目前银行的存款总余额的方法。 <5>统计目前银行的信用卡账户总透支金额的方法。 <6>统计目前总账户数。 <7>统计目前信用卡账户数 <8>统计目前储蓄卡账户数 步骤5:编写客户端类Client.java完成以下功能: <1> 编写一个静态方法,创建一个银行对象,并随机生成10个账号从1000 0000 0000 0000到1000 0000 0000 0009,类型不同的账户。 <2> main方法中模拟几次开户操作。 <3> main方法中模拟几次销户操作。 <4> 模拟几个对指定账号的存款和取款操作。 <5> 输出银行的总账户数、总余额、总透支数、各类具体账户数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值