课程设计-银行储蓄系统
2015-07-16 23:15
281 查看
银行储蓄系统这个项目在寒假的时候使用结构体的类型写了一份,贺老要求作为实训的项目,所以重新用面向对象的程序设计重新写了一份。
结构体方式——》银行储蓄系统结构体版
登录
输入业务员用户名和密码。3次输入不正确,强制退出程序。
基本要求
可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中。
系统菜单
当业务员信息验证后,进入到系统主控菜单,由业务员为储户办理各种业务,直到按0后退出。
基本要求
每次启动系统,都是从0用户开始办理业务
开户
账号由系统自动分配
确认密码和密码不同时要拒绝。
开户后,账号状态为0-正常
销户
输入账号,确认后,将余额全部取完,并将状态state置为2-销户。
办理销户的账号,其状态必须为“0-正常“。
存款
输入账号、金额,记录存款后的余额。
取款
输入账号、金额,记录取款后的余额。
取款额不能超过余额。
查询
输入账号,显示账户信息。
转账
输入转出账号、金额、转入账户,记录转账后的余额。
账户必须存在,扣除转出账户的金额,要与转入账户增加的金额相同。
挂失
输入账号,将状态改变为 1-挂失
解挂
输入账号,将状态为 1-挂失 的账户状态改为 0-正常
改密
用新密码替代旧密码。
新密码必须与确认密码相同。
userdata.h
bankdata.h
userdata.cpp
bankdata.cpp
main.cpp
管理员进入界面:
管理菜单:
开户:
销户:
存款:
取款:
查询:
转账:
挂失:
解挂:(账户10007当前状态正常)
改密:
彩蛋~关于界面:
下面是用户指令输入错误的运行截图:
密码输入错误三次退出系统:
挂失状态下无法取款:
销户状态下不能任何操作(除了查询):
密码两次不一致系统拒绝:
还有一些文件的截图:
用户的操作将以log的形式记录下来:
BankUser.dat(用户数据库):
BankAdmin.dat(管理员数据库):
课程报告将以图片的形式上传本文中。
麻鱼同步了本文章——》mayuko.cn
@ Mayuko
结构体方式——》银行储蓄系统结构体版
介绍:
银行储蓄系统包括:支持多名储户开户、存款、取款、转帐、改密、挂失、解挂、销户等功能。登录
输入业务员用户名和密码。3次输入不正确,强制退出程序。
基本要求
可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中。
系统菜单
当业务员信息验证后,进入到系统主控菜单,由业务员为储户办理各种业务,直到按0后退出。
基本要求
每次启动系统,都是从0用户开始办理业务
开户
账号由系统自动分配
确认密码和密码不同时要拒绝。
开户后,账号状态为0-正常
销户
输入账号,确认后,将余额全部取完,并将状态state置为2-销户。
办理销户的账号,其状态必须为“0-正常“。
存款
输入账号、金额,记录存款后的余额。
取款
输入账号、金额,记录取款后的余额。
取款额不能超过余额。
查询
输入账号,显示账户信息。
转账
输入转出账号、金额、转入账户,记录转账后的余额。
账户必须存在,扣除转出账户的金额,要与转入账户增加的金额相同。
挂失
输入账号,将状态改变为 1-挂失
解挂
输入账号,将状态为 1-挂失 的账户状态改为 0-正常
改密
用新密码替代旧密码。
新密码必须与确认密码相同。
源代码:
下面是源代码:userdata.h
/*********************************************************** * 版权所有 (C)2015,shao shuai. * * 文件名称:bankdata.cpp * 文件标识:无 * 内容摘要:该代码为UserData类的声明和Admin结构体的声明 * 其它说明:无 * 当前版本: V1.0 * 作 者:邵帅 * 完成日期: 20150715 * * 修改记录1: * 修改日期: 20150715 * 版本号: V1.0 * 修改人: shao shuai * 修改内容:创建 **********************************************************/ #ifndef USERDATA_H_INCLUDED #define USERDATA_H_INCLUDED #include <iostream> #include <string> using namespace std; class UserData//用户类 { private: long accNumber;//卡号 string accName;//户主 string password;//密码 double balance;//余额 string identity;//***号 string homeads;//家庭住址 int state;//状态 0:正常 -1:挂失 2:销户 public: void SetUser(long a, string n, string p, double b, string i, string h, int s); long get_accNumber(){ return accNumber; } string get_accName(){ return accName; } string get_password(){ return password; } double get_balance(){ return balance; } string get_id(){ return identity; } string get_homeads(){ return homeads; } int get_state(){ return state; } void set_accNumber(long num){ accNumber = num; } void set_accName(string n){ accName = n; } void set_password(string p){ password = p; } void set_balance(double b){ balance = b; } void set_id(string id){ identity = id; } void set_homeads(string h){ homeads=h; } void set_state(int s){ state = s; } bool CheckUserPass(); }; struct Admin//业务员结构体 { string name; string password; }; #endif // USERDATA_H_INCLUDED
bankdata.h
/*********************************************************** * 版权所有 (C)2015,shao shuai. * * 文件名称:bankdata.cpp * 文件标识:无 * 内容摘要:该代码为BankData类的声明 * 其它说明:无 * 当前版本: V1.0 * 作 者:邵帅 * 完成日期: 20150715 * * 修改记录1: * 修改日期: 20150715 * 版本号: V1.0 * 修改人: shao shuai * 修改内容:创建 **********************************************************/ #ifndef BANKDATA_H_INCLUDED #define BANKDATA_H_INCLUDED #include <iostream> #include "userdata.h" using namespace std; class BankData//银行数据类 { public: BankData(); ~BankData(); Admin admin[10]; UserData *user=new UserData[2000]; int UserNum; bool HomePage();//主页 int OpenAdmin();//读取Admin的信息 int SearchAdmin(string, int);//查找Admin bool CheckAdminPass(int);//检验用户名是否正确 void MenuShow();//显示User办理菜单 bool CheckUser(long acc);//查找User用户名 //User业务办理 void OpenUserData();//读取User信息 void SaveUserData();//保存User信息 void AddNumber(int);//开户 void DelNumber(void);//销户 void AddMoney(void);//存款 void DelMoney(void);//取款 void ShowInfo(void);//查询 void TransferMoney(void);//转账 void LossReport(void);//挂失 void SolutionLinked(void);//解挂 void ChangePass(void);//改密 //扩展类 string int2str(int num);//将int型转换成string型 string gettime();//获取当前系统时间 void SaveUserLog(int,int);//记录用户日志 void about();//扩展的关于界面 }; #endif // BANKDATA_H_INCLUDED
userdata.cpp
/*********************************************************** * 版权所有 (C)2015,shao shuai. * * 文件名称:bankdata.cpp * 文件标识:无 * 内容摘要:该代码为UserData类的定义 * 其它说明:无 * 当前版本: V1.0 * 作 者:邵帅 * 完成日期: 20150715 * * 修改记录1: * 修改日期: 20150715 * 版本号: V1.0 * 修改人: shao shuai * 修改内容:创建 **********************************************************/ #include <iostream> #include "userdata.h" #include <cstring> #include <cstdlib> using namespace std; /********************************************************* * 功能描述:建立user的信息 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:从指定文件读取 ************************************************************/ void UserData::SetUser(long a, string n, string p, double b, string i, string h, int s) { accNumber = a; accName = n; password = p; balance = b; identity = i; homeads = h; state = s; } /********************************************************* * 功能描述:检验输入user的密码是否正确 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ bool UserData::CheckUserPass() { string pass; int wrong = 0; while (1) { cout << "请输入密码:"; cin >> pass; if (pass == password) return true; else { cerr << "密码输入错误,请重新输入。" << endl; wrong++; if (wrong > 2) { cout << "User密码输入错误超过3次,即将退出系统..." << endl; system("PAUSE"); return false; } continue; } } }
bankdata.cpp
/*********************************************************** * 版权所有 (C)2015,shao shuai. * * 文件名称:bankdata.cpp * 文件标识:无 * 内容摘要:该代码为BankData类的定义 * 其它说明:无 * 当前版本: V1.0 * 作 者:邵帅 * 完成日期: 20150715 * * 修改记录1: * 修改日期: 20150715 * 版本号: V1.0 * 修改人: shao shuai * 修改内容:创建 **********************************************************/ #include <iostream> #include "bankdata.h" #include <cstring> #include <cstdlib> #include <fstream> #include <ctime> #include <cmath> using namespace std; /********************************************************* * 功能描述:BankData的默认构造函数 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ BankData::BankData()//构造函数 { long number; string name, pass, id, h; double balance; int state; UserNum = 0; //开始读取User的信息 ifstream infile("BankUser.dat", ios::in); if (!infile) { cerr << "打开数据库(BankUser.dat)文件失败!"; exit(1); } while (infile >> number >> name >> pass >> balance >> id >> h >> state) { user[UserNum].SetUser(number, name, pass, balance, id, h, state); UserNum++; } infile.close(); //User信息读取完毕,总数存入UserNum } /********************************************************* * 功能描述:BankData的析构函数 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:删除动态数组创建的user ************************************************************/ BankData::~BankData()//析构函数 { delete []user; } /********************************************************* * 功能描述:BankData的默认构造函数 * 输入参数:num-将要转换的int型数值 * 输出参数:无 * 返回值:string类型的int数值 * 其它说明:无 ************************************************************/ string BankData::int2str(int num)//int 2 str { if (num==0) return "0" ; string str=""; int num_=num>0?num:-1*num; while (num_) { str=(char)(num_%10+48)+str; num_/=10 ; } if (num<0) str="-"+str; return str; } /********************************************************* * 功能描述:获取系统时间 * 输入参数:无 * 输出参数:无 * 返回值:系统时间 * 其它说明:无 ************************************************************/ string BankData::gettime()//获取系统时间 { time_t curtime=time(0); tm tim =*localtime(&curtime); int day,mon,year; int hour,min,sec; string time; hour=tim.tm_hour;//时 min=tim.tm_min;//分 sec=tim.tm_sec;//秒 day=tim.tm_mday;//日 mon=tim.tm_mon;//月 year=tim.tm_year;//年 time=int2str(year+1900)+"-"+int2str(mon+1)+"-"+int2str(day)+"_"+int2str(hour)+":"+int2str(min)+":"+int2str(sec); return time; } /********************************************************* * 功能描述:关于界面 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::about()//关于 { double x,y; int H=3; for(y=-4;y<=0;y+=0.3) { for(x=-4;x<=4;x+=0.2) if(fabs(sqrt(x*x+y*y)-H*sin(2*atan(y/x)))<=1 || fabs(sqrt(x*x+y*y)-H*sin(2*atan(-y/x)))<=1) cout<<"*"; else cout<<" "; cout<<endl; } for(y=-1;y<=0;y+=0.2) { for(x=-4;x<=4;x+=0.2) if(fabs(y)-0.65*x*x>=0.2) cout<<"*"; else cout<<" "; cout<<endl; }; cout<<" 银行储蓄系统"<<endl<<" 版本:3.0"<<endl<<endl;; system("PAUSE"); } /********************************************************* * 功能描述:打开user的数据库 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:通过文件读取打开 ************************************************************/ void BankData::OpenUserData() { long number; string name, pass, id, h; double balance; int state; UserNum = 0; //开始读取User的信息 ifstream infile("BankUser.dat", ios::in); if (!infile) { cerr << "打开数据库(BankUser.dat)文件失败!"; exit(1); } while (infile >> number >> name >> pass >> balance >> id >> h>> state) { user[UserNum].SetUser(number, name, pass, balance, id, h, state); UserNum++; } infile.close(); //User信息读取完毕,总数存入UserNum } /********************************************************* * 功能描述:查找用户名 * 输入参数:acc-输入的用户名 * 输出参数:无 * 返回值:ture 或者 false * 其它说明:无 ************************************************************/ bool BankData::CheckUser(long acc) { for (int i = 0; i < UserNum;) { if (user[i].get_accNumber() == acc) return true; else { i++; } } cout << "没有找到此账户。" << endl; system("PAUSE"); return false; } /********************************************************* * 功能描述:记录用户的操作日志 * 输入参数:i-操作状态 acc-用户帐号 * 输出参数:无 * 返回值:无 * 其它说明:写入到指定文件中 ************************************************************/ void BankData::SaveUserLog(int i,int acc)//记录用户日志 { string type,time,state; switch(i) { case 1:state="开户";break; case 2:state="销户";break; case 3:state="存款";break; case 4:state="取款";break; case 6:state="转账";break; case 7:state="挂失";break; case 8:state="解挂";break; case 9:state="改密";break; } time=gettime(); type=int2str(acc+10001); //strcpy(p,type.data());类型转换:string 2 char* char ch1[25]="BankUser"; char ch2[8]=".log"; char ch[8]; strcpy(ch,type.c_str()); char *typen=new char[50]; typen=strcat(strcat(ch1,ch),ch2); ofstream outfile(typen,ios::app); if (!outfile) { cerr << "打开用户名数据库文件失败!"; exit(1); } outfile<<user[acc].get_accName()<<" "<<time<<" "<<state<<endl; outfile.close(); delete typen; } /********************************************************* * 功能描述:保存用户数据 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:写入到指定文件中 ************************************************************/ void BankData::SaveUserData() { ofstream outfile("BankUser.dat", ios::out); if (!outfile) { cerr << "打开数据库(BankUser.dat)文件失败!"; exit(1); } int i; for (i = 0; i<UserNum; i++) { outfile << user[i].get_accNumber() << " " << user[i].get_accName() << " " << user[i].get_password() << " " << user[i].get_balance() << " " << user[i].get_id() << " " << user[i].get_homeads() << " " << user[i].get_state() << endl; } outfile.close(); } /********************************************************* * 功能描述:主页显示 * 输入参数:无 * 输出参数:无 * 返回值:ture 或者 false * 其它说明:验证管理员用户名和密码 ************************************************************/ bool BankData::HomePage()//主页 { //return true;//调试语句 string name; int i; cout << "+-----------------------+" << endl; cout << " 欢迎光临Mayuko银行" << endl; cout << "+-----------------------+" << endl; cout << "请输入业务员用户名:"; cin >> name; i = SearchAdmin(name, OpenAdmin()); while (1) { if (i >= 0) { if (CheckAdminPass(i)) { cerr << "欢迎进入!" << endl; system("PAUSE"); return true; } } else { cerr << "没有找到此管理员!" << endl; return false; } } } /********************************************************* * 功能描述:读取Admin的信息 * 输入参数:无 * 输出参数:无 * 返回值:Admin的个数 * 其它说明:通过文件读取 ************************************************************/ int BankData::OpenAdmin()//读取Admin的信息 { int anum; //开始读取Admin信息到admin数组中 ifstream infile("BankAdmin.dat", ios::in); anum = 0; if (!infile) { cerr << "打开管理员(BankAdmin.dat)文件失败!" << endl; exit(1); } while (!infile.eof()) { infile >> admin[anum].name >> admin[anum].password; anum++; } infile.close(); //信息读取完毕,admin数组中已存入Admin信息 return anum;//返回一共读取到多少Admin条信息 } /********************************************************* * 功能描述:查找Admin * 输入参数:anum-Admin的个数 n-输入的用户名 * 输出参数:无 * 返回值:无 * 其它说明:通过文件查找 ************************************************************/ int BankData::SearchAdmin(string n, int anum)//查找Admin { for (int i = 0; i<anum; i++) { if (n == admin[i].name) return i; } return -1; } /********************************************************* * 功能描述:检验Admin密码是否正确 * 输入参数:无 * 输出参数:无 * 返回值:ture 或者 false * 其它说明: ************************************************************/ bool BankData::CheckAdminPass(int i) { int wrong = 0; string pass; while (1) { cout << "请输入密码:"; cin >> pass; if (pass == admin[i].password) return true; else//密码输入错误触发 { cerr << "密码输入有误,请重新输入!" << endl; wrong++; if (wrong > 2) { cerr << "Admin密码输入错误超过3次,即将退出系统..." << endl; } return false; } } } /********************************************************* * 功能描述:菜单显示 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:通过一个函数来显示可选择的菜单 ************************************************************/ void BankData::MenuShow()//菜单显示函数 { cout << "+--------------------------+" << endl; cout << "+ 1 开户 2 销户 3 存款 +" << endl; cout << "+ 4 取款 5 查询 6 转账 +" << endl; cout << "+ 7 挂失 8 解挂 9 改密 +" << endl; cout << "+ i 关于 0 退出 +" << endl; cout << "+--------------------------+" << endl; } /********************************************************* * 功能描述:增加一个user * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::AddNumber(int n) { string pass1, pass2, name, id ,h; double money; long acc; acc = 10001 + n; cout << "正在开户" << endl; while (1) { cout << "帐号:" << acc << endl; cout << "户主姓名:"; cin >> name; cout << "密码:"; cin >> pass1; cout << "确认密码:"; cin >> pass2; //将开户的信息加入到User文件的末尾 if (pass1 == pass2) { cout << "存入金额:"; cin >> money; cout << "***号:"; cin >> id; cout << "家庭住址:"; cin >> h; ofstream outfile("BankUser.dat", ios::app); if (!outfile) { cerr << "打开数据库(BankUser.dat)文件失败!"; exit(1); } outfile << acc << " " << name << " " << pass1 << " " << money << " " << id << " " << h << " " << 0 << endl; outfile.close(); cout << "开户成功!" << endl; user[UserNum].SetUser(acc,name,pass1,money,id,h,0); SaveUserLog(1,n); UserNum++; system("PAUSE "); //文件写入结束 break; } else { cout << "两次密码输入不一致,请重新输入。" << endl; continue; } //信息更新完毕 } } /********************************************************* * 功能描述:删除一个user * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::DelNumber() { long acc; string pass; char check; cout << "销户" << endl; cout << "待销户帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; while (1) { if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 0) { cout << "余额:" << user[acc].get_balance() << endl; cout << "确认销户(y/Y)?"; cin >> check; if (check == 'y' || check == 'Y') { cout << "取款" << user[acc].get_balance() << "元,销户成功!" << endl; user[acc].set_balance(0); user[acc].set_state(2); SaveUserLog(2,acc); system("PAUSE "); break; } else { cout << "销户程序已取消。" << endl; system("PAUSE"); break; } } else { cout << "该账户为挂失或已经销户,无法进行销户操作。" << endl; system("PAUSE"); break; } } } } } /********************************************************* * 功能描述:给指定user存款 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::AddMoney() { long acc; double addmoney; cout << "存款" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; if (user[acc].get_state()==0) { cout << "姓名:" << user[acc].get_accName() << endl; cout << "存款额:"; cin >> addmoney; user[acc].set_balance(user[acc].get_balance() + addmoney);//将addmoney钱存入User的信息中 cout << "现余额共计" << user[acc].get_balance() << "元,存款成功!" << endl; SaveUserLog(3,acc); system("PAUSE "); } else if(user[acc].get_state()==2) { cout<<"该账户目前已经销户."<<endl; system("PAUSE "); } else { cout<<"该账户目前已经挂失."<<endl; system("PAUSE "); } } } /********************************************************* * 功能描述:user取款 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::DelMoney() { long acc; double money; cout << "取款" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 0) { cout << "余额:" << user[acc].get_balance() << endl; while (1) { cout << "取款额:"; cin >> money; if (money > user[acc].get_balance()) { cout << "余额不足,取款失败!" << endl; continue; } else { user[acc].set_balance(user[acc].get_balance() - money); cout << "取出" << money << "元,现余额" << user[acc].get_balance() << "元。" << endl; SaveUserLog(4,acc); system("PAUSE "); break; } } } else { cout << "该账户挂失或者销户,无法进行取款操作。" << endl; system("PAUSE "); } } } } /********************************************************* * 功能描述:显示user的信息和日志记录 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::ShowInfo() { long acc; string logname,logtime,logstate; int lognum=0; cout << "查询" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { cout << "余额:" << user[acc].get_balance() << endl; cout << "***号:" << user[acc].get_id() << endl; cout << "家庭住址:" << user[acc].get_homeads() << endl; cout << "当前状态:"; switch (user[acc].get_state())//判断User的状态 { case 0:cout << "正常" << endl; break; case 1:cout << "挂失" << endl; break; case 2:cout << "销户" << endl; break; } //开始进行日志读取 string type; //生成将要读取的文件名 type=int2str(acc+10001); char ch1[25]="BankUser"; char ch2[8]=".log"; char ch[8]; strcpy(ch,type.c_str()); char *typen=new char[50]; typen=strcat(strcat(ch1,ch),ch2); ifstream infile(typen,ios::in); if (!infile) { cerr << "打开用户日志文件失败!" << endl; exit(1); } cout<<"---------------------------"<<endl; cout<<"日志记录:"<<endl; while (infile >> logname >> logtime >> logstate) { cout<< logname <<" "<< logtime <<" "<< logstate << endl; lognum++; } infile.close(); delete typen; cout<<"查询完毕,共"<<lognum<<"条记录。"<<endl; cout<<"---------------------------"<<endl; system("PAUSE "); } } } /********************************************************* * 功能描述:转账到其他user * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::TransferMoney() { long acc, acc2; double money; cout << "转账" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 0) { cout << "余额:" << user[acc].get_balance() << endl; while (1) { cout << "转账帐号:"; cin >> acc2; cout << "转账金额:"; cin >> money; if (CheckUser(acc2)) { acc2 -= 10001; if (user[acc].get_balance() >= money) { user[acc].set_balance(user[acc].get_balance() - money); user[acc2].set_balance(user[acc2].get_balance() + money); cout << "转账成功!本账户余额" << user[acc].get_balance() << "元。" << endl; SaveUserLog(6,acc); system("PAUSE "); break; } else { cout << "余额不足,转账失败!" << endl; system("PAUSE"); continue; } } } } else { cout << "该账户挂失或者销户,无法进行转账操作。" << endl; system("PAUSE "); } } } } /********************************************************* * 功能描述:挂失user * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:状态-1 ************************************************************/ void BankData::LossReport() { long acc; cout << "挂失" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 0) { user[acc].set_state(1); cout << "挂失成功!"<<endl; SaveUserLog(7,acc); system("PAUSE "); } else { cout << "该账户已经销户或挂失!" << endl; system("PAUSE "); } } } } /********************************************************* * 功能描述:解挂user * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:状态-0 ************************************************************/ void BankData::SolutionLinked() { long acc; cout << "解挂" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 1) { user[acc].set_state(0); cout << "解挂成功" << endl; SaveUserLog(8,acc); } else if (user[acc].get_state() == 0) { cout << "该账户状态正常,无需解挂。" << endl; } else if (user[acc].get_state() == 2) { cout << "该账户已经销户,无法解挂。" << endl; } system("PAUSE "); } } } /********************************************************* * 功能描述:更改user的密码 * 输入参数:无 * 输出参数:无 * 返回值:无 * 其它说明:无 ************************************************************/ void BankData::ChangePass() { long acc; string pass1, pass2; cout << "改密" << endl; cout << "帐号:"; cin >> acc; if (CheckUser(acc)) { acc -= 10001; cout << "姓名:" << user[acc].get_accName() << endl; if (user[acc].CheckUserPass()) { if (user[acc].get_state() == 0) { while (1) { cout << "请输入新密码:"; cin >> pass1; cout << "确认密码:"; cin >> pass2; if (pass1 == pass2) { user[acc].set_password(pass1); cout << "更改密码成功!" << endl; SaveUserLog(9,acc); system("PAUSE "); break; } else { cout << "两次密码输入不一致,请重新输入。" << endl; continue; } } } else { cout << "该账户挂失或者销户,无法进行改密操作。" << endl; system("PAUSE"); } } } }
main.cpp
/*********************************************************** * 版权所有 (C)2015,shao shuai. * * 文件名称:bankdata.cpp * 文件标识:无 * 内容摘要:该代码为main主函数 * 其它说明:无 * 当前版本: V1.0 * 作 者:邵帅 * 完成日期: 20150715 * * 修改记录1: * 修改日期: 20150715 * 版本号: V1.0 * 修改人: shao shuai * 修改内容:创建 **********************************************************/ #include <iostream> #include "userdata.h" #include "bankdata.h" #include <cstdlib> using namespace std; /********************************************************* * 功能描述:主函数main * 输入参数:无 * 输出参数:无 * 返回值:0 * 其它说明:无 ************************************************************/ int main() { BankData bank; if (bank.HomePage()) { char choice; while (1) { system("cls"); bank.MenuShow(); cout << "请输入操作指令:"; cin >> choice; switch (choice) { case '0':exit(1); case '1':bank.AddNumber(bank.UserNum); break; case '2':bank.DelNumber(); bank.SaveUserData(); break; case '3':bank.AddMoney(); bank.SaveUserData(); break; case '4':bank.DelMoney(); bank.SaveUserData(); break; case '5':bank.ShowInfo(); break; case '6':bank.TransferMoney(); bank.SaveUserData(); break; case '7':bank.LossReport(); bank.SaveUserData(); break; case '8':bank.SolutionLinked(); bank.SaveUserData(); break; case '9':bank.ChangePass(); bank.SaveUserData(); break; case 'i':bank.about();break; default: cerr << "输入错误,请重新输入."<<endl; system("PAUSE"); continue; } } } return 0; }
运行截图:
下面是软件运行截图:管理员进入界面:
管理菜单:
开户:
销户:
存款:
取款:
查询:
转账:
挂失:
解挂:(账户10007当前状态正常)
改密:
彩蛋~关于界面:
下面是用户指令输入错误的运行截图:
密码输入错误三次退出系统:
挂失状态下无法取款:
销户状态下不能任何操作(除了查询):
密码两次不一致系统拒绝:
还有一些文件的截图:
用户的操作将以log的形式记录下来:
BankUser.dat(用户数据库):
BankAdmin.dat(管理员数据库):
课程报告将以图片的形式上传本文中。
麻鱼同步了本文章——》mayuko.cn
@ Mayuko
相关文章推荐
- 产品文案要直白浅显
- switch判断成绩等级
- js颜色拾取器
- block
- leveldb学习:测试代码
- MFC运用GraphicsPath绘制曲线、选择曲线(判断点是否在曲线上)
- 追踪分布式Memcached默认的一致性hash算法
- 汇编语言: 实验七 寻址方式在结构化数据访问中的应用
- Linux文件隐藏属性
- 我的第一篇CSDN博客文章
- XMPP学习Day1
- 01-暑期学习第一天
- 当Activity的launchMode设为singleTask的时候,你要注意了!
- VS2015上又一必备免费插件:Refactoring Essentials
- 8-2.计数排序
- build.gradle Failed to resolve:me.relex:circleindicator:1.1.5
- linux程序设计——信号量(第十四章)
- 2015071605 - 如何控制自己的情绪
- .net根据wsdl生成客户端调用服务返回null
- mongodb安装