ATM管理系统

一.源代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001
void denglu();
void kaihu();
void enter();
void enter2();
void tuichu();
void turn();
void search();
void withdraw();
void deposit();
void xiugai();
void load();
int j=0,k;
struct yonghu
{
	char ID[20];
	char key[20];
	int account;
}user[NUM];

//进入界面
void main()
{
	enter(); 
}

//主函数结束
void enter()
{
	int a;
	load();
	system("cls");
	printf("\n\n*********A T M 模 拟 系 统 ************\n\n");
	printf("******1.开户******\n\n");
	printf("******2.登录******\n\n");
	printf("******3.退出******\n\n");
	printf("请输入您的选择\n\n");
    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("\t无此操作项\n请重新选择\n");
		system("pause");
		system("cls");
		enter();
	}
}
//文件读取
void load()
{
	FILE *fp;
    int i;
	if((fp=fopen("atmdata.txt","r"))==NULL)
    {
        printf("不能打开文件\n");
        return;
    }
    for(i=0;!feof(fp);i++)
    {
        fread(&user[i],sizeof(struct yonghu),1,fp);
    }
    fclose(fp);
    system("cls");
    printf("文件读取成功\n");
}
//文件写入
void save()      
{
    FILE *fp;
    if((fp=fopen("data.txt","w"))==NULL)
    {
        printf("无法打开文件\n");
        exit(0);
    }
    fwrite(user,sizeof(struct yonghu),NUM,fp);
    printf("文件写入完成\n");
    fclose(fp);
}
//开户
void kaihu()
{
	char ch;
	if(user[100].account!=0)
	{
		j=user[100].account;
	}
	printf("\n\t请设置您的卡号:\n\t ");
	scanf("%s",user[j].ID);
    printf("\n\t请设置您的密码:\n\t ");
    scanf("%s",user[j].key);
    user[j].account=0;
    printf("卡号:%s \n余额:%4d\n",user[j].ID,user[j].account);
	user[1000].account=++j;
	save();
	printf("\n\t恭喜您开户成功!");
	system("pause");
	printf("\t按回车键返回上一级\n");
    printf("\n");
	system("cls");
	ch=getchar();
	if(ch=='\n')
	{
       enter();
	}
}
void tuichu()
{
    printf("\t******欢迎下次使用******\n");
    exit(0);
}
void denglu()
{
	int i,n,m;
	char  id[20],kw[20];
	printf("\t\t连续输错账号或密码三次,将返回主菜单\n");
	for(i=0;i<3;i++)
	{
		printf("请输入登录账号\n");
		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\n",2-i);
			if((2-i)==0)
			{
				printf("账号输入错误3次,即将返回菜单......\n");
				system("pause");
				enter();
			}
		}
		if(m==1)
		{
			printf("请输入登录密码\n");
			for(n=0;n<3;n++)
			{
				scanf("%s",kw);
				if(strcmp(kw,user[k].key)==0)
				{
					system("cls");
					enter2();
				}
				else
				{
					printf("密码输入错误,剩余输入次数%d\n",2-n);
					if((2-n)==0)
					{
						printf("密码输入错误3次,即将返回菜单......\n");
						system("pause");
						enter();
					}
				}
			}
		}
	}
}

void enter2()
{
	int n;
	do
	{
		printf("\n\n\n");
	
		printf(" *************** A T M 系 统 个 人 界 面 ****************\n");
		printf("\n******1.******查询\n");
		printf("\n******2.取款******\n");
		printf("\n******3.转账******\n");
		printf("\n******4.存款******\n");
		printf("\n******5.修改密码******\n");
		printf("\n******6.返回目录******\n");
		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("\t无此操作项\n");
			system("pause");
			system("cls");
		}
	}while(n>4&&n<0);
}
//查询余额 
void search()
{
	char ch;
	printf("\t您的余额为%d元\n",user[k].account);
	system("pause");
    system("cls");
	printf("\n");
	ch=getchar();
	if(ch=='\n')
	{
		enter2();
	}
}
//取款
void withdraw()
{
	int i,x;
	char a,ch;
    printf(" \t\t\t+       您卡号的余额为        +\n");
	printf(" \t\t\t+       %d元                  +\n",user[k].account);
	printf(" \t\t\t+    请选择你要提取的金额:    +\n");
	printf(" \t\t\t+    1: 100元     2:200元     +\n");
	printf(" \t\t\t+    3.500元      4:1000元    +\n");
	printf(" \t\t\t+    5:2000元     6:5000元    +\n");
	printf(" \t\t\t+        7: 自定义金额(不少于100元)        +\n");
	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("\t请输入自定义的金额:\n\t");
							scanf("%d",&x);
							}
		if(x<=user[k].account)
		{
			user[k].account=user[k].account-x;
			printf(" \t您取了%d元钱\n",x);
            printf(" \t您的余额为%d元\n",user[k].account);
		}
       else 
		   if(x>user[k].account)
		   {
			   printf("\t您卡里的余额不足\n");
			   printf("\t请重新输入提取金额:\n");
		   }
		   printf(" \t请选择是否继续取款\n");
		   printf(" \t是:Y   否:N\n\n\t");
		   scanf("%s",&a);
	if(a=='Y')
	{
		save();
		withdraw();
	}
	else
		if(a=='N')
		{
			save();
			system("pause");
			system("cls");
			printf("\n\n\n");
		}
		else
		{
			save();
			system("pause");
			system("cls");
			printf("\n\n\n");
		}
	ch=getchar();
	if(ch=='\n')
	{
		system("cls");
		enter2();
	}
}

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

二.运行结果

开户

存款

取款

查询

转账

三.个人小结

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
posted @ 2020-11-18 23:30  li小老虎  阅读(96)  评论(0编辑  收藏  举报