• ATM管理系统


    一.作业规范要求

    博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
    作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
    作业目标 <编写一个ATM管理系统>
    学号 <3180701121>

    二.题目要求

    编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

    (1)开户,销户

    (2)查询账户余额

    (3)存款

    (4)取款

    (5)转账(一个账户转到另一个账户)等...

    三.代码提交

    (1)代码

    头文件

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define LEN sizeof(struct Account)
    #define RECORDCOUNT 5
    #define MESSAGELENGTH 100
    #define NAMELENGTH 100
    #define VIEWCOUNT 5
    #define DEFAULTBALANCE 0.00
    #define SAVE 1
    

    账户结构体

    struct Account  *head,*tail,*p; /*账户头部和尾部指针*/
    struct Account
    {
        char	name[NAMELENGTH];			    /* 账户名称 */
        float	balance;		    /* 账户余额*/
        char	message[RECORDCOUNT][MESSAGELENGTH];    /* 交易记录 */
        int maxMessageIndex;
        struct Account  *next;	/* 指向下一账户 */
    };
    

    函数定义

    void freeMemory();   /*释放内存*/
    void removeFirst(struct Account * account);    /*移除第一个元素*/
    void showMenu();                /*输出选择菜单*/
    struct Account * findAccountByName(char name[]);       /*通过账户名称找到对应的账户 */
    void writeMessage(struct Account * account,char message[]);  /* 写入交易记录 */
    void  init();	/* 创建链表,并返回表头指针 */
    void openAccount();         /* 开户 */
    void closeAccount();        /* 销户 */
    void deposit();              /* 存款*/
    void withdraw();            /* 取款 */
    void transfer();             /* 转账 */
    void print();              /*输出账户列表*/
    void printMessage();      /*输出账户交易记录*/
    

    主函数

    int main()
    {
        init();
        printf("欢迎使用杨哥ATM管理系统
    ");
        showMenu();
        char choice;
        fflush(stdin);
        choice = getchar();
        while(choice != '8')
        {
            switch(choice)
            {
            case '1':
                openAccount();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '2':
                closeAccount();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '3':
                deposit();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '4':
                withdraw();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '5':
                transfer();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '6':
                print();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            case '7':
                printMessage();
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            default:
                printf("无效菜单!
    ");
                showMenu();
                fflush(stdin);
                choice = getchar();
                break;
            }
        }
        freeMemory();   /*释放内存*/
        return 0;
    }
    

    菜单函数

    void showMenu()
    {
    	printf("               请选择操作序号!(0~4)
    ");
    	printf("**********************************************************
    ");
    	printf("*                                                        *
    ");
    	printf("*                    1.开户				 *
    ");
    	printf("*                    2.销户                              *
    ");
    	printf("*                    3.存款                              *
    ");
    	printf("*                    4.取款				 *
    ");
    	printf("*                    5.转账				 *
    ");
    	printf("*                    6.查看账户				 *
    ");
    	printf("*                    7.查看交易				 *
    ");
    	printf("*                    8.退出				 *
    ");
    	printf("*                                                        *
    ");
    	printf("**********************************************************
    ");
    
    	   
    }
    

    查询账户

    struct Account *  findAccountByName(char name[])
    {
        if(strlen(name)>0)
        {
            p = head;
            while(p != NULL)
            {
                if(strcmp(p->name,name)==0)
                {
                    return p;
                }
                p = p->next;
            }
        }
        return NULL;
    }
     
    

    写入交易记录

    void writeMessage(struct Account * account,char message[])
    {
        if(account->maxMessageIndex >= RECORDCOUNT)
        {
            removeFirst(account);
            strcpy((account->message)[RECORDCOUNT-1],message);
            account->maxMessageIndex = account->maxMessageIndex+1;
        }
        else
        {
            strcpy((account->message)[account->maxMessageIndex],message);
            account->maxMessageIndex = account->maxMessageIndex+1;
        }
    }
     
    void removeFirst(struct Account * account)
    {
        int i=0;
        for(i=1; i<RECORDCOUNT; i++)
            strcpy((account->message)[i-1],(account->message)[i]);
    }
    

    初始化账户

    void init()
    {
        p = (struct Account *)malloc(LEN);		/* 创建第一个账户 */
        p->balance=DEFAULTBALANCE;
        p->next=NULL;
        p->maxMessageIndex=0;
        strcpy(p->name,"001");
        head=p;
        tail = p;
     
     
        p = (struct Account *)malloc(LEN);	/* 创建第二个账户 */
        p->balance=DEFAULTBALANCE;
        p->next=NULL;
        p->maxMessageIndex=0;
        strcpy(p->name,"002");
        head->next = p;
        tail = p;
     
        p = (struct Account *)malloc(LEN);	/* 创建第三个账户 */
        p->balance=DEFAULTBALANCE;
        p->next=NULL;
        p->maxMessageIndex=0;
        strcpy(p->name,"003");
        tail->next = p;
        tail = p;
    }
     
    

    显示账户信息

    void print()
    {
        int		i;
        p = head;
        i = 1;
        while(p != NULL)
        {
            printf("第%d个账户的数据 账户名称:%s     余额:%.2f
    ",i++,p->name,p->balance);
            p = p->next;
        }
    }
    

    释放内存

    void freeMemory()
    {
        p = head;
        while(p != NULL)
        {
            head = p;
            free(head);
            p = p->next;
        }
    }
    

    开户

    void openAccount()
    {
        char name[NAMELENGTH];
        printf("请输入新开立的账户名称  : ");
        fflush(stdin);
        gets(name);
        if(strlen(name)>0)
        {
            p = (struct Account *)malloc(LEN);		/* 创建一个新账户 */
            p->balance=DEFAULTBALANCE;
            p->next=NULL;
            strcpy(p->name,name);
            tail->next=p;
            tail = p;
        }
    }
    

    销户

    void closeAccount()
    {
        char name[NAMELENGTH];
        printf("请输入要销户的账户名称 : ");
        fflush(stdin);
        gets(name);
        if(strlen(name)>0)
        {
            struct Account  *pre;
            p = head;
            pre=head;
            int find=0;
            while(p != NULL)
            {
                if(strcmp(p->name,name)==0)
                {
                    if(head == p)
                        head=p->next;
                    else if(tail==p)
                    {
                        pre->next=NULL;
                        tail = pre;
                    }
                    else
                    {
                        pre->next = p->next;
                    }
                    find=1;
                    break;
                }
                pre = p;
                p = p->next;
            }
            if(find==0)
                printf("没有此账户,无法完成销户!
    ");
        }
    }
    

    存款

    void deposit()
    {
        char name[NAMELENGTH];
        printf("请输入要存款的账户名称 :");
        fflush(stdin);
        gets(name);
        p = findAccountByName(name);
        if(p!=NULL)
        {
            float savemoney;
            printf("请输入要存款的金额 : ");
            scanf("%f",&savemoney);
            while(savemoney<=0)
            {
                printf("存款额不能小于等于零,请重新输入! ");
                scanf("%f",&savemoney);
            }
            p->balance = p->balance+savemoney;              /*存入账户金额*/
            char message[MESSAGELENGTH];
            sprintf(message,"账户%s成功存入%.2f元!
    ",name,savemoney);
            writeMessage(p,message);                                     /*写入交易记录*/
        }
        else
            printf("没有此账户!
    ");
    }
    

    取款

    void withdraw()
    {
        char name[NAMELENGTH];
        printf("请输入要取款的账户名称 :");
        fflush(stdin);
        gets(name);
        p = findAccountByName(name);
        if(p!=NULL)
        {
            float savemoney;
            printf("请输入要取款的金额 : ");
            fflush(stdin);
            scanf("%f",&savemoney);
            while(savemoney<=0 || savemoney> p->balance)
            {
                printf("存款额不能小于等于零或者大于余额,请重新输入! ");
                scanf("%f",&savemoney);
            }
            p->balance = p->balance-savemoney;  /*存入账户金额*/
            char message[MESSAGELENGTH];
            sprintf(message,"账户%s成功取出%.2f元!
    ",name,savemoney);
            writeMessage(p,message);     /*写入交易记录*/
        }
        else
            printf("没有此账户!
    ");
    }
    

    转账

    void transfer()
    {
        char outname[NAMELENGTH];
        char inname[NAMELENGTH];
        struct Account  *outAccount;
        struct Account  *inAccount;
        printf("请输入要转出的账户名称 :");
        fflush(stdin);
        gets(outname);
        outAccount = findAccountByName(outname);
        if(outAccount!=NULL)
        {
     
            printf("请输入要转入的账户名称 :");
            fflush(stdin);
            gets(inname);
            inAccount = findAccountByName(inname);
            if(inAccount != NULL)
            {
                float money;
                printf("请输入要转账的金额 : ");
                fflush(stdin);
                scanf("%f",&money);
                while(money<=0 || money> outAccount->balance)
                {
                    printf("转账金额不能小于等于零或者大于转出账户余额,请重新输入! ");
                    scanf("%f",&money);
                }
                outAccount->balance = outAccount->balance-money; /*减少转出账户金额*/
                inAccount->balance = inAccount->balance+money;   /*增加转入账户金额*/
                char outmessage[MESSAGELENGTH];
                sprintf(outmessage,"账户%s成功转出%.2f元!
    ",outname,money);
                writeMessage(outAccount,outmessage);    /*写入转出交易记录*/
                char inmessage[MESSAGELENGTH];
                sprintf(inmessage,"账户%s成功转入%.2f元!
    ",inname,money);
                writeMessage(inAccount,inmessage);    /*写入转出交易记录*/
            }
        }
        else
            printf("没有此转出账户!
    ");
    }
    

    查看交易历史

    void printMessage()
    {
        char name[NAMELENGTH];
        printf("请输入要查看最近五笔交易历史的账户名称 :");
        fflush(stdin);
        gets(name);
        p = findAccountByName(name);
        if(p!=NULL)
        {
            int i=0;
            int end = (p->maxMessageIndex)>=VIEWCOUNT?VIEWCOUNT:(p->maxMessageIndex);
            for(i=0; i<end; i++)
                printf("%s",(p->message)[i]);
        }
        else
            printf("没有此账户!
    ");
    }
    

    (2)界面截图

    主界面

    查看账户

    销户:

    存款

    取款

    转账

    四.个人小结

    1)psp表格

    2)小结

    1.把模块细化写,比如需要产生一个随机的卡号,由于我们需要判断每张卡是否重复,需要定义一个函数
    get_cardid()函数
    2.无论是取钱还是存款还是查询都是需要输入密码的,而且输入密码之后会给卡一个状态即是锁卡还是非锁卡,于是又定义了一个函数check_pwd()需要后期改进
    3.编写注册模块的时候,出现了我们需要实例化一个卡,一个人而且还要就行绑定。
    4.此次我是用c编写的,但是在java定义对象和python的方法中无论是类还是对象都可以调用,更为方便。

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/Alex-Mercer-zxy/p/14002821.html
Copyright © 2020-2023  润新知