个人作业三-ATM管理系统

一.题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)
二.代码提交
1.头文件、结构体及函数定义

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100

void Transaccount();//转账 
void Menu();	//显示菜单
void Delete();	//删除
void Save_money();//存钱
void Withdraw_money();//取钱 
void Show();	//查询信息 
void save(int m);	//信息存入文件
int read();		//读取信息文件
void Add();//增加开户 
void Insert();//初始开户 

struct Customer
{
	char number[20];//身份证号
	char name[10];//姓名
	char cipher[20];//密码
	float balance;//余额 
}Customer[N],kong[2];

2.主函数与菜单

void Menu()
{
	printf("ATM信息管理系统\n");
	printf("***---------------------------***\n");
	printf("1--转账\n");
	printf("2--销户\n");
	printf("3--存款\n");
	printf("4--取款\n");
	printf("5--查询账户余额\n");
	printf("6--增加开户\n");
	printf("7--退出系统\n");
	printf("8--开户\n");	
	printf("***---------------------------***\n");
	printf("请选择功能:\n");
}
 
int main()
{
	int a;
	do
	{
		Menu();
		scanf("%d",&a);
		if(a>8||a<0)
		{
			system("cls");
			printf("输入错误! \a\n");
			continue;
		}
		system("cls");
		switch(a)
		{
		case 1: Transaccount();break;
		case 2: Delete();break;
		case 3: Save_money();break;
		case 4: Withdraw_money();break;
		case 5: Show();break;
		case 6: Add();break;
		case 7: exit(0);break;
		case 8: Insert();break; 
		}
	
	}while(1);

}
  1. 导入文件和保存文件
void save(int m)  /*保存文件函数*/ 
{    int i;
     FILE *fp;
     if ((fp=fopen("D:\\Customer_list.dat","wb"))==NULL) /*创建文件并判断是否能打开*/    
	 {  printf ("cannot open file!\n");
		exit(0); 
	 }     
	 for (i=0;i<m;i++) /*将内存中客户的信息输出到磁盘文件中去*/  
	if (fwrite(&Customer[i],sizeof(struct Customer),1,fp)!=1)
		printf("file write error!\n");   
	fclose(fp); 
}  
 
int read()  /*导入函数*/ 
{   FILE*fp;  
	int i=0;    
	if((fp=fopen("D:\\Customer_list.dat","rb"))==NULL)
	{   printf ("cannot open file!\n");
		exit(0);      
    } 
	else 
	{   
		do {         
			fread(&Customer[i],sizeof(struct Customer),1,fp); 
			i++;
			}while(feof(fp)==0); 
	}  
	fclose(fp);
	return(i-1); 
}      

4.初始开户与增加开户

void Insert()//初始开户
{
	int x,j,i,k,sum;
	printf("请输入开户的人数:\n");
	scanf("%d",&x);
	for(i=0;i<x;i++)
	{
		printf("请输入第%d个开户身份证号\n",i+1);
		scanf("%s",&Customer[i].number);
		for(j=0,sum=0;j<x;j++)	//查重
		{
			for(k=0;k<10;k++)
			{
				if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
					sum+=0;
				else
					sum+=1;
			}
			if(Customer[j+1].number==NULL)
				break;
			while(sum==0)
			{
				system("cls");
				printf("输入身份证号重复,请重新输入\n");
				printf("请输入第%d个客户身份证号\n",i+1);
				scanf("%s",&Customer[i].number);
			for(k=0;k<10;k++)
			{
				if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
					sum+=0;
				else
					sum+=1;
			}
			if(Customer[j+1].number==NULL)
				break;
			}
		}
		printf("请输入第%d个客户姓名\n",i+1);
		scanf("%s",&Customer[i].name);
		printf("请输入第%d个客户密码\n",i+1);
		scanf("%s",&Customer[i].cipher);
		printf("请输入第%d个客户的存入余额\n",i+1);
		scanf("%f",&Customer[i].balance);
		system("cls");
	}
	save(x);
	printf("录入完成\n");
}

void Add() //增加开户 
{
	int z,a,n;
	int i,j,k,sum;
	int m=read();
	system("cls");
	printf("增加几位开户信息?\n");
	scanf("%d",&a);
	while(a<=0)
	{	
		system("cls");
		printf("请重新输入"); 
	    printf("增加几位客户信息?\n");
	    scanf("%d",&a);
	}
	for(z=0;z<a;z++)
	{
		printf("请输入第%d位客户信息\n",z+1); 
		for(n=0;n>=0;n++)
		if(Customer[n].number[0]=='\0')
		  break;
		i=n;	
		printf("请输入身份证号:\n");
		scanf("%s",&Customer[i].number);
		for(j=0,sum=0;j<N;j++)//查重 
		{
			if(Customer[j].number[0]=='\0')
			    continue;
			for(k=0;k<10;k++)
			{
				if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
			      sum+=0;
			    else
			      sum+=1;
			}
			if(Customer[j+1].number=='\0')
			  break;
			while(sum==0)
			{	
			system("cls");
			printf("输入身份证号重复,请重新输入\n"); 
			printf("请输入身份证号\n");
		    scanf("%s",&Customer[i].number);
			for(k=0;k<10;k++)
			    {
				if(j!=i&&Customer[i].number[k]==Customer[j].number[k])
			      sum+=0;
			    else
			      sum+=1;
			    }
			if(Customer[j+1].number==NULL)
			  break;
			}
		} 
		printf("请输入姓名\n");
		scanf("%s",&Customer[i].name);
		printf("请输入密码\n");
		scanf("%s",&Customer[i].cipher);
		printf("请输入存入余额\n");
		scanf("%f",&Customer[i].balance); 
		system("cls");
    }
		save(m);
		printf("开户信息增加完成\n");
		printf("%s\t%s\t%f\n",Customer[i].number,Customer[i].name,Customer[i].balance);
}

5.销户

void Delete()	//销户 
{
	int i,j,n;
	int m=read(); 
	char cipher[20],number[20];
		printf("请输入要销户的身份证号:\n");
		scanf("%s",number);
		getchar();
		printf("请输入密码:");
		scanf("%s",cipher);
		getchar();
		for(i=0;i<N;i++)
		{
			if(Customer[i].number[0]=='\0')
				continue;
			if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
			{
				for(j=i;j<i+1;j++)
					Customer[j]=kong[0];
				printf("客户信息已经销户成功!\n");
						save(m);//储存修改后的数据
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

	printf("%s\t%s\t%f\n",Customer[i].number,Customer[i].name,Customer[i].balance);
		save(m);//储存修改后的数据
}

6.存钱

void Save_money() //存钱
{
	int i,j,n;
	int m=read(); 
	float sav_mon;
	char cipher[20],number[20];
		printf("请输入要存款的身份证号:\n");
		scanf("%s",number);
		getchar();
		printf("请输入密码:");
		scanf("%s",cipher);
		getchar();
		for(i=0;i<N;i++)
		{
			if(Customer[i].number[0]=='\0')
				continue;
			if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
			{
				printf("输入要存入的款数:\n");
				scanf("%f",&sav_mon);
				Customer[i].balance = Customer[i].balance + sav_mon; 
				printf("客户已存款成功!\n");
						save(m);//储存修改后的数据
				printf("%s\t%s\t%f\n",Customer[i].number,Customer[i].name,Customer[i].balance);
						
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

		save(m);//储存修改后的数据
} 

7.取钱

void Withdraw_money() //取钱
{
	int i,j,n;
	int m=read(); 
	float withdraw_mon;
	char cipher[20],number[20];
		printf("请输入要取款的身份证号:\n");
		scanf("%s",number);
		getchar();
		printf("请输入密码:");
		scanf("%s",cipher);
		getchar();
		for(i=0;i<N;i++)
		{
			if(Customer[i].number[0]=='\0')
				continue;
			if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
			{
				printf("输入要取出的款数:\n");
				scanf("%f",&withdraw_mon);
				if(Customer[i].balance >= withdraw_mon)
				{ 
					Customer[i].balance = Customer[i].balance - withdraw_mon; 
					printf("客户已取款成功!\n");
						save(m);//储存修改后的数据
				}
				else
					printf("账户余额不足!");
					 
				printf("%s\t%s\t%f\n",Customer[i].number,Customer[i].name,Customer[i].balance);		
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

		save(m);
//储存修改后的数据
} 

8.转账

void  Transaccount()//转账 
{
	int i,j,n;
	int m=read(); 
	float trans_mon;
	char cipher[20],number[20],number2[20];
		printf("请输入要转账的身份证号:\n");
		scanf("%s",number);
		getchar();
		printf("请输入密码:");
		scanf("%s",cipher);
		getchar();
		for(i=0;i<N;i++)
		{
			if(Worker[i].number[0]=='\0')
				continue;
			if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
			{
				printf("登录成功,请输入要转入的身份证号:\n");
				scanf("%s",number2);
				getchar();
					for(j=0;j<N;j++)
					{
						if(Worker[j].number[0]=='\0')
							continue;
						if(strcmp(number2,Worker[j].number)==0)
						{
						    printf("输入要转账的款数:\n");
						    scanf("%f",&trans_mon);
							if(Worker[i].balance >= trans_mon)
							{
								Worker[i].balance = Worker[i].balance - trans_mon; 
								Worker[j].balance = Worker[j].balance + trans_mon; 
								printf("客户已转账成功!\n");
								save(m);//储存修改后的数据
								printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
								printf("%s\t%s\t%f\n",Worker[j].number,Worker[j].name,Worker[j].balance);
							} 
							else
								printf("账户余额不足!");
						}
					}
					if(j==N)
						printf("无此转入客户资料!\n");
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

		save(m);//储存修改后的数据
}

9.查询余额

void Show()//查询余额 
{
		int i,j,n;
		int m=read(); 
		char cipher[20],number[20];
		printf("请输入要查询的身份证号:\n");
		scanf("%s",number);
		getchar();
		printf("请输入密码:");
		scanf("%s",cipher);
		getchar();
		for(i=0;i<N;i++)
		{
			if(Customer[i].number[0]=='\0')
				continue;
			if(strcmp(number,Customer[i].number)==0 && strcmp(cipher,Customer[i].cipher)==0)
			{
				printf("%s\t%s\t%f\n",Customer[i].number,Customer[i].name,Customer[i].balance);	
				return;
			}
			else
				printf("密码错误!\n");
		}
		if(i==N)
			printf("无此客户资料!\n");

}

10.运行截图
菜单

开户

查询

存款

取款

转账


三.个人小结

psp2.1 <任务内容> <计划完成需要的时间(min)> <实际完成需要的时间(min)>
Planning 计划 10 30
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 20
Development 开发 200 300
Analysis 需求分析(包括学习新技术 10 30
Design Spec 生成设计文档 15 30
Design Review 设计复审 5 10
Coding Standard 代码规范 5 8
Design 具体设计 10 15
Coding 具体编码 30 30
Code Review 代码复审 10 20
Test 测试(自我测试,修改代码,提交修改) 10 30
Reporting 报告 9 10
Test Report 测试报告 3 2
Size Measurement 计算工作量 3 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5
posted @ 2020-11-18 21:32  计算机181王政  阅读(75)  评论(0编辑  收藏  举报