ATM的功能的模拟: 开户 销户 查询余额 查询最后5笔明细 存款 取款 转帐 退出

 

#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管理系统\n");
    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("无效菜单!\n");
            showMenu();
            fflush(stdin);
            choice = getchar();
            break;
        }
    }
    freeMemory();   /*释放内存*/
    return 0;
}

void showMenu()
{
    printf("请选择 1.开户 2.销户 3.存款 4.取款 5.转账 6.查看所有账户 7. 最近五笔交易 8.退出\n");
}

//通过账户名称找到对应的账户
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\n",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("没有此账户,无法完成销户!\n");
    }
}

//存款
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元!\n",name,savemoney);
        writeMessage(p,message);                                     /*写入交易记录*/
    }
    else
        printf("没有此账户!\n");
}

//取款
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元!\n",name,savemoney);
        writeMessage(p,message);     /*写入交易记录*/
    }
    else
        printf("没有此账户!\n");
}

//转账
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元!\n",outname,money);
            writeMessage(outAccount,outmessage);    /*写入转出交易记录*/
            char inmessage[MESSAGELENGTH];
            sprintf(inmessage,"账户%s成功转入%.2f元!\n",inname,money);
            writeMessage(inAccount,inmessage);    /*写入转出交易记录*/
        }
    }
    else
        printf("没有此转出账户!\n");
}

//查看账户最近五笔交易历史
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("没有此账户!\n");
}


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Card类: public class Card { private String cardNum; private String password; private String owner; private double balance; private String type; private String bank; public Card(String cardNum, String password, String owner, double balance, String type, String bank) { this.cardNum = cardNum; this.password = password; this.owner = owner; this.balance = balance; this.type = type; this.bank = bank; } public String getCardNum() { return cardNum; } public void setCardNum(String cardNum) { this.cardNum = cardNum; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getBank() { return bank; } public void setBank(String bank) { this.bank = bank; } } ATM类: import java.util.Scanner; public class ATM { private String bank; private String model; private double singleWithdrawLimit; public ATM(String bank, String model, double singleWithdrawLimit) { this.bank = bank; this.model = model; this.singleWithdrawLimit = singleWithdrawLimit; } public String getBank() { return bank; } public void setBank(String bank) { this.bank = bank; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public double getSingleWithdrawLimit() { return singleWithdrawLimit; } public void setSingleWithdrawLimit(double singleWithdrawLimit) { this.singleWithdrawLimit = singleWithdrawLimit; } // 验证密码 public boolean verifyPassword(Card card, String password) { return card.getPassword().equals(password); } // 存款 public void deposit(Card card, double amount) { card.setBalance(card.getBalance() + amount); System.out.println("存款成功,当前余额为:" + card.getBalance()); } // 取款 public void withdraw(Card card, double amount) { if (amount > singleWithdrawLimit) { System.out.println("超过单取款限额,无法取款"); } else if (amount > card.getBalance()) { System.out.println("余额不足,无法取款"); } else { card.setBalance(card.getBalance() - amount); System.out.println("取款成功,当前余额为:" + card.getBalance()); } } // 查询 public void inquire(Card card) { System.out.println("卡号:" + card.getCardNum()); System.out.println("所属人:" + card.getOwner()); System.out.println("余额:" + card.getBalance()); System.out.println("类型:" + card.getType()); System.out.println("所属银行:" + card.getBank()); } // 转账 public void transfer(Card fromCard, Card toCard, double amount) { if (amount > fromCard.getBalance()) { System.out.println("余额不足,无法转账"); } else { fromCard.setBalance(fromCard.getBalance() - amount); toCard.setBalance(toCard.getBalance() + amount); System.out.println("转账成功,当前余额为:" + fromCard.getBalance()); } } // 修改密码 public void changePassword(Card card, String newPassword) { card.setPassword(newPassword); System.out.println("密码修改成功"); } // 运行 public void run() { Scanner scanner = new Scanner(System.in); System.out.println("请输入卡号:"); String cardNum = scanner.nextLine(); System.out.println("请输入密码:"); String password = scanner.nextLine(); Card card = new Card(cardNum, password, "张三", 1000, "储蓄卡", bank); while (true) { System.out.println("请选择操作:1.存款 2.取款 3.查询 4.转账 5.修改密码 6.退出"); int choice = scanner.nextInt(); switch (choice) { case 1: System.out.println("请输入存款金额:"); double depositAmount = scanner.nextDouble(); deposit(card, depositAmount); break; case 2: System.out.println("请输入取款金额:"); double withdrawAmount = scanner.nextDouble(); withdraw(card, withdrawAmount); break; case 3: inquire(card); break; case 4: System.out.println("请输入对方卡号:"); String toCardNum = scanner.next(); System.out.println("请输入转账金额:"); double transferAmount = scanner.nextDouble(); Card toCard = new Card(toCardNum, "123456", "李四", 500, "储蓄卡", bank); transfer(card, toCard, transferAmount); break; case 5: System.out.println("请输入新密码:"); String newPassword = scanner.next(); changePassword(card, newPassword); break; case 6: System.out.println("退出系统"); return; default: System.out.println("请输入正确的操作编号"); break; } } } } 测试类: public class Test { public static void main(String[] args) { ATM atm = new ATM("工商银行", "ATM001", 5000); atm.run(); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值