zoukankan      html  css  js  c++  java
  • 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的方法中无论是类还是对象都可以调用,更为方便。

  • 相关阅读:
    Redis认识
    常见注解和LambdaQueryWrapper
    微信开发思路和一些文档
    安全框架
    学习:Token
    javascript中对象的创建-原型模式1
    开发常用工具
    【java爬虫--1】Htmlunit+Jsoup解析非静态页面爬取图片
    【java爬虫--2】将批量图片地址转成pdf文件
    文本文件按行去重,有序输出
  • 原文地址:https://www.cnblogs.com/Alex-Mercer-zxy/p/14002821.html
Copyright © 2011-2022 走看看