1. 程式人生 > 實用技巧 >【Kafka】 Kafka安裝

【Kafka】 Kafka安裝

部落格班級 班級連結
作業要求 作業連線
作業的目標 瞭解ATM系統,鍛鍊自己的程式設計能力
學號 3180701105

目錄

一.題目要求

編寫一個ATM管理系統,語言不限,要求應包括以下主要功能:

(1)開戶,銷戶

(2)查詢賬戶餘額

(3)存款

(4)取款

(5)轉賬(一個賬戶轉到另一個賬戶)等...

二.程式碼及執行介面

標頭檔案

1.	#include<stdio.h>
2.	#include<string.h>
3.	#include<stdlib.h>
4.	#include<math.h>

結構體的定義

5.	struct per           //定義結構體
6.	{
7.		char name[20];
8.			char ID[20];
9.			int money;
10.			char mima[6];
11.			struct per * next;
12.	};
13.	typedef struct person    //定義另一結構體
14.	{
15.		struct per kehu;
16.		struct person *next;
17.	}L;

函式宣告

19.	void chaxun(struct per *head);    //各個函式的宣告
20.	void kaihu(struct per *head);
21.	void denglu(struct per *head);
22.	void caidan(struct per *head);
23.	void qukuan(struct per *head);
24.	void xgmm(struct per *head);
25.	void cunkuan(struct per *head);
26.	void zhuanzhang(struct per *head);
27.	void chuangjian(struct person **Phead);
28.	void shuchu(struct person *Phead);
29.	void shanchu(struct person **Phead);
30.	void zengjia(struct person **Phead);
31.	void chaxun1(struct person *Phead);
32.	void chaxun2(struct person *Phead);
33.	void chaxun3(struct person *Phead);
34.	void tuichu();
35.	void menu();

主函式

43.	void main()
44.	{
45.		char x;
46.		char choose; //choose為定義輸入選擇的變數
47.		int flag=1;
48.		struct person *Phead=NULL; //Phead為定義二層頭指標
49.		struct per *head=NULL;    //head為定義一層頭指標
50.		printf("*****************************\n");
51.		printf("**歡迎使用ATM自動取款機系統**\n");
52.		printf("*****************************\n");
53.	    printf("——————————————\n");
54.		printf("|    1  開戶                |\n");
55.	    printf("——————————————\n");
56.		printf("|    2  登陸                |\n");
57.	    printf("——————————————\n");
58.		printf("|    3  前臺客戶資訊查詢中心|\n");
59.	    printf("——————————————\n");
60.		printf("|    4  請選擇您的需求      |\n");
61.	    printf("——————————————\n");
62.		scanf("%s",&x);
63.		system("cls");
64.	 
65.		switch(x)
66.		{
67.		case '1':system("cls");
68.		         kaihu(head);   //呼叫開戶函式
69.				 break;
70.	 
71.		case '2':system("cls");
72.		         denglu(head);   //呼叫登陸函式
73.				 break;
74.	 
75.		case '3':system("cls");
76.		         menu();   //呼叫後臺選單函式
77.				 break;
78.		}
79.		while(flag)
80.		{
81.			system("cls");
82.			menu();       //呼叫後臺選單函式
83.			choose=getchar();
84.			switch(choose)
85.			{
86.			case '1':chuangjian(&Phead);
87.				     shuchu(Phead); //呼叫後臺輸出函式
88.					 system("pause");
89.					 system("cls");
90.					 break;
91.	    	case '2':chaxun1(Phead); //呼叫後臺卡號查詢函式
92.					 system("pause");
93.					 system("cls");
94.					 break;
95.	    	case '3':chaxun2(Phead); //呼叫後臺姓名查詢函式
96.					 system("pause");
97.					 system("cls");
98.					 break;
99.	    	case '4':
100.				     chaxun3(Phead); //呼叫後臺餘額查詢函式
101.					 system("pause");
102.					 system("cls");
103.					 break;
104.	    	case '5':shanchu(&Phead); //呼叫後臺刪除使用者函式
105.					 system("pause");
106.					 system("cls");
107.					 break;
108.		    case '6':
109.				     zengjia(&Phead); //呼叫後臺增加使用者函式
110.					 system("pause");
111.					 system("cls");
112.					 break;
113.		    case '7':shuchu(Phead); //呼叫後臺輸出函式函式
114.					 system("pause");
115.					 system("cls");
116.					 break;
117.		    case '8':shuchu(Phead); 
118.					 system("pause");
119.					 system("cls");
120.					 break;
121.	    	case '0':flag=0;
122.				     printf("The end.\n");
123.					 break;
124.			}
125.		}
126.	}

開戶函式

129.	void kaihu(struct per *head)
130.	{
131.		head=NULL;
132.		FILE *fp;   //定義檔案指標
133.		struct per *p1=NULL,*p2=NULL;   //p1,p2為定義連結串列指標
134.		p1=(struct per*)malloc(sizeof(struct per));  //開闢記憶體單元
135.		      printf("請輸入您的姓名:\n");  //請資料輸入連結串列中
136.			  scanf("%s",p1->name);
137.			  printf("請設定您的卡號:\n");
138.			  scanf("%s",p1->ID);
139.			  printf("請設定您銀行卡密碼:\n");
140.			  scanf("%s",p1->mima);
141.			  p1->money=0;
142.			  p1->next=NULL;
143.			  printf("您的個人資訊為");
144.			     printf("姓名:%s \n卡號:%s \n餘額:%4d\n",p1->name,p1->ID,p1->money);
145.	          if(NULL==head)           //為新使用者開闢記憶體單元
146.			  {
147.				  head=(struct per *)malloc(sizeof(struct per));
148.				  head->next=p1;    //進行頭插法,將其作為第一個節點
149.			  }
150.			  else    //為新增客戶開闢記憶體單元
151.			  {
152.				  for(p2=head;p2->next!=NULL;p2=p2->next); //進行尾插
153.				  p2->next=p1;
154.			  }
155.			  if((fp=fopen("save.txt","ab+"))==NULL) //開啟檔案
156.			  {
157.				  printf("cannot poen file\n");
158.				  return;
159.			  }
160.			  if(fwrite(p1,sizeof(struct per),1,fp)!=1)  //將連結串列資訊寫入檔案中
161.				  printf("file write error\n");
162.			      fclose(fp);
163.				  printf("\n");
164.				  printf("恭喜您開戶成功,請登入\n");
165.				  system("pause");
166.				  system("cls");
167.				  denglu(head);
168.	}

登陸函式

173.	void denglu(struct per *head)
174.	{
175.		char d[20];
176.		char mima[20];
177.		int i,j;
178.		FILE *fp;     //定義檔案指標
179.		struct per *p,*q=NULL;
180.		if((fp=fopen("save.txt","rb+"))==NULL)   //開啟一個二進位制檔案,為讀方式
181.		{
182.			printf("不能開啟檔案\n");   //如不能開啟,則結束程式
183.		}
184.		p=(struct per*)malloc(sizeof(struct per));   //申請空間
185.		head=p;
186.		while(!feof(fp))       //迴圈讀資料直到檔案尾結束
187.	 
188.		{
189.			if(1!=fread(p,sizeof(struct per),1,fp))
190.				break;   //如果沒讀到資料,跳出迴圈
191.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
192.			q=p;  //儲存當前節點的指標,作為下一結點的前驅
193.			p=p->next;  //指標後移,新讀入資料鏈到當前表尾
194.			
195.		}
196.		q->next=NULL;  //最後一個結點的後繼指標為空
197.		fclose(fp);
198.		printf("  **********************\n");
199.		printf("  ***歡迎來都建設銀行***\n");
200.		printf("  **********************\n");
201.		for(j=1;j<4;j++)      //限制卡號輸入的次數的迴圈
202.		{
203.			printf("請輸入您的卡號\n");
204.			scanf("%s",d);
205.			for(q=head;q!=NULL;q=q->next)   //遍歷連結串列
206.			{
207.				if(strcmp(q->ID,d)!=0)  //核對賬號
208.				{
209.				continue;   //跳出迴圈
210.				}
211.						else
212.			{
213.				for(i=1;i<4;i++)   //限制密碼輸入的次數的迴圈
214.				{
215.					printf("\n\n請輸入您的密碼\n");
216.					scanf("%s",mima);
217.					if(strcmp(q->mima,mima)!=0)      //核對密碼
218.					{
219.						printf("密碼不正確。請重新輸入密碼\n");
220.						system("pause");
221.						system("cls");
222.						continue;    //若密碼不對,跳出迴圈
223.					}
224.					else
225.					{
226.						system("cls");
227.						caidan(head);   //呼叫選單函式
228.					}
229.				}
230.				printf("\n\n\n您輸入密碼三次錯誤,謝謝光臨\n");
231.				system("pause");
232.				system("cls");
233.				exit(0);
234.			}
235.		}
236.			
237.		
238.		printf("\n\n\n您輸入的卡號有誤,請重試\n");
239.		system("pause");
240.		system("cls");
241.	}
242.	printf("您的卡號三次輸入錯誤,謝謝使用\n");
243.	exit(0);
244.	}

銀行選單函式

250.	void caidan(struct per *head)
251.	{
252.		head=NULL;
253.		int i;      //i為客戶選擇輸入的變數
254.		while(1)
255.		{
256.			printf("請選擇您需要的業務\n");      //銀行業務選單
257.			printf("*********************************\n");
258.			printf("**  1 取款   *****   2 查詢    **\n");
259.			printf("*********************************\n");
260.			printf("**  3 轉賬   *****   4 修改密碼**\n");
261.			printf("*********************************\n");
262.			printf("**  5 存款   *****   6 退出    **\n");
263.			printf("*********************************\n");
264.			scanf("%d",&i);
265.			if(i<6||i>0)
266.			{
267.				switch(i)
268.				{
269.				case 1:qukuan(head);       //呼叫銀行取款函式
270.				       system("pause");
271.					   system("cls");
272.					   break;
273.				case 2:system("cls");
274.					   chaxun(head);  //呼叫銀行查詢函式
275.					   break;
276.	            case 3:system("cls");
277.					   zhuanzhang(head);  //呼叫銀行轉賬函式
278.					   break;
279.	            case 4:system("cls");
280.					   xgmm(head);  //呼叫銀行修改密碼函式
281.					   break;
282.	            case 5:system("cls");
283.					   cunkuan(head);  //呼叫銀行存款函式
284.					   break;
285.	            case 6:system("cls");
286.					   tuichu();  //呼叫銀行退出函式
287.					   break;
288.				}
289.			}
290.			else
291.			{
292.				printf("您的輸入有誤\n");
293.				system("pause");
294.				system("cls");
295.			}
296.		}
297.	}

銀行取款函式

void qukuan(struct per *head)
303.	{
304.		head=NULL;   //head為連結串列頭指標
305.		int i;
306.		FILE *fp;          //定義檔案指標
307.		struct per *p,*q=NULL;
308.		if((fp=fopen("save.txt","rb+"))==NULL) //開啟一個二進位制檔案,為讀方式
309.		{
310.			printf("不能開啟檔案\n");  //如不能開啟,則結束程式
311.		}
312.		p=(struct per*)malloc(sizeof(struct per));  //申請空間
313.		head=p;
314.		while(!feof(fp))   //迴圈讀資料直到檔案尾結束
315.		{
316.			if(1!=fread(p,sizeof(struct per),1,fp))
317.				break;   //如果沒有讀到資料,跳出迴圈
318.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
319.			q=p;   //儲存當前結點的指標,作為下一個結點的前驅
320.			p=p->next;  //指標後移,新讀入資料鏈到當前表尾
321.		}
322.		q->next=NULL;  //最後一個結點的後繼指標為空
323.		fclose(fp);
324.		system("cls");
325.		printf("************************************\n");
326.	    printf("**  1: 100元    *****    2:200元  **\n");
327.		printf("************************************\n");
328.	    printf("**  3: 300元    *****    4:400元  **\n");
329.		printf("************************************\n");
330.	    printf("**  5: 500元    *****    6:600元  **\n");
331.		printf("************************************\n");
332.	    printf("請按要求選擇您要取款的金額\n");
333.		scanf("%d",&i);
334.		if(i>6||i<=0)    //限制輸入範圍
335.		{
336.			printf("對不起,您的輸入有誤\n\n");
337.			return;
338.		}
339.		else
340.		{
341.			i=100*i;  //對應選項乘以一百為取款金額
342.			if(i>q->money)
343.			{
344.				printf("對不起,您的金額不足\n");
345.				system("pause");
346.				system("cls");
347.				caidan(head);   //呼叫取款機選單函式
348.			}
349.			else
350.			{
351.				q->money-=i;  //對金額進行處理
352.				if((fp=fopen("save.txt","wb+"))==NULL)  //開啟檔案
353.				{
354.					printf("cannot open file\n");
355.					return;
356.				}
357.				if(fwrite(q,sizeof(struct per),1,fp)!=1) //將修改的資訊重新寫入檔案
358.					printf("file write error\n");
359.				printf("您已經成功取走%d元\n");
360.				q->next=NULL;
361.				fclose(fp);    //關閉檔案
362.			}
363.			
364.		}
365.	}

銀行轉賬函式

370.	void zhuanzhang(struct per *head)
371.	{
372.		head=NULL;
373.		FILE *fp;  //定義檔案指標
374.		struct per *p,*q=NULL;
375.		if((fp=fopen("save.txt","rb+"))==NULL)  //開啟一個二進位制檔案,為讀方式
376.		{
377.			printf("不能開啟檔案\n");  //如不能開啟,則結束程式
378.		}
379.		p=(struct per*)malloc(sizeof(struct per));   //申請空間
380.		head=p;
381.		while(!feof(fp))    //迴圈讀資料直到檔案尾結束
382.		{
383.			if(1!=fread(p,sizeof(struct per),1,fp))
384.				break;    //如果沒讀到資料,跳出迴圈
385.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
386.			q=p;   //儲存當前結點的指標,作為下一個結點的前驅
387.			p=p->next;   //指標後移,新讀入資料鏈到當前表尾
388.		}
389.		q->next=NULL;   //最後一個結點的後繼指標為空
390.		fclose(fp);
391.		int i,j,k;
392.		printf("請輸入帳號號碼\n");
393.		scanf("%d",&i);
394.		printf("請再次輸入帳號號碼\n");   //核對卡號
395.		scanf("%d",&j);
396.		if(i!=j)
397.		{
398.			printf("兩次賬號不同,請重新輸入\n");
399.			zhuanzhang(head);
400.		}
401.		else
402.		{
403.			system("cls");
404.		printf("************************************\n");
405.	    printf("**  1: 100元    *****    2:200元  **\n");
406.		printf("************************************\n");
407.	    printf("**  3: 300元    *****    4:400元  **\n");
408.		printf("************************************\n");
409.	    printf("**  5: 500元    *****    6:600元  **\n");
410.		printf("************************************\n");
411.	    printf("請輸入轉賬金額\n");
412.		scanf("%d",&k);
413.		if(k>6||k<=0)
414.		{
415.			printf("對不起,您的輸入有誤\n\n");
416.			return;
417.		}
418.		else
419.		{
420.			k=k*100;
421.			if(k>q->money)    //對餘額進行判斷
422.			{
423.				printf("對不起,您的餘額不足\n");
424.				system("pause");
425.				system("cls");
426.				caidan(head);
427.			}
428.			else
429.			{
430.				printf("您已成功轉賬%d元\n",k);
431.				q->money-=k;
432.				if((fp=fopen("save.txt","wb+"))==NULL)
433.				{
434.					printf("cannot open file\n");
435.					return;
436.				}
437.				if(fwrite(q,sizeof(per),1,fp)!=1)  //將資料重新寫入檔案
438.					printf("file write error\n");
439.				q->next=NULL;
440.				fclose(fp);
441.				system("pause");
442.				system("cls");
443.			}
444.		}
445.		}
446.	}

銀行查詢函式

452.	void chaxun(struct per *head)
453.	{
454.		head=NULL;  //連結串列頭指標
455.		FILE *fp;  //定義檔案指標
456.		struct per *p,*q=NULL;
457.		if((fp=fopen("save.txt","rb+"))==NULL)  //開啟一個二進位制檔案,為讀方式
458.		{
459.			printf("不能開啟檔案\n");  //如不能開啟,則結束程式
460.		}
461.		p=(struct per*)malloc(sizeof(struct per));   //申請空間
462.		head=p;
463.		while(!feof(fp))    //迴圈讀資料直到檔案尾結束
464.		{
465.			if(1!=fread(p,sizeof(struct per),1,fp))
466.				break;    //如果沒讀到資料,跳出迴圈
467.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
468.			q=p;   //儲存當前結點的指標,作為下一個結點的前驅
469.			p=p->next;   //指標後移,新讀入資料鏈到當前表尾
470.		}
471.		q->next=NULL;   //最後一個結點的後繼指標為空
472.		fclose(fp);
473.		printf("您卡上原有餘額%d元\n\n",q->money);
474.		system("pause");
475.		system("cls");
476.	}

銀行修改密碼函式

482.	void xgmm(struct per *head)
483.	{
484.		head=NULL;          //連結串列頭指標
485.		char mima[20];
486.		FILE *fp;  //定義檔案指標
487.		struct per *p,*q=NULL;
488.		if((fp=fopen("save.txt","rb+"))==NULL)  //開啟一個二進位制檔案,為讀方式
489.		{
490.			printf("不能開啟檔案\n");  //如不能開啟,則結束程式
491.		}
492.		p=(struct per*)malloc(sizeof(struct per));   //申請空間
493.		head=p;
494.		while(!feof(fp))    //迴圈讀資料直到檔案尾結束
495.		{
496.			if(1!=fread(p,sizeof(struct per),1,fp))
497.				break;    //如果沒讀到資料,跳出迴圈
498.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
499.			q=p;   //儲存當前結點的指標,作為下一個結點的前驅
500.			p=p->next;   //指標後移,新讀入資料鏈到當前表尾
501.		}
502.		q->next=NULL;   //最後一個結點的後繼指標為空
503.		fclose(fp);
504.		printf("請輸入您的原密碼\n");
505.		scanf("%s",mima);
506.		if(strcmp(q->mima,mima)==0)   //核對密碼
507.		{
508.			{
509.				printf("密碼正確\n");
510.				printf("請輸入您的新密碼:\n");
511.				scanf("%s",q->mima);
512.				if((fp=fopen("save.txt","wb+"))==NULL)  //檔案頭指標
513.				{
514.					printf("cannot open file\n");
515.				}
516.				if(fwrite(q,sizeof(struct per),1,fp)!=1)    //將修改的密碼重新寫入檔案
517.					printf("file write error\n");
518.				fclose(fp);
519.				printf("修改密碼成功\n\n\n\n\n");
520.			}
521.		}
522.		else
523.		{
524.			printf("您輸入的密碼與原密碼不同\n");
525.			return;
526.			system("pause");
527.		}
528.		q->next=NULL;
529.	}

銀行存款函式

536.	void cunkuan(struct per *head)
537.	{
538.		int i;
539.		head=NULL;   //連結串列頭指標
540.		FILE *fp;  //定義檔案指標
541.		struct per *p,*q=NULL;
542.		if((fp=fopen("save.txt","rb+"))==NULL)  //開啟一個二進位制檔案,為讀方式
543.		{
544.			printf("不能開啟檔案\n");  //如不能開啟,則結束程式
545.		}
546.		p=(struct per*)malloc(sizeof(struct per));   //申請空間
547.		head=p;
548.		while(!feof(fp))    //迴圈讀資料直到檔案尾結束
549.		{
550.			if(1!=fread(p,sizeof(struct per),1,fp))
551.				break;    //如果沒讀到資料,跳出迴圈
552.			p->next=(struct per *)malloc(sizeof(struct per));  //為下一個結點申請空間
553.			q=p;   //儲存當前結點的指標,作為下一個結點的前驅
554.			p=p->next;   //指標後移,新讀入資料鏈到當前表尾
555.		}
556.		q->next=NULL;   //最後一個結點的後繼指標為空
557.		fclose(fp);
558.		system("cls");
559.		printf("您卡上原有餘額%d元\n",q->money);   
560.		printf("************************************\n");
561.	    printf("**  1: 100元    *****    2:200元  **\n");
562.		printf("************************************\n");
563.	    printf("**  3: 300元    *****    4:400元  **\n");
564.		printf("************************************\n");
565.	    printf("**  5: 500元    *****    6:600元  **\n");
566.		printf("************************************\n");
567.	    printf("請選擇您要存入的餘額\n");
568.		scanf("%d",&i);
569.		if(i>6||i<=0)
570.		{
571.			printf("對不起,您的輸入有誤\n\n");
572.			return;
573.		}
574.		else
575.		{
576.			i=100*i;
577.			q->money+=i;
578.			if((fp=fopen("save.txt","wb+"))==NULL)   //開啟檔案
579.			{
580.				printf("cannot open file\n");
581.			}
582.			if(fwrite(q,sizeof(struct per),1,fp)!=1)  //將修改的密碼重新寫入檔案
583.				printf("file write error\n");
584.		    	printf("您已經成功存取%d元\n",i);
585.				q->next=NULL;
586.				fclose(fp);
587.				system("pause");
588.				system("cls");
589.		}
590.	}

退出銀行函式

596.	void tuichu()
597.	{
598.		printf("謝謝使用\n");
599.		exit(0);
600.	}
601.	 
602.	//後臺執行選單函式
603.	///
604.	void menu()
605.	{
606.		printf("****************歡迎來到建設銀行取款機系統****************\n\n\n\n");
607.		printf("**************************************************\n");
608.		printf("**** 1 建立資訊並顯示  ******  2 卡號查詢資訊 ****\n");
609.		printf("**************************************************\n");
610.		printf("**** 3 姓名查詢資訊    ******  4 餘額查詢資訊 ****\n");
611.		printf("**************************************************\n");
612.		printf("**** 5 刪除某卡號資訊  ******  6 增加新的使用者 ****\n");
613.		printf("**************************************************\n");
614.		printf("**** 7 按餘額降序輸出  ******  8 輸出         ****\n");
615.		printf("**************************************************\n");
616.		printf("**** 0 退出            ******    謝謝光臨     ****\n");
617.		printf("**************************************************\n");
618.		printf("請選擇您需要的業務\n\n");
619.	}
620.	 

後臺執行建立連結串列函式

625.	void chuangjian(struct person **Phead)  //*(*Phead)為指向結構體指標的地址
626.	{
627.		struct person *p,*t;    //定義操作指標
628.		char n[20];
629.		char a[20];
630.		int s;
631.		if(*Phead) *Phead=NULL;
632.		printf("請輸入卡號 姓名 餘額 (若要結束請輸入三個為零)\n");
633.		printf("請輸入卡號\n");
634.		scanf("%s",n);
635.		printf("請輸入姓名\n");
636.		scanf("%s",a);
637.		printf("請輸入預存金額\n");
638.		scanf("%d",&s);
639.		if(s==0) return;
640.		p=(L *)malloc(sizeof(L));     //將資訊輸入連結串列中
641.		strcpy(p->kehu.ID,n);
642.		strcpy(p->kehu.name,a);
643.		*Phead=p;    //將指標重新指向頭指標
644.		printf("請輸入卡號\n");
645.		scanf("%s",n);
646.		printf("請輸入姓名\n");
647.		scanf("%s",a);
648.		printf("請輸入預存金額\n");
649.		scanf("%d",&s);
650.		while(s)
651.		{
652.			t=p;      //將p的值賦給t,p又可以儲存下一個結點
653.			p=(L *)malloc(sizeof(L));   //為新結點開闢新的記憶體
654.	        strcpy(p->kehu.ID,n);
655.		    strcpy(p->kehu.name,a);
656.			p->kehu.money=s;
657.			p->next=NULL;
658.			t->next=p;   //將p的值接在t(即上一個結點的後面)
659.		    printf("請輸入卡號\n");  //尾插法
660.	     	scanf("%s",n);
661.		    printf("請輸入姓名\n");
662.	    	scanf("%s",a);
663.		    printf("請輸入預存金額\n");
664.	    	scanf("%d",&s);
665.		}
666.	}

後臺執行輸出連結串列函式

672.	void shuchu(struct person *Phead)
673.	{
674.		printf("\n\n");
675.		if(NULL==Phead)
676.		{
677.			printf("沒有客戶資訊可輸出!\n");  //若頭指標指向空,則沒有客戶資訊
678.			return;
679.		}
680.		while(Phead)  //遍歷輸出連結串列中所有客戶資訊
681.		{
682.			printf("卡號:%s\n姓名:\n餘額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
683.			Phead=Phead->next;
684.		}
685.		printf("\n\n");
686.	}

後臺執行卡號查詢函式

692.	void chaxun1(struct person*Phead)
693.	{
694.		char m[20];   //定義輸入查詢客戶卡號的變數
695.		if(NULL==Phead)   //若頭指標向空,則沒有客戶資訊
696.		{
697.		printf("沒有客戶資訊可查詢!\n");
698.		return;
699.		}
700.		printf("請輸入要查詢的客戶卡號:\n");  
701.		scanf("%s",m);
702.		while(NULL!=Phead&&strcmp(Phead->kehu.ID,m)!=0)  //在連結串列中遍歷尋找中,直到連結串列存在並且卡號核對無誤
703.			Phead=Phead->next;
704.		if(Phead==NULL)  //若指標指最後指向空,則沒有客戶資訊
705.			printf("對不起,沒有該使用者!\n");
706.		else
707.			printf("卡號:%s\n姓名:\n餘額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
708.	 
709.	}    //若找到,則輸出客戶資訊

後臺執行姓名查詢函式

718.	void chaxun2(struct person *Phead)
719.	{
720.		char m[20];   //定義輸入查詢客戶卡號的變數
721.		if(NULL==Phead)   //若頭指標向空,則沒有客戶資訊
722.		{
723.		printf("沒有客戶資訊可查詢!\n");
724.		return;
725.		}
726.			printf("請輸入要查詢的客戶姓名:\n");  
727.			scanf("%s",m);
728.		while(NULL!=Phead&&strcmp(Phead->kehu.name,m)!=0)  //在連結串列中遍歷尋找中,直到連結串列存在並且姓名核對無誤
729.		Phead=Phead->next;
730.		if(Phead==NULL)  //若指標指最後指向空,則沒有客戶資訊
731.			printf("對不起,沒有該使用者!\n");
732.		else
733.			printf("卡號:%s\n姓名:\n餘額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
734.	 
735.	}    //若找到,則輸出客戶資訊

後臺執行餘額查詢函式

741.	void chaxun3(struct person *Phead)
742.	{
743.		long x;   //定義輸入查詢客戶餘額的變數
744.		if(NULL==Phead)   //若頭指標向空,則沒有客戶資訊
745.		{
746.		printf("沒有客戶資訊可查詢!\n");
747.		return;
748.		}
749.			printf("請輸入要查詢的客戶資訊的餘額:\n");  
750.			scanf("%ld",&x);
751.		while(NULL!=Phead&&Phead->kehu.money!=x)  //在連結串列中遍歷尋找中,直到連結串列存在並且餘額核對無誤,繼續尋找
752.			Phead=Phead->next;
753.		if(Phead==NULL)  //若指標指最後指向空,則沒有客戶資訊
754.			printf("對不起,沒有該使用者!\n");
755.		else
756.			printf("該客戶的資訊為\n");
757.			printf("卡號:%s\n姓名:\n餘額:%d\n",Phead->kehu.ID,Phead->kehu.name,Phead->kehu.money);
758.	 
759.	}    //若找到,則輸出客戶資訊

後臺執行刪除客戶資訊函式

764.	void shanchu(struct person **Phead)   //*(*Phead)為指向結構體指標的地址
765.	{
766.		char k[20];    //定義輸入查詢客戶姓名卡號的變數
767.		struct person *p=*Phead,*t;
768.		if(NULL==(*Phead))     //若指標最後指向空,則沒有客戶資訊
769.		{
770.			printf("沒有客戶資訊可刪除!\n");
771.			return;
772.		}
773.		printf("請輸入要刪除的客戶卡號:\n");
774.		scanf("%s",k);
775.		if(p->kehu.ID==k)  //若第一個客戶就是,則讓頭指標指向下一個結點
776.			*Phead=(*Phead)->next,free(p);
777.		else
778.		{
779.			while(NULL==p->next&&p->next->kehu.ID!=k)   //遍歷尋找,核對客戶卡號
780.				p=p->next;   //當p->next沒指向空,並且客戶的卡號還沒找到,則繼續尋找
781.			if(p->next==NULL)
782.				printf("對不起,沒有該客戶!\n");
783.			else
784.			{
785.				t=p->next;  //如果找到,則把p->next的值賦給t
786.				p->next=p->next->next;
787.			}
788.		}
789.	}

後臺執行增加使用者資訊函式

793.	void zengjia(struct person **Phead)  //*(*Phead) 為指向結構體指標的地址
794.	{
795.		char n[20];   //定義輸入增加客戶卡號的變數
796.		char a[20];   //定義輸入增加客戶姓名的變數
797.		int s;
798.		L *p,*t,*k;   //定義操作指標變數
799.		printf("請輸入要插入的客戶資訊\n");
800.	        printf("請輸入卡號\n");  //尾插法
801.	     	scanf("%s",&n);
802.		    printf("請輸入姓名\n");
803.	    	scanf("%s",a);
804.		    printf("請輸入預存金額\n");
805.	    	scanf("%d",&s);
806.			p=(L *)malloc(sizeof(L));    //開闢空間
807.			strcpy(p->kehu.ID,a);   //將新的客戶資訊寫入連結串列
808.			p->kehu.money=s;
809.			strcpy(p->kehu.name,n);
810.			if(NULL==(*Phead))   //如果是空連結串列,則把新客戶資訊作為第一個結點
811.			{
812.				*Phead=p;   //頭插法
813.				(*Phead)->next=NULL;
814.				return ;
815.			}
816.			else
817.			{
818.				p->next=(*Phead);   //頭插法
819.				(*Phead)=p;
820.			}
821.	}

選單

開戶

查詢

存款

取款

轉賬

三.個人小結

psp表格

psp2.1 任務內容 計劃需要完成的時間(min 實際完成需要的時間(min)
Planning 計劃 70 80
Estimate 估計這個任務需要多少時間,並規劃大致工作步驟 30 80
Development 開發 20 15
Analysis 需求分析(包括學習新技術) 30 30
Design Spec 生成設計文件 40 30
Design Review 設計複審 30 30
Coding Standard 程式碼規範 20 15
Design 具體設計 20 10
Coding 具體編碼 100 120
Code Review 程式碼複審 10 20
Test 測試(自我測試,修改程式碼,提交修改) 10 15
Reporting 報告 20 20
Test Report 測試報告 20 15
Size Measurement 計算工作量 20 10
Postmortem & Process Improvement Plan 事後總結,並提出過程改進計劃 20 20

心得體會

經過本次的學習,我瞭解到做程式的艱難,還有很多要提高的地方,加油。