package Ġcom . tw bar ber . register . public . cli Ċ Ċ import Ġcom . tw bar ber . register . public . Cash Register Ċ import Ġcom . tw bar ber . register . public . data . Balance Ċ import Ġjava . util .* Ċ Ċ class ĠCash Register Cli Runner Ġ{ ĊĊĠĠĠ Ġval ĠREAD Y Ġ= Ġ" ready " ĊĠĠĠ Ġval ĠSHOW _ REGEX Ġ= Ġ" show " ĊĠĠĠ Ġval ĠTA KE _ REGEX Ġ= Ġ" take Ġ( \\ d + Ġ){ 4 }\\ d +" ĊĠĠĠ Ġval ĠPUT _ REGEX Ġ= Ġ" put Ġ( \\ d + Ġ){ 4 }\\ d +" ĊĠĠĠ Ġval ĠCHANGE _ REGEX Ġ= Ġ" change Ġ\\ d +" ĊĠĠĠ Ġval ĠQ UIT _ REGEX Ġ= Ġ" quit " ĊĊĠĠĠ Ġprivate Ġval Ġregister Ġ= ĠCash Register () ĊĠĠĠ Ġprivate Ġval Ġinput Ġ= ĠScanner ( System .` in `) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCash Register Cli Runner (). run () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println ( READY ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġinput . nextLine (). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input . matches ( Regex ( SHOW _ REGEX ))) Ġprint ( register . show ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( input . matches ( Regex ( TA KE _ REGEX ))) Ġprint ( register . take ( parse Transaction ( input )). show ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( input . matches ( Regex ( PUT _ REGEX ))) Ġprint ( register . put ( parse Transaction ( input )). show ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( input . matches ( Regex ( CHANGE _ REGEX ))) Ġprint ( register . change ( parse Change ( input ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( input . matches ( Regex ( QU IT _ REGEX ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" By e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . exit ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ( print (" Unsupported ĠOperation .")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message Ġ+ Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Transaction ( input Ġ: ĠString ): ĠBalance Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb ills Ġ= Ġinput . split (" Ġ") ĊĠĠĠĠĠĠĠ Ġreturn ĠBalance ( b ills [ 1 ]. toInt (), Ġb ills [ 2 ]. toInt (), Ġb ills [ 3 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ills [ 4 ]. toInt (), Ġb ills [ 5 ]. toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Change ( input Ġ: ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . split (" Ġ" )[ 1 ]. toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint ( output Ġ: ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println ( output ) ĊĠĠĠ Ġ} Ċ } Ċ