1. 程式人生 > 資料庫 >為什麼不建議把資料庫部署在Docker容器內?

為什麼不建議把資料庫部署在Docker容器內?

部落格班級 班級連結
作業要求 作業連結
作業目標 編寫一個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