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
    作业目标 掌握结构化设计语言的设计思想,理解如何运用此类设计思想正确开发一个系统
    学号 3180701338

    二、题目信息
    编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
    (1)开户,销户
    (2)查询账户余额
    (3)存款
    (4)取款
    (5)转账(一个账户转到另一个账户)等...

    三、分模块代码(源代码见附录)
    (1)结构体变量

    struct Account
    {
    	char accountnumber[AN];     //表示账号信息
    	char password[PN];          //表示账户的密码信息
    	double balance;             //表示账户的余额
    };//Account结构体变量,定义每个账户的信息
    

    (2)检查用户信息函数

    int isCorrect(char *an,char *psd)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(ats[i].accountnumber,an)==0 && strcmp(psd,ats[i].password)==0)
    			return 1;
    		return 0;
    }
    

    (3)显示余额函数

    double getBalance(char *an)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			return ats[i].balance;
    }
    

    (4)存款函数

    void deposit(char *an,int amount)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			ats[i].balance+=amount;
    }
    

    (5)取款函数

    int withdraw(char *an,int amount)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			ats[i].balance-=amount;
    }
    

    四、运行结果截图


    五、实验总结
    (1)进一步复习了用结构化设计方法开发一个系统的主要步骤;通过这三次书写博客的作业练习逐渐熟悉了使用markdown编辑器写随笔;
    这次的程序设计中我还存在部分功能没有实现,对数据结构算法的掌握量不够多,部分需求没有得到实现,在以后的学习中还是要多多练习此类题目。

    (2)PSP表格

    psp3.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 20 30
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 5 5
    Development 开发 150 150
    Analysis 需求分析(包括学习新技术) 10 15
    Design Spec 生成设计文档 20 15
    Design Review 设计复审 10 5
    Coding Standard 代码规范 5 7
    Design 具体设计 15 25
    Coding 具体编码 30 39
    Code Review 代码复审 4 4
    Test 测试(自我测试,修改代码,提交修改) 15 25
    Reporting 报告 15 15
    Test Report 测试报告 4 4
    Size Measurement 计算工作量 3 3
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5

    附录(源代码)

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    #define AN 9          //表示8位账号
    #define PN 7          //表示6位密码
    #define ASN 5         //表示系统中共有5个账户信息
    
    struct Account
    {
    	char accountnumber[AN];     //表示账号信息
    	char password[PN];          //表示账户的密码信息
    	double balance;             //表示账户的余额
    };//Account结构体变量,定义每个账户的信息
    
    struct Account ats[ASN]=
    {
    	{"00000001","123456",100},
    	{"00000002","654321",200},
    	{"00000003","100899",350},
    	{"01100001","456123",400},
    	{"01100002","142536",600},
    };//ats数组用于存储系统中5个账户的信息
    
    /*判断用户输入信息是否正确*/
    int isCorrect(char *an,char *psd)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(ats[i].accountnumber,an)==0 && strcmp(psd,ats[i].password)==0)
    			return 1;
    		return 0;
    }
    
    /*显示余额函数getBalance*/
    double getBalance(char *an)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			return ats[i].balance;
    }
    
    /*存款函数deposit*/
    void deposit(char *an,int amount)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			ats[i].balance+=amount;
    }
    
    /*取款函数withdraw*/
    int withdraw(char *an,int amount)
    {
    	int i;
    	for(i=0;i<ASN;i++)
    		if(strcmp(an,ats[i].accountnumber)==0)
    			ats[i].balance-=amount;
    }
    
    void main()
    {
    	char AccountNumber[AN]={''};
    	char psd[PN]={''};
    	int i,errorcount=0;
    	while(1)
    	{
    		printf("
    请输入8位账号:");
    		for(i=0;i<8;i++)
    			AccountNumber[i]=getchar();
    		printf("
    请输入6位密码:");
    		for(i=0;i<6;i++)
    		{
    			psd[i]=getch();
    			putchar('*');   /*保护密码不被显示出来*/
    		}
    		if(isCorrect(AccountNumber,psd)==1)   /*isCorrect(AccountNumber,psd)==1表示用户输入信息正确*/
    		{
    			int tag,amount;
    			while(1)
    			{
    				printf("
    欢迎登录银行账户管理系统,请选择您要的服务:1、查询余额;2、存款操作;3、取款操作;4、退出系统
    ");
    				scanf("%d",&tag);
    				switch(tag)
    				{
    				case 1:printf("您现在的余额为%.2f元
    ",getBalance(AccountNumber));
    					break;
    				case 2:
    					printf("请输入您的存款金额:");
    					scanf("%d",&amount);
    					deposit(AccountNumber,amount);
    					printf("存款成功!您的当前余额为:%.2f元
    ",getBalance(AccountNumber));
    					break;
    				case 3:
    					printf("请输入您的取款金额:");
    					scanf("%d",&amount);
    					if(amount<=getBalance(AccountNumber))
    					{
    						withdraw(AccountNumber,amount);
    						printf("取款成功!您的当前余额为:%.2f元
    ",getBalance(AccountNumber));
    					}
    					else
    						printf("余额不足,取款失败!
    ");
    					break;
    				case 4:
    					printf("退出系统成功!感谢您的使用,欢迎下次光临!
    ");
    					break;
    				}
    				if(tag==4)
    					break;
    			}
    			break;
    		}
    		else
    		/*用户输入信息有误时出现提示信息*/
    		{
    			printf("
    您输入的账号或密码有误!请重新输入!
    ");
    			errorcount++;
    			if(errorcount==3)
    			{
    				printf("
    您已经连续三次输入错误,系统将自动关闭!
    ");
    				break;
    			}
    		}
    	}
    }
    
    
  • 相关阅读:
    Ajax
    模型层补充
    Django models.py 模型层(单表多表查询)
    Django 模板层
    Django views.py 视图层
    Django urls.py 路由层
    Browser Security-同源策略、伪URL的域
    Browser Security-css、javascript
    Browser Security-基本概念
    exp2:// 一次存储型XSS从易到难的挖掘过程
  • 原文地址:https://www.cnblogs.com/666888ZWL/p/13997222.html
Copyright © 2011-2022 走看看