/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 7 月 17 日
* 版 本 号:v1.0
*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 7 月 17 日
* 版 本 号:v1.0
*
* 问题描述:编写一个银行系统来模拟完成银行的各种业务
* 输入描述:见运行图
* 程序输出:见运行图
*/
利用多文件组织,将程序放在5个文件中。
head.h
/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录2:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <ctype.h>
#include "head.h"
using namespace std;
const int upnum=2000;//系统最多容纳的用户数
class Bank;
class User
{
public:
void setUser(int acc,string na,int pw,double mon,double bal,char id[],int sta);
void showName();
void showBalance(string prompt);//显示账户余额
bool psaaWordISRight();//判断密码是否正确
bool ISNormalUser();//存款,取款,转账,贷款等功能需要账户处于正常状态,判断账户是否处于正常状态
friend class Bank;//将Bank设为User的友元类
private:
int account;//账号
int password;//密码
string name;//名字
double balance;//余额
double money;//未加利率的金额
char identificant[18];//身份证号
int status;//账户状态:0—正常,1—挂失,2—销户
};
class Bank
{
public:
Bank();//从文件中读取数据
~Bank();//程序结束时将数据存入文件中
void work();//业务驱动
void openAccount();//开户
void cancelAccount();//销户
void save();//存款
void withdraw();//取款
void showAccount();//显示余额
void transferAccount();//转账
void reportLoss();//挂失
void canlelLoss();//解除挂失
void updatePassword();//修改密码
void showRate();//显示利率
void repayLoan();//贷款
int getUser();//输入账号查询用户,返回用户在对象数组的下表
private:
int N;//实际用户数目
double rate;//存款利率
static double rate2;//贷款利率
User *users;//User指针
};
int pass();//业务员登录
int chooseInMenu();//显示菜单并由业务员选择
int intputPassword();//返回键盘输入的密码
#endif // HEAD_H_INCLUDED
work.cpp
/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录3:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建贷款
*********************************************/
#include "head.h"
using namespace std;
/********************************************
*功能描述:输入密码
*输入参数:无
*输出参数:密码
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int intputPassword()
{
char ch;
int iPass=0;//转换为数字
int i;
while(1)
{
for(i=0; i<6; ++i)
{
ch=getch();
putchar('*');
if(isdigit(ch))
{
iPass=iPass*10+(ch-'0');
}
else
{
iPass=0;
break;
}
}
fflush(stdin);//清理键盘缓存区已有的输入
cout<<endl;
if(iPass==0)
{
cout<<"密码要求全为数字且不能都是0!"<<endl;
cout<<"请重新输入!";
}
else
break;
}
return iPass;
}
/********************************************
*功能描述:业务选择
*输入参数:无
*输出参数:选项
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int chooseInMenu()
{
int i;
while (1)
{
cout<<endl;
cout<<"+-------------------------+\n";
cout<<"+ 1.开户 2.销户 3.存款 +\n";
cout<<"+ 4.取款 5.查询 6.转账 +\n";
cout<<"+ 7.挂失 8.解挂 9.改密 +\n";
cout<<"+ 10.贷款 0.退出 +\n";
cout<<"+-------------------------+\n";
cout<<"请输入操作指令";
cin>>i;
if(i>=0&&i<=10)
break;
else
cout<<"请重新选择功能!"<<endl;
}
return i;
}
/********************************************
*功能描述:验证密码是否正确
*输入参数:无
*输出参数:正确-1 错误-0
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int pass()
{
char sNameInFile[20];
char sPassInFile[20];
ifstream infile("password.txt",ios::out);
if(!infile)
{
cerr<<"password file cannot open!"<<endl;
exit(1);
}
infile>>sNameInFile>>sPassInFile;
infile.close();
char sName[20];
char sPass[20];
char ch;
int itry=3;
int right=0;
do
{
cout<<"请输入业务员用户名:"<<endl;
cin>>sName;
cout<<"请输入密码"<<endl;
int i=0;
while((ch=getch())!='\r')
{
sPass[i++]=ch;
putchar('*');
}
sPass[i]='\0';
fflush(stdin);
cout<<endl;
if(strcmp(sName,sNameInFile)==0&&strcmp(sPass,sPassInFile)==0)
{
right=1;
break;
}
else
{
itry--;
if(itry>0)
{
cout<<"超过3次将会退出,您还可以尝试"<<itry<<"次!"<<endl;
}
else
{
cout<<"对不起,您不能进入系统!"<<endl;
}
}
}
while(itry);
return right;
}
main.cpp:
/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录1:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#include "head.h"
using namespace std;
int main()
{
cout<<"+-----------------------------------+\n";
cout<<"+ 欢迎使用坑你点没商量银行 +\n";
cout<<"+-----------------------------------+\n";
if(pass())
{
Bank b;
b.work();
}
return 0;
}
user.cpp
/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录4:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#include "head.h"
using namespace std;
/********************************************
*功能描述:建立用户
*输入参数:账号,姓名,密码,余额,身份证号,状态等
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void User::setUser(int acc,string na,int pw,double mon,double bal,char id[],int sta)
{
account=acc;
password=pw;
name=na;
money=mon;
balance=bal;
strcpy(identificant,id);
status=sta;
}
void User::showName()
{
cout<<"户主姓名:"<<name<<endl;
}
void User::showBalance(string prompt)
{
cout<<prompt<<" "<<balance<<"元"<<endl;
}
/********************************************
*功能描述:验证密码是否正确
*输入参数:无
*输出参数:正确-true 错误-false
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
bool User::psaaWordISRight()
{
int iPass;
bool right=true;
cout<<"请输入密码:"<<endl;
iPass=intputPassword();
if(iPass!=password)
{
right=false;
cout<<"密码输入错误,操作失败!"<<endl;
}
return right;
}
/********************************************
*功能描述:验证账户是否处于正常状态
*输入参数:无
*输出参数:是-true 否-false
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
bool User::ISNormalUser()
{
bool normal=true;
if(status!=0)
{
normal=false;
cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能进行操作!"<<endl;
}
return normal;
}
bank.cpp
/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录1:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建身份证号,贷款,利息,记录每笔账单
*********************************************/
#include "head.h"
#include <time.h>
using namespace std;
double Bank::rate2=0.0485;
Bank::Bank()
{
ifstream infile("account.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
int i=0;
int acc;
int pw;
string na;
double bal;
char id[18];
int sta;
double mon;
users=new User[2000];
while (infile>>acc>>na>>pw>>bal>>id>>sta)//文件读取用户
{
users[i].setUser(acc,na,pw,mon,bal,id,sta);
i++;
}
N=i;
infile.close();
}
Bank::~Bank()
{
ofstream outfile("account.txt",ios::out);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
int i;
for(i=0; i<N; i++)//读入到文件中
{
outfile<<users[i].account<<" ";
outfile<<users[i].name<<" ";
outfile<<users[i].password<<" ";
outfile<<users[i].balance<<" ";
outfile<<users[i].identificant<<" ";
outfile<<users[i].status<<" "<<endl;
}
outfile.close();
}
/********************************************
*功能描述:系统工作函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::work()
{
int ichoice;
do
{
ichoice=chooseInMenu();
switch(ichoice)
{
case 1:
openAccount(); //开户
break;
case 2:
cancelAccount(); //销户
break;
case 3:
save(); //存款
break;
case 4:
withdraw(); //取款
break;
case 5:
showAccount(); //查余额
break;
case 6:
transferAccount(); //转账
break;
case 7:
reportLoss(); //挂失
break;
case 8:
canlelLoss(); //解除挂失
break;
case 9:
updatePassword(); //修改密码
break;
case 10:
repayLoan();
break;
case 0:
cout<<"欢迎您再来O(∩_∩)O "<<endl;
}
}
while(ichoice);
}
/********************************************
*功能描述:开户函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::openAccount()
{
if(N==upnum)
{
cout<<"银行用户数目已达上限,不能在开户!"<<endl;
return ;
}
int acc;
int pw;
string na;
double mon;
double bal;
char id[18];
int sta;
int ipw1,ipw2;
double year;
acc=10001+N;
cout<<"正在开户......"<<endl;
acc=10001+N;
cout<<"账号:"<<acc<<endl;
cout<<"请输入户主的名字:";
cin>>na;
while(1)
{
cout<<"请输入身份证号:";
cin>>id;
if(strlen(id)!=18)
{
cout<<"您的身份证号不足18位!"<<endl;
continue;
}
else
break;
}
cout<<"请输入密码:";
ipw1=intputPassword();
cout<<"确认密码:";
ipw2=intputPassword();
if(ipw1==ipw2)
{
pw=ipw1;
sta=0;
cout<<"存入金额:";
cin>>bal;
ofstream outfile("expence_record.txt",ios::app);
if(!outfile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);//读取当前时间
outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
outfile<<acc<<" 存入 "<<acc<<" "<<bal<<" 元"<<endl;//存款记录存入文件
outfile.close();
showRate();
cout<<"请输入要存入的期限(年):";
cin>>year;
double sum;
if(year>=1&&year<=3)
sum=bal+bal*year*0.02;
else if(year==4||year==5)
sum=bal+bal*year*0.032;
else if(year>5)
sum=bal+bal*year*0.0445;
cout<<"期限到时,您将拥有"<<sum<<"元"<<endl;
users[N].setUser(acc,na,pw,mon,sum,id,sta);
N++;
cout<<"成功开启!"<<endl;
}
else
{
cout<<"两次密码不一致,开启账户失败!"<<endl;
}
}
/********************************************
*功能描述:销户函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::cancelAccount()
{
int who;
who=getUser();
if(who>=0)
{
users[who].showName();
if(users[who].psaaWordISRight())
{
users[who].showBalance("余额");
if(users[who].balance<0)
cout<<"您还有贷款没处理,不能销户!"<<endl;
else
{
cout<<"确认销户(y/n)?";
if(tolower(getchar())=='y')
{
users[who].showBalance("销户成功!,本次取款金额为");
users[who].balance=0;
users[who].status=2;
}
else
{
cout<<"您取消了此操作,销户失败"<<endl;
}
}
fflush(stdin);
}
}
}
/********************************************
*功能描述:存款函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::save()
{
int who;
double year,money;
who=getUser();
if(who>=0)
{
if(users[who].status==0)
{
users[who].showName();
cout<<"请输入存入的金额:";
cin>>money;
ofstream outfile("expence_record.txt",ios::app);
if(!outfile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);//读取当前时间
outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
outfile<<users[who].account<<" 存入 "<<users[who].account<<" "<<money<<" 元"<<endl;//存款记录存入文件
outfile.close();
showRate();
cout<<"请输入要存入的期限(年):";
cin>>year;
if(year>=1&&year<=3)
users[who].balance+=(money+money*0.02*year);
else if(year==4&&year==5)
users[who].balance+=(money+money*0.032*year);
else if(year>5)
users[who].balance+=(money+money*0.0445*year);
users[who].showBalance("存款后,您有");
}
else if(users[who].status==1)
{
cout<<"该用户的账户处于挂失状态,存款失败!"<<endl;
}
else
{
cout<<"该用户的账户已经销户,存款失败!"<<endl;
}
}
return;
}
/********************************************
*功能描述:显示函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::showAccount()
{
int who;
string sta[3]= {"正常","挂失","已经销户"};
who=getUser();
if(who>=0)
{
users[who].showName();
if(users[who].psaaWordISRight())
{
users[who].showBalance("余额有");
cout<<"状态为"<<sta[users[who].status]<<endl;
cout<<"是否要查看您的每一笔账单(y/n)?";
char ch;
cin>>ch;
if(ch=='y')
{
cout<<"您的账单如下:"<<endl;
ifstream infile("expence_record.txt",ios::in);
if(!infile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
//从文件中读取每笔账单
int r1,r3,y,m,d;
string r2,r4,r5,ch1,ch2,ch3;
while(infile>>y>>ch1>>m>>ch2>>d>>ch3>>r1>>r2>>r3>>r4>>r5)
{
if(r1==users[who].account&&r3==users[who].account)
cout<<y<<ch1<<m<<ch2<<d<<ch3<<" "<<r2<<" "<<r4<<" "<<r5<<endl;
else if(r1==users[who].account)
cout<<y<<ch1<<m<<ch2<<d<<ch3<<" "<<r2<<" "<<r3<<"("<<users[r3-10000].name<<")"<<" "<<r4<<" "<<r5<<endl;
}
infile.close();
}
}
}
return ;
}
/********************************************
*功能描述:取款函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::withdraw()
{
int who;
double money;
who=getUser();
if(who>=0)
{
if(users[who].ISNormalUser())
{
users[who].showName();
if(users[who].psaaWordISRight())
{
cout<<"输入取款额";
cin>>money;
if(money>users[who].balance)
{
cout<<"亲,余额不足呀!"<<endl;
}
else
{
users[who].balance-=money;
users[who].showBalance("取款后,您还有");
ofstream outfile("expence_record.txt",ios::app);
if(!outfile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);//读取当前时间
outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
outfile<<users[who].account<<" 取款 "<<users[who].account<<" "<<money<<" 元"<<endl;//取款记录存入文件
outfile.close();
}
}
}
}
return ;
}
/********************************************
*功能描述:转账
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::transferAccount()
{
int whoout,whoin;
double money;
whoout=getUser();
cout<<"转出自";
if(whoout>=0)
{
if(users[whoout].ISNormalUser())
{
users[whoout].showName();
if(users[whoout].psaaWordISRight())
{
cout<<"请输入转入的金额:";
cin>>money;
if(money>users[whoout].balance)
cout<<"金额不足,转账失败!"<<endl;
else
{
cout<<"转出到:";
whoin=getUser();
if(whoin>=0)
{
if(users[whoin].ISNormalUser())
{
users[whoout].balance-=money;
users[whoin].balance+=money;
users[whoout].showBalance("转账户,您有");
ofstream outfile("expence_record.txt",ios::app);
if(!outfile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);//读取当前时间
outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
outfile<<users[whoin].account<<" 转账到 "<<users[whoout].account<<" "<<money<<" 元"<<endl;//转账记录存入文件
outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
outfile<<users[whoout].account<<" 收到 "<<users[whoin].account<<" "<<money<<" 元"<<endl;
outfile.close();
}
}
}
}
}
}
return ;
}
/********************************************
*功能描述:挂失
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::reportLoss()
{
int who;
who=getUser();
if(who>=0)
{
users[who].showName();
if(users[who].psaaWordISRight())
{
if(users[who].status==0)
{
users[who].status=1;
cout<<"挂失成功!"<<endl;
}
else if(users[who].status==1)
cout<<"该账户已经挂失!"<<endl;
else
cout<<"该账户已经销户,操作失败!"<<endl;
}
}
return;
}
/********************************************
*功能描述:解挂函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::canlelLoss()
{
int who;
who=getUser();
if(who>=0)
{
users[who].showName();
if(users[who].psaaWordISRight())
{
if(users[who].status==0)
{
cout<<"该用户处于正常状态,不需要解除挂失!"<<endl;
}
else if(users[who].status==1)
{
users[who].status=0;
cout<<"解除挂失成功"<<endl;
}
else
{
cout<<"该用户已销户,操作失败!"<<endl;
}
}
}
return ;
}
/********************************************
*功能描述:改密函数
*输入参数:无
*输出参数:密码
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::updatePassword()
{
int who;
int iPass1,iPass2;
who=getUser();
if(who>=0)
{
users[who].showName();
if(users[who].psaaWordISRight())
{
cout<<"新密码:"<<endl;
iPass1=intputPassword();
cout<<"确认密码:"<<endl;
iPass2=intputPassword();
if(iPass1==iPass2)
{
users[who].password=iPass1;
cout<<"密码修改成功!"<<endl;
}
else
cout<<"两次输入的不同,修改失败!"<<endl;
}
}
}
/********************************************
*功能描述:贷款函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::repayLoan()
{
int who;
double money,year;
who=getUser();
if(who>=0)
{
if(users[who].ISNormalUser())
{
users[who].showName();
if(users[who].psaaWordISRight())
{
cout<<"输入贷款额";
cin>>money;
if(money<=users[who].balance)
{
cout<<"您的余额很足,不需要贷款!"<<endl;
}
else
{
cout<<"请输入贷款期限(年)";
cin>>year;
money-=users[who].balance;
users[who].balance=-(money+money*rate2);
ofstream outfile("expence_record.txt",ios::app);
if(!outfile)
{
cerr<<"expence_record file cannot open!"<<endl;
exit(1);
}
outfile<<users[who].account<<" 贷款 "<<users[who].account<<" "<<users[who].balance<<" 元"<<endl;//贷款记录存入文件
outfile.close();
cout<<"到期时您需要还"<<users[who].balance<<" 元"<<endl;
}
}
}
}
}
/********************************************
*功能描述:查询用户函数
*输入参数:无
*输出参数:用户序号
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int Bank::getUser()
{
int id;
cout<<"账号:";
cin>>id;
int idex=-1;
int low=0,high=N-1,mid;
while (low<=high)
{
mid=(low+high)/2;
if(users[mid].account==id)
{
idex=mid;
break;
}
else if(users[mid].account>id)
high=mid-1;
else
low=mid+1;
}
if(idex<0)
cout<<"此用户不存在,本次操作失败!"<<endl;
return idex;
}
/********************************************
*功能描述:显示利率函数
*输入参数:无
*输出参数:无
*返回值:0-成功 其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::showRate()
{
cout<<"银行当前的利率情况如下:"<<endl;
cout<<" 1~3年 2.00%"<<endl;
cout<<" 4~5年 3.20%"<<endl;
cout<<" 5年以上 4.45%"<<endl;
}
学习心得:
虽然是在老师代码的基础上该写了这个庞大的银行系统,但还是从中学到了很多知识,以前多文件存储还不是很熟悉,现在感觉熟练的许多,还有就是在这环环相扣的函数中写来写去,觉得逻辑思维能力明显提高哈,当然也在这其中发现了自己的一些不足,比如多与动态数组就有点陌生,想在个程序里加上的,结果加上之后,也不知道是什么问题,在文件中存储的用户信息都成了代码,所以就没有加成功,望有大神可以来指导我一下,万分感谢!
还有就是,想弄一个活期的存储,结果想了想,然后百度了下,感觉超麻烦,so,就弄了个定取存款,等以后能力在高一点的时候再改吧!↖(^ω^)↗