个人作业三-ATM管理系统

个人作业二-举例分析流程图与活动图的区别与联系

目录

- 一、作业信息

- 二、作业要求

- 三、代码提交

- 1.代码

- ①保存文件

- ②导入文件

- ③开户

- ④销户

- ⑤查询余额

- ⑥存钱、取钱

- ⑦转账

- ⑧菜单

- ⑨头文件、结构体、主函数

- 2.运行截图

一、作业信息

博客班级 软件工程导论-计算机18级
作业要求 作业要求
作业目标 通过ATM项目熟悉软件开发的流程
学号 3180404131

二、作业要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写

(4)举例分析流程图与活动图的联系

请同学们认真完成作业,每一部分给出完整流畅的语言描述,必要时可添加图表内容帮助理解。

三、作业内容

三、代码提交

1. 代码

①保存文件

void save(int m)  /*保存文件函数*/ 
{    int i;
     FILE *fp;
     if ((fp=fopen("E:\\ATM.dat","wb"))==NULL) /*创建文件并判断是否能打开*/    
	 {  printf ("cannot open file!\n");
		exit(0); 
	 }     
	 for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/  
	if (fwrite(&Worker[i],sizeof(struct Worker),1,fp)!=1)
		printf("file write error!\n");   
	fclose(fp); 
}  

②导入文件

 int read()  /*导入函数*/ 
{   FILE*fp;  
	int i=0;    
	if((fp=fopen("E:\\ATM.dat","rb"))==NULL)
	{   printf ("cannot open file!\n");
		exit(0);      
    } 
	else 
	{   
		do {         
			fread(&Worker[i],sizeof(struct Worker),1,fp); 
			i++;
			}while(feof(fp)==0); 
	}  
	fclose(fp);
	return(i-1); 
}      

③开户

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


④销户

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(Worker[i].number[0]=='\0')
				continue;
			if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
			{
				for(j=i;j<i+1;j++)
					Worker[j]=kong[0];
				printf("客户信息已经销户成功!\n");
						save(m);//储存修改后的数据
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

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

⑤查询余额

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(Worker[i].number[0]=='\0')
				continue;
			if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
			{
				printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);	
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

}

⑥存钱、取钱

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(Worker[i].number[0]=='\0')
				continue;
			if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
			{
				printf("输入要存入的款数:\n");
				scanf("%f",&sav_mon);
				Worker[i].balance = Worker[i].balance + sav_mon; 
				printf("客户已存款成功!\n");
						save(m);//储存修改后的数据
				printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);
						
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

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

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(Worker[i].number[0]=='\0')
				continue;
			if(strcmp(number,Worker[i].number)==0 && strcmp(cipher,Worker[i].cipher)==0)
			{
				printf("输入要取出的款数:\n");
				scanf("%f",&withdraw_mon);
				if(Worker[i].balance >= withdraw_mon)
				{ 
					Worker[i].balance = Worker[i].balance - withdraw_mon; 
					printf("客户已取款成功!\n");
						save(m);//储存修改后的数据
				}
				else
					printf("账户余额不足!");
					 
				printf("%s\t%s\t%f\n",Worker[i].number,Worker[i].name,Worker[i].balance);		
				return;
			}
		}
		if(i==N)
			printf("无此客户资料!\n");

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

⑦转账

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);//储存修改后的数据
}

⑧菜单

void Menu()
{
	printf("ATM信息管理系统\n");
	printf("***---------------------------***\n");
	printf("-------  1.开户  2.销户 ---------\n");
	printf("-------  3.存款  4.取款 ---------\n");
	printf("-------  5.查询  6.转账 ---------\n");
	printf("-------  7.退出         ---------\n");	
	printf("***---------------------------***\n");
	printf("请选择功能:\n");
}

⑨头文件、结构体、主函数

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

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

struct Worker
{
	char number[20];//身份证号
	char name[10];//姓名
	char cipher[20];//密码
	float balance;//余额 
}Worker[N],kong[2];
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: 
			Add();break;//
		case 2: 
			Delete();break;//
		case 3: 
			Save_money();break;//
		case 4: 
			Withdraw_money();break;//
		case 5: 
			Show();break;//
		case 6: 
			Transaccount();break;//
		case 7: 
			exit(0);break;//
		}
	
	}while(1);

}

2、运行截图

①进入界面

②开户

③取款

④转账

⑤查询

四、个人小结

1、psp耗时表

psp2.1 任务内容 计划完成需要的时间 (min) 实际完成需要的时间
Planning 计划 10 20
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 21:07  计算机183罗星宇  阅读(104)  评论(0编辑  收藏  举报