ATM管理系统(C语言)

摘要:
1.作业信息:本作业属于哪门课程软件工程?作业要求在哪里?学生号码是31807013122。主题是用任何语言编写ATM管理系统。要求应包括以下主要功能:开户、销户、账户余额查询、存款提取和转账3。代码提交和运行截图3.1源代码头文件//使用链接列表完成系统,从文档中读取帐户信息,并使用链接列表存储#include #include #include 结构和全局变量structusers{charcardnum[17];//银行卡号charname[20];//用户名charDID[19];//ID号floatBalance;//余额intpassword;//银行卡密码structusers*next;//指向下一个节点//};charC[3];图表标题[53];intB=7;随机生成银行卡号void randc(){intj,m;j=B%10;m=B/10;C[0]=m+'0';C[1]=j+'0');}结束函数void over(){int;charc;printf(“输入任何数字退出!

1. 作业信息

这个作业属于哪个课程软件工程
这个作业要求在哪里作业要求
学号3180701312

2.题目

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

3. 代码提交与运行截图

3.1 源代码

(1)头文件

//使用链表完成系统,账户信息从文档中读取,并用链表存放
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

(2)结构体与全局变量

struct users
{
	char cardnum[17];//银行卡号
	char name[20];//用户姓名 
	char DID[19];//身份证号 
	float Balance;//余额 
	int  password;//银行卡密码 
	struct users *next;//指向下一个结点// 
};
char C[3];
char title[53];
int B=7;

(3)随机生成银行卡号

void randc()
{
	int j,m;
	j=B%10;
	m=B/10;
	C[0]=m+'0';
	C[1]=j+'0';
}

(4)结束功能(用于停顿,防止目录刷屏太快)

void over()
{
	int i;char c;
	printf("输入任意数字退出!
");
	printf("请输入数字:");
	scanf("%d",&i);
	c=getchar();
 } 

(5)从文本中读取用户信息

struct users *readuser(struct users *u)
{
	struct users *r=NULL,*p=NULL;
	FILE *fp;//定义文件指针
	p=u=(struct users *)malloc(sizeof(struct users));
	if ((fp = fopen("ATM管理系统.txt", "r")) == NULL)
		printf("ATM管理系统文件不存在 
");
	else
	{   
		fgets(title, 54, fp);//读取第一行说明:银行卡号,用户姓名,身份证号,余额,银行卡密码等;
		r=(struct users *)malloc(sizeof(struct users));
		while (fscanf(fp,"%s%s%s%d%f",&r->cardnum,&r->name,&r->DID,&r->password,&r->Balance)!=EOF)//如果文件没有读取结束,继续读取// 
		{
			p->next=r;
			p=r;
			r=(struct users *)malloc(sizeof(struct users));
		}
		p->next=NULL;
	}
	fclose(fp);
	fp=NULL;
	return u;
}

(6)保存修改的用户信息到文本中

void saveusers(struct users *u)
{
	struct users *r=NULL;
	FILE *fp;
	r=u->next;
	fp=fopen("ATM管理系统.txt","w+");
	fputs(title,fp);
	while(r!=NULL)
	{
		fprintf(fp,"
%s	%s		%s	%d		%f
",r->cardnum,r->name,r->DID,r->password,r->Balance);
		r=r->next;
	}
	fclose(fp);
}

(7)查询用户

struct users *finduser(struct users *u)
{
	char card[17];
	char c;
	int pass;//密码 
	struct users *r=NULL;
	int i,t; 
	while(1)
	{
		r=u->next;
		printf("请输入银行卡号:");
		gets(card);
		printf("请输入密码:");
		scanf("%d",&pass);
		c=getchar();
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->cardnum,card)==0&&r->password==pass)
			{
				t=1;
				return r;
			}
			else
				r=r->next;
		}
		if(t==0)
			printf("密码或银行卡号错误!
");
		printf("请选择  1.继续输入;2.退出;
");
		printf("请输入选项(点击任意键,继续输入):");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 2:
				return NULL;
			default :
				break;
		}
	}
} 

(8)存款

struct users *deposit(struct users *e)
{
	int i;
	char c;
	float b;
	printf("请确认账户信息!1.确定,2取消
");
	printf("银行卡号:%s
",e->cardnum);
	printf("姓名:%s
",e->name);
	printf("请输入选项:");
	scanf("%d",&i);
	c=getchar();
	if(i==1)
	{
		printf("请输入存入余额:");
		scanf("%f",&b);
		e->Balance=e->Balance+b;
		printf("存入成功!
");
	}
	else
	{
		printf("取消存款!
");
	}
	return e;
}

(9)取钱

struct users *Withdrawal(struct users *e)
{
	int i;
	char c;
	float b;
	printf("请输入取款金额:");
	scanf("%f",&b);
	c=getchar();
	while(b>e->Balance)
	{
		printf("余额不足!请重新选择!
");
		printf("1.重新输入金额  2.取消取款
");
		printf("请输入选项:");
		scanf("%d",&i);
		c=getchar();
		if(i==1) 
		{
			printf("请输入取款金额:");
			scanf("%f",&b);
		}
		else
		{
			return e;//退出 
		}
	}
	e->Balance=e->Balance-b;
	printf("取款成功!
");
	return e;
}

(10)转账 (1.找到转账用户,2.输入小于余额金额 )

struct users *Transfer(struct users *e,struct users *u)
{
	char card[17];
	char c;
	struct users *r=NULL;
	int i,j,t; 
	float b;
	while(1)
	{
		r=u->next;
		printf("请输入转账银行卡号:");
		gets(card);
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->cardnum,card)==0)//查找转账账户 
			{
				t=1;
				printf("请确认转账账户信息:
");
				printf("银行卡号:%s
",r->cardnum);
				printf("姓名:%s
",r->name);
				printf("请确认账户信息!1.确定,2取消
");
				printf("请输入选项:");
				scanf("%d",&i);
				c=getchar();
				if(i==1)
				{
					printf("请输入转入金额:");
					scanf("%f",&b);
					c=getchar();
					while(b>e->Balance)
					{
						printf("余额不足!请重新选择!
");
						printf("1.重新输入金额  2.取消转账
");
						printf("请输入选项:");
						scanf("%d",&j);
						c=getchar();
						if(j==1) 
						{
							printf("请输入转账金额:");
							scanf("%f",&b);
						}
						else
						{
							printf("取消转款!
");
							return u;
						}
					}
					//转账
					e->Balance=e->Balance-b;
					r->Balance=r->Balance+b;
					printf("转款成功!
");
					return u;
				}
				else
				{
					printf("取消转款!
");
					return u;
				}
			}
			else
			{
				r=r->next;
			}
		}
		if(t==0)
		{
			printf("银行卡号错误!
");
			printf("请选择  1.继续输入;2.退出;
");
			printf("请输入选项(点击任意键,继续输入):");
			scanf("%d",&i);
			c=getchar();
			switch(i)
			{
				case 2:
					return u;
				default :
					break;
			}
		}
	}		
} 

(11)开户

struct users *create(struct users *u)
{
	int i;
	struct users *s=NULL;
	s=(struct users *)malloc(sizeof(struct users));
	printf("请输入身份证:");
	gets(s->DID);
	printf("请输入姓名:");
	gets(s->name);
	printf("请输入密码(6位):");
	scanf("%d",&s->password);
	randc();
	strcpy(s->cardnum,"01234567890000");
	strcat(s->cardnum,C);
	s->Balance=0;
	printf("是否确定创建用户:1.确定 2.取消
");
	printf("请输入选项:");
	scanf("%d",&i);
	if(i==1)
	{
		s->next=u->next;
		u->next=s;
		B++;
		printf("创建成功!
");
		printf("%s",title);
		printf("
%s	%s		%s	%d		%f
",s->cardnum,s->name,s->DID,s->password,s->Balance);
	}
	else
	{
		free(s);
		printf("取消创建
");
	}
	return u;
}

(12)销户(检查余额)

struct users *del(struct users *u)
{
	struct users *e=NULL,*q=NULL;
	int i; 
	char card[17];
	int pass;//密码
	char D[19];
	char c;
	e=u;
	q=e->next;
	printf("请输入银行卡号:");
	gets(card);
	printf("请输入密码:");
	scanf("%d",&pass);
	c=getchar();
	while(q!=NULL)
	{
		if(strcmp(q->cardnum,card)==0&&q->password==pass)
		{
			break;
		}
		e=q;
		q=q->next;
	}
	if(q==NULL)//查找账户失败!退出 
	{
		printf("查找账户失败!");
		over();
		return u;
	}
	printf("请输入身份证号:");
	gets(D);
	while(1)
	{
		if(strcmp(q->DID,D)==0)
		{
			printf("取出余额%f
",q->Balance);
			printf("销户成功!
");
			e->next=q->next;
			free(q);
			return u;
		}
		else
		{
			printf("身份证号错误!
");
			printf("1.重新输入身份证号  2.取消注销
");
			printf("请输入选项:");
			scanf("%d",&i);
			c=getchar();
			if(i==1)
			{
				printf("请输入身份证号:");
				gets(D);
			}
			else
			{
				printf("取消注销
");
				return u;
			}
		}
	}
}

(13)界面

void menu()
{
	system("cls");   //清屏操作 
	printf("*     欢迎进入ATM管理系统   *
");
	printf("*****************************
");
	printf("*      1.查询账户余额       *
");
	printf("*      2.存        款       *
");
	printf("*      3.取        款       *
"); 
	printf("*      4.转        账       *
");
	printf("*      5.开户               *
"); 
	printf("*      6.销户               *
");//销户取出所有余额
	printf("*      7.退  出  系  统     *
");
	printf("*****************************
");
} 

(14)主函数

int main()
{
	struct users *u=NULL;
	struct users *e=NULL; 
	int j,i;
	char c;
	u=readuser(u);//读取用户信息// 
	while (1)
	{  
		menu(); 
		printf("请输入你的选择:");
		scanf("%d",&j);
		c=getchar();
		switch(j)
		{
			//查询账户余额 
			case 1:
				e=finduser(u);//查找用户 
				if(e==NULL)//查找账户失败!退出 
				{
					printf("查找账户失败!");
					over();
					break;
				}
				else
				{
					printf("账户余额为:%f
",e->Balance);
					over();
					break;
				}
			//存款 
			case 2:
				e=finduser(u);//查找用户 
				if(e==NULL)//查找账户失败!退出 
				{
					printf("查找账户失败!");
					over();
					break; 
				}
				e=deposit(e);
				saveusers(u);
				over();
				break;
			//取钱 
			case 3:
				e=finduser(u);//查找用户 
				if(e==NULL)//查找账户失败!退出 
				{
					printf("查找账户失败!");
					over();
					break;
				}
				e=Withdrawal(e);
				saveusers(u);
				over();
				break;
			//转账 
			case 4:
				e=finduser(u);//查找用户 
				if(e==NULL)//查找账户失败!退出 
				{
					printf("查找账户失败!");
					over();
					break; 
				}
				u=Transfer(e,u);
				saveusers(u);
				over();
				break;
			//开户
			case 5:
				u=create(u);
				saveusers(u);
				over();
				break;
			//销户 
			case 6:
				u=del(u);
				saveusers(u);
				over();
				break; 
			case 7:
				return 0;
			default:
				printf("输入的选项错误,请重新输入!
");
				break;
			}
				
		}
}

3.2运行代码截图

(1)用户信息文件
ATM管理系统(C语言)第1张
(2)查询余额
ATM管理系统(C语言)第2张
(3)存款
ATM管理系统(C语言)第3张
文件更改
ATM管理系统(C语言)第4张
(4)取款
ATM管理系统(C语言)第5张
文件更改
ATM管理系统(C语言)第6张
(5)转账
ATM管理系统(C语言)第7张
文件更改
ATM管理系统(C语言)第8张
ATM管理系统(C语言)第9张
(6)开户
ATM管理系统(C语言)第10张
文件更改
ATM管理系统(C语言)第11张
(7)销户
ATM管理系统(C语言)第12张
文件更改
ATM管理系统(C语言)第13张
(8)退出
ATM管理系统(C语言)第14张

4. 个人小结

困难:
1.读取文件后出现乱码
解决:用记事本的话,打开文件→另存为修改编码方式。选ANSI。
2.文件读取feof();总是多读一行乱码
解决:使用fscanf()的返回判断。关于fscanf的返回值是:fscanf返回的是实际读取的数据个数,出错或者到结尾返回EOF。在读取最后一个字符时,fscanf不能读到有效字符,因此结果将会返回EOF
(psp表格)

psp2.1任务内容计划完成需要的时间(min)实际完成需要的时间(min)
Planning计划315470
Estimate估计这个任务需要多少时间,并规划大致工作步骤1530
Development开发1020
Analysis需求分析(包括学习新技术)3050
Design Spec生成设计文档2020
Design Review设计复审1015
Coding Standard代码规范1010
Design具体设计3060
Coding具体编码60120
Code Review代码复审3060
Test测试(自我测试,修改代码,提交修改)4060
Reporting报告1020
Test Report测试报告1015
Size Measurement计算工作量2020
Postmortem & Process Improvement Plan事后总结,并提出过程改进计划2030

免责声明:文章转载自《ATM管理系统(C语言)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle内部错误:ORA00600:[4097]一例【Maven】Eclipse中Maven项目Maven build、build...、clean、install、test的含义下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Code Tips: 线程读写锁自旋导致的死循环

发现问题        项目测试的时候,发现运行一段时间后会出现cpu百分之百的情况。     想着可能是哪里出现了死循环,于是打算用gdb跟一下,结果gdb居然无法attach到进程。 定位问题     查了查去,原来有一个优先级为RT的实时线程出现了死循环,并且由于配置了CPU的亲和属性,使得进程只运行在第一个核上,此时gdb就无法attach了   ...

010 使用netmap API接管网卡,接收数据包,回应ARP请求

一.本文目的: 上一节中,我们已经在CentOS 6.7 上安装好了netmap,也能接收和发送包了,这节我们来调用netmap中的API,接管网卡,对网卡上收到的数据包做分析,并回应ARP请求。 二.netmap API简要介绍: 1.netmap API 主要包含在两个头文件中:netmap.h和netmap_user.h。在netmap/sys/ne...

Linux操作系统学习_操作系统是如何工作的

Linux操作系统学习_操作系统是如何工作的实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机、堆栈(函数调用堆栈)机制和中断机制       首先要整明白的一个问题是什么是存储程序计算机?其实存储程序计算机正是冯.诺依曼最初提出的计算机体系模型,现在我们一提到冯.诺依曼体系结构首先会想到的应该是包含输...

《转》Visual Studio 2015的安装与基本使用(社区版)

https://www.cnblogs.com/wangzexi/p/4906640.html 为什么要使用Visual Studio 2015? 它是中文的、界面友好、自动补全、实时语法错误提示(上图中波浪线部分)、单步调试……最重要的社区版是免费的!所以你不必再使用破解的、老旧的的不兼容现代系统的VC++6.0,Come to VS2015 and...

用C语言实现一个简单的HTTP客户端(HTTP Client)

用C语言实现一个简单的HTTP客户端(HTTP Client) - 雨水的专栏 - 博客频道 - CSDN.NET 用C语言实现一个简单的HTTP客户端(HTTP Client) 分类:2. C/C++语言2007-04-03 23:304632人阅读评论(4)收藏举报 用C语言实现一个简单的HTTP Client(HTTP客户端) 作者:g...

UCOSIII任务创建

UCOSIII任务创建: 首先要确保UCOSIII移植成功; 一般以下几个步骤就行了: 第一步:写好任务所需的 优先级、堆栈、控制块等; 然后顺便声明下任务函数; 第二步:开始创建函数 源码: 1 #include "led.h" 2 #include "delay.h" 3 #include "sys.h" 4 #include "usart.h"...