亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

C語言如何實現(xiàn)ATM機(jī)存取款系統(tǒng)

時間:2024-09-13 07:40:04 C語言 我要投稿
  • 相關(guān)推薦

C語言如何實現(xiàn)ATM機(jī)存取款系統(tǒng)

  C語言利用結(jié)構(gòu)體和構(gòu)造函數(shù)并且采用輸入輸出文件實現(xiàn)ATM機(jī)系統(tǒng)。下面是小編為大家?guī)淼年P(guān)于C語言如何實現(xiàn)ATM機(jī)存取款系統(tǒng)的知識,歡迎閱讀。

  C語言如何實現(xiàn)ATM機(jī)存取款系統(tǒng)

  利用結(jié)構(gòu)體和構(gòu)造函數(shù)并且采用輸入輸出文件實現(xiàn)ATM機(jī)系統(tǒng)。

  主要功能有:

  利用三種方法查詢、開戶、登陸、菜單、取款、修改密碼、存款、轉(zhuǎn)賬、創(chuàng)建個人信息、輸出、刪除、增加、退出。是一個功能齊全,完備的ATM機(jī)系統(tǒng)。

  #include

  #include

  #include

  struct per //定義結(jié)構(gòu)體

  {

  char name[20];

  char ID[20];

  int money;

  char mima[6];

  struct per * next;

  };

  typedef struct person //定義另一結(jié)構(gòu)體

  {

  struct per kehu;

  struct person *next;

  }L;

  void chaxun(struct per *head); //各個函數(shù)的聲明

  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();

  /*主函數(shù)*/

  //////////////////////////////////////////////////

  void main()

  {

  char x;

  char choose; //choose為定義輸入選擇的變量

  int flag=1;

  struct person *Phead=NULL; //Phead為定義二層頭指針

  struct per *head=NULL; //head為定義一層頭指針

  printf("***************************** ");

  printf("**歡迎使用ATM自動取款機(jī)系統(tǒng)** ");

  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); //調(diào)用開戶函數(shù)

  break;

  case '2':system("cls");

  denglu(head); //調(diào)用登陸函數(shù)

  break;

  case '3':system("cls");

  menu(); //調(diào)用后臺菜單函數(shù)

  break;

  }

  while(flag)

  {

  system("cls");

  menu(); //調(diào)用后臺菜單函數(shù)

  choose=get);

  switch(choose)

  {

  case '1':chuangjian(&Phead);

  shuchu(Phead); //調(diào)用后臺輸出函數(shù)

  system("pause");

  system("cls");

  break;

  case '2':chaxun1(Phead); //調(diào)用后臺卡號查詢函數(shù)

  system("pause");

  system("cls");

  break;

  case '3':chaxun2(Phead); //調(diào)用后臺姓名查詢函數(shù)

  system("pause");

  system("cls");

  break;

  case '4':

  chaxun3(Phead); //調(diào)用后臺余額查詢函數(shù)

  system("pause");

  system("cls");

  break;

  case '5':shanchu(&Phead); //調(diào)用后臺刪除用戶函數(shù)

  system("pause");

  system("cls");

  break;

  case '6':

  zengjia(&Phead); //調(diào)用后臺增加用戶函數(shù)

  system("pause");

  system("cls");

  break;

  case '7':shuchu(Phead); //調(diào)用后臺輸出函數(shù)函數(shù)

  system("pause");

  system("cls");

  break;

  case '8':shuchu(Phead);

  system("pause");

  system("cls");

  break;

  case '0':flag=0;

  printf("The end. ");

  break;

  }

  }

  }

  /*開戶函數(shù)*/

  ////////////////////////////////////////////////////////

  void kaihu(struct per *head)

  {

  head=NULL;

  FILE *fp; //定義文件指針

  struct per *p1=NULL,*p2=NULL; //p1,p2為定義鏈表指針

  p1=(struct per*)malloc(sizeof(struct per)); //開辟內(nèi)存單元

  printf("請輸入您的姓名: "); //請數(shù)據(jù)輸入鏈表中

  scanf("%s",p1->name);

  printf("請設(shè)置您的卡號: ");

  scanf("%s",p1->ID);

  printf("請設(shè)置您銀行卡密碼: ");

  scanf("%s",p1->mima);

  p1->money=0;

  p1->next=NULL;

  printf("您的個人信息為");

  printf("姓名:%s 卡號:%s 余額:%4d ",p1->name,p1->ID,p1->money);

  if(NULL==head) //為新用戶開辟內(nèi)存單元

  {

  head=(struct per *)malloc(sizeof(struct per));

  head->next=p1; //進(jìn)行頭插法,將其作為第一個節(jié)點

  }

  else //為新增客戶開辟內(nèi)存單元

  {

  for(p2=head;p2->next!=NULL;p2=p2->next); //進(jìn)行尾插

  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);

  }

  //登陸函數(shù)

  /////////////////////////////////////////////////////

  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) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前節(jié)點的指針,作為下一結(jié)點的前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  fclose(fp);

  printf(" ********************** ");

  printf(" ***歡迎來都建設(shè)銀行*** ");

  printf(" ********************** ");

  for(j=1;j<4;j++) //限制卡號輸入的次數(shù)的循環(huán)

  {

  printf("請輸入您的卡號 ");

  scanf("%s",d);

  for(q=head;q!=NULL;q=q->next) //遍歷鏈表

  {

  if(strcmp(q->ID,d)!=0) //核對賬號

  {

  continue; //跳出循環(huán)

  }

  else

  {

  for(i=1;i<4;i++) //限制密碼輸入的次數(shù)的循環(huán)

  {

  printf(" 請輸入您的密碼 ");

  scanf("%s",mima);

  if(strcmp(q->mima,mima)!=0) //核對密碼

  {

  printf("密碼不正確。請重新輸入密碼 ");

  system("pause");

  system("cls");

  continue; //若密碼不對,跳出循環(huán)

  }

  else

  {

  system("cls");

  caidan(head); //調(diào)用菜單函數(shù)

  }

  }

  printf(" 您輸入密碼三次錯誤,謝謝光臨 ");

  system("pause");

  system("cls");

  exit(0);

  }

  }

  printf(" 您輸入的卡號有誤,請重試 ");

  system("pause");

  system("cls");

  }

  printf("您的卡號三次輸入錯誤,謝謝使用 ");

  exit(0);

  }

  //銀行菜單函數(shù)

  /////////////////////////////////////////////////////////////

  void caidan(struct per *head)

  {

  head=NULL;

  int i; //i為客戶選擇輸入的變量

  while(1)

  {

  printf("請選擇您需要的業(yè)務(wù) "); //銀行業(yè)務(wù)菜單

  printf("********************************* ");

  printf("** 1 取款 ***** 2 查詢 ** ");

  printf("********************************* ");

  printf("** 3 轉(zhuǎn)賬 ***** 4 修改密碼** ");

  printf("********************************* ");

  printf("** 5 存款 ***** 6 退出 ** ");

  printf("********************************* ");

  scanf("%d",&i);

  if(i<6||i>0)

  {

  switch(i)

  {

  case 1:qukuan(head); //調(diào)用銀行取款函數(shù)

  system("pause");

  system("cls");

  break;

  case 2:system("cls");

  chaxun(head); //調(diào)用銀行查詢函數(shù)

  break;

  case 3:system("cls");

  zhuanzhang(head); //調(diào)用銀行轉(zhuǎn)賬函數(shù)

  break;

  case 4:system("cls");

  xgmm(head); //調(diào)用銀行修改密碼函數(shù)

  break;

  case 5:system("cls");

  cunkuan(head); //調(diào)用銀行存款函數(shù)

  break;

  case 6:system("cls");

  tuichu(); //調(diào)用銀行退出函數(shù)

  break;

  }

  }

  else

  {

  printf("您的輸入有誤 ");

  system("pause");

  system("cls");

  }

  }

  }

  //銀行取款函數(shù)

  //////////////////////////////////////////////////

  void qukuan(struct per *head)

  {

  head=NULL; //head為鏈表頭指針

  int i;

  FILE *fp; //定義文件指針

  struct per *p,*q=NULL;

  if((fp=fopen("save.txt","rb+"))==NULL) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒有讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前結(jié)點的指針,作為下一個結(jié)點的.前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  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; //對應(yīng)選項乘以一百為取款金額

  if(i>q->money)

  {

  printf("對不起,您的金額不足 ");

  system("pause");

  system("cls");

  caidan(head); //調(diào)用取款機(jī)菜單函數(shù)

  }

  else

  {

  q->money-=i; //對金額進(jìn)行處理

  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("您已經(jīng)成功取走%d元 ");

  q->next=NULL;

  fclose(fp); //關(guān)閉文件

  }

  }

  }

  //銀行轉(zhuǎn)賬函數(shù)

  /////////////////////////////////////////////

  void zhuanzhang(struct per *head)

  {

  head=NULL;

  FILE *fp; //定義文件指針

  struct per *p,*q=NULL;

  if((fp=fopen("save.txt","rb+"))==NULL) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前結(jié)點的指針,作為下一個結(jié)點的前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  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("請輸入轉(zhuǎn)賬金額 ");

  scanf("%d",&k);

  if(k>6||k<=0)

  {

  printf("對不起,您的輸入有誤 ");

  return;

  }

  else

  {

  k=k*100;

  if(k>q->money) //對余額進(jìn)行判斷

  {

  printf("對不起,您的余額不足 ");

  system("pause");

  system("cls");

  caidan(head);

  }

  else

  {

  printf("您已成功轉(zhuǎn)賬%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) //將數(shù)據(jù)重新寫入文件

  printf("file write error ");

  q->next=NULL;

  fclose(fp);

  system("pause");

  system("cls");

  }

  }

  }

  }

  //銀行查詢函數(shù) www.bianceng.cn

  /////////////////////////////////////////////////

  void chaxun(struct per *head)

  {

  head=NULL; //鏈表頭指針

  FILE *fp; //定義文件指針

  struct per *p,*q=NULL;

  if((fp=fopen("save.txt","rb+"))==NULL) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前結(jié)點的指針,作為下一個結(jié)點的前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  fclose(fp);

  printf("您卡上原有余額%d元 ",q->money);

  system("pause");

  system("cls");

  }

  //銀行修改密碼函數(shù)

  //////////////////////////////////////////////////

  void xgmm(struct per *head)

  {

  head=NULL; //鏈表頭指針

  char mima[20];

  FILE *fp; //定義文件指針

  struct per *p,*q=NULL;

  if((fp=fopen("save.txt","rb+"))==NULL) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前結(jié)點的指針,作為下一個結(jié)點的前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  fclose(fp);

  printf("請輸入您的原密碼 ");

  scanf("%s",mima);

  if(strcmp(q->mima,mima)==0) //核對密碼

  {

  {

  printf("密碼正確 ");

  printf("請輸入您的新密碼: ");

  scanf("%s",q->mima);

  if((fp=fopen("save.txt","wb+"))==NULL) //文件頭指針

  {

  printf("cannot open file ");

  }

  if(fwrite(q,sizeof(struct per),1,fp)!=1) //將修改的密碼重新寫入文件

  printf("file write error ");

  fclose(fp);

  printf("修改密碼成功 ");

  }

  }

  else

  {

  printf("您輸入的密碼與原密碼不同 ");

  return;

  system("pause");

  }

  q->next=NULL;

  }

  //銀行存款函數(shù)

  ////////////////////////////////////

  void cunkuan(struct per *head)

  {

  int i;

  head=NULL; //鏈表頭指針

  FILE *fp; //定義文件指針

  struct per *p,*q=NULL;

  if((fp=fopen("save.txt","rb+"))==NULL) //打開一個二進(jìn)制文件,為讀方式

  {

  printf("不能打開文件 "); //如不能打開,則結(jié)束程序

  }

  p=(struct per*)malloc(sizeof(struct per)); //申請空間

  head=p;

  while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束

  {

  if(1!=fread(p,sizeof(struct per),1,fp))

  break; //如果沒讀到數(shù)據(jù),跳出循環(huán)

  p->next=(struct per *)malloc(sizeof(struct per)); //為下一個結(jié)點申請空間

  q=p; //保存當(dāng)前結(jié)點的指針,作為下一個結(jié)點的前驅(qū)

  p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾

  }

  q->next=NULL; //最后一個結(jié)點的后繼指針為空

  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("您已經(jīng)成功存取%d元 ",i);

  q->next=NULL;

  fclose(fp);

  system("pause");

  system("cls");

  }

  }

  //退出銀行函數(shù)

  ///////////////////////////////////////////

  void tuichu()

  {

  printf("謝謝使用 ");

  exit(0);

  }

  //后臺運(yùn)行菜單函數(shù)

  ///////////////////////////////////////////////////////

  void menu()

  {

  printf("****************歡迎來到建設(shè)銀行取款機(jī)系統(tǒng)**************** ");

  printf("************************************************** ");

  printf("**** 1 建立信息并顯示 ****** 2 卡號查詢信息 **** ");

  printf("************************************************** ");

  printf("**** 3 姓名查詢信息 ****** 4 余額查詢信息 **** ");

  printf("************************************************** ");

  printf("**** 5 刪除某卡號信息 ****** 6 增加新的用戶 **** ");

  printf("************************************************** ");

  printf("**** 7 按余額降序輸出 ****** 8 輸出 **** ");

  printf("************************************************** ");

  printf("**** 0 退出 ****** 謝謝光臨 **** ");

  printf("************************************************** ");

  printf("請選擇您需要的業(yè)務(wù) ");

  }

  //后臺運(yùn)行創(chuàng)建鏈表函數(shù)

  ////////////////////////////////////////////////////

  void chuangjian(struct person **Phead) //*(*Phead)為指向結(jié)構(gòu)體指針的地址

  {

  struct person *p,*t; //定義操作指針

  char n[20];

  char a[20];

  int s;

  if(*Phead) *Phead=NULL;

  printf("請輸入卡號 姓名 余額 (若要結(jié)束請輸入三個為零) ");

  printf("請輸入卡號 ");

  scanf("%s",n);

  printf("請輸入姓名 ");

  scanf("%s",a);

  printf("請輸入預(yù)存金額 ");

  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("請輸入卡號 ");

  scanf("%s",n);

  printf("請輸入姓名 ");

  scanf("%s",a);

  printf("請輸入預(yù)存金額 ");

  scanf("%d",&s);

  while(s)

  {

  t=p; //將p的值賦給t,p又可以儲存下一個結(jié)點

  p=(L *)malloc(sizeof(L)); //為新結(jié)點開辟新的內(nèi)存

  strcpy(p->kehu.ID,n);

  strcpy(p->kehu.name,a);

  p->kehu.money=s;

  p->next=NULL;

  t->next=p; //將p的值接在t(即上一個結(jié)點的后面)

  printf("請輸入卡號 "); //尾插法

  scanf("%s",n);

  printf("請輸入姓名 ");

  scanf("%s",a);

  printf("請輸入預(yù)存金額 ");

  scanf("%d",&s);

  }

  }

  //后臺運(yùn)行輸出鏈表函數(shù)

  /////////////////////////////////////////////

  void shuchu(struct person *Phead)

  {

  printf(" ");

  if(NULL==Phead)

  {

  printf("沒有客戶信息可輸出! "); //若頭指針指向空,則沒有客戶信息

  return;

  }

  while(Phead) //遍歷輸出鏈表中所有客戶信息

  {

  printf("卡號:%s 姓名: 余額:%d ",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

  Phead=Phead->next;

  }

  printf(" ");

  }

  //后臺運(yùn)行卡號查詢函數(shù)

  ///////////////////////////////////////////////////

  void chaxun1(struct person*Phead)

  {

  char m[20]; //定義輸入查找客戶卡號的變量

  if(NULL==Phead) //若頭指針向空,則沒有客戶信息

  {

  printf("沒有客戶信息可查詢! ");

  return;

  }

  printf("請輸入要查詢的客戶卡號: ");

  scanf("%s",m);

  while(NULL!=Phead&&strcmp(Phead->kehu.ID,m)!=0) //在鏈表中遍歷尋找中,直到鏈表存在并且卡號核對無誤

  Phead=Phead->next;

  if(Phead==NULL) //若指針指最后指向空,則沒有客戶信息

  printf("對不起,沒有該用戶! ");

  else

  printf("卡號:%s 姓名: 余額:%d ",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

  } //若找到,則輸出客戶信息

  //后臺運(yùn)行姓名查詢函數(shù)

  /////////////////////////////////////////////////////

  void chaxun2(struct person *Phead)

  {

  char m[20]; //定義輸入查找客戶卡號的變量

  if(NULL==Phead) //若頭指針向空,則沒有客戶信息

  {

  printf("沒有客戶信息可查詢! ");

  return;

  }

  printf("請輸入要查詢的客戶姓名: ");

  scanf("%s",m);

  while(NULL!=Phead&&strcmp(Phead->kehu.name,m)!=0) //在鏈表中遍歷尋找中,直到鏈表存在并且姓名核對無誤

  Phead=Phead->next;

  if(Phead==NULL) //若指針指最后指向空,則沒有客戶信息

  printf("對不起,沒有該用戶! ");

  else

  printf("卡號:%s 姓名: 余額:%d ",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

  } //若找到,則輸出客戶信息

  //后臺運(yùn)行余額查詢函數(shù)

  /////////////////////////////////////////////////////

  void chaxun3(struct person *Phead)

  {

  long x; //定義輸入查找客戶余額的變量

  if(NULL==Phead) //若頭指針向空,則沒有客戶信息

  {

  printf("沒有客戶信息可查詢! ");

  return;

  }

  printf("請輸入要查詢的客戶信息的余額: ");

  scanf("%ld",&x);

  while(NULL!=Phead&&Phead->kehu.money!=x) //在鏈表中遍歷尋找中,直到鏈表存在并且余額核對無誤,繼續(xù)尋找

  Phead=Phead->next;

  if(Phead==NULL) //若指針指最后指向空,則沒有客戶信息

  printf("對不起,沒有該用戶! ");

  else

  printf("該客戶的信息為 ");

  printf("卡號:%s 姓名: 余額:%d ",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);

  } //若找到,則輸出客戶信息

  //后臺運(yùn)行刪除客戶信息函數(shù)

  ///////////////////////////////////////////////////

  void shanchu(struct person **Phead) //*(*Phead)為指向結(jié)構(gòu)體指針的地址

  {

  char k[20]; //定義輸入查找客戶姓名卡號的變量

  struct person *p=*Phead,*t;

  if(NULL==(*Phead)) //若指針最后指向空,則沒有客戶信息

  {

  printf("沒有客戶信息可刪除! ");

  return;

  }

  printf("請輸入要刪除的客戶卡號: ");

  scanf("%s",k);

  if(p->kehu.ID==k) //若第一個客戶就是,則讓頭指針指向下一個結(jié)點

  *Phead=(*Phead)->next,free(p);

  else

  {

  while(NULL==p->next&&p->next->kehu.ID!=k) //遍歷尋找,核對客戶卡號

  p=p->next; //當(dāng)p->next沒指向空,并且客戶的卡號還沒找到,則繼續(xù)尋找

  if(p->next==NULL)

  printf("對不起,沒有該客戶! ");

  else

  {

  t=p->next; //如果找到,則把p->next的值賦給t

  p->next=p->next->next;

  }

  }

  }

  //后臺運(yùn)行增加用戶信息函數(shù)

  ////////////////////////////////////////////////////////////

  void zengjia(struct person **Phead) //*(*Phead) 為指向結(jié)構(gòu)體指針的地址

  {

  char n[20]; //定義輸入增加客戶卡號的變量

  char a[20]; //定義輸入增加客戶姓名的變量

  int s;

  L *p,*t,*k; //定義操作指針變量

  printf("請輸入要插入的客戶信息 ");

  printf("請輸入卡號 "); //尾插法

  scanf("%s",&n);

  printf("請輸入姓名 ");

  scanf("%s",a);

  printf("請輸入預(yù)存金額 ");

  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)) //如果是空鏈表,則把新客戶信息作為第一個結(jié)點

  {

  *Phead=p; //頭插法

  (*Phead)->next=NULL;

  return ;

  }

  else

  {

  p->next=(*Phead); //頭插法

  (*Phead)=p;

  }

  }


【C語言如何實現(xiàn)ATM機(jī)存取款系統(tǒng)】相關(guān)文章:

如何實現(xiàn)C語言畫圖教程08-08

C語言如何實現(xiàn)畫圖教程08-19

如何優(yōu)化C語言(單片機(jī))06-01

如何使用C語言開發(fā)DSP系統(tǒng)09-13

C語言程序的實現(xiàn)09-27

C語言的HashTable簡單實現(xiàn)10-12

如何提高單片機(jī)C語言代碼效率10-30

C語言實現(xiàn)自定義windows系統(tǒng)日志的方法08-01

PID算法的C語言實現(xiàn)07-19

鏈表的C語言實現(xiàn)方法08-27