JavaSE學習筆記24:多執行緒(二)
阿新 • • 發佈:2020-11-18
部落格班級 | 班級連結 |
---|---|
作業要求 | 作業連結 |
作業目標 | 編寫一個ATM管理系統 |
學號 | 3180701109 |
一、題目要求
編寫一個ATM管理系統,語言不限,要求應包括以下主要功能:
(1)開戶,銷戶
(2)查詢賬戶餘額
(3)存款
(4)取款
(5)轉賬(一個賬戶轉到另一個賬戶)等...
二、程式碼部分
標頭檔案
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
函式宣告
int mingyan(); //使用者名稱驗證 int guayan(int); //掛失驗證 int miyan(int); //密碼函式 float T=0; 定義全域性變數T,記錄使用者一天取款數的總和 void Debit(); //取款函式 void Credit(); //存款函式 void Quary(); //查詢函式 void logout(); //銷戶函式 void Openbit(); //開戶函式 void account(); //轉賬函式 void lose(); //掛失函式 void tuichu(); //退出函式 void chaall(); //查詢所有使用者資訊
定義變數
char gUser[100][30]; //使用者名稱
char gMima[100][30]; //密碼
char Ggua[100][30]; //掛失使用者名稱
float YuE[100]; //存款餘額
int UserShu=0; //使用者數
int guashu=0; //掛失使用者數
主函式
void main() { int order; //命令 while(order) { printf(" ================================================================ \n"); printf("|| 歡迎使用模擬ATM自助存取款 ||\n"); printf("|| ||\n"); printf("|| <1> 開戶 <4> 取款 <8> 掛失 ||\n"); printf("|| <2> 存款 <5> 銷戶 ||\n"); printf("|| <3> 查詢 <6> 轉賬 <0> 退出 ||\n"); printf("|| <7> 查詢所有使用者資訊 ||\n"); printf("|| ||\n"); printf(" ================================================================ \n"); printf("請輸入您的指令: "); scanf("%d",&order); printf("\n"); switch(order) { case 1: //開戶 Openbit(); break; case 2: //存款 Credit(); break; case 3: //查詢 Quary(); break; case 4: //取款 Debit(); break; case 5: //銷戶 logout(); break; case 6: //轉賬 account(); break; case 7: //查詢所有使用者資訊 chaall(); break; case 8: //掛失 lose(); break; case 0: printf("歡迎您再次使用!\n"); exit(0); break; } } }
取款函式
void Debit() //取款 { int i,m; float n; i=mingyan(); m=guayan(i); if(m==1) m=miyan(i); while(m==1) { printf("請輸入您的取款金額: "); scanf("%f",&n); if(n>2000) { printf("每筆取款不得超過2000\n"); Debit(); break; } T=n+T; if(T>20000) { printf("每天取款總數不能超過20000,請您改天再進行取款"); break; } if(n<=YuE[i]) { printf("請取走您的鈔票。\n"); YuE[i]=YuE[i]-n; break; } else printf("您的餘額不足,請重新輸入。\n"); } }
存款函式
void Credit() //存款
{
int i,m;
float n;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
while(m==1)
{
printf("請輸入您的存款金額: ");
scanf("%f",&n);
YuE[i]=YuE[i]+n;
printf("存款成功!");
printf("您的當前餘額為: %.2f\n",YuE[i]);
m=0;
}
m=1;
main();
}
查詢函式
void Quary() //查詢
{
int i,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
}
開戶函式
void Openbit() //開戶
{
int i,n=UserShu,j=0;
float m;
char User[32],mima1[32],mima2[32];
printf("請輸入您的使用者名稱: ");
getchar();
scanf("%s",User);
for(i=0;i<n+1;i++)
{
if(strcmp(User,gUser[i])==0)
{
printf("該使用者名稱已存在\n");
break;
}
else
{
strcpy(gUser[UserShu],User);
while(j!=1)
{
printf("請輸入您的密碼: ");
scanf("%s",mima1);
printf("請再次輸入您的密碼: ");
scanf("%s",mima2);
if(strcmp(mima1,mima2)==0)
{
printf("密碼設定成功\n");
printf("請輸入您的存款金額: ");
scanf("%f",&m);
printf("恭喜您,開戶成功\n");
strcpy(gMima[UserShu],mima1);
YuE[UserShu]=m;
j=1;
}
else
printf("兩次輸入不相同,請重新輸入。\n ");
}
UserShu++;
break;
}
}
}
銷戶函式
void logout() //銷戶
{
int i,n,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
while(m==1)
{
printf("您確定要登出您的賬戶?\n <1>確認 <2>取消 \n");
scanf("%d",&n);
if(n==1)
{
for(;i<UserShu;i++)
{
strcpy(gUser[i],gUser[i+1]);
strcpy(gMima[i],gMima[i+1]);
YuE[i]=YuE[i+1];
}
}
UserShu--;
printf("銷戶成功!\n");
m=0;
}
}
轉賬函式
void account() //轉賬
{
int i,n,j,s=1;
float k;
char User[32];
i=mingyan();
n=guayan(i);
if(n==1)
n=miyan(i);
while(n==1)
{
printf("請輸入目標賬戶:");
scanf("%s",User);
for(j=0;j<UserShu;j++)
{
if(strcmp(gUser[j],User)==0)
{
n=2;
break;
}
}
if(j==UserShu)
printf("目標賬戶不存在,請重新輸入。\n");
}
while(n==2)
{
printf("請輸入轉賬金額:");
scanf("%f",&k);
if(k<=YuE[i])
{
YuE[i]=YuE[i]-k;
YuE[j]=YuE[j]+k;
printf("轉賬成功!\n您的當前餘額為: %.2f\n",YuE[i]);
break;
}
else
printf("餘額不足,請重新輸入。\n");
}
}
掛失函式
void lose() //掛失
{
int n,i,m;
i=mingyan();
m=guayan(i);
if(m==1)
m=miyan(i);
if(m==1)
{
printf("您確定要掛失您的賬戶?\n <1>確認 <2>取消 \n");
scanf("%d",&n);
if(n==1)
{
strcpy(Ggua[guashu],gUser[i]);
guashu++;
printf("%s 賬戶掛失成功!\n",gUser[i]);
}
}
}
剩餘實現功能函式
void tuichu()
{
}
void chaall() //查詢所有使用者資訊
{
int i;
for(i=0;i<UserShu;i++)
printf("使用者名稱:%15s 餘額:%.2f\n",gUser[i],YuE[i]);
}
int mingyan() //使用者名稱驗證
{
int m=1,i;
char User[32];
while(m==1)
{
printf("請輸入您的使用者名稱: ");
scanf("%s",User);
for(i=0;i<UserShu;i++)
if(strcmp(gUser[i],User)==0)
{
m=0;
break;
}
if(i==UserShu)
printf("該使用者不存在,請確認後再輸入。 \n");
}
return i;
}
int guayan(int i) //掛失驗證
{
int j,n;
for(j=0;j<guashu;j++)
{
if(strcmp(gUser[i],Ggua[j])==0)
{
printf("此使用者已經掛失,請解掛後再進行操作!\n");
n=0;
break;
}
}
if(j==guashu)
n=1;
return n;
}
int miyan(int i) //密碼驗證
{
char mima[32];
while(1)
{
printf("請輸入您的密碼: ");
scanf("%s",mima);
if(strcmp(gMima[i],mima)==0)
{
printf("登陸成功!\n");
printf("使用者名稱:%s 餘額: %.2f \n",gUser[i],YuE[i]);
break;
}
else
printf("您輸入的密碼不正確,請重新輸入。\n");
}
return 1;
}
執行截圖
三.個人小結
1)在軟體開發中,掌握時間是一個很重要的技能,請通過psp表格做到:
a.理清開發的完整環節,爭取在每個環節都有實際的工作,一開始邊界不清楚是正常的,但請嘗試按照自己的理解努力對應每個環節的實際工作
b.預估每個環節的時間,並真實統計這些環節的耗時,在完成後填寫完整的psp耗時表
c.這些表格是給自己看的,請不要偽造資料
d.psp表格模板如下,表格裡的時間只是示意
psp | 任務內容 | 計劃需要完成的時間(min | 實際完成需要的時間(min) |
---|---|---|---|
Planning | 計劃 | 120 | 160 |
Estimate | 估計這個任務需要多少時間,並規劃大致工作步驟 | 150 | 210 |
Development | 開發 | 20 | 10 |
Analysis | 需求分析(包括學習新技術) | 20 | 30 |
Design Spec | 生成設計文件 | 40 | 30 |
Design Review | 設計複審 | 5 | 15 |
Coding Standard | 程式碼規範 | 20 | 10 |
Design | 具體設計 | 20 | 10 |
Coding | 具體編碼 | 100 | 120 |
Code Review | 程式碼複審 | 10 | 15 |
Test | 測試(自我測試,修改程式碼,提交修改) | 10 | 20 |
Reporting | 報告 | 10 | 10 |
Test Report | 測試報告 | 5 | 15 |
Size Measurement | 計算工作量 | 5 | 10 |
Postmortem & Process Improvement Plan | 事後總結,並提出過程改進計劃 | 20 | 20 |