zoukankan      html  css  js  c++  java
  • ATM管理系统

    ATM管理系统

    一、作业信息

    博客班级 软件工程导论-计算机18级
    作业要求 作业要求
    作业目标 通过ATM项目熟悉软件开发的流程
    学号 3180701305

    二、作业要求

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

    (1)开户,销户

    (2)查询账户余额

    (3)存款

    (4)取款

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

    三、系统代码

    3.1头文件

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <windows.h>
    

    3.2函数定义

    void denglu();//登录
    void kaihu();//开户
    void enter();//一级菜单
    void enter2();//二级菜单
    void tuichu();//退出
    void turn();//转账
    void search();//查询余额
    void withdraw();//取款
    void deposit();//存款
    void xiugai();//修改密码
    void load();//读取文件
    

    3.3开户

    void kaihu()
    {
    	char ch;
    	if(user[1000].account!=0)
    	{
    		j=user[1000].account;
    	}
    	printf("
    
    请设置您的卡号:
    				  ");
    	scanf("%s",user[j].ID);
        printf("
    请设置您的密码:
    				  ");
        scanf("%s",user[j].key);
        user[j].account=0;
        printf("
    卡号:%s 
    余额:%4d
    ",user[j].ID,user[j].account);
    	user[1000].account=++j;
    	save();
    	printf("
    
    恭喜您开户成功!");
    	system("pause");
    	printf("按回车键返回上一级
    ");
        printf("
    
    
    ");
    	system("cls");
    	ch=getchar();
    	if(ch=='
    ')
    	{
           enter();
    	}
    }
    

    3.4修改密码

    void xiugai()
    {
    	printf("请输入新的密码
     ");
    	scanf("%s",user[k].key);
    	save();
    	system("pause");//冻结屏幕
    	system("cls");
    	enter2();
    }
    

    3.5查询余额

    void search()//查询余额 
    {
    	char ch;
    	printf("
    
    ");
    	printf("您的余额为%d元
    
    ",user[k].account);
    	system("pause");
        system("cls");
    	ch=getchar();//用来接收最后的回车符
    	if(ch=='
    ')
    	{
    		enter2();
    	}
    }
    

    3.6存款

    void deposit()
    {
    	int a;
    	printf("请输入存入账户的金额:
    
    ");
    	scanf("%d",&a);
    	user[k].account=user[k].account+a;
    	save();
    	printf("您的余额为%d元
    ",user[k].account);
    	system("pause");//冻结屏幕
    	system("cls");
    	enter2();
    }
    

    3.7取款

    void withdraw()//取款
    {
    	int i,x;
    	char a,ch;
        printf("您卡号的余额为:%d
    ",user[k].account);
    	printf("请选择你要提取的金额: 
    ");
    	printf("1: 100元     2: 200元     
    ");
    	printf("3: 500元     4: 1000元    
    ");
    	printf("5:2000元     6:5000元     
    ");
    	printf("7: 自定义金额(不少于100元)
    ");
    	scanf("%d",&i);
    	if(i==1)   
    	{
    		x=100;
    	}
    	else
    		if(i==2)
    		{
    			x=200;
    		}
    		else
    			if(i==3)
    			{
    				x=500;
    			}
    			else
    				if(i==4)
    				{
    					x=1000;
    				}
    				else
    					if(i==5)
    					{
    						x=2000;
    					}
    					else
    						if(i==6)
    						{
    							x=5000;
    						}
    						else
    							if(i==7)
    							{
    							printf("				请输入自定义的金额:
    				  ");
    							scanf("%d",&x);
    							}
    		if(x<=user[k].account)
    		{
    			user[k].account=user[k].account-x;
    			printf("您取了%d元钱
    ",x);
                printf(" 您的余额为%d元
    ",user[k].account);
    		}
           else 
    		   if(x>user[k].account)
    		   {
    			   printf("您卡里的余额不足
    ");
    			   printf("请重新输入提取金额:
    ");
    		   }
    		   printf("请选择是否继续取款
    ");
    		   printf("是:Y          否:N
    
    				  ");
    		   scanf("%s",&a);
    	if(a=='Y')
    	{
    		save();
    		withdraw();
    	}
    	else
    		if(a=='N')
    		{
    			save();
    			system("pause");//冻结屏幕
    			system("cls");
    			printf("
    
    
    ");
    		}
    		else
    		{
    			save();
    			system("pause");//冻结屏幕
    			system("cls");
    			printf("
    
    
    ");
    		}
    	ch=getchar();//用来接收最后的回车符
    	if(ch=='
    ')
    	{
    		system("cls");
    		enter2();
    	}
    }
    

    3.8转账

    void turn()
    {
    	int a,x;
    	char kahao[20];
    	printf("
    
    请输入转账卡号:
    ");
    	scanf("%s",kahao);
    	for(a=0;a<NUM-1;a++)
    	{
    		if(!strcmp(kahao,user[a].ID))
    		{
    			printf("卡号正确
    
    ");
    			break;
    		}
    	}
    	if(strcmp(kahao,user[a].ID))
    	{
    		printf("卡号不存在
    
    ");
    		system("pause");
    		turn();
    	}
    	printf("请输入转账金额
    ");
    	scanf("%d",&x);
    	if(x>user[k].account)
    	{
    		printf("您卡里的余额不足
    ");
    		printf("请重新输入提取金额:
    ");
    	}
    	else
    	{
    		user[k].account=user[k].account-x;
    		user[a].account=user[a].account+x;
    		save();
    	}
    	system("pause");
    	system("cls");
    	enter2();
    }
    

    3.9用户登录

    void denglu()
    {
    	int i,n,m;
    	char  id[20],kw[20];
    	printf("		    连续输错账号或密码三次,将返回主菜单
    ");
    	for(i=0;i<3;i++)
    	{
    		printf("请输入登录账号
    ");
    		scanf("%s",id);
    		for(k=0;k<NUM-1;k++)
    		{
    			if(strcmp(id,user[k].ID)==0)
    			{
    				m=1;
    				break;
    			}
    			else
    				m=0;
    		}
    		if(m==0)//输入错误后
    		{
    			printf("该账号不存在,剩余输入次数%d
    ",2-i);
    			if((2-i)==0)
    			{
    				printf("账号输入错误3次,即将返回菜单......
    ");
    				system("pause");
    				enter();
    			}
    		}
    		if(m==1)//输入正确后
    		{
    			printf("请输入登录密码
    ");
    			for(n=0;n<3;n++)
    			{
    				scanf("%s",kw);
    				if(strcmp(kw,user[k].key)==0)
    				{
    					system("cls");
    					enter2();
    				}
    				else
    				{
    					printf("密码输入错误,剩余输入次数%d
    ",2-n);
    					if((2-n)==0)
    					{
    						printf("密码输入错误3次,即将返回菜单......
    ");
    						system("pause");
    						enter();
    					}
    				}
    			}
    		}
    	}
    }
    

    3.10一级菜单

    void enter()//一级菜单函数
    {
    	int a;
    	load();
    	system("cls");
    	printf("
    
    ************** A T M 模 拟 系 统 ***************
    
    ");
    	printf("      1.开户      
    
    ");
    	printf("      2.登录      
    
    ");
    	printf("      3.退出      
    
    ");
    	printf("请输入您的选择
    
    ");
        scanf("%d",&a);
    	switch(a)
    	{
    	case 1:system("cls");//清屏
    		kaihu();
    		break;
    	case 2:system("cls");
    		denglu();
            break;
    	case 3:system("cls");
            tuichu();
    		break;
    	default:
    		printf("				无此操作项
    请重新选择
    ");
    		system("pause");
    		system("cls");
    		enter();
    	}
    }
    

    3.11二级菜单函数

    void enter2()
    {
    	int n;
    	do
    	{
    		printf("
    
    *************** A T M 系 统 个 人 界 面 ****************
    ");
    		printf("
     1.  查询    
    ");
    		printf("
     2.  取款     
    ");
    		printf("
     3.  转账     
    ");
    		printf("
     4.  存款     
    ");
    		printf("
     5.  修改密码   
    ");
    		printf("
     6.  返回目录   
    ");
    		scanf("%d",&n);
    		switch(n)
    		{
    		case 1:system("cls");
    			search();
    			break;
       
    		case 2:system("cls");
    			withdraw();
    			break;
    		case 3:system("cls");
    			turn();
    			break;
    		case 4:system("cls");
    			deposit();
    			break;
    		case 5:system("cls");
    			xiugai();
    			break;
    		case 6:system("cls");
    			enter();
    			break;
    		default:printf("				无此操作项
    
    ");
    			system("pause");
    			system("cls");
    		}
    	}while(n>4&&n<0);
    }
    

    四、运行截图

    4.1系统主页面

    4.2开户

    4.3登录

    4.4系统个人页面

    4.5存款

    4.6查询余额

    4.7取款

    4.8转账

    4.9修改密码

    五、个人小结

    psp耗时表

    psp2.1 任务内容 计划完成需要的时间 (min) 实际完成需要的时间
    Planning 计划 10
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 15 20
    Development 开发 120 480
    Analysis 需求分析(包括学习新技术) 15 15
    Design Spec 生成设计文档 10 10
    Design Review 设计复审 5 5
    Coding Standard 代码规范 5 3
    Design 具体设计 10 12
    Coding 具体编码 60 70
    Code Review 代码复审 5 7
    Test 测试(自我测试,修改代码,提交修改) 10 15
    Reporting 报告 15 15
    Test Report 计算工作量 2 1
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
  • 相关阅读:
    【leetcode】面试题 01.04. 回文排列
    【leetcode】将数组分成和相等的三个部分
    【leetcode】杨辉三角
    【leetcode】杨辉三角 II
    【leetcode】判断路径是否相交
    【leetcode】路径总和
    【leetcode】山脉数组的峰顶索引
    053-4
    053-151
    053-272
  • 原文地址:https://www.cnblogs.com/wangalong/p/14003012.html
Copyright © 2011-2022 走看看