用C语言模拟ATM机工作流程编程

Python019

用C语言模拟ATM机工作流程编程,第1张

#include

"stdio.h"对ATM机器的模拟就是一个对队列的模拟下面代码在VC6环境下调试已经通过了其中有个缺陷就是因为代码执行速度过快导致二次执行根据时间随机出来的数字都是一样的因此你可以自己加上一个延迟子程序部分功能已经注释了#include

"stdlib.h"#include

"time.h"#define

OK

1#define

ERROR

0

typedef

struct

node{

int

number

struct

node*

next}*Lnode

typedef

struct

list{

node

*head,*rear}*Plist

//模拟

ATM开业bool

ListInit(Plist

list){

Lnode

p

p

=

(Lnode)malloc(sizeof(Lnode))

list->head

=

p

list->rear

=

list->head

list->head->next

=

NULL

if(list->head!=NULL)

return

ERROR

else

return

OK}

//模拟

客户排队bool

ListInsert(Plist

list,int

number){

Lnode

p

p

=

(Lnode)malloc(sizeof(Lnode))

if(p==NULL)

return

ERROR

else

{

p->number

=

number

p->next

=

NULL

list->rear->next

=

p

list->rear

=

p

return

OK

}}

//模拟

客户办完事离开bool

ListDelete(Plist

list){

Lnode

p

if(list->head

==list->rear)

return

ERROR

else

{

p

=

list->head->next

list->head->next

=

p->next

list->rear

=

list->head

//

free(p)

return

OK

}}

void

sand(int*

gettime,int*

needtime){

srand(time(NULL))

*gettime

=

rand()%100

srand(time(NULL))

*needtime

=rand()%100}

//模拟客户到达事件void

CustomerArrived(Plist

list,int

gettime,int

needtime,int

kehu,int

time){

int

nextgettime,nextneedtime

sand(&nextgettime,&nextneedtime)

while(needtime>0

&&

nextgettime>0

&&

time>0)

{

needtime

--

nextgettime

--

time

--

}

if(nextgettime

==

0

&&

needtime>0

&&time>0)

{

kehu++

ListInsert(list,kehu)

while(needtime>0

&&

time>0)

{

needtime--

time

--

}

ListDelete(list)

CustomerArrived(list,nextgettime,nextneedtime,kehu,time)

}

if(needtime

==0

&&

nextgettime>0

&&

time>0)

{

ListDelete(list)

while(nextgettime>0

&&

time>0)

{

nextgettime--

time

--

}

kehu++

ListInsert(list,kehu)

//未删除

,list未传递进去

CustomerArrived(list,nextgettime,nextneedtime,kehu,time)

}

if(time

==0)

{

printf("ATM关门,请明天在来!\n")

return

}}

main(){

list

list

int

i

=

10000

//ATM机器每天工作时间

int

kehu

=

0

//客户标号

int

gettime,needtime

ListInit(&list)

//ATM开业

sand(&gettime,&needtime)

ListInsert(&list,kehu)

CustomerArrived(&list,gettime,needtime,kehu,i)

getchar()

}

真正的ATM系统不可能只是用C语言编写的,它应该是一套完整独立的系统,核心代码更机密,不会轻易的泄露。

C语言可以写一个类似于ATM系统的框架,用以模拟ATM机上的各种操作。

框架代码如下:

    #include<iostream.h>  

    #include<stdio.h>  

       

    int main()   

    {  

        int choice =- 1   

          

        while(1) {  

            printf("请选择\n1.login\t2.regist\n")  

                scanf("%d", &choice)  

            switch(choice) {  

                case 1:  

                     login()  

                     break  

                case 2:  

                     regist()  

                     break  

                default:  

                     printf("输入有误,重新输入\n")  

                     break  

            }  

        }  

        return 0

    }  

      

    void login() {  

        printf("IN LOGIN\n")  

        int flag = -1  

        int X = -1  

        printf("输入账户和密码\n")  

        flag = search()  

        if(falg == 1) {  

            printf("存在,进入主页面\n")  

            X = menu()  

            if(X == 1)  

                 return  

        }  

        else if(flag == 0) {  

            printf("账户或密码错误\n")  

            return       

        }  

    }  

      

    int regist() {  

        printf("IN REGIST\n")  

        return 1  

    }  

      

    int menu() {  

        printf("IN MENU\n")  

        int key = -1  

        int N = -1  

        while(1) {  

            printf("请选择业务:1.refer\t2.deposit\t3.withdraw\t4.transfer\t5.resetPW\t6.退出\n")  

                scanf("%d", &key)  

            switch(key) {  

                case 1:  

                    N = refer()  

                    break  

                case 2:  

                    N = deposit()  

                    break  

                case 3:  

                    N = withdraw()  

                    break  

                case 4:  

                    N = transfer()  

                    break  

                case 5:  

                    N = resetPW()  

                    break  

                case 6:  

                    N = 6  

                    return 1  

                    break  

                default:  

                    printf("输入有误,重新选择:\n")   

                    break  

            }  

            if(N%2 == 0) {  

                printf("Error!\n")  

            }   

        }  

    }  

      

    int refer() {  

        printf("IN REFER\n")  

        //输出余额   

        return 1  

    }  

      

    int deposit() {  

        printf("IN DEPOSIT\n")  

        //存钱   

        return 3  

    }  

      

    int withdraw() {  

        printf("IN WITHDRAW\n")  

        //取钱   

        return 5  

    }  

      

    int transfer() {  

        ptintf("IN TRANSFER\n")  

        //转账   

        return 7  

    }  

      

    int resetPW() {  

        prtintf("IN RESETPW\n")  

        //重设密码   

        return 9  

    }

如下,实际过程中还需要加个菜单选择,另外要对用户输入进行合法性检查。

#include<stdio.h>

int main()

{

int n

char ch

printf("请输入您要取款的金额:")

scanf("%d",&n)

printf("请确认您的取款金额(y 或者n):")

ch = getchar()

if(ch == 'y' &&ch =='Y') //这个是你要的算法

printf("取款%d成功\n",n)

//同样的这里可以加入其它的判断,手机打字不便,自己根据需要加。

return 0

}