作业三

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
作业目标 编写一个简单的ATM机系统
学号 3180701239
一.题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...
二、代码功能模块
1、开户销户
/定义注册函数*/
void zhuce()
{
int baiwei, shiwei, gewei, len;/定义账号的后三位/
char password2[7];/注册时第二次输入的密码/
int j = 0;
strcpy(C[Cnum].account, "123456543210");/复制账号的前12位/
baiwei = Cnum / 100;
shiwei = Cnum / 10 % 10;
gewei = Cnum % 10;
C[Cnum].account[12] = baiwei + '0';
C[Cnum].account[13] = shiwei + '0';
C[Cnum].account[14] = gewei + '0';
C[Cnum].account[15] = '\0';
system("cls");/运行前清屏/
printf("\n\n\n\t\t注册————ZHUCE\n\n\n");
printf("\t\t请输入姓名:");
scanf("%s", C[Cnum].name);
do
{
printf("\t\t请输入6位数密码:");
scanf("%s", C[Cnum].password);
len = strlen(C[Cnum].password);
if (len != 6)/判断密码是否为6位/
{
printf("\t\t您的密码不是6位数!\n");
system("pause");
return;
}
//此处用字符串长度函数来判断密码的位数
printf("\t\t请再次输入密码:");
scanf("%s", password2);
if (strcmp(C[Cnum].password, password2) != 0)/判断两次密码输入是否相同/
{
j++;
printf("\n\t\t您的密码输入错误!您还有%d次机会输入密码!\n", 3 - j);
}
if (j == 3)/密码输入错误不得超过三次/
{
system("pause");
return;
}
} while (strcmp(C[Cnum].password, password2) != 0);
do
{
printf("\t\t请输入身份证号:");
scanf("%s", C[Cnum].IDnumber);
len = strlen(C[Cnum].IDnumber);
if (len != 18 && len != 15)/判断身份证号位数是否为15位或18 位/
printf("\t\t身份证号错误!请输入15位或18位身份证号!\n");
} while (len != 18 && len != 15);
printf("\n\t\t请输入存入金额:");
scanf("%f", &C[Cnum].yue);
if ((int)C[Cnum].yue % 50 != 0)/存款金额必须为50的整数倍/
{
printf("\t\t本机只接受50元或100元面值的存款!\n");
system("pause");
return;
}
strcpy(T[Tnum].account, C[Cnum].account);/
/
strcpy(T[Tnum].type, "存储");/复制交易类型/
T[Tnum].Tmoney = C[Cnum].yue;/第一次交易的账户余额值赋给交易经额的值/
T[Tnum].Tyue = C[Dxiabiao].yue;/第一次交易的账户余额值赋给交易余额的值/
printf("\n\t\t开户成功!\n");
system("pause");/暂停功能/
printf("\n\n账号 \t\t交易类型\t交易金额\t余额\n");/输出账户第一次交易的数据清单/
printf("%s", C[Cnum].account);
printf(" %s", T[Tnum].type);
printf("\t\t%.2f", C[Cnum].yue);
printf(" \t%.2f", C[Cnum].yue);
printf("\n");
Cnum++;/账户序号加一/
Tnum++;/交易序号加一/
Dxiabiao++;
system("pause");/暂停/
}
2、查询账户余额
void quary_yue()
{
printf("\n\n\t\t这是查询余额功能\n\n");
printf("\t\t您的账户余额为:%.2f\n\n", C[Dxiabiao].yue);/输出账户余额/
system("pause");
}

/定义查询明细函数***********************************/
void quary_mingxi()
{
int i;
system("cls");/
清屏
/
printf("\n\n\n\t\t查询明细————quary MINGXI\n\n");/
进入查询明细界面
/
printf("\n\t\t您的账号:%s", C[Dxiabiao].account);
printf("\n\n交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
for (i = 0; i<Tnum; i++)
if (strcmp(T[i].account, C[Dxiabiao].account) == 0)
{
printf(" %s", T[i].type);
printf("\t\t%.2f", T[i].Tmoney);
printf("\t\t%.2f", T[i].Tyue);
printf("\n");
}
system("pause");
}
3、存款
void credit()
{
float money;/
输入的存款金额
/
system("cls");/
清屏
/
printf("\n\n\n\t\t存款————credit \n\n\n");/
进入存款功能界面
/
printf("\t\t本机只接收50元或100元币值人民币!\n");/
提示信息
/
printf("\n\t\t请输入存款金额:");
scanf("%f", &money);/
输入存款金额
/
if ((int)money % 50 != 0 || money <= 0)/
存款金额必须为50的整数倍且为正数
/
{
printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
system("pause");
return;
}
strcpy(T[Tnum].account, C[Dxiabiao].account);/
把当前登录账号复制给交易记录里的账号
/
strcpy(T[Tnum].type, "存款");/
复制交易类型
/
T[Tnum].Tmoney = money;/
把存款金额赋给交易金额
/
C[Dxiabiao].yue += T[Tnum].Tmoney;/
计算存款后的账户余额
/
T[Tnum].Tyue = C[Dxiabiao].yue;/
交易后的余额等于账户余额/
printf("\n\t\t存款成功!");
system("pause");
printf("\n账号 \t\t交易类型\t交易金额\t交易余额\n");//输出账户存款交易的数据清单
printf("%s", T[Tnum].account);
printf(" %s", T[Tnum].type);
printf("\t\t%.2f", T[Tnum].Tmoney);
printf("\t\t%.2f", T[Tnum].Tyue);
printf("\n");
Tnum++;/
交易序号加一/
system("pause");
}
** 4、取款**
void debit()
{
float money;/
定义取款金额/
system("cls");/
清屏/
printf("\n\n\n\t\t取款————debit \n\n\n");/
进入取款功能界面/
printf("\t\t本机只可取50或100元币值人民币!\n");
printf("\n\n\t\t请输入取款金额:");
scanf("%f", &money); /
输入取款金额/
if (money> C[Dxiabiao].yue)/
账户余额是否足够取款/
{
printf("\n\t\t您的余额不足!\n");
system("pause");
return;
}
if ((int)money % 50 != 0 || money <= 0)/
取款金额必须为50的整数倍且为正数/
{
printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
system("pause");
return;
}
strcpy(T[Tnum].account, C[Dxiabiao].account);/
把当前登录账号复制给交易记录里的账号/
strcpy(T[Tnum].type, "取款");/
复制交易类型/
T[Tnum].Tmoney = money;/
取款金额值赋给交易金额/
C[Dxiabiao].yue -= T[Tnum].Tmoney;/
计算取款后的账户余额/
T[Tnum].Tyue = C[Dxiabiao].yue;/
取款后余额等于账户余额/
printf("\n\t\t取款成功!\n");
system("pause");
printf("\n账号 \t\t交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
printf("%s", T[Tnum].account);
printf(" %s", T[Tnum].type);
printf("\t\t%.2f", T[Tnum].Tmoney);
printf("\t\t%.2f", T[Tnum].Tyue);
printf("\n");
Tnum++;/
交易序号加一*/
system("pause");
}
5、转账
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("错误!\n");
	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("请输入银行卡号:\n");
a=getchar();
gets(xid);

for(i=0;i<j;i++)
{
	if(strcmp(stu[i].id,xid)==0)
	{
		printf("请输入身份证号:\n");
		gets(xc);
		if(strcmp(stu[i].c,xc)==0)
		{	
			printf("请输入密码:\n");
			gets(xmima);
			if(strcmp(stu[i].mima,xmima)==0)
			{
				printf("当前账户余额为%d\n",stu[i].surplus);
				printf("请输入转账金额:\n");
				scanf("%d",&xsurp);
				zsurp=xsurp;
				if(stu[i].surplus>=xsurp)
				{
					xsurp=stu[i].surplus-xsurp;
					stu[i].surplus=xsurp;
					printf("请输入对方银行卡号:\n"); 
					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\n",stu[i].surplus);
					break;
				}
				else
				{
					printf("当前账户余额不足!转账失败!\n");
					break;
				}
			}
		}
	}
}

for(i=0;i<j;i++)
{
	fprintf(fp,"%s %s %s %d %s\n",stu[i].name,stu[i].c,stu[i].id,stu[i].surplus,stu[i].mima);
}
fclose(fp);

}
6、主菜单
int menu()
{
char c;
do
{
system("cls"); /每次选择运行前清屏/
printf("\n\n\n\t\t\n");
printf("\t\t
主菜单 \n"); /主菜单选择/
printf("\t\t
\n");
printf("\t\t--------------------------\n");
printf("\t\t** 1. 注册 \n");
printf("\t\t
2. 登录 \n");
printf("\t\t
3. 加载数据 \n");
printf("\t\t
4. 保存数据 \n");
printf("\t\t
5. 系统帮助 \n");
printf("\t\t
0. 退出 \n");
printf("\t\t--------------------------\n");
printf("\t\t
**********************\n");
printf("\t\t请作出选择(0-5)😊;
c = getchar(); /读入选择/
} while (c<'0' || c>'5');
return(c - '0'); /c变为空后返回重新选择/
}
** 7、运行界面










三、个人小结

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 8
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 12
Development 开发 100 180
Analysis 需求分析(包括学习新技术) 12 5
Design Spec 生成设计文档 5 5
Design Review 设计复审 5 5
Coding Standard 代码规范 3 5
Design 具体设计 10 12
Coding 具体编码 36 30
Code Review 代码复审 5 7
Test 测试(自我测试,修改代码,提交修改) 10 20
Reporting 报告 9 6
Test Report 测试报告 3 2
Size Measurement 计算工作量 2 1
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
系统功能较多,不好都完成,有些功能没有编写代码,代码编写能力不行

posted @ 2020-11-18 23:58  初年&已逝  阅读(166)  评论(0编辑  收藏  举报