欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年11月23日 08:38:14   作者:一只若無其事的貓  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)ATM機存取款系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)ATM機存取款系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

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

主要功能有:

利用三種方法查詢、開戶、登陸、菜單、取款、修改密碼、存款、轉(zhuǎn)賬、創(chuàng)建個人信息、輸出、刪除、增加、退出。

是一個功能齊全,完備的ATM機系統(tǒng)。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
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("*****************************\n");
 printf("**歡迎使用ATM自動取款機系統(tǒng)**\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);   //調(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=getchar();
  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.\n");
     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("請輸入您的姓名:\n");  //請數(shù)據(jù)輸入鏈表中
    scanf("%s",p1->name);
    printf("請設(shè)置您的卡號:\n");
    scanf("%s",p1->ID);
    printf("請設(shè)置您銀行卡密碼:\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)           //為新用戶開辟內(nèi)存單元
    {
     head=(struct per *)malloc(sizeof(struct per));
     head->next=p1;    //進行頭插法,將其作為第一個節(jié)點
    }
    else    //為新增客戶開辟內(nèi)存單元
    {
     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);
}
 
 
//登陸函數(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)   //打開一個二進制文件,為讀方式
 {
  printf("不能打開文件\n");   //如不能打開,則結(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("  **********************\n");
 printf("  ***歡迎來都建設(shè)銀行***\n");
 printf("  **********************\n");
 for(j=1;j<4;j++)      //限制卡號輸入的次數(shù)的循環(huán)
 {
  printf("請輸入您的卡號\n");
  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("\n\n請輸入您的密碼\n");
    scanf("%s",mima);
    if(strcmp(q->mima,mima)!=0)      //核對密碼
    {
     printf("密碼不正確。請重新輸入密碼\n");
     system("pause");
     system("cls");
     continue;    //若密碼不對,跳出循環(huán)
    }
    else
    {
     system("cls");
     caidan(head);   //調(diào)用菜單函數(shù)
    }
   }
   printf("\n\n\n您輸入密碼三次錯誤,謝謝光臨\n");
   system("pause");
   system("cls");
   exit(0);
  }
 }
  
 
 printf("\n\n\n您輸入的卡號有誤,請重試\n");
 system("pause");
 system("cls");
}
printf("您的卡號三次輸入錯誤,謝謝使用\n");
exit(0);
}
 
 
 
//銀行菜單函數(shù)
/
void caidan(struct per *head)
{
 head=NULL;
 int i;      //i為客戶選擇輸入的變量
 while(1)
 {
  printf("請選擇您需要的業(yè)務(wù)\n");      //銀行業(yè)務(wù)菜單
  printf("*********************************\n");
  printf("**  1 取款   *****   2 查詢    **\n");
  printf("*********************************\n");
  printf("**  3 轉(zhuǎn)賬   *****   4 修改密碼**\n");
  printf("*********************************\n");
  printf("**  5 存款   *****   6 退出    **\n");
  printf("*********************************\n");
  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("您的輸入有誤\n");
   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) //打開一個二進制文件,為讀方式
 {
  printf("不能打開文件\n");  //如不能打開,則結(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("************************************\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;  //對應(yīng)選項乘以一百為取款金額
  if(i>q->money)
  {
   printf("對不起,您的金額不足\n");
   system("pause");
   system("cls");
   caidan(head);   //調(diào)用取款機菜單函數(shù)
  }
  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("您已經(jīng)成功取走%d元\n");
   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)  //打開一個二進制文件,為讀方式
 {
  printf("不能打開文件\n");  //如不能打開,則結(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("請輸入帳號號碼\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("請輸入轉(zhuǎn)賬金額\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("您已成功轉(zhuǎn)賬%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)  //將數(shù)據(jù)重新寫入文件
    printf("file write error\n");
   q->next=NULL;
   fclose(fp);
   system("pause");
   system("cls");
  }
 }
 }
}
 
 
 
//銀行查詢函數(shù)
/
void chaxun(struct per *head)
{
 head=NULL;  //鏈表頭指針
 FILE *fp;  //定義文件指針
 struct per *p,*q=NULL;
 if((fp=fopen("save.txt","rb+"))==NULL)  //打開一個二進制文件,為讀方式
 {
  printf("不能打開文件\n");  //如不能打開,則結(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元\n\n",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)  //打開一個二進制文件,為讀方式
 {
  printf("不能打開文件\n");  //如不能打開,則結(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("請輸入您的原密碼\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;
}
 
 
//銀行存款函數(shù)
 
 
 
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");  //如不能打開,則結(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元\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("您已經(jīng)成功存取%d元\n",i);
   q->next=NULL;
   fclose(fp);
   system("pause");
   system("cls");
 }
}
 
 
 
//退出銀行函數(shù)
///
void tuichu()
{
 printf("謝謝使用\n");
 exit(0);
}
 
//后臺運行菜單函數(shù)
///
void menu()
{
 printf("****************歡迎來到建設(shè)銀行取款機系統(tǒng)****************\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("請選擇您需要的業(yè)務(wù)\n\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é)束請輸入三個為零)\n");
 printf("請輸入卡號\n");
 scanf("%s",n);
 printf("請輸入姓名\n");
 scanf("%s",a);
 printf("請輸入預(yù)存金額\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("請輸入預(yù)存金額\n");
 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("請輸入卡號\n");  //尾插法
      scanf("%s",n);
     printf("請輸入姓名\n");
     scanf("%s",a);
     printf("請輸入預(yù)存金額\n");
     scanf("%d",&s);
 }
}
 
 
 
//后臺運行輸出鏈表函數(shù)
/
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");
}
 
 
 //后臺運行卡號查詢函數(shù)
 ///
 
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);
 
}    //若找到,則輸出客戶信息
 
 
 
//后臺運行姓名查詢函數(shù)
/
 
 
 
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);
 
}    //若找到,則輸出客戶信息
 
 
//后臺運行余額查詢函數(shù)
/
 
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)  //在鏈表中遍歷尋找中,直到鏈表存在并且余額核對無誤,繼續(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);
 
}    //若找到,則輸出客戶信息
 
 
//后臺運行刪除客戶信息函數(shù)
///
void shanchu(struct person **Phead)   //*(*Phead)為指向結(jié)構(gòu)體指針的地址
{
 char k[20];    //定義輸入查找客戶姓名卡號的變量
 struct person *p=*Phead,*t;
 if(NULL==(*Phead))     //若指針最后指向空,則沒有客戶信息
 {
  printf("沒有客戶信息可刪除!\n");
  return;
 }
 printf("請輸入要刪除的客戶卡號:\n");
 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("對不起,沒有該客戶!\n");
  else
  {
   t=p->next;  //如果找到,則把p->next的值賦給t
   p->next=p->next->next;
  }
 }
}
 
//后臺運行增加用戶信息函數(shù)
 
void zengjia(struct person **Phead)  //*(*Phead) 為指向結(jié)構(gòu)體指針的地址
{
 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("請輸入預(yù)存金額\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))   //如果是空鏈表,則把新客戶信息作為第一個結(jié)點
  {
   *Phead=p;   //頭插法
   (*Phead)->next=NULL;
   return ;
  }
  else
  {
   p->next=(*Phead);   //頭插法
   (*Phead)=p;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家

相關(guān)文章

  • C++11的新特性簡單匯總介紹 (一)

    C++11的新特性簡單匯總介紹 (一)

    本文將對C++11的以上新特性進行簡單的講解,以便大家能夠快速了解到C++11對C++的易用性方面祈禱的巨大作用。
    2016-07-07
  • C++list的模擬實現(xiàn)

    C++list的模擬實現(xiàn)

    list是數(shù)據(jù)結(jié)構(gòu)中的鏈表,在C++的STL中,有l(wèi)ist的模板,STL中的list的結(jié)構(gòu)是帶頭雙向循環(huán)鏈表,當(dāng)然STL中還有一個forward_list的鏈表,這個鏈表是一個帶頭的單鏈表。為了更好的理解list,我們來對其進行模擬實現(xiàn)。,需要的朋友可以參考
    2023-04-04
  • C++示例詳解Prim算法與優(yōu)先隊列

    C++示例詳解Prim算法與優(yōu)先隊列

    這篇文章介紹了C++ Prim算法、優(yōu)先隊列,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C語言使用rand函數(shù)生成隨機數(shù)

    C語言使用rand函數(shù)生成隨機數(shù)

    這篇文章介紹了C語言使用rand函數(shù)生成隨機數(shù)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C++ 構(gòu)造函數(shù)中使用new時注意事項

    C++ 構(gòu)造函數(shù)中使用new時注意事項

    本文主要介紹了C++ 構(gòu)造函數(shù)中使用new時注意事項。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 詳細分析Android中實現(xiàn)Zygote的源碼

    詳細分析Android中實現(xiàn)Zygote的源碼

    這篇文章主要介紹了詳細分析Android中實現(xiàn)Zygote的源碼,包括底層的C/C++代碼以及Java代碼部分入口,需要的朋友可以參考下
    2015-07-07
  • C語言二維數(shù)組應(yīng)用之井字棋游戲

    C語言二維數(shù)組應(yīng)用之井字棋游戲

    這篇文章主要為大家詳細介紹了C語言二維數(shù)組應(yīng)用之井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言數(shù)學(xué)公式來實現(xiàn)土味表白

    C語言數(shù)學(xué)公式來實現(xiàn)土味表白

    大家好,本篇文章主要講的是C語言數(shù)學(xué)公式來實現(xiàn)土味表白,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)

    C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++新特性詳細分析基于范圍的for循環(huán)

    C++新特性詳細分析基于范圍的for循環(huán)

    C++11這次的更新帶來了令很多C++程序員期待已久的for?range循環(huán),每次看到j(luò)avascript,?lua里的for?range,心想要是C++能有多好,心里別提多酸了。這次C++11不負眾望,再也不用羨慕別家人的for?range了。下面看下C++11的for循環(huán)的新用法
    2022-04-04

最新評論