个人作业三——ATM管理系统

一、作业信息

作业课程 软件工程
作业要求 作业要求
作业目标 编写一个ATM管理系统
学号 3180205402

二、作业要求

编写一个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);

}

3. 导入文件和保存文件


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 50
Coding 具体编码 100 300
Code Review 代码复审 10 20
Test 测试(自我测试,修改代码,提交修改) 10 30
Reporting 报告 10 10
Test Report 测试报告 5 10
Size Measurement 计算工作量 3 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 10 10
posted @ 2020-11-16 17:24  云宫迅音  阅读(144)  评论(0编辑  收藏  举报