个人作业三-

一:作业信息

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

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

三:代码提交与运行截图
1:源代码
主函数

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct per           //定义结构体
{
	char name[20];
		char ID[20];
		int money;
		char mima[6];
		struct per * next;
};
typedef struct person    //定义另一结构体
{
	struct per kehu;
	struct person *next;
}L;
void kaihu(struct per *head);
void denglu(struct per *head);
void caidan(struct per *head);
void qukuan(struct per *head);
void cunkuan(struct per *head);
void zhuanzhang(struct per *head);
void chuangjian(struct person **Phead);
void shanchu(struct person **Phead);
void chaxun(struct per *head);
void tuichu();
void menu();
/*主函数*/
void main()
{
	char x;
	char choose;
	int flag=1;
	struct person *Phead=NULL;
	struct per *head=NULL;
	printf("*****************************
");
	printf("**欢迎使用ATM管理系统**
");
	printf("*****************************
");
	printf("——————————————
");
	printf("|    1  开户               |
");
    printf("——————————————
");
	printf("|    2  登陆                |
");
    printf("——————————————
");
	printf("|    3  后台       (销户)|
");
    printf("——————————————
");
	scanf("%s",&x);
	system("cls");
	switch(x)
	{
		case '1':system("cls");
	         kaihu(head);
			 break;
		case '2':system("cls");
			denglu(head);
			break;
		case '3':system("cls");
			menu();
			break;
	}
	while(flag)
	{
		system("cls");
		menu();
		choose=getchar();
		switch(choose)
		{ 
    	case '1':shanchu(&Phead);
				 system("pause");
				 system("cls");
				 break;
    	case '0':flag=0;
			     printf("The end.
");
				 break;
		}
	}
}

查询:

void chaxun(struct per *head)
{
	head=NULL;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
	{
		printf("不能打开文件
");
	}
	p=(struct per*)malloc(sizeof(struct per));
	head=p;
	while(!feof(fp))
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break; 
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p; 
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	printf("您卡上原有余额%d元

",q->money);
	system("pause");
	system("cls");
}

开户

void kaihu(struct per *head)
{
	head=NULL;
	FILE *fp;
	struct per *p1=NULL,*p2=NULL;
	p1=(struct per*)malloc(sizeof(struct per));
	      printf("请输入您的姓名:
");
		  scanf("%s",p1->name);
		  printf("请设置您的卡号:
");
		  scanf("%s",p1->ID);
		  printf("请设置您银行卡密码:
");
		  scanf("%s",p1->mima);
		  p1->money=0;
		  p1->next=NULL;
		  printf("您的个人信息为");
		     printf("姓名:%s 
卡号:%s 
余额:%4d
",p1->name,p1->ID,p1->money);
          if(NULL==head)
		  {
			  head=(struct per *)malloc(sizeof(struct per));
			  head->next=p1;
		  }
		  else
		  {
			  for(p2=head;p2->next!=NULL;p2=p2->next);
			  p2->next=p1;
		  }
		  if((fp=fopen("save.txt","ab+"))==NULL)
		  {
			  printf("cannot poen file
");
			  return;
		  }
		  if(fwrite(p1,sizeof(struct per),1,fp)!=1)
			  printf("file write error
");
		      fclose(fp);
			  printf("
");
			  printf("恭喜您开户成功,请登录
");
			  system("pause");
			  system("cls");
			  denglu(head);
}

登录

void denglu(struct per *head)
{
	char d[20];
	char mima[20];
	int i,j;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
		printf("不能打开文件
");
	p=(struct per*)malloc(sizeof(struct per));
	head=p;
	while(!feof(fp))
 
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break;
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p;
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	printf("  **********************
");
	printf("  ***欢迎使用ATM管理系统***
");
	printf("  **********************
");
	for(j=1;j<4;j++)
	{
		printf("请输入您的卡号
");
		scanf("%s",d);
		for(q=head;q!=NULL;q=q->next)
		{
			if(strcmp(q->ID,d)!=0)
				break;
			else		
			{			
				for(i=1;i<4;i++)
				{				
					printf("

请输入您的密码
");				
					scanf("%s",mima);
					if(strcmp(q->mima,mima)!=0)
					{				
						printf("密码不正确。请重新输入密码
");				
						system("pause");				
						system("cls");				
						continue;
					}			
					else				
					{			
						system("cls");				
						caidan(head);
					}		
				}		
				printf("


您输入密码三次错误,谢谢光临
");		
				system("pause");		
				system("cls");		
				exit(0);	
			}
		}		
		printf("


您输入的卡号有误,请重试
");
		system("pause");
		system("cls");
	}
	exit(0);
}

菜单

void caidan(struct per *head)
{
	head=NULL;
	int i;
	while(1)
	{
		printf("请选择您需要的业务
");
		printf("*********************************
");
		printf("**  1 取款   *****   2 查询    **
");
		printf("*********************************
");
		printf("**  3 转账   *****   4存款**
");
		printf("*********************************
");
		printf("**  0  退出    **
");
		printf("*********************************
");
		scanf("%d",&i);
		if(i<6||i>0)
		{
			switch(i)
			{
			case 1:qukuan(head);
			       system("pause");
				   system("cls");
				   break;
			case 2:system("cls");
				   chaxun(head);
				   break;
            case 3:system("cls");
				   zhuanzhang(head);
				   break;
            case 4:system("cls");
				   cunkuan(head);
				   break;
            case 0:system("cls");
				   tuichu();
				   break;
			}
		}
		else
		{
			printf("您的输入有误
");
			system("pause");
			system("cls");
		}
	}
}

取款

void qukuan(struct per *head)
{
	head=NULL;
	int i;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
		printf("不能打开文件
");
	p=(struct per*)malloc(sizeof(struct per));
	head=p;
	while(!feof(fp))
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break;
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p;
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	system("cls");
    printf("请按要求选择您要取款的金额
");
	scanf("%d",&i);
	if(i>q->money)
	{
		printf("对不起,您的金额不足
");
		system("pause");
		system("cls");
		caidan(head);
	}
	else
	{
		q->money-=i;
		if((fp=fopen("save.txt","wb+"))==NULL)
		{
			printf("cannot open file
");
			return;
		}
		if(fwrite(q,sizeof(struct per),1,fp)!=1)
			printf("file write error
");
		printf("您已经成功取走%d元
");
		q->next=NULL;
		fclose(fp);
	}
}

存款

void cunkuan(struct per *head)
{
	int i;
	head=NULL;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
	{
		printf("不能打开文件
");
	}
	p=(struct per*)malloc(sizeof(struct per)); 
	head=p;
	while(!feof(fp))
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break; 
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p;
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	system("cls");
	printf("您卡上原有余额%d元
",q->money);   
    printf("请选择您要存入的余额
");
	scanf("%d",&i);
	i=100*i;
	q->money+=i;
	if((fp=fopen("save.txt","wb+"))==NULL)
	{
		printf("cannot open file
");
	}
	if(fwrite(q,sizeof(struct per),1,fp)!=1)
	{
		printf("file write error
");
	   	printf("您已经成功存取%d元
",i);
		q->next=NULL;
		fclose(fp);
		system("pause");
		system("cls");
	}
}

查询

void chaxun(struct per *head)
{
	head=NULL;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
	{
		printf("不能打开文件
");
	}
	p=(struct per*)malloc(sizeof(struct per));
	head=p;
	while(!feof(fp))
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break; 
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p; 
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	printf("您卡上原有余额%d元

",q->money);
	system("pause");
	system("cls");
}

转账

void zhuanzhang(struct per *head)
{
	head=NULL;
	FILE *fp;
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)
		printf("不能打开文件
");
	p=(struct per*)malloc(sizeof(struct per));
	head=p;
	while(!feof(fp))
	{
		if(1!=fread(p,sizeof(struct per),1,fp))
			break;
		p->next=(struct per *)malloc(sizeof(struct per));
		q=p;
		p=p->next;
	}
	q->next=NULL;
	fclose(fp);
	int i,j,k;
	printf("请输入帐号号码
");
	scanf("%d",&i);
	printf("请再次输入帐号号码
");
	scanf("%d",&j);
	if(i!=j)
	{
		printf("两次账号不同,请重新输入
");
		zhuanzhang(head);
	}
	else
	{
		system("cls");
		printf("请输入转账金额
");
		scanf("%d",&k);
		if(k>q->money)
		{				
			printf("对不起,您的余额不足
");
			system("pause");
			system("cls");
			caidan(head);
		}
		else
		{
			printf("您已成功转账%d元
",k);
			q->money-=k;
			if((fp=fopen("save.txt","wb+"))==NULL)
			{
				printf("cannot open file
");
				return;
			}
			if(fwrite(q,sizeof(per),1,fp)!=1)		
				printf("file write error
");		
			q->next=NULL;		
			fclose(fp);		
			system("pause");		
			system("cls");	
		}
	}
}

销户

void shanchu(struct person **Phead)
{
	char k[20];
	struct person *p=*Phead,*t;
	if(NULL==(*Phead))
	{
		printf("没有客户信息可删除!
");
		return;
	}
	printf("请输入要删除的客户卡号:
");
	scanf("%s",k);
	if(p->kehu.ID==k)
		*Phead=(*Phead)->next,free(p);
	else
	{
		while(NULL==p->next&&p->next->kehu.ID!=k)
			p=p->next;
		if(p->next==NULL)
			printf("对不起,没有该客户!
");
		else
		{
			t=p->next;
			p->next=p->next->next;
			printf("销户成功
");
		}
	}
}

运行截图:







四:个人小结
本次的任务是做一个简单的ATM机管理系统,它有基本的存款、取款等功能,但系统对于文件的读写还有一定的问题,文件读入后会存在乱码,然后销户的功能不够完善。但对于博客园的功能有了更加完善的了解,也对软件工程这门课有了更加清晰的认识。
PSP:

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