//项目:银行管理系统

//系统实现的主要有管理,取款机管理,用户查询等功能:

//*管理模块:存款、取款、开户、销户、修改信息、办卡、挂失卡;

//*用户查询模块;

//*取款机信息管理模块:管理员管理查询和维护、客户查询和取款等功能;

//可以考虑利率

//

//  main.cpp

//  银行管理系统

//

//  Created by 丁小未 on 13-7-23.

//  Copyright (c) 2013年 dingxiaowei. All rights reserved.

//

//项目:银行管理系统

//系统实现的主要有管理,取款机管理,用户查询等功能:

//*管理模块:存款、取款、开户、销户、修改信息、办卡、挂失卡;

//*用户查询模块;

//*取款机信息管理模块:管理员管理查询和维护、客户查询和取款等功能;

//可以考虑利率

#include <iostream>

using namespace std;

#include <string>

#include <fstream>

#include <time.h>

#include <vector>

#define MAX 20

class Person

{

public:

string cardNum;//卡号

string cardName;//用户名

double money;//余额

string beginTime;//开户日期

bool useState=false;//是否挂失

/*******用户的功能***********/

//查询我当前用户的账户余额

double SelectMoney()

{

return money;

}

//选择挂失和解锁卡

bool ChooseUseState(bool f)

{

useState = f;

return useState;

}

//取钱

double GetMoney(double m)

{

if (m>money) {

cout<<"您的余额不足!"<<endl;

}

return money -= m;

}

//存钱

double AddMoney(double m)

{

return money += m;

}

//构造函数

Person(string cardnum,string cardname,double money,string begintime,bool usestate)

{

this->cardNum = cardnum;

this->cardName = cardname;

this->money = money;

this->beginTime = begintime;

this->useState = usestate;

}

//默认构造函数

Person(){};

//运算符重载

//    Person&person = (const Person &other)

//    {

//

//    }

};

int total=0;//记录总数

Person person[MAX];//定义一个person数组

double price=0.1;//默认汇率

/*******************函数申明******************************************/

void set_psw();//设置密码

int psw_check();//密码验证

void Show_menu();//显示菜单

int get_managermenu_choice();//接受管理员菜单选择

void PrintPersonTitle();//打印头信息

char* GetTime();//获取系统当前时间

void Show_Iden_menu();//身份选择菜单

int get_Idemenu_choice();//接受身份菜单选择

void inputInfile(Person person[],int n);//将类数组写入文件

void Show_PersonMenu();//显示普通用户功能菜单

void Show_Managermenu();//显示管理员功能菜单

int get_personmenu_choice();//普通用户接受功能菜单

int findPerson(Person *person,int n,string findName);//查找名字返回序列号

bool ISManager(string &name,string &pwd);//验证管理员身份

bool ISPerson(string &name,string &pwd);//验证用户信息

/**********************************************************************/

//查找名字返回序列号

int findPerson(Person *person,int n,string findName)

{

int i;

int m=-1;

for (i=0; i<n; i++) {

if (person[i].cardName == findName) {

m=i;

break;

}

}

return m;//返回person的下标

}

//将类数组写入文件,数组本身就是地址传递

void inputInfile(Person person[],int &n)

{

ofstream onfile;//写入文件类

onfile.open("Person.txt");

for (int i=0; i<n; i++) {

onfile<<person[i].cardNum<<"    "<<person[i].cardName<<"    "<<person[i].money<<"   "<<person[i].beginTime<<"   "<<person[i].useState<<"\n"<<endl;

}

onfile.close();

}

//管理员共有继承自普通人

class Manager:public Person

{

public:

//开户

void addPerson(Person person[],int &n)

{

char f='y';

string sTemp;

char *t=GetTime();

ofstream onfile;//写入文件

onfile.open("person.txt");

do {

cout<<"输入卡号:";

cin>>sTemp;

onfile<<sTemp<<"    ";

person[n].cardNum = sTemp;

cout<<"请输入用户名:";

cin>>sTemp;

onfile<<sTemp;

onfile<<sTemp<<"    ";

person[n].cardName = sTemp;

onfile<<0<<"    ";//余额默认是0

person[n].money = 0;

sTemp = t;

onfile<<sTemp<<"  ";//开户时间

person[n].beginTime = sTemp;

onfile<<0;//0代表没有挂失,正常使用

person[n].useState = false;

onfile<<"\n";

++n;

cout<<"还要继续开户吗?(y/n)";

cin>>f;

} while (f=='y');

}

//销户

void deletePerson(Person person[],int &n,string delname)

{

int i;

int j=0;

for (i = 0; i<n; i++) {

if (person[i].cardName == delname) {

for (j=i; j<n-1; j++) {

person[j].cardName = person[j+1].cardName;

person[j].cardNum = person[j+1].cardNum;

person[j].money = person[j+1].money;

person[j].beginTime = person[j+1].beginTime;

person[j].useState = person[j+1].useState;

}

n--;

i--;

}

}

//从写入文件

ofstream onfile;//写入文件类

onfile.open("Person.txt");

for (int i=0; i<n; i++) {

onfile<<person[i].cardNum<<"    "<<person[i].cardName<<"    "<<person[i].money<<"   "<<person[i].beginTime<<"   "<<person[i].useState<<"\n"<<endl;

}

onfile.close();

}

//修改卡的信息

void alterPerson(string name,Person person[],int &n)

{

int i=findPerson(person, total, name);

if(i<0)

{

cout<<"对不起,没有该账户!"<<endl;

}

else

{

double _money;

string sTemp;

int jj;

cout<<"从新修改账户信息:"<<endl;

cout<<"修改账户号:";

cin>>sTemp;

person[i].cardNum = sTemp;

cout<<"修改账户名:";

cin>>sTemp;

person[i].cardName = sTemp;

cout<<"修改账户余额:";

cin>>_money;

person[i].money = _money;

cout<<"修改挂失/解锁(1.挂失 2.解锁)";

cin>>jj;

if (jj==1) {

person[i].useState = true;

}

else

{

person[i].useState = false;

}

}

//将信息重写入文档

ofstream onfile;//写入文件类

onfile.open("Person.txt");

for (int i=0; i<n; i++) {

onfile<<person[i].cardNum<<"    "<<person[i].cardName<<"    "<<person[i].money<<"   "<<person[i].beginTime<<"   "<<person[i].useState<<"\n"<<endl;

}

onfile.close();

}

//选择某用户卡的挂失和解锁

void chooseUseFunction(string name,Person person[],int &n)

{

int i=findPerson(person, total, name);

if(i<0)

{

cout<<"对不起,没有该账户!"<<endl;

}

else

{

int jj;

cout<<"修改挂失/解锁(1.挂失 2.解锁)";

cin>>jj;

if (jj==1) {

person[i].useState = true;

}

else

{

person[i].useState = false;

}

}

//将信息重写入文档

ofstream onfile;//写入文件类

onfile.open("Person.txt");

for (int i=0; i<n; i++) {

onfile<<person[i].cardNum<<"    "<<person[i].cardName<<"    "<<person[i].money<<"   "<<person[i].beginTime<<"   "<<person[i].useState<<"\n"<<endl;

}

onfile.close();

}

//用户查询(查询所有的卡信息)

void showAllCard(Person person[],int &n)

{

cout<<"当前有"<<n<<"条记录:"<<endl;

PrintPersonTitle();

for (int i=0; i<n; i++) {

cout<<person[i].cardNum<<"   "<<person[i].cardName<<"   "<<person[i].money<<"   "<<person[i].beginTime<<"   "<<person[i].useState<<endl;

}

}

};

/*********************************************************************/

void IdMenu(Manager &manager);//身份菜单响应

void managermenu(Manager &manager);//管理员菜单相应

void personmenu();//用户菜单

/********************函数定义*****************************************/

//获取当前系统时间

char* GetTime()

{

{

time_t now;

struct tm *timenow;

time(&now);

timenow = localtime(&now);

char *p = asctime(timenow);

return p;

}

}

//身份菜单响应

void IdMenu(Manager &manager)

{

Show_Iden_menu();//菜单显示

switch (get_Idemenu_choice())

{

case 1:

{

//进入管理员身份验证

string n,s;

cout<<"请输入管理员账号:";

cin>>n;

cout<<"请输入管理员密码:";

cin>>s;

if (ISManager(n, s)) {

managermenu(manager);

}

else

{

cout<<"验证错误"<<endl;

}

}

break;

case 2:

//进入客户身份验证

{

string n,s;

cout<<"请输入账户名:";

cin>>n;

cout<<"请输入账户密码:";

cin>>s;

//            if (ISManager(n, s)) {

//                managermenu(manager);

//            }

if (ISPerson(n,s)) {

cout<<"验证用户成功"<<endl;

}

else{

cout<<"验证用户失败";

}

}

break;

default:

cout<<"选择错误"<<endl;

break;

}

}

//验证客户信息

bool ISPerson(string &name,string &pwd)

{

int i=0;

string password="dingxiaowei";

for (i=0; i<total; i++) {

if(person[i].cardName == name&&password==pwd);

{

return true;

break;

}

}

if (i==total) {

return false;

}

}

//验证管理员身份

bool ISManager(string &name,string &pwd)

{

string n,p;

ifstream infile;//读取文件类

infile.open("manager.txt");

if(infile.is_open())

{

infile>>n>>p;

}

else

{

cout<<"打开失败!";

}

if (n==name&&p==pwd)

{

return true;

}

else

{

return false;

}

}

//管理员菜单相应

void managermenu(Manager &manager)

{

bool flag = false;

do

{

Show_Managermenu();//显示菜单

switch (get_managermenu_choice()) {

case 1://增加记录

manager.addPerson(person, total);

break;

case 2://删除记录

{

cout<<"请输入您要销户的名字:";

string name;

cin>>name;

manager.deletePerson(person, total, name);

}

break;

case 3://查询记录

{

cout<<"请输入您要修改的账户名:";

string name;

cin>>name;

manager.alterPerson(name, person, total);

}

break;

case 4://修改记录

{

cout<<"请输入您修改挂失或解锁的账户名:";

string name;

cin>>name;

manager.chooseUseFunction(name, person, total);

}

break;

case 5://查询所有记录

manager.showAllCard(person, total);

break;

case 0:

flag = true;

IdMenu(manager);//返回上一级

break;

default:

printf("*************************\n");

printf("  欢迎再次使用本系统,谢谢    \n");

printf("*************************\n");

break;

}

}while (flag==false);

}

//打印个体用户头信息

void PrintPersonTitle()

{

cout<<"--------------------------------------------------------\n";

cout<<"  卡号        用户名       余额      开户日期      是否挂失  \n";

cout<<"--------------------------------------------------------\n";

}

//设置密码

void set_psw()

{

ofstream onfile;//写入文件类

string psw_set ,psw_check;

do

{

cout<<"You must set password first!\n";

cin>>psw_set;

cout<<"conform password:";

cin>>psw_check;

if(psw_check == psw_check)

{

cout<<"set password success!\n";

}

else

{

cout<<"error!\n";

}

}

while(psw_check != psw_set);

onfile.open("password.txt",ios::out);

onfile<<psw_set;

onfile.close();

}

//密码验证

int psw_check()

{

ifstream infile;//读取文件类

ofstream onfile;//文件写入类

unsigned int j=1;

string pword;

string password;

infile.open("password.txt",ios::in);

if (!infile.is_open())//如果打开失败,则重新设置密码

{

set_psw();//重新设置密码

}

//取值

infile>>password;

//打开成功验证密码

do {

cout<<"输入密码,你将有三次机会:"<<j<<"/3次机会"<<endl;

cin>>pword;

j++;

} while (password != pword && j<=3);

if (j<=3) {

cout<<"恭喜登陆成功!"<<endl;

return 1;//打开成功

}

else

{

cout<<"你已经输入了三次了,打开文件失败!"<<endl;

return 0;

}

}

//身份选择菜单

void Show_Iden_menu()

{

cout<<">>>>>>>>>>>>>>>>>欢迎您使用银行管理系统<<<<<<<<<<<<<<<<<<<<\n";

cout<<"*******************************************************\n";

cout<<"          1.银行管理员     |         2.普通用户            \n";

cout<<"*******************************************************\n";

}

//显示管理员菜单

void Show_Managermenu()

{

cout<<">>>>>>>>>>>>>>>欢迎您使用银行管理员管理系统<<<<<<<<<<<<<<<<\n";

cout<<"******************************************************\n";

cout<<"          1.开户          |        2.销户              \n";

cout<<"          3.修改卡号信息   |        4.挂失/解锁           \n";

cout<<"          5.查询所有记录   |        0.返回上级            \n";

cout<<"******************************************************\n";

}

//显示普通用户功能菜单

void Show_PersonMenu()

{

cout<<">>>>>>>>>>>>>>欢迎您使用银行客户管理系统<<<<<<<<<<<<<<<<<<<<\n";

cout<<"******************************************************\n";

cout<<"          1.查询余额       |        2.挂失/解锁          \n";

cout<<"          3.存款          |        4.取款              \n";

cout<<"          0.返回上级       |                            \n";

cout<<"******************************************************\n";

}

//普通用户接受菜单

int get_personmenu_choice()

{

int personmenu_ch;//菜单选项

do {

cout<<"请选择功能:";

cin>>personmenu_ch;

if (personmenu_ch<0||personmenu_ch>4) {

cout<<"输入有误!"<<endl;

}

} while (personmenu_ch<0||personmenu_ch>4);

return personmenu_ch;

}

//接受身份菜单选择

int get_Idemenu_choice()

{

int idmenu_ch;//菜单选项

do {

cout<<"请选择身份:";

cin>>idmenu_ch;

if (idmenu_ch<1||idmenu_ch>2) {

cout<<"输入有误!"<<endl;

}

} while (idmenu_ch<1||idmenu_ch>2);

return idmenu_ch;

}

//接受菜单选择

int get_managermenu_choice()

{

int menu_ch;//菜单选项

do {

cout<<"请选择菜单:";

cin>>menu_ch;

if (menu_ch<0||menu_ch>5) {

cout<<"error";

}

} while (menu_ch<0||menu_ch>5);

return menu_ch;

}

int main(int argc, const char * argv[])

{

Manager manager;

if (psw_check()) {

IdMenu(manager);

}

return 0;

}

银行管理系统[C++]的更多相关文章

  1. c++ 银行管理系统及报告

    1.题目描写叙述: 本代码为银行管理系统,总体分为管理员模式和普通用户模式: (1)在管理员模式中能完毕 ①用户信息录入 ②改动管理员password ③改动指定账户信息 ④信息管理业务 (2)在普通 ...

  2. python 银行管理系统

    这是一个使用python连接mysql的例子 涉及到类的使用 import pymysql import function as f def mysql(): db=pymysql.connect(h ...

  3. Bank Simulation Program银行管理系统C++ :)

    设计并实现简单的银行存取款系统,系统主界面包括登录和注册两个选项,选择登录,提示用户输入银行帐号和密码,验证通过后进入主界面,主界面包括:存款.取款.查询余额.历史记录.修改密码等功能.注册功能让用户 ...

  4. python连接mysql数据库实例demo(银行管理系统数据库版)

    主函数: import adminView import os import pickle from bankFunction import BankFunction import time def ...

  5. java实现银行管理系统

    Bank类 package First; import java.util.TreeSet; //银行类public class Bank {        private String Bankna ...

  6. JavaSwing开发简单的银行管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse/Eclipse+Jdk+mysql数据库 运行效果图:

  7. 我的Java语言学习日志1_"简单的银行管理系统实现"

    设计步骤:注意:本篇代码,直接建两个类( Bank_Account.BankManage)在BankManage往里面填方法就行.是为了让和我一样自学朋友可以更快的接受.但是代码优化的空间还是很大的( ...

  8. 基于Java的简单银行管理系统(MVC设计模式)

    项目导航 功能展示 项目描述 项目结构 `data` `service` `utils` `view ` 欠缺与总结 源码下载 功能展示 本系统基于命令台窗口,暂未与图形页面结合.话不多说,先上效果图 ...

  9. 银行bank系统项目实践

    想看项目的注意了!完整版银行管理系统就在这里看不看你看着办! 按照惯例咱们还是先来看一下项目需求: 某银行为了提高业务率希望开发一个银行管理系统功能如下: 1.能够完成用户开户操作 2.能够完成用户取 ...

随机推荐

  1. Android之Activity之间跳转

    本人自学Android,想到什么就写点什么.主要是怕忘了,哈哈~请观者不要建议~ 今天写点Android窗口之间的跳转以及自己理解: 1.Android中窗口之间的跳转,就是Activity之间的跳转 ...

  2. 【转】.so兼容32位和64位

    本文转自:http://blog.csdn.net/fwt336/article/details/51700300 安卓的兼容性是一个很令人头疼的问题,这几天又遇到了,还好还是解决了. 我遇到的问题是 ...

  3. Effective C++ -----条款32:确定你的public继承塑模出is-a关系

    “public继承”意味is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derive class对象也都是一个base class对象 ...

  4. codeforces 496A. Minimum Difficulty 解题报告

    题目链接:http://codeforces.com/contest/496/problem/A 题目意思:给出有 n 个数的序列,然后通过删除除了第一个数和最后一个数的任意一个位置的数,求出删除这个 ...

  5. Parallels Destop软件配置

    Parallels Destop个人感觉最好用的mac虚拟win软件 http://pan.baidu.com/s/1jHFwIGm 密码:ab21百度云下载(或者下载自己百度云的) 安装方法: 1. ...

  6. 【el表达式】jsp中设置默认图像

    <img alt="头像" src="${empty members.headPic ?'images/icon.png':members.headPic}&quo ...

  7. Keepalived虚拟ip

    linux下如何设置vip(虚拟ip) 在做HA的时候需要为服务器设计虚拟IP,也就是一个主机对应多个IP地址?刚听起来好神奇,原来这样也是可能的看了下面的这个链接 自己配了一下http://hi.b ...

  8. [Android Pro] CPU占用计算方法

    1: AVTest  CPU计算方法读取每个进程的 stat 文件 (/proc/<PID>/stat)计算采样间隔10min下utime的差值minusUtime,stime的差值min ...

  9. July 6th, Week 28th Wednesday, 2016

    Diligence is the mother of good fortune. 勤勉是好运之母. The mother of good fortune can be diligence, conti ...

  10. Roadblocks(poj 3255)

    题意:给出n个点,m条双向边,求严格次短路. /* 先spfa预处理出起点到每个点的和每个点到终点的最短距离,然后枚举每条边(这条边必须走),计算此时的最短路径,得出严格次短路. 正确性:因为对于一条 ...