• ATM取款系统


    1. 作业信息

    这个作业属于哪个课程 软件工程
    这个作业要求在哪里 作业要求
    学号 3180701307

    2.题目

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

    (1)开户,销户

    (2)查询账户余额

    (3)存款

    (4)取款

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

    3. 代码提交与运行截图

    3.1 源代码

    (1)头文件

    //使用链表完成系统,账户信息从文档中读取,并用链表存放
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    

    (2)结构体与全局变量

    int j;
    struct INFO
    {
    	char name[10];
    	char c[11];
    	int surplus;
    	char id[10];
    	char mima[7];
    };
    

    (3)开户

    void kaihu()
    {
    	int i=0;
    	FILE *fp;
        struct INFO stu[500];
    	printf("请输入姓名:
    ");
    	scanf("%s",&stu[i].name);
    	printf("请输入身份证号(10位):
    ");
    	scanf("%s",&stu[i].c);
    	printf("请输入银行卡号(9位):
    ");
    	scanf("%s",&stu[i].id);
    	printf("请输入密码(6位):
    ");
    	scanf("%s",&stu[i].mima);
    	printf("请输入开户金额:
    ");
    	scanf("%d",&stu[i].surplus);
    	
    	if((fp=fopen("银行信息.txt","a+"))==NULL)
    	{
    		printf("错误!
    ");
    	}
    	else
    	{
    		fprintf(fp,"%s %s %s %d %s
    ",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
    		printf("成功!
    ");
    	}
    	fclose(fp);
    }
    

    (4)销户

    void xiaohu()
    {
    	char a,b,c,d;
    	char xname[10];
    	char xc[11];
    	char xid[10];
    	char xmima[7];
    	int i=0,m;
    	FILE *fp,*ftp;
        struct INFO stu[500];
    
    	if((fp=fopen("银行信息.txt","r+"))==NULL)
    	{
    		printf("错误!
    ");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
    		i++;
    	}
    	j=i-1;
    	m=j;
    	fclose(fp);
    	
    	printf("请输入姓名:
    ");
    	a=getchar();
    	gets(xname);
    	
    	fp=fopen("银行信息.txt","w+"); 
    	for(i=0;i<j;i++)
    	{
    		if(strcmp(stu[i].name,xname)==0)
    		{
    			printf("请输入身份证号:
    ");
    			gets(xc);
    			if(strcmp(stu[i].c,xc)==0)
    			{
    				printf("请输入需要销户的银行卡号:
    ");
    				gets(xid);
    				if(strcmp(stu[i].id,xid)==0)
    				{	
    					printf("请输入密码:
    ");
    					gets(xmima);
    					if(strcmp(stu[i].mima,xmima)==0)
    					{
    						for(i;i<j;i++)
    						{
    							stu[i]=stu[i+1];
    						}
    						j=j-1;
    						printf("销户成功!
    ");
    					}
    				}
    			}
    		}
    	}
    
    	if(m==j)
    	{
    		printf("没有找到该账户!
    ");
    	}
    	for(i=0;i<j;i++)
    	{
    		fprintf(fp,"%s %s %s %d %s
    ",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
    	}
    	fclose(fp);
    }
    

    (5)查询账户余额

    void chaxun()
    {
    	char a;
    	char xc[11];
    	char xid[10];
    	char xmima[7];
    	int i=0,m;
    	FILE *fp,*ftp;
        struct INFO stu[500];
    
    	if((fp=fopen("银行信息.txt","r+"))==NULL)
    	{
    		printf("错误!
    ");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
    		i++;
    	}
    	j=i-1;
    	m=j;
    	
    	
    	printf("请输入银行卡号:
    ");
    	a=getchar();
    	gets(xid);
    	
    	for(i=0;i<j;i++)
    	{
    		if(strcmp(stu[i].id,xid)==0)
    		{
    			printf("请输入身份证号:
    ");
    			gets(xc);
    			if(strcmp(stu[i].c,xc)==0)
    			{	
    				printf("请输入密码:
    ");
    				gets(xmima);
    				if(strcmp(stu[i].mima,xmima)==0)
    				{
    					printf("当前账户余额为%d
    ",stu[i].surplus);
    				}
    			}
    		}
    	}
    	fclose(fp);
    }
    

    (6)存款

    void cunkuan()
    {
    	char a;
    	char xc[11];
    	char xid[10];
    	char xmima[7];
    	int xsurp;
    	int i=0,m;
    	FILE *fp,*ftp;
        struct INFO stu[500];
    
    	if((fp=fopen("银行信息.txt","r+"))==NULL)
    	{
    		printf("错误!
    ");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
    		i++;
    	}
    	j=i-1;
    	m=j;
    	fclose(fp);
    	
    	fp=fopen("银行信息.txt","w+"); 
    	printf("请输入银行卡号:
    ");
    	a=getchar();
    	gets(xid);
    	
    	for(i=0;i<j;i++)
    	{
    		if(strcmp(stu[i].id,xid)==0)
    		{
    			printf("请输入身份证号:
    ");
    			gets(xc);
    			if(strcmp(stu[i].c,xc)==0)
    			{	
    				printf("请输入密码:
    ");
    				gets(xmima);
    				if(strcmp(stu[i].mima,xmima)==0)
    				{
    					printf("当前账户余额为%d
    ",stu[i].surplus);
    					printf("请输入存款金额:
    ");
    					scanf("%d",&xsurp);
    					xsurp=stu[i].surplus+xsurp;
    					stu[i].surplus=xsurp;
    					printf("存款成功!当前账户余额为%d
    ",stu[i].surplus);
    				}
    			}
    		}
    	}
    	for(i=0;i<j;i++)
    	{
    		fprintf(fp,"%s %s %s %d %s
    ",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
    	}
    	fclose(fp);
    }
    

    (7)取款

    void qukuan()
    {
    	char a;
    	char xc[11];
    	char xid[10];
    	char xmima[7];
    	int xsurp;
    	int i=0,m;
    	FILE *fp,*ftp;
        struct INFO stu[500];
    
    	if((fp=fopen("银行信息.txt","r+"))==NULL)
    	{
    		printf("错误!
    ");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
    		i++;
    	}
    	j=i-1;
    	m=j;
    	fclose(fp);
    	
    	fp=fopen("银行信息.txt","w+"); 
    	printf("请输入银行卡号:
    ");
    	a=getchar();
    	gets(xid);
    	
    	for(i=0;i<j;i++)
    	{
    		if(strcmp(stu[i].id,xid)==0)
    		{
    			printf("请输入身份证号:
    ");
    			gets(xc);
    			if(strcmp(stu[i].c,xc)==0)
    			{	
    				printf("请输入密码:
    ");
    				gets(xmima);
    				if(strcmp(stu[i].mima,xmima)==0)
    				{
    					printf("当前账户余额为%d
    ",stu[i].surplus);
    					printf("请输入取款金额:
    ");
    					scanf("%d",&xsurp);
    					if(stu[i].surplus>=xsurp)
    					{
    						xsurp=stu[i].surplus-xsurp;
    						stu[i].surplus=xsurp;
    						printf("取款成功!当前账户余额为%d
    ",stu[i].surplus);
    					}
    					else
    					{
    						printf("当前账户余额不足!
    ");
    					}
    				}
    			}
    		}
    	}
    	for(i=0;i<j;i++)
    	{
    		fprintf(fp,"%s %s %s %d %s
    ",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
    	}
    	fclose(fp);
    }
    

    (8)转账

    void zhuanzhang()
    {
    	char a;
    	char xc[11];
    	char xid[10];
    	char xmima[7];
    	int xsurp,zsurp;
    	int i=0,m,k;
    	FILE *fp;
        struct INFO stu[500];
    
    	if((fp=fopen("银行信息.txt","r+"))==NULL)
    	{
    		printf("错误!
    ");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp,"%s %s %s %d %s",&stu[i].name,&stu[i].c,&stu[i].id,&stu[i].surplus,&stu[i].mima);
    		i++;
    	}
    	j=i-1;
    	m=j;
    	fclose(fp);
    	
    	fp=fopen("银行信息.txt","w+"); 
    	printf("请输入银行卡号:
    ");
    	a=getchar();
    	gets(xid);
    	
    	for(i=0;i<j;i++)
    	{
    		if(strcmp(stu[i].id,xid)==0)
    		{
    			printf("请输入身份证号:
    ");
    			gets(xc);
    			if(strcmp(stu[i].c,xc)==0)
    			{	
    				printf("请输入密码:
    ");
    				gets(xmima);
    				if(strcmp(stu[i].mima,xmima)==0)
    				{
    					printf("当前账户余额为%d
    ",stu[i].surplus);
    					printf("请输入转账金额:
    ");
    					scanf("%d",&xsurp);
    					zsurp=xsurp;
    					if(stu[i].surplus>=xsurp)
    					{
    						xsurp=stu[i].surplus-xsurp;
    						stu[i].surplus=xsurp;
    						printf("请输入对方银行卡号:
    "); 
    						a=getchar();
    						gets(xid);
    						for(k=0;k<j;k++)
    						{
    							if(strcmp(stu[k].id,xid)==0)
    							{
    								zsurp=stu[k].surplus+zsurp;
    								stu[k].surplus=zsurp;
    							}
    						} 
    						printf("转账成功!当前账户余额为%d
    ",stu[i].surplus);
    						break;
    					}
    					else
    					{
    						printf("当前账户余额不足!转账失败!
    ");
    						break;
    					}
    				}
    			}
    		}
    	}
    	
    	for(i=0;i<j;i++)
    	{
    		fprintf(fp,"%s %s %s %d %s
    ",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
    	}
    	fclose(fp);
    }
    

    (9)界面

    void main()
    {
    	while(1)
    	{
    		int a;
    		//读文件
    		printf("**********ATM取款机**********
    ");
    		printf("1.开户
    ");
    		printf("2.销户
    ");
    		printf("3.查询账户余额
    ");
    		printf("4.存款
    ");
    		printf("5.取款
    ");
    		printf("6.转账
    ");
    		printf("请选择操作:");
    		scanf("%d",&a);
    		switch(a)
    		{
    		case 1:
    			kaihu();
    			break;
    		case 2:
    			xiaohu();
    			break;
    		case 3:
    			chaxun();
    			break;
    		case 4:
    			cunkuan();
    			break;
    		case 5:
    			qukuan();
    			break;
    		case 6:
    			zhuanzhang();
    			break;
    		default:
    			break;
    		}
    	}
    }
    

    3.2运行代码截图

    (1)开户

    (2)销户

    (3)查询账户余额

    (4)存款

    (5)取款

    (6)转账

    4. 个人小结

    遇到的困难:读写文件时出现乱码,还有输入字符串时末尾字符问题导致无法识别,文件读取feof()时计数多计一行。
    解决:计数全局变量减1,输入字符串之前进行getchar()防止字符串第一个字符被覆盖。至于读写的问题原因应该在于文件操作有误。
    (psp表格)

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 315 470
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 15 30
    Development 开发 10 20
    Analysis 需求分析(包括学习新技术) 30 50
    Design Spec 生成设计文档 20 20
    Design Review 设计复审 10 15
    Coding Standard 代码规范 10 10
    Design 具体设计 30 60
    Coding 具体编码 60 120
    Code Review 代码复审 30 60
    Test 测试(自我测试,修改代码,提交修改) 40 60
    Reporting 报告 10 20
    Test Report 测试报告 10 15
    Size Measurement 计算工作量 20 20
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 30
  • 相关阅读:
    hdu 4948 Kingdom(推论)
    codeforces 407 div1 A题(Functions again)
    Atcoder regular Contest 073(C
    Atcoder regular Contest 073(D
    Nginx阅读笔记(二)之location的用法
    Nginx阅读笔记
    django virtualenv
    Supervisor
    捕捉攻击者
    django user模块改写
  • 原文地址:https://www.cnblogs.com/lushuning/p/14002643.html
Copyright © 2020-2023  润新知