zoukankan      html  css  js  c++  java
  • ATM管理系统

    博客班级 班级链接
    作业要求 作业要求链接
    作业目标 培养编写代码能力
    学号 3180701115

    题目要求

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

    (1)开户,销户

    (2)查询账户余额

    (3)存款

    (4)取款

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

    代码

    1.主函数代码

    void main()
    {
    	char x;
    	char choose; //choose为定义输入选择的变量
    	int flag=1;
    	struct person *Phead=NULL; //Phead为定义二层头指针
    	struct per *head=NULL;    //head为定义一层头指针
    	printf("*****************************
    ");
    	printf("**欢迎使用ATM自动取款机系统**
    ");
    	printf("*****************************
    ");
        printf("——————————————
    ");
    	printf("|    1  开户                |
    ");
        printf("——————————————
    ");
    	printf("|    2  登陆                |
    ");
        printf("——————————————
    ");
    	printf("|    3  前台客户信息查询中心|
    ");
        printf("——————————————
    ");
    	printf("|    4  请选择您的需求      |
    ");
        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':chuangjian(&Phead);
    			     shuchu(Phead); //调用后台输出函数
    				 system("pause");
    				 system("cls");
    				 break;
        	case '2':chaxun1(Phead); //调用后台卡号查询函数
    				 system("pause");
    				 system("cls");
    				 break;
        	case '3':chaxun2(Phead); //调用后台姓名查询函数
    				 system("pause");
    				 system("cls");
    				 break;
        	case '4':
    			     chaxun3(Phead); //调用后台余额查询函数
    				 system("pause");
    				 system("cls");
    				 break;
        	case '5':shanchu(&Phead); //调用后台删除用户函数
    				 system("pause");
    				 system("cls");
    				 break;
    	    case '6':
    			     zengjia(&Phead); //调用后台增加用户函数
    				 system("pause");
    				 system("cls");
    				 break;
    	    case '7':shuchu(Phead); //调用后台输出函数函数
    				 system("pause");
    				 system("cls");
    				 break;
    	    case '8':shuchu(Phead); 
    				 system("pause");
    				 system("cls");
    				 break;
        	case '0':flag=0;
    			     printf("The end.
    ");
    				 break;
    		}
    	}
    }  
    

    2.开户函数代码

    void kaihu(struct per *head)
    {
    	head=NULL;
    	FILE *fp;   //定义文件指针
    	struct per *p1=NULL,*p2=NULL;   //p1,p2为定义链表指针
    	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);
    }
    

    3.银行取款函数代码

    {
    	head=NULL;   //head为链表头指针
    	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("************************************
    ");
        printf("**  1: 100元    *****    2:200元  **
    ");
    	printf("************************************
    ");
        printf("**  3: 300元    *****    4:400元  **
    ");
    	printf("************************************
    ");
        printf("**  5: 500元    *****    6:600元  **
    ");
    	printf("************************************
    ");
        printf("请按要求选择您要取款的金额
    ");
    	scanf("%d",&i);
    	if(i>6||i<=0)    //限制输入范围
    	{
    		printf("对不起,您的输入有误
    
    ");
    		return;
    	}
    	else
    	{
    		i=100*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);    //关闭文件
    		}
    		
    	}
    }
    

    4.银行转账函数代码

    {
    	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("************************************
    ");
        printf("**  1: 100元    *****    2:200元  **
    ");
    	printf("************************************
    ");
        printf("**  3: 300元    *****    4:400元  **
    ");
    	printf("************************************
    ");
        printf("**  5: 500元    *****    6:600元  **
    ");
    	printf("************************************
    ");
        printf("请输入转账金额
    ");
    	scanf("%d",&k);
    	if(k>6||k<=0)
    	{
    		printf("对不起,您的输入有误
    
    ");
    		return;
    	}
    	else
    	{
    		k=k*100;
    		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");
    		}
    	}
    	}
    }
    

    5.银行存款函数代码

    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("************************************
    ");
        printf("**  1: 100元    *****    2:200元  **
    ");
    	printf("************************************
    ");
        printf("**  3: 300元    *****    4:400元  **
    ");
    	printf("************************************
    ");
        printf("**  5: 500元    *****    6:600元  **
    ");
    	printf("************************************
    ");
        printf("请选择您要存入的余额
    ");
    	scanf("%d",&i);
    	if(i>6||i<=0)
    	{
    		printf("对不起,您的输入有误
    
    ");
    		return;
    	}
    	else
    	{
    		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");
    	}
    }
    
    

    6.查询账户余额函数

    void chaxun3(struct person *Phead)
    {
    	long x;   //定义输入查找客户余额的变量
    	if(NULL==Phead)   //若头指针向空,则没有客户信息
    	{
    	printf("没有客户信息可查询!
    ");
    	return;
    	}
    		printf("请输入要查询的客户信息的余额:
    ");  
    		scanf("%ld",&x);
    	while(NULL!=Phead&&Phead->kehu.money!=x)  //在链表中遍历寻找中,直到链表存在并且余额核对无误,继续寻找
    		Phead=Phead->next;
    	if(Phead==NULL)  //若指针指最后指向空,则没有客户信息
    		printf("对不起,没有该用户!
    ");
    	else
    		printf("该客户的信息为
    ");
    		printf("卡号:%s
    姓名:
    余额:%d
    ",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
    

    运行截图

    1.余额查询界面

    2.转账截图

    3.销户截图

    个人小结

  • 相关阅读:
    Azure 2 月新公布
    协合新能源康大海:我们每多发一度电,就为蓝天白云多贡献了一份力量
    Azure:陪伴你们,是我最长情的告白
    微软加速器上海首期启航,拓展云端智慧创新
    Azure杯年会Cosplay大赛,速来围观!
    Azure 1 月新公布
    Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
    Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
    Azure 12 月新公布
    利用枚举找到列表中重复元素的索引
  • 原文地址:https://www.cnblogs.com/pianyu666/p/14002266.html
Copyright © 2011-2022 走看看