【Kafka】 Kafka安裝
阿新 • • 發佈:2020-11-18
部落格班級 | 班級連結 |
---|---|
作業要求 | 作業連線 |
作業的目標 | 瞭解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 |
心得體會
經過本次的學習,我瞭解到做程式的艱難,還有很多要提高的地方,加油。