📄 银行定期储蓄管理系统.cpp
字号:
#include<iostream>
#include<fstream>
#include<string>
#include<time.h>
using namespace std;
class Salesman //接收员信息
{
public:
Salesman();
Salesman(char *,long );
protected:
char name1[20];//姓名
long employee_num;//工作号
};
Salesman::Salesman()
{
strcpy(name1," ");
employee_num=0;
}
Salesman::Salesman(char *na,long num)
{
strcpy(name1,na);
employee_num=num;
}
class Depositor //储户信息
{
public:
Depositor();
Depositor(char *,char *,char *,string );
void chose_year();//选取储种
char account_number[30];//帐号
protected:
char name[20];//用户姓名
char password[9];//密码
char storage_kind[6];//储种
char create_time[30];//创建帐户时间.首次存款时间
char storage_time[30];//存款时间
double corpus;//本金
double interest;//利息
double total;//总额
string address;//用户地址
bool loss;//true表示挂失;false表示未挂失
};
Depositor::Depositor()
{
strcpy(name," ");
strcpy(account_number,"0");
strcpy(password," ");
strcpy(storage_kind,"一年");
strcpy(create_time," ");
address=" ";
corpus=0;
loss=false;
}
Depositor::Depositor(char *na,char *accnum,char *key,string add)
{
strcpy(name,na);
strcpy(account_number,accnum);
strcpy(password,key);
address=add;
corpus=0;
loss=false;
chose_year();
}
void Depositor::chose_year()
{
cout<<"请选择储种:1.一年 2.三年 3.五年"<<endl;
int chose;
cin>>chose;
while(chose<1||chose>3||cin.fail())
{
cout<<"输入错误!请重新输入:"<<endl;
cin.clear();
cin>>chose;
}
switch(chose){
case 1:strcpy(storage_kind,"一年");break;
case 2:strcpy(storage_kind,"三年");break;
case 3:strcpy(storage_kind,"五年");break;
}
}
//计算天数的函数
int isLeapYear(int y){
if(y%400==0||(y%4==0&&y%100!=0))
return 1;
return 0;
}
int monthDay(int y,int m){
int data[]={31,28+isLeapYear(y),31,30,31,30,31,31,30,31,30};
return data[m-1];
}
int dayInYear(int y,int m,int d){
int sum=d;
for(int i=1;i<m;i++){
sum+=monthDay(y,i);
}
return sum;
}
int subDate(char *date1,char *date2)//date1>date2
{
int y1,m1,d1,y2,m2,d2;
y1= (date1[0] - '0')*1000 + (date1[1] - '0')*100 + (date1[2] - '0')*10 + (date1[3] - '0');
m1= (date1[4] - '0')*10 + (date1[5] - '0');
d1= (date1[6] - '0')*10 + (date1[7] - '0');
y2= (date2[0] - '0')*1000 + (date2[1] - '0')*100 + (date2[2] - '0')*10 + (date2[3] - '0');
m2= (date2[4] - '0')*10 + (date2[5] - '0');
d2= (date2[6] - '0')*10 + (date2[7] - '0');
int sum=dayInYear(y1,m1,d1)-dayInYear(y2,m2,d2);
if(y1!=y2){
for(int i=y2;i<y1;i++){
sum+=365+isLeapYear(i);
}
}
return sum;
}
//计算天数的函数结束
class Bank:public Salesman,public Depositor
{
public:
Bank(){Salesman();Depositor();}
Bank(char *,long ,char *,char *,char *,string );
void Show();
void loss();//挂失
void save_money();//存钱
void get_money();//取钱
string get_name(){return name;}
string get_account(){return account_number;}
string get_password(){return password;}
friend void Save_to_file(Bank &);//保存
void cal_inter();
private:
double interest_rate;
};
Bank::Bank(char *nam,long num,char *na,char *accnu,char *pas,string addr):
Salesman(nam,num),Depositor(na,accnu,pas,addr)
{
if(Depositor::storage_kind=="一年") interest_rate=0.0195;
else if(Depositor::storage_kind=="三年") interest_rate=0.0225;
else if(Depositor::storage_kind=="五年") interest_rate=0.0252;
}//Bank 构造函数
void Bank::loss(){Depositor::loss=true;}
void Bank::cal_inter()//计算利息
{
cout<<"现在进行利息清算"<<endl;
int duration=0;
cout<<"第一次存款时间:"<<create_time<<endl;
cout<<"请输入第一次存款时间(年-月-日,例:19990603表1999年6月3日,注意中间没有空格!) :"<<endl;
char date_2[9];
cin>>date_2;
time_t t;
time(&t);
cout<<"今天时间:"<<ctime(&t)<<endl;
cout<<"请输入时间(格式同上):"<<endl;
char date_1[9];
cin>>date_1;
duration=subDate(date_1,date_2);
if(storage_kind=="一年")
{
if(duration==365) interest=interest_rate*corpus;
else if(duration<365) interest=0.00005*corpus*duration;
else if(duration>365) interest=interest_rate*corpus+corpus*0.00005*(duration-365);
}
else if(storage_kind=="三年")
{
if(duration==365*3) interest=interest_rate*corpus;
else if(duration<365*3) interest=0.00005*corpus*duration;
else if(duration>365*3) interest=interest_rate*corpus+corpus*0.00005*(duration-365*3);
}
else if(storage_kind=="五年")
{
if(duration==365*5) interest=interest_rate*corpus;
else if(duration<365*5) interest=0.00005*corpus*duration;
else if(duration>365*5) interest=interest_rate*corpus+corpus*0.00005*(duration-365*5);
}
char m[30];
strcpy(m,account_number);
ifstream f;
f.open(strcat(m,"_存款日期记录.txt"),ios::in);
if(!f)
{
cout<<"Can't open the file!"<<endl;
}
while(f.eof())//计算每次存款的利息
{
char ch[9];char mon[30];//钱
f.getline(ch,9);
f.getline(mon,30);
cout<<ch<<"存款:"<<mon<<endl;
cout<<"请将存款数额输入:"<<endl;
double a;
cin>>a;
int da;//天数
da=subDate(date_1,ch);
double x;
x=da*a*0.00005;//lixi
interest+=x;//zonglixi
}
char n[30];//存利息
strcpy(n,account_number);
ofstream file;
file.open(strcat(n,"_取款文件.txt"),ios::out|ios::app);
file<<"用户利息为:"<<interest<<"元"<<endl;
}
void Bank::get_money()//取款
{
if(Depositor::loss) {cout<<"该用户已挂失!不能进行取款!"<<endl;return ;}
cout<<"进行取款,请输入取款金额:"<<endl;
double money;
cin>>money;
if(money>corpus) cout<<"余额不足,不能支取!"<<endl;
if(money==corpus)
{
cout<<"将存款全部取出? y/n?"<<endl;
char a;cin>>a;
if(a=='y'||'Y') this->cal_inter();
else {cout<<"重新输入取款金额:"<<endl;cin>>money;}//输入时有问题
}
if(money<corpus) this->cal_inter();
time_t t;
time(&t);
char m[30];
strcpy(m,account_number);
fstream f;
f.open(strcat(m,"_取款文件.txt"),ios::out|ios::app);
if(!f)
{
cout<<"Can't open the text!"<<endl;
}
f<<"该用户于"<<ctime(&t)<<"提取"<<money<<endl;
cout<<"输入办理取款的员工信息:"<<endl;
char name[20];long num;
cout<<"输入姓名:"<<endl;
cin>>name;
cout<<"输入工作编号:"<<endl;
cin>>num;
f<<"办理取款的员工信息:"<<endl;
f<<"姓名:"<<name<<endl;
f<<"工作编号:"<<num<<endl;
f<<endl;
}
void Bank::save_money()//存款
{
if(Depositor::loss) {cout<<"该用户已挂失!不能进行存款!"<<endl;return ;}
cout<<"进行存款,请输入存款数额:";
char n[30];
strcpy(n,account_number);
double money;
cin>>money;
time_t t;
time(&t);
if(corpus==0) strcpy(create_time,ctime(&t));
ofstream f;
f.open(strcat(n,".txt"),ios::out|ios::app);
if(!f)
{
cout<<"Can't open the text!"<<endl;
}
cout<<"原来本金数额:"<<corpus<<endl;
cout<<"存入"<<money<<" 元"<<endl;
corpus+=money;
cout<<"输入办理存款的员工信息:"<<endl;
char name[20];long num;
cout<<"输入姓名:"<<endl;cin>>name;
cout<<"输入工作编号:"<<endl;cin>>num;
f<<"存入"<<money<<" 元"<<endl;
f<<"总计本金:"<<corpus<<endl;
f<<"存入时间:"<<ctime(&t);
f<<"办理存款的员工信息:"<<endl;
f<<"姓名:"<<name<<endl;
f<<"工作编号:"<<num<<endl;
f<<endl;
char m[30];
ofstream file;
strcpy(m,account_number);
file.open(strcat(m,"_存款记录.txt"),ios::out|ios::app);
if(!file) cout<<"Can't open the text!"<<endl;
file<<"用户"<<account_number<<"存款"<<money<<endl;
file<<"存入时间:"<<ctime(&t);
file<<"办理存款的员工信息:"<<endl;
file<<"姓名:"<<name<<endl;
file<<"工作编号:"<<num<<endl;
file<<endl;
char a[30];
strcpy(a,account_number);
ofstream file2;
file2.open(strcat(a,"_存款日期记录.txt"),ios::out|ios::app);
cout<<"现在时间:"<<ctime(&t)<<endl;
cout<<"请按如下形式输入时间(年月日,例:19990603表1999年6月3日,注意中间没有空格!):"<<endl;
char d[9];
cin>>d;
file2<<d<<endl;//时间
file<<money<<endl;//存款
cout<<endl;
}
void Bank::Show()
{
if(Depositor::loss)
{
char a;
cout<<"该用户已挂失!是否继续查询? y/n"<<endl;
cin>>a;
if(a!='y') return;
}
cout<<"储户信息如下:"<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"帐号:"<<account_number<<endl;
cout<<"密码:"<<"**********"<<endl;//是否要显示
cout<<"存储种类:"<<storage_kind<<endl;
cout<<"创建帐户时间:"<<create_time;
cout<<"地址:"<<address<<endl;
cout<<"本金:"<<corpus<<" 元"<<endl;
cout<<endl;
cout<<"营业员信息:"<<endl;
cout<<"姓名:"<<name1<<endl;
cout<<"工作号:"<<employee_num<<endl;
}
void Save_to_file(Bank &de)//存到文件中
{
time_t t;
time(&t);
strcpy(de.create_time,ctime(&t));//显示创建帐户时间
char m[30];
strcpy(m,de.account_number);
ofstream file;
file.open(strcat(m,".txt"),ios::out|ios::app);
if(!file)
{
cout<<"Can't open the text!"<<endl;
}
file<<"储户信息:"<<endl;
file<<"姓名:"<<de.name<<endl;file<<"帐号:"<<de.account_number<<endl;file<<"密码:"<<de.password<<endl;
file<<"储种:"<<de.storage_kind<<endl;file<<"创建帐户时间"<<de.create_time;file<<"本金:"<<de.corpus<<" 元"<<endl;
file<<"营业员信息:"<<endl;
file<<"姓名:"<<de.name1<<endl;file<<"工作号:"<<de.employee_num<<endl;
file<<endl;
file.close();
}
Bank account[20];
int count=0;
void Create_account()//创建帐户
{
cout<<"开始创建帐户:"<<endl;
count++;
char name[20],accnum[20],password[9];string addr;
cout<<"请输入用户信息:"<<endl;
cout<<" 姓名:";cin>>name;
cout<<" 帐户号:";cin>>accnum;
cout<<" 密码:";cin>>password;
cout<<" 地址:";cin>>addr;
char na[20];long num=0;
cout<<"输入营业员信息:"<<endl;
cout<<" 姓名:";cin>>na;
cout<<" 工作号:";cin>>num;
account[count]=Bank(na,num,name,accnum,password,addr);
Save_to_file(account[count]);
cout<<"创建帐户成功!"<<endl;
cout<<"您当前的帐户余额为0元,是否进行存款? y/n?"<<endl;
char n;
cin>>n;
if(n=='y'||'Y') account[count].save_money();
else return;
}
int find_account(int &k)//查找帐户
{
char name[15],accnum[20],pass[9];
cout<<"输入用户信息:"<<endl;
cout<<"输入姓名:"<<endl;
cin>>name;
cout<<"输入帐号:"<<endl;
cin>>accnum;
cout<<"密码:"<<endl;
cin>>pass;
int i;
for(i=0;i<=count;i++)
{
if(account[i].get_name()==name&&account[i].get_account()==accnum&&account[i].get_password()==pass)
{k=1;break;}
}
return i;
}
void Query_account()//查询用户
{
cout<<"查询用户!"<<endl;
int i,j=0;
i=find_account(j);
if(j) {
cout<<"用户找到!"<<endl;
account[i].Show();
}
else {cout<<"该用户不存在。"<<endl;}
}
void Report_loss()
{
cout<<"办理挂失!"<<endl;
int i,j=0;
i=find_account(j);
if(j) {account[i].loss();cout<<"用户找到!已办理挂失!"<<endl;}
else {cout<<"该用户不存在。"<<endl;}
}
void Deposit()
{
cout<<"办理存款!"<<endl;
int i,j=0;
i=find_account(j);
if(j) {
cout<<"用户找到!"<<endl;
account[i].save_money();
}
else {cout<<"该用户不存在。"<<endl;}
}
void Take_account()
{
cout<<"办理取款!"<<endl;
int i,j=0;
i=find_account(j);
if(j)
{
cout<<"用户找到!进行取款?y/n"<<endl;
char a;
cin>>a;
if(a!='y') return;
else account[i].get_money();
cout<<"打印利息清单:"<<endl;
account[i].Show();
char m[30];
strcpy(m,account[i].account_number);
ifstream f;
f.open(strcat(m,"_取款文件.txt"),ios::out);
char ch;
while(f.get(ch)) cout<<ch;
}
else {cout<<"该用户不存在。"<<endl;}
}
void show()
{
cout<<"1: Create an account 创建帐户"<<endl;
cout<<"2: Query an account 查询帐户"<<endl;
cout<<"3: Report lose an account 挂失帐户"<<endl;
cout<<"4: Deposit 存款 "<<endl;
cout<<"5: Take money 取款"<<endl;
cout<<"6: Exit 返回"<<endl;
cout<<"Please input your choice:"<<endl;
}
int main()
{
int choice=0;char str[255];
cout<<"Welcome to bank system!"<<endl;
do{
show();
cin>>choice;
while(choice<1||choice>6||cin.fail())
{
cout<<"输入错误!"<<endl;
cin.clear(0);cin.getline(str,255);
show();
cin>>choice;
}
cin.clear(0);
switch(choice)
{
case 1:Create_account();break;
case 2:Query_account();break;
case 3:Report_loss();break;
case 4:Deposit();break;
case 5:Take_account();break;
case 6:cout<<"*******************************************************************************"<<endl;
cout<<"***** ---------> [ 谢谢您使用本系统!按任意键结束! ] <--------- *****"<<endl;
cout<<"*******************************************************************************"<<endl;
break;
}
}while(choice!=6);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -