个人作业三-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]={'\0'};
char psd[PN]={'\0'};
int i,errorcount=0;
while(1)
{
printf("\n请输入8位账号:");
for(i=0;i<8;i++)
AccountNumber[i]=getchar();
printf("\n请输入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("\n欢迎登录银行账户管理系统,请选择您要的服务:1、查询余额;2、存款操作;3、取款操作;4、退出系统\n");
scanf("%d",&tag);
switch(tag)
{
case 1:printf("您现在的余额为%.2f元\n",getBalance(AccountNumber));
break;
case 2:
printf("请输入您的存款金额:");
scanf("%d",&amount);
deposit(AccountNumber,amount);
printf("存款成功!您的当前余额为:%.2f元\n",getBalance(AccountNumber));
break;
case 3:
printf("请输入您的取款金额:");
scanf("%d",&amount);
if(amount<=getBalance(AccountNumber))
{
withdraw(AccountNumber,amount);
printf("取款成功!您的当前余额为:%.2f元\n",getBalance(AccountNumber));
}
else
printf("余额不足,取款失败!\n");
break;
case 4:
printf("退出系统成功!感谢您的使用,欢迎下次光临!\n");
break;
}
if(tag==4)
break;
}
break;
}
else
/*用户输入信息有误时出现提示信息*/
{
printf("\n您输入的账号或密码有误!请重新输入!\n");
errorcount++;
if(errorcount==3)
{
printf("\n您已经连续三次输入错误,系统将自动关闭!\n");
break;
}
}
}
}