当前位置:天才代写 > tutorial > C语言/C++ 教程 > C语言实现ATM机存取款系统

C语言实现ATM机存取款系统

2017-11-01 08:00 星期三 所属: C语言/C++ 教程 浏览:1045

操作布局体和结构函数而且回收输入输出文件实现ATM机系统。

主要成果有:

操作三种要领查询、开户、登岸、菜单、取款、修改暗码、存款、转账、建设小我私家书息、输出、删除、增加、退出。

是一个成果齐全,完备的ATM机系统。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct per           //界说布局体
{
	char name[20];
		char ID[20];
		int money;
		char mima[6];
		struct per * next;
};
typedef struct person    //界说另一布局体
{
	struct per kehu;
	struct person *next;
}L;

void chaxun(struct per *head);    //各个函数的声明
void kaihu(struct per *head);
void denglu(struct per *head);
void caidan(struct per *head);
void qukuan(struct per *head);
void xgmm(struct per *head);
void cunkuan(struct per *head);
void zhuanzhang(struct per *head);
void chuangjian(struct person **Phead);
void shuchu(struct person *Phead);
void shanchu(struct person **Phead);
void zengjia(struct person **Phead);
void chaxun1(struct person *Phead);
void chaxun2(struct person *Phead);
void chaxun3(struct person *Phead);
void tuichu();
void menu();




/*主函数*/
//////////////////////////////////////////////////

void main()
{
	char x;
	char choose; //choose为界说输入选择的变量
	int flag=1;
	struct person *Phead=NULL; //Phead为界说二层头指针
	struct per *head=NULL;    //head为界说一层头指针
	printf("*****************************\n");
	printf("**接待利用ATM自动取款机系统**\n");
	printf("*****************************\n");
    printf("——————————————\n");
	printf("|    1  开户                |\n");
    printf("——————————————\n");
	printf("|    2  登岸                |\n");
    printf("——————————————\n");
	printf("|    3  前台客户信息查询中心|\n");
    printf("——————————————\n");
	printf("|    4  请选择您的需求      |\n");
    printf("——————————————\n");
	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.\n");
				 break;
		}
	}
}
   /*开户函数*/
////////////////////////////////////////////////////////
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("请输入您的姓名:\n");  //请数据输入链表中
		  scanf("%s",p1->name);
		  printf("请配置您的卡号:\n");
		  scanf("%s",p1->ID);
		  printf("请配置您银行卡暗码:\n");
		  scanf("%s",p1->mima);
		  p1->money=0;
		  p1->next=NULL;
		  printf("您的小我私家书息为");
		     printf("姓名:%s \n卡号:%s \n余额:%4d\n",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\n");
			  return;
		  }
		  if(fwrite(p1,sizeof(struct per),1,fp)!=1)  //将链表信息写入文件中
			  printf("file write error\n");
		      fclose(fp);
			  printf("\n");
			  printf("恭喜您开户乐成,请登录\n");
			  system("pause");
			  system("cls");
			  denglu(head);
}


//登岸函数
/////////////////////////////////////////////////////
void denglu(struct per *head)
{
	char d[20];
	char mima[20];
	int i,j;
	FILE *fp;     //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)   //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");   //如不能打开,则竣事措施
	}
	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);
	printf("  **********************\n");
	printf("  ***接待来都建树银行***\n");
	printf("  **********************\n");
	for(j=1;j<4;j++)      //限制卡号输入的次数的轮回
	{
		printf("请输入您的卡号\n");
		scanf("%s",d);
		for(q=head;q!=NULL;q=q->next)   //遍历链表
		{
			if(strcmp(q->ID,d)!=0)  //查对账号
			{
			continue;   //跳出轮回
			}
					else
		{
			for(i=1;i<4;i++)   //限制暗码输入的次数的轮回
			{
				printf("\n\n请输入您的暗码\n");
				scanf("%s",mima);
				if(strcmp(q->mima,mima)!=0)      //查对暗码
				{
					printf("暗码不正确。请从头输入暗码\n");
					system("pause");
					system("cls");
					continue;    //若暗码差池,跳出轮回
				}
				else
				{
					system("cls");
					caidan(head);   //挪用菜单函数
				}
			}
			printf("\n\n\n您输入暗码三次错误,感谢降临\n");
			system("pause");
			system("cls");
			exit(0);
		}
	}
		
	
	printf("\n\n\n您输入的卡号有误,请重试\n");
	system("pause");
	system("cls");
}
printf("您的卡号三次输入错误,感谢利用\n");
exit(0);
}



//银行菜单函数
/////////////////////////////////////////////////////////////
void caidan(struct per *head)
{
	head=NULL;
	int i;      //i为客户选择输入的变量
	while(1)
	{
		printf("请选择您需要的业务\n");      //银行业务菜单
		printf("*********************************\n");
		printf("**  1 取款   *****   2 查询    **\n");
		printf("*********************************\n");
		printf("**  3 转账   *****   4 修改暗码**\n");
		printf("*********************************\n");
		printf("**  5 存款   *****   6 退出    **\n");
		printf("*********************************\n");
		scanf("%d",&i);
		if(i<6||i>0)
		{
			switch(i)
			{
			case 1:qukuan(head);       //挪用银行取款函数
			       system("pause");
				   system("cls");
				   break;
			case 2:system("cls");
				   chaxun(head);  //挪用银行查询函数
				   break;
            case 3:system("cls");
				   zhuanzhang(head);  //挪用银行转账函数
				   break;
            case 4:system("cls");
				   xgmm(head);  //挪用银行修改暗码函数
				   break;
            case 5:system("cls");
				   cunkuan(head);  //挪用银行存款函数
				   break;
            case 6:system("cls");
				   tuichu();  //挪用银行退出函数
				   break;
			}
		}
		else
		{
			printf("您的输入有误\n");
			system("pause");
			system("cls");
		}
	}
}


//银行取款函数
//////////////////////////////////////////////////
void qukuan(struct per *head)
{
	head=NULL;   //head为链表头指针
	int i;
	FILE *fp;          //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL) //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");  //如不能打开,则竣事措施
	}
	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("************************************\n");
    printf("**  1: 100元    *****    2:200元  **\n");
	printf("************************************\n");
    printf("**  3: 300元    *****    4:400元  **\n");
	printf("************************************\n");
    printf("**  5: 500元    *****    6:600元  **\n");
	printf("************************************\n");
    printf("请按要求选择您要取款的金额\n");
	scanf("%d",&i);
	if(i>6||i<=0)    //限制输入范畴
	{
		printf("对不起,您的输入有误\n\n");
		return;
	}
	else
	{
		i=100*i;  //对应选项乘以一百为取款金额
		if(i>q->money)
		{
			printf("对不起,您的金额不敷\n");
			system("pause");
			system("cls");
			caidan(head);   //挪用取款机菜单函数
		}
		else
		{
			q->money-=i;  //对金额举办处理惩罚
			if((fp=fopen("save.txt","wb+"))==NULL)  //打开文件
			{
				printf("cannot open file\n");
				return;
			}
			if(fwrite(q,sizeof(struct per),1,fp)!=1) //将修改的信息从头写入文件
				printf("file write error\n");
			printf("您已经乐成取走%d元\n");
			q->next=NULL;
			fclose(fp);    //封锁文件
		}
		
	}
}


//银行转账函数
/////////////////////////////////////////////
void zhuanzhang(struct per *head)
{
	head=NULL;
	FILE *fp;  //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)  //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");  //如不能打开,则竣事措施
	}
	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("请输入帐号号码\n");
	scanf("%d",&i);
	printf("请再次输入帐号号码\n");   //查对卡号
	scanf("%d",&j);
	if(i!=j)
	{
		printf("两次账号差异,请从头输入\n");
		zhuanzhang(head);
	}
	else
	{
		system("cls");
	printf("************************************\n");
    printf("**  1: 100元    *****    2:200元  **\n");
	printf("************************************\n");
    printf("**  3: 300元    *****    4:400元  **\n");
	printf("************************************\n");
    printf("**  5: 500元    *****    6:600元  **\n");
	printf("************************************\n");
    printf("请输入转账金额\n");
	scanf("%d",&k);
	if(k>6||k<=0)
	{
		printf("对不起,您的输入有误\n\n");
		return;
	}
	else
	{
		k=k*100;
		if(k>q->money)    //对余额举办判定
		{
			printf("对不起,您的余额不敷\n");
			system("pause");
			system("cls");
			caidan(head);
		}
		else
		{
			printf("您已乐成转账%d元\n",k);
			q->money-=k;
			if((fp=fopen("save.txt","wb+"))==NULL)
			{
				printf("cannot open file\n");
				return;
			}
			if(fwrite(q,sizeof(per),1,fp)!=1)  //将数据从头写入文件
				printf("file write error\n");
			q->next=NULL;
			fclose(fp);
			system("pause");
			system("cls");
		}
	}
	}
}



//银行查询函数 www.bianceng.cn
/////////////////////////////////////////////////
void chaxun(struct per *head)
{
	head=NULL;  //链表头指针
	FILE *fp;  //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)  //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");  //如不能打开,则竣事措施
	}
	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);
	printf("您卡上原有余额%d元\n\n",q->money);
	system("pause");
	system("cls");
}


//银行修改暗码函数
//////////////////////////////////////////////////

void xgmm(struct per *head)
{
	head=NULL;          //链表头指针
	char mima[20];
	FILE *fp;  //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)  //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");  //如不能打开,则竣事措施
	}
	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);
	printf("请输入您的原暗码\n");
	scanf("%s",mima);
	if(strcmp(q->mima,mima)==0)   //查对暗码
	{
		{
			printf("暗码正确\n");
			printf("请输入您的新暗码:\n");
			scanf("%s",q->mima);
			if((fp=fopen("save.txt","wb+"))==NULL)  //文件头指针
			{
				printf("cannot open file\n");
			}
			if(fwrite(q,sizeof(struct per),1,fp)!=1)    //将修改的暗码从头写入文件
				printf("file write error\n");
			fclose(fp);
			printf("修改暗码乐成\n\n\n\n\n");
		}
	}
	else
	{
		printf("您输入的暗码与原暗码差异\n");
		return;
		system("pause");
	}
	q->next=NULL;
}


//银行存款函数
////////////////////////////////////


void cunkuan(struct per *head)
{
	int i;
	head=NULL;   //链表头指针
	FILE *fp;  //界说文件指针
	struct per *p,*q=NULL;
	if((fp=fopen("save.txt","rb+"))==NULL)  //打开一个二进制文件,为读方法
	{
		printf("不能打开文件\n");  //如不能打开,则竣事措施
	}
	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元\n",q->money);   
	printf("************************************\n");
    printf("**  1: 100元    *****    2:200元  **\n");
	printf("************************************\n");
    printf("**  3: 300元    *****    4:400元  **\n");
	printf("************************************\n");
    printf("**  5: 500元    *****    6:600元  **\n");
	printf("************************************\n");
    printf("请选择您要存入的余额\n");
	scanf("%d",&i);
	if(i>6||i<=0)
	{
		printf("对不起,您的输入有误\n\n");
		return;
	}
	else
	{
		i=100*i;
		q->money+=i;
		if((fp=fopen("save.txt","wb+"))==NULL)   //打开文件
		{
			printf("cannot open file\n");
		}
		if(fwrite(q,sizeof(struct per),1,fp)!=1)  //将修改的暗码从头写入文件
			printf("file write error\n");
	    	printf("您已经乐成存取%d元\n",i);
			q->next=NULL;
			fclose(fp);
			system("pause");
			system("cls");
	}
}



//退出银行函数
///////////////////////////////////////////
void tuichu()
{
	printf("感谢利用\n");
	exit(0);
}

//靠山运行菜单函数
///////////////////////////////////////////////////////
void menu()
{
	printf("****************接待来到建树银行取款机系统****************\n\n\n\n");
	printf("**************************************************\n");
	printf("**** 1 成立信息并显示  ******  2 卡号查询信息 ****\n");
	printf("**************************************************\n");
	printf("**** 3 姓名查询信息    ******  4 余额查询信息 ****\n");
	printf("**************************************************\n");
	printf("**** 5 删除某卡号信息  ******  6 增加新的用户 ****\n");
	printf("**************************************************\n");
	printf("**** 7 按余额降序输出  ******  8 输出         ****\n");
	printf("**************************************************\n");
	printf("**** 0 退出            ******    感谢降临     ****\n");
	printf("**************************************************\n");
	printf("请选择您需要的业务\n\n");
}



//靠山运行建设链表函数
////////////////////////////////////////////////////
void chuangjian(struct person **Phead)  //*(*Phead)为指向布局体指针的地点
{
	struct person *p,*t;    //界说操纵指针
	char n[20];
	char a[20];
	int s;
	if(*Phead) *Phead=NULL;
	printf("请输入卡号 姓名 余额 (若要竣事请输入三个为零)\n");
	printf("请输入卡号\n");
	scanf("%s",n);
	printf("请输入姓名\n");
	scanf("%s",a);
	printf("请输入预存金额\n");
	scanf("%d",&s);
	if(s==0) return;
	p=(L *)malloc(sizeof(L));     //将信息输入链表中
	strcpy(p->kehu.ID,n);
	strcpy(p->kehu.name,a);
	*Phead=p;    //将指针从头指向头指针
	printf("请输入卡号\n");
	scanf("%s",n);
	printf("请输入姓名\n");
	scanf("%s",a);
	printf("请输入预存金额\n");
	scanf("%d",&s);
	while(s)
	{
		t=p;      //将p的值赋给t,p又可以储存下一个结点
		p=(L *)malloc(sizeof(L));   //为新结点开发新的内存
        strcpy(p->kehu.ID,n);
	    strcpy(p->kehu.name,a);
		p->kehu.money=s;
		p->next=NULL;
		t->next=p;   //将p的值接在t(即上一个结点的后头)
	    printf("请输入卡号\n");  //尾插法
     	scanf("%s",n);
	    printf("请输入姓名\n");
    	scanf("%s",a);
	    printf("请输入预存金额\n");
    	scanf("%d",&s);
	}
}



//靠山运行输出链表函数
/////////////////////////////////////////////
void shuchu(struct person *Phead)
{
	printf("\n\n");
	if(NULL==Phead)
	{
		printf("没有客户信息可输出!\n");  //若头指针指向空,则没有客户信息
		return;
	}
	while(Phead)  //遍历输出链表中所有客户信息
	{
		printf("卡号:%s\n姓名:\n余额:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
		Phead=Phead->next;
	}
	printf("\n\n");
}


	//靠山运行卡号查询函数
	///////////////////////////////////////////////////

void chaxun1(struct person*Phead)
{
	char m[20];   //界说输入查找客户卡号的变量
	if(NULL==Phead)   //若头指针向空,则没有客户信息
	{
	printf("没有客户信息可查询!\n");
	return;
	}
	printf("请输入要查询的客户卡号:\n");  
	scanf("%s",m);
	while(NULL!=Phead&&strcmp(Phead->kehu.ID,m)!=0)  //在链表中遍历寻找中,直到链表存在而且卡号查对无误
		Phead=Phead->next;
	if(Phead==NULL)  //若指针指最后指向空,则没有客户信息
		printf("对不起,没有该用户!\n");
	else
		printf("卡号:%s\n姓名:\n余额:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

}    //若找到,则输出客户信息



//靠山运行姓名查询函数
/////////////////////////////////////////////////////



void chaxun2(struct person *Phead)
{
	char m[20];   //界说输入查找客户卡号的变量
	if(NULL==Phead)   //若头指针向空,则没有客户信息
	{
	printf("没有客户信息可查询!\n");
	return;
	}
		printf("请输入要查询的客户姓名:\n");  
		scanf("%s",m);
	while(NULL!=Phead&&strcmp(Phead->kehu.name,m)!=0)  //在链表中遍历寻找中,直到链表存在而且姓名查对无误
	Phead=Phead->next;
	if(Phead==NULL)  //若指针指最后指向空,则没有客户信息
		printf("对不起,没有该用户!\n");
	else
		printf("卡号:%s\n姓名:\n余额:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

}    //若找到,则输出客户信息


//靠山运行余额查询函数
/////////////////////////////////////////////////////

void chaxun3(struct person *Phead)

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

}    //若找到,则输出客户信息


//靠山运行删除客户信息函数
///////////////////////////////////////////////////
void shanchu(struct person **Phead)   //*(*Phead)为指向布局体指针的地点
{
	char k[20];    //界说输入查找客户姓名卡号的变量
	struct person *p=*Phead,*t;
	if(NULL==(*Phead))     //若指针最后指向空,则没有客户信息
	{
		printf("没有客户信息可删除!\n");
		return;
	}
	printf("请输入要删除的客户卡号:\n");
	scanf("%s",k);
	if(p->kehu.ID==k)  //若第一个客户就是,则让头指针指向下一个结点
		*Phead=(*Phead)->next,free(p);
	else
	{
		while(NULL==p->next&&p->next->kehu.ID!=k)   //遍历寻找,查对客户卡号
			p=p->next;   //当p->next没指向空,而且客户的卡号还没找到,则继承寻找
		if(p->next==NULL)
			printf("对不起,没有该客户!\n");
		else
		{
			t=p->next;  //假如找到,则把p->next的值赋给t
			p->next=p->next->next;
		}
	}
}

//靠山运行增加用户信息函数
////////////////////////////////////////////////////////////
void zengjia(struct person **Phead)  //*(*Phead) 为指向布局体指针的地点
{
	char n[20];   //界说输入增加客户卡号的变量
	char a[20];   //界说输入增加客户姓名的变量
	int s;
	L *p,*t,*k;   //界说操纵指针变量
	printf("请输入要插入的客户信息\n");
        printf("请输入卡号\n");  //尾插法
     	scanf("%s",&n);
	    printf("请输入姓名\n");
    	scanf("%s",a);
	    printf("请输入预存金额\n");
    	scanf("%d",&s);
		p=(L *)malloc(sizeof(L));    //开发空间
		strcpy(p->kehu.ID,a);   //将新的客户信息写入链表
		p->kehu.money=s;
		strcpy(p->kehu.name,n);
		if(NULL==(*Phead))   //假如是空链表,则把新客户信息作为第一个结点
		{
			*Phead=p;   //头插法
			(*Phead)->next=NULL;
			return ;
		}
		else
		{
			p->next=(*Phead);   //头插法
			(*Phead)=p;
		}
}

 

    关键字:

天才代写-代写联系方式