C語(yǔ)言實(shí)現(xiàn)ATM機(jī)存取款系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)ATM機(jī)存取款系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
利用結(jié)構(gòu)體和構(gòu)造函數(shù)并且采用輸入輸出文件實(shí)現(xiàn)ATM機(jī)系統(tǒng)。
主要功能有:
利用三種方法查詢、開(kāi)戶、登陸、菜單、取款、修改密碼、存款、轉(zhuǎn)賬、創(chuàng)建個(gè)人信息、輸出、刪除、增加、退出。
是一個(gè)功能齊全,完備的ATM機(jī)系統(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); //各個(gè)函數(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自動(dòng)取款機(jī)系統(tǒng)**\n");
printf("*****************************\n");
printf("——————————————\n");
printf("| 1 開(kāi)戶 |\n");
printf("——————————————\n");
printf("| 2 登陸 |\n");
printf("——————————————\n");
printf("| 3 前臺(tái)客戶信息查詢中心|\n");
printf("——————————————\n");
printf("| 4 請(qǐng)選擇您的需求 |\n");
printf("——————————————\n");
scanf("%s",&x);
system("cls");
switch(x)
{
case '1':system("cls");
kaihu(head); //調(diào)用開(kāi)戶函數(shù)
break;
case '2':system("cls");
denglu(head); //調(diào)用登陸函數(shù)
break;
case '3':system("cls");
menu(); //調(diào)用后臺(tái)菜單函數(shù)
break;
}
while(flag)
{
system("cls");
menu(); //調(diào)用后臺(tái)菜單函數(shù)
choose=getchar();
switch(choose)
{
case '1':chuangjian(&Phead);
shuchu(Phead); //調(diào)用后臺(tái)輸出函數(shù)
system("pause");
system("cls");
break;
case '2':chaxun1(Phead); //調(diào)用后臺(tái)卡號(hào)查詢函數(shù)
system("pause");
system("cls");
break;
case '3':chaxun2(Phead); //調(diào)用后臺(tái)姓名查詢函數(shù)
system("pause");
system("cls");
break;
case '4':
chaxun3(Phead); //調(diào)用后臺(tái)余額查詢函數(shù)
system("pause");
system("cls");
break;
case '5':shanchu(&Phead); //調(diào)用后臺(tái)刪除用戶函數(shù)
system("pause");
system("cls");
break;
case '6':
zengjia(&Phead); //調(diào)用后臺(tái)增加用戶函數(shù)
system("pause");
system("cls");
break;
case '7':shuchu(Phead); //調(diào)用后臺(tái)輸出函數(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;
}
}
}
/*開(kāi)戶函數(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)); //開(kāi)辟內(nèi)存單元
printf("請(qǐng)輸入您的姓名:\n"); //請(qǐng)數(shù)據(jù)輸入鏈表中
scanf("%s",p1->name);
printf("請(qǐng)?jiān)O(shè)置您的卡號(hào):\n");
scanf("%s",p1->ID);
printf("請(qǐng)?jiān)O(shè)置您銀行卡密碼:\n");
scanf("%s",p1->mima);
p1->money=0;
p1->next=NULL;
printf("您的個(gè)人信息為");
printf("姓名:%s \n卡號(hào):%s \n余額:%4d\n",p1->name,p1->ID,p1->money);
if(NULL==head) //為新用戶開(kāi)辟內(nèi)存單元
{
head=(struct per *)malloc(sizeof(struct per));
head->next=p1; //進(jìn)行頭插法,將其作為第一個(gè)節(jié)點(diǎn)
}
else //為新增客戶開(kāi)辟內(nèi)存單元
{
for(p2=head;p2->next!=NULL;p2=p2->next); //進(jìn)行尾插
p2->next=p1;
}
if((fp=fopen("save.txt","ab+"))==NULL) //打開(kāi)文件
{
printf("cannot poen file\n");
return;
}
if(fwrite(p1,sizeof(struct per),1,fp)!=1) //將鏈表信息寫(xiě)入文件中
printf("file write error\n");
fclose(fp);
printf("\n");
printf("恭喜您開(kāi)戶成功,請(qǐng)登錄\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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前節(jié)點(diǎn)的指針,作為下一結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
fclose(fp);
printf(" **********************\n");
printf(" ***歡迎來(lái)都建設(shè)銀行***\n");
printf(" **********************\n");
for(j=1;j<4;j++) //限制卡號(hào)輸入的次數(shù)的循環(huán)
{
printf("請(qǐng)輸入您的卡號(hào)\n");
scanf("%s",d);
for(q=head;q!=NULL;q=q->next) //遍歷鏈表
{
if(strcmp(q->ID,d)!=0) //核對(duì)賬號(hào)
{
continue; //跳出循環(huán)
}
else
{
for(i=1;i<4;i++) //限制密碼輸入的次數(shù)的循環(huán)
{
printf("\n\n請(qǐng)輸入您的密碼\n");
scanf("%s",mima);
if(strcmp(q->mima,mima)!=0) //核對(duì)密碼
{
printf("密碼不正確。請(qǐng)重新輸入密碼\n");
system("pause");
system("cls");
continue; //若密碼不對(duì),跳出循環(huán)
}
else
{
system("cls");
caidan(head); //調(diào)用菜單函數(shù)
}
}
printf("\n\n\n您輸入密碼三次錯(cuò)誤,謝謝光臨\n");
system("pause");
system("cls");
exit(0);
}
}
printf("\n\n\n您輸入的卡號(hào)有誤,請(qǐng)重試\n");
system("pause");
system("cls");
}
printf("您的卡號(hào)三次輸入錯(cuò)誤,謝謝使用\n");
exit(0);
}
//銀行菜單函數(shù)
/
void caidan(struct per *head)
{
head=NULL;
int i; //i為客戶選擇輸入的變量
while(1)
{
printf("請(qǐng)選擇您需要的業(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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)有讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
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("請(qǐng)按要求選擇您要取款的金額\n");
scanf("%d",&i);
if(i>6||i<=0) //限制輸入范圍
{
printf("對(duì)不起,您的輸入有誤\n\n");
return;
}
else
{
i=100*i; //對(duì)應(yīng)選項(xiàng)乘以一百為取款金額
if(i>q->money)
{
printf("對(duì)不起,您的金額不足\n");
system("pause");
system("cls");
caidan(head); //調(diào)用取款機(jī)菜單函數(shù)
}
else
{
q->money-=i; //對(duì)金額進(jìn)行處理
if((fp=fopen("save.txt","wb+"))==NULL) //打開(kāi)文件
{
printf("cannot open file\n");
return;
}
if(fwrite(q,sizeof(struct per),1,fp)!=1) //將修改的信息重新寫(xiě)入文件
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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
fclose(fp);
int i,j,k;
printf("請(qǐng)輸入帳號(hào)號(hào)碼\n");
scanf("%d",&i);
printf("請(qǐng)?jiān)俅屋斎霂ぬ?hào)號(hào)碼\n"); //核對(duì)卡號(hào)
scanf("%d",&j);
if(i!=j)
{
printf("兩次賬號(hào)不同,請(qǐng)重新輸入\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("請(qǐng)輸入轉(zhuǎn)賬金額\n");
scanf("%d",&k);
if(k>6||k<=0)
{
printf("對(duì)不起,您的輸入有誤\n\n");
return;
}
else
{
k=k*100;
if(k>q->money) //對(duì)余額進(jìn)行判斷
{
printf("對(duì)不起,您的余額不足\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ù)重新寫(xiě)入文件
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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
fclose(fp);
printf("請(qǐng)輸入您的原密碼\n");
scanf("%s",mima);
if(strcmp(q->mima,mima)==0) //核對(duì)密碼
{
{
printf("密碼正確\n");
printf("請(qǐng)輸入您的新密碼:\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) //將修改的密碼重新寫(xiě)入文件
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) //打開(kāi)一個(gè)二進(jìn)制文件,為讀方式
{
printf("不能打開(kāi)文件\n"); //如不能打開(kāi),則結(jié)束程序
}
p=(struct per*)malloc(sizeof(struct per)); //申請(qǐng)空間
head=p;
while(!feof(fp)) //循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束
{
if(1!=fread(p,sizeof(struct per),1,fp))
break; //如果沒(méi)讀到數(shù)據(jù),跳出循環(huán)
p->next=(struct per *)malloc(sizeof(struct per)); //為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間
q=p; //保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)
p=p->next; //指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾
}
q->next=NULL; //最后一個(gè)結(jié)點(diǎn)的后繼指針為空
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("請(qǐng)選擇您要存入的余額\n");
scanf("%d",&i);
if(i>6||i<=0)
{
printf("對(duì)不起,您的輸入有誤\n\n");
return;
}
else
{
i=100*i;
q->money+=i;
if((fp=fopen("save.txt","wb+"))==NULL) //打開(kāi)文件
{
printf("cannot open file\n");
}
if(fwrite(q,sizeof(struct per),1,fp)!=1) //將修改的密碼重新寫(xiě)入文件
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);
}
//后臺(tái)運(yùn)行菜單函數(shù)
///
void menu()
{
printf("****************歡迎來(lái)到建設(shè)銀行取款機(jī)系統(tǒng)****************\n\n\n\n");
printf("**************************************************\n");
printf("**** 1 建立信息并顯示 ****** 2 卡號(hào)查詢信息 ****\n");
printf("**************************************************\n");
printf("**** 3 姓名查詢信息 ****** 4 余額查詢信息 ****\n");
printf("**************************************************\n");
printf("**** 5 刪除某卡號(hào)信息 ****** 6 增加新的用戶 ****\n");
printf("**************************************************\n");
printf("**** 7 按余額降序輸出 ****** 8 輸出 ****\n");
printf("**************************************************\n");
printf("**** 0 退出 ****** 謝謝光臨 ****\n");
printf("**************************************************\n");
printf("請(qǐng)選擇您需要的業(yè)務(wù)\n\n");
}
//后臺(tái)運(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("請(qǐng)輸入卡號(hào) 姓名 余額 (若要結(jié)束請(qǐng)輸入三個(gè)為零)\n");
printf("請(qǐng)輸入卡號(hào)\n");
scanf("%s",n);
printf("請(qǐng)輸入姓名\n");
scanf("%s",a);
printf("請(qǐng)輸入預(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("請(qǐng)輸入卡號(hào)\n");
scanf("%s",n);
printf("請(qǐng)輸入姓名\n");
scanf("%s",a);
printf("請(qǐng)輸入預(yù)存金額\n");
scanf("%d",&s);
while(s)
{
t=p; //將p的值賦給t,p又可以儲(chǔ)存下一個(gè)結(jié)點(diǎn)
p=(L *)malloc(sizeof(L)); //為新結(jié)點(diǎn)開(kāi)辟新的內(nèi)存
strcpy(p->kehu.ID,n);
strcpy(p->kehu.name,a);
p->kehu.money=s;
p->next=NULL;
t->next=p; //將p的值接在t(即上一個(gè)結(jié)點(diǎn)的后面)
printf("請(qǐng)輸入卡號(hào)\n"); //尾插法
scanf("%s",n);
printf("請(qǐng)輸入姓名\n");
scanf("%s",a);
printf("請(qǐng)輸入預(yù)存金額\n");
scanf("%d",&s);
}
}
//后臺(tái)運(yùn)行輸出鏈表函數(shù)
/
void shuchu(struct person *Phead)
{
printf("\n\n");
if(NULL==Phead)
{
printf("沒(méi)有客戶信息可輸出!\n"); //若頭指針指向空,則沒(méi)有客戶信息
return;
}
while(Phead) //遍歷輸出鏈表中所有客戶信息
{
printf("卡號(hào):%s\n姓名:\n余額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
Phead=Phead->next;
}
printf("\n\n");
}
//后臺(tái)運(yùn)行卡號(hào)查詢函數(shù)
///
void chaxun1(struct person*Phead)
{
char m[20]; //定義輸入查找客戶卡號(hào)的變量
if(NULL==Phead) //若頭指針向空,則沒(méi)有客戶信息
{
printf("沒(méi)有客戶信息可查詢!\n");
return;
}
printf("請(qǐng)輸入要查詢的客戶卡號(hào):\n");
scanf("%s",m);
while(NULL!=Phead&&strcmp(Phead->kehu.ID,m)!=0) //在鏈表中遍歷尋找中,直到鏈表存在并且卡號(hào)核對(duì)無(wú)誤
Phead=Phead->next;
if(Phead==NULL) //若指針指最后指向空,則沒(méi)有客戶信息
printf("對(duì)不起,沒(méi)有該用戶!\n");
else
printf("卡號(hào):%s\n姓名:\n余額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
} //若找到,則輸出客戶信息
//后臺(tái)運(yùn)行姓名查詢函數(shù)
/
void chaxun2(struct person *Phead)
{
char m[20]; //定義輸入查找客戶卡號(hào)的變量
if(NULL==Phead) //若頭指針向空,則沒(méi)有客戶信息
{
printf("沒(méi)有客戶信息可查詢!\n");
return;
}
printf("請(qǐng)輸入要查詢的客戶姓名:\n");
scanf("%s",m);
while(NULL!=Phead&&strcmp(Phead->kehu.name,m)!=0) //在鏈表中遍歷尋找中,直到鏈表存在并且姓名核對(duì)無(wú)誤
Phead=Phead->next;
if(Phead==NULL) //若指針指最后指向空,則沒(méi)有客戶信息
printf("對(duì)不起,沒(méi)有該用戶!\n");
else
printf("卡號(hào):%s\n姓名:\n余額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
} //若找到,則輸出客戶信息
//后臺(tái)運(yùn)行余額查詢函數(shù)
/
void chaxun3(struct person *Phead)
{
long x; //定義輸入查找客戶余額的變量
if(NULL==Phead) //若頭指針向空,則沒(méi)有客戶信息
{
printf("沒(méi)有客戶信息可查詢!\n");
return;
}
printf("請(qǐng)輸入要查詢的客戶信息的余額:\n");
scanf("%ld",&x);
while(NULL!=Phead&&Phead->kehu.money!=x) //在鏈表中遍歷尋找中,直到鏈表存在并且余額核對(duì)無(wú)誤,繼續(xù)尋找
Phead=Phead->next;
if(Phead==NULL) //若指針指最后指向空,則沒(méi)有客戶信息
printf("對(duì)不起,沒(méi)有該用戶!\n");
else
printf("該客戶的信息為\n");
printf("卡號(hào):%s\n姓名:\n余額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
} //若找到,則輸出客戶信息
//后臺(tái)運(yùn)行刪除客戶信息函數(shù)
///
void shanchu(struct person **Phead) //*(*Phead)為指向結(jié)構(gòu)體指針的地址
{
char k[20]; //定義輸入查找客戶姓名卡號(hào)的變量
struct person *p=*Phead,*t;
if(NULL==(*Phead)) //若指針最后指向空,則沒(méi)有客戶信息
{
printf("沒(méi)有客戶信息可刪除!\n");
return;
}
printf("請(qǐng)輸入要?jiǎng)h除的客戶卡號(hào):\n");
scanf("%s",k);
if(p->kehu.ID==k) //若第一個(gè)客戶就是,則讓頭指針指向下一個(gè)結(jié)點(diǎn)
*Phead=(*Phead)->next,free(p);
else
{
while(NULL==p->next&&p->next->kehu.ID!=k) //遍歷尋找,核對(duì)客戶卡號(hào)
p=p->next; //當(dāng)p->next沒(méi)指向空,并且客戶的卡號(hào)還沒(méi)找到,則繼續(xù)尋找
if(p->next==NULL)
printf("對(duì)不起,沒(méi)有該客戶!\n");
else
{
t=p->next; //如果找到,則把p->next的值賦給t
p->next=p->next->next;
}
}
}
//后臺(tái)運(yùn)行增加用戶信息函數(shù)
void zengjia(struct person **Phead) //*(*Phead) 為指向結(jié)構(gòu)體指針的地址
{
char n[20]; //定義輸入增加客戶卡號(hào)的變量
char a[20]; //定義輸入增加客戶姓名的變量
int s;
L *p,*t,*k; //定義操作指針變量
printf("請(qǐng)輸入要插入的客戶信息\n");
printf("請(qǐng)輸入卡號(hào)\n"); //尾插法
scanf("%s",&n);
printf("請(qǐng)輸入姓名\n");
scanf("%s",a);
printf("請(qǐng)輸入預(yù)存金額\n");
scanf("%d",&s);
p=(L *)malloc(sizeof(L)); //開(kāi)辟空間
strcpy(p->kehu.ID,a); //將新的客戶信息寫(xiě)入鏈表
p->kehu.money=s;
strcpy(p->kehu.name,n);
if(NULL==(*Phead)) //如果是空鏈表,則把新客戶信息作為第一個(gè)結(jié)點(diǎn)
{
*Phead=p; //頭插法
(*Phead)->next=NULL;
return ;
}
else
{
p->next=(*Phead); //頭插法
(*Phead)=p;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家
相關(guān)文章
C語(yǔ)言使用rand函數(shù)生成隨機(jī)數(shù)
這篇文章介紹了C語(yǔ)言使用rand函數(shù)生成隨機(jī)數(shù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
C++ 構(gòu)造函數(shù)中使用new時(shí)注意事項(xiàng)
本文主要介紹了C++ 構(gòu)造函數(shù)中使用new時(shí)注意事項(xiàng)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
詳細(xì)分析Android中實(shí)現(xiàn)Zygote的源碼
這篇文章主要介紹了詳細(xì)分析Android中實(shí)現(xiàn)Zygote的源碼,包括底層的C/C++代碼以及Java代碼部分入口,需要的朋友可以參考下2015-07-07
C語(yǔ)言二維數(shù)組應(yīng)用之井字棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言二維數(shù)組應(yīng)用之井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語(yǔ)言數(shù)學(xué)公式來(lái)實(shí)現(xiàn)土味表白
大家好,本篇文章主要講的是C語(yǔ)言數(shù)學(xué)公式來(lái)實(shí)現(xiàn)土味表白,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++新特性詳細(xì)分析基于范圍的for循環(huán)
C++11這次的更新帶來(lái)了令很多C++程序員期待已久的for?range循環(huán),每次看到j(luò)avascript,?lua里的for?range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for?range了。下面看下C++11的for循環(huán)的新用法2022-04-04

