精华内容
下载资源
问答
  • 储存库 阿根廷储蓄库
  • 中国邮政储蓄银行理财产品销售从业人员资格考试题库
  • 储蓄库
  • TallerMecanico20211 储蓄所准合伙人仓库600 2021-1
  • Repositóriode Dados ... 米纳斯吉拉斯州州长储蓄所的资料 1.0-中央议会超级监管委员会(SCCP)抽签负责任的最高法院议员(Salp Responsabilidade daSuperintendênciaCentral deConvêniose Parcerias(SCCP))
  • CD_Projeto 达多斯省共同储蓄库(2020/2021)
  • MoneyManagerApp 该存储将容纳Holberton School项目组合项目。 该项目本身基于每个人的货币资源管理,以控制他们的费用,储蓄和/或投资。
  •  银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并...
  • 银行储蓄系统

    千次阅读 2009-10-22 19:35:00
    计算机与信息工程学院实验报告 课程名称:高级语言课程设计 实验项目:银行储蓄实验项目一、银行储蓄系统主菜单模块设计与实现1.1库函数描述(原型、功能、头部文件)及其作用Time显示当前时间类 #includeSystem...

    计算机与信息工程学院实验报告

     课程名称:高级语言课程设计
     
     实验项目:银行储蓄


    实验项目一、银行储蓄系统主菜单模块设计与实现
    1.1库函数描述(原型、功能、头部文件)及其作用
    Time显示当前时间类 #include<time.H>
    System()调用dos命令 _sleep()停息#include<stdlib.H>
    String 字符串流#include<string.H>
    #include"myheader.h"中有调用的全部函数声明
    1.2编码(必须附加注释)
    #include"myheader.h"
    void main()
    {
     //背景颜色设置
     system("COLOR 16");
    /*
    颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为
    前景。每个数字可以为以下任何值之一:

        0 = 黑色       8 = 灰色
        1 = 蓝色       9 = 淡蓝色
        2 = 绿色       A = 淡绿色
        3 = 湖蓝色     B = 淡浅绿色
        4 = 红色       C = 淡红色
        5 = 紫色       D = 淡紫色
        6 = 黄色       E = 淡黄色
        7 = 白色       F = 亮白色
    */
     //输出=============★欢迎进入银行活期存款系统★=============
     int i;
     for(i=0;i<13;i++)
      cout<<'=';
     cout<<"★欢迎进入银行活期存款系统★";
     for(i=0;i<13;i++)
      cout<<'=';
     cout<<endl;
     //列示当前时间
     cout<<"当前时间:";
     for(i=0;i<6;i++)
      cout<<" ";
     Time t=latesttime();
     t.print();
     //列示菜单
     mylist();
     cout<<"如果您不了解该系统请按N否则按Y: ";
     //核实输入是否为字符
     string check;
     while(1)
     {
      cin>>check;
      if(check.length()>1)
      {
       cout<<"您的输入有误请重新输入:";
       continue;
      }
      if(check[0]!='Y'&&check[0]!='N')
       cout<<"您的输入有误请重新输入:";
      else
       break;
     }
     int mark=1;
     if(check[0]=='N')
     {
      mark=0;
      cout<<"友情提示:按对应业务的编号即可进行该业务!"<<endl<<"请继续:"<<endl;
     }
     int flag=1;
     while(flag++)
     {
      if(flag>2)
      {
       system("cls");
       mylist();
      }
      if(mark)
       cout<<"请选择业务:";
      string servicenum;
       //核实输入是否为字符
         while(1)
      {
       cin>>servicenum;
       if(servicenum.length()>1)
       {
        cout<<"您的输入有误请重新输入:";
        continue;
       }
       else
        break;
      }
      cout<<"确认请按Y,修改请按N,请选择:";
      string mark;
      //核实输入是否为字符
      while(1)
      {
       cin>>mark;
       if(mark.length()>1)
       {
        cout<<"您的输入有误请重新输入:";
        continue;
       }
       if(mark[0]!='Y'&&mark[0]!='N')
        cout<<"您的输入有误请重新输入:";
       else
        break;
      }
      if(mark[0]=='N')
       continue;
      if(servicenum[0]=='0')
       break;
      cout<<"  正在处理请稍等.";
      _sleep(1000);
      cout<<".";
      _sleep(1000);
      cout<<"./n";
      _sleep(1000);
      switch(servicenum[0])
      {
       //开户
      case '1': creaccount();break;
       //存款
      case '2': deposit();break;
       //取款
      case '3': withdraw();break;
       //计息
      case '4': computeprofit();break;
       //查询
      case '5': checkbalance();break;
       //排序
      case '6': order();break;
       //系统介绍
      case '7': about(); break;
      default: cout<<"对不起,您的选择超出了我们的业务范围。"<<endl;
      }
     }
     cout<<"交易完毕,谢谢合作!!!"<<endl;
    }
    1.3 mylist.Cpp 主函数显示菜单
    void mylist()
    {
     int i;
     for(i=0;i<11;i++)
      cout<<' ';
     cout<<"*************主菜单*************"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆0.................退出    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆1.................开户    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆2.................存款    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆3.................取款    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆4.................计息    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆5.................查询    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆6.................排序    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆7.................关于    ☆"<<endl;
     for(i=0;i<12;i++)
      cout<<" ";
     cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
    }
    void about()
    {
     cout<<"银行活期存款系统   作者:张瑞"<<endl;
     cout<<"该系统严格按照国际银行活期存款规则编写,"<<endl;
     cout<<"如果您什么不懂,请在第一步操作中输入N."<<endl;
     cout<<"注意:请按照提示进行操作.否则后果自负!!!"<<endl;
     cout<<"版权所有,打击盗版!!!"<<endl;
     over();
     return;
    }
    1.4实验小结(实验遇到的问题,解决方法)
    1.调用外部函数时光简单声明不行 必需加个外部修饰extern
    2.也可调用外部变量 同样用extern
    3.把定义的函数都放到myheader.H的头文件中声明
    实验项目二、银行储蓄系统开户模块设计与实现
    2.1库函数描述(原型、功能、头部文件)及其作用
    #include<iostream>//c++的标准输入输出
    #include<stdlib.h>//c的库函数
    #include<string>//字符串流
    #include<conio.h>//getch()键盘输入屏幕不输出
    #include<vector>//STL中的迭代器
    #include <shlobj.h>//messagebox()消息框
    #include<time.h>//时间类的头文件
    #include<stdio.h>//c标准输入输出和文件流
    using namespace std;
    2.2帐户类定义
    #include"myheader.h"
    //帐号类是定义在myhead.H头文件里
    class Time{
    public:
     int year,month,day,hour,minute,second;
     Time(int a=0,int b=0,int c=0,int d=0,int e=0,int f=0):year(a),month(b),day(c),hour(d),minute(e),second(f){}
     void print()
     {
      cout<<year<<"年"<<month<<"月"<<day<<"日"<<hour<<"时"<<minute<<"分"<<second<<"秒"<<endl;
     }
     void print1()
     {
      cout<<year<<"年"<<month<<"月"<<day<<"日"<<hour<<"时"<<minute<<"分"<<second<<"秒";
     }
     //两个时间段相距的天数
     int isHalfYear(Time t)
     {
      int ct;
      if(year>t.year)
       ct=(year-t.year-1)*360+(month-t.month+11)*30+day+30-t.day;
      else
       ct=(month-t.month-1)*30+day+30-t.day;
      return ct;
     }
     void copy(Time f)//时间拷贝
     {
      year=f.year;
      month=f.month;
      day=f.day;
      hour=f.hour;
      minute=f.minute;
      second=f.second;
     }
    //判断时间是否大
     bool timebig(Time t)
     {
      if(year>t.year)
       return false;
      else if(year<t.year)
       return true;
      else if(year==t.year)
      {
       if(month>t.month)
        return false;
       else if(month<t.month)
        return true;
       else if(month==t.month)
       {
        if(day>t.day)
         return false;
        else if(day<t.day)
         return true;
        else if(day==t.day)
        {
         if(hour>t.hour)
          return false;
         else if(hour<t.hour)
          return true;
         else if(hour==t.hour)
         {
          if(minute>t.minute)
           return false;
          else if(minute<t.minute)
           return true;
          else if(minute==t.minute)
          {
           if(second>t.second)
            return false;
           else if(second<t.second)
            return true;
          }
          else
           return true;
         }
         else
          return true;
        }
        else
         return true;
       }
       else
        return true;
      }
      return true;
     }
    };
    //检查输入的字符产是否全是数字
    bool checknum(const char*);
    //重载比较函数
    int strcmp(const char*s1,const char*s2);
    //钱数大些函数声明
    void readmoney(char*);
    //定义帐号类
    class Account

    public:
     char name[20],ID[20],balance[15],code[10];
     Time time;
     Account(const char* a="",const char* b="",const char* c="",const char* d="",Time e=Time(0,0,0,0,0,0))
     {
      strcpy(name,a);
      strcpy(ID,b);
      strcpy(code,c);
      strcpy(balance,d);
      time=e;
     }
     void print1()
     {
      int i;
      for(i=0;i<30;i++)
       cout<<"{}";
      cout<<endl;
      cout<<"姓名:  "<<name<<endl;
      cout<<"身份证号:  "<<ID<<endl;
      cout<<"余额:  "<<balance<<endl;
      cout<<"余额大写:  ";
      readmoney(balance);
      cout<<"开户时间:  ";
      time.print();
     }
     void print2()
     {
      int i;
      for(i=0;i<30;i++)
       cout<<"{}";
      cout<<endl;
      cout<<"姓名:  "<<name<<endl;
      cout<<"身份证号:  "<<ID<<endl;
      cout<<"余额:  "<<balance<<endl;
      cout<<"余额大写:  ";
      readmoney(balance);
      cout<<"上次计息时间(开户时间):  ";
      time.print();
     }

    };
    class Rem{
    public:
     char ID[20],money[10];
     int flag;
     Time t;
     Rem(char*a="",char*b="",int c=0,Time d=Time(0,0,0,0,0,0))
     {
      strcpy(ID,a);
      strcpy(money,b);
      flag=c;
      t=d;
     }
     void print()
     {
      if(flag==0)
      {
       t.print1();
       cout<<" "<<"取款"<<money<<"元"<<endl;
      }
      if(flag==1)
      {
       t.print1();
       cout<<" "<<"存款"<<money<<"元"<<endl;
      }
     }
    };
    //菜单
    void mylist();
    //开户
    void creaccount();
    //存款
    void deposit();
    //取款
    void revisecode();
    //计息
    void computeprofit();
    //查询
    void checkbalance();
    //排序色
    void creatcolor();
    //关于系统介绍
    void about();
    //大写读取金额
    void readmoney(char* s);
    //重载比较函数
    int strcmp(const char* s1,const char*s2);
    //结束
    void over();
    //求两字符串之和
    void plus(char*s1,char*s2);
    //求两字符串之差
    void minus(char* s1,char* s2);
    //将字符串倒置
    void opposition(char * s);
    //检查输入的金额是否合法并对其进行规范性修改
    bool checkmoney(char*s);
    //计算利息专用
    bool jixi(Account& a);
    //校验身份证号是否正确
    bool checkID(const char* s);
    //检查所输入的身份证号是否已开过户,开过户返回true,未开过返回false
    bool finID(const char* s);
    //获取当前时间的time函数
    Time latesttime();
    //移位
    void change(char*ch);
    //输出备忘录
    void output(const char * s);
    2.3编码(必须附加注释)
    #include"myheader.h"
    void creaccount()//开户
    {
     cout<<"『欢迎您在此开户』"<<endl;
     char ID[20]="";
     //检查该身份证号是否符合中华人民共和国身份证号码的编制规则
     while(1)
     {
      cout<<"请输入您的身份证号: "<<endl;
      cin>>ID;
      if(checkID(ID))
       break;
      else
      {
       cout<<"您的输入有误请重新输入您的身份证号:"<<endl;
      }
     }
     //检查是否在此开过户
     if(finID(ID))
     {
      cout<<"您已在次开过户。"<<endl;
      over();
      return;
     }
     cout<<"请输入您的姓名:"<<endl;
     string name;
     while(1)
     {
      cin>>name;
      if(name.length()>8)
       cout<<"您的输入有误,请重新输入。"<<endl;
      else
       break;
     }
     const char*copyname=name.c_str();//name的首地址  且必须是const只读的
     cout<<"请输入您的密码:"<<endl;
     cout<<"注意:密码更正每人只有三次机会,密码只有六位。"<<endl;
     char cod[7]="",flag=0;//计数
     while(1)
     {
      if(flag)
      {
       if(flag==3)
        break;
       cout<<"您的密码输入有误,";
      }
      int i;
      cout<<"请输入密码:"<<endl;
      for(i=0;i<6;i++)
      {
       cod[i]=getch();
       cout<<"*";
      }
      MessageBox(0,"密码位数已足","提示",MB_OK | MB_SYSTEMMODAL );
      cout<<endl;
      cout<<"请确认一下密码:"<<endl;
      char copycod[7]="";
      for(i=0;i<6;i++)
      {
       copycod[i]=getch();
       cout<<"*";
      }
      MessageBox(0,"密码位数已足","提示",0);
      cout<<endl;
      if(strcmp(cod,copycod)!=0)
      {
       flag++;
       continue;
      }
      else
      {
       MessageBox(0,"恭喜!!!密码输入成功!","提示",0);
       break;
      }
     }
     cout<<"请输入您的开户金额:"<<endl;
     char money[20]="";
     while(1)
     {
      cin>>money;
      if(checkmoney(money))
       break;
      else
       cout<<"您的输入有误,请重新输入:"<<endl;
     }
     FILE *fp;
     fp=fopen("D://mybank","a");
     Time t=latesttime();
     Account temp(copyname,ID,cod,money,t);
     fwrite(&temp,sizeof(Account),1,fp);
     fclose(fp);
     MessageBox(0,"恭喜您!!!在次开户成功!!!","提示",0);
     int jx=MessageBox(0,"您是否要查看一下您的信息?","提示",1)-2;
     if(jx)
      temp.print1();
     over();
     return;

    }
    4实验小结(实验遇到的问题,解决方法)
    在getch()前有时要加入cin.get()防止上次输入被getch()获取
    对密码和帐号输入后要在数组最后加个“ ”防止数组错误
    对打开文件是 有时用绝对路径'//'表示/
    实验项目三银行储蓄系统存款模块设计与实现
    3.1库函数描述(原型、功能、头部文件)及其作用
    #include<stdio.h>//c的标准输入输出和文件流
    #include<shlobj.h>//massagebox()消息框的头文件
    #include "myheaer.h"//全部调用函数
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    3.2编码(必须附加注释)
    #include"myheader.H"
    //存款
    void deposit()
    {
     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
     {
      cout<<"您尚未在此开户!!!"<<endl;
      over();
      return;
     }
     fclose(fp);
     cout<<"=====☆欢迎进入存款模块☆====="<<endl;
     cout<<"请输入您的身份证号:"<<endl;
     char ID[20]="";
     while(1)
     {
      cin>>ID;
      if(checkID(ID))
      {
       if(finID(ID))
        break;
       else
       {
        cout<<"您尚未在此开户!!!"<<endl;
        over();
        return;
       }
      }
      else
       cout<<"您的输入有误,请重新输入您的身份证号:"<<endl;
     }
     cout<<"请输入您的存款金额: ";
     char money[20]="";
     while(1)
     {
      cin>>money;
      if(checkmoney(money))
       break;
      else
       cout<<"您的输入有误,请重新输入:"<<endl;
     }
     fp=fopen("D://mybank","r+a");
     while(!feof(fp))
     {
      Account temp;
      fread(&temp,sizeof(Account),1,fp);
      if(strcmp(temp.ID,ID)==0)
      {
       fseek(fp,-sizeof(Account)-1,SEEK_CUR);
       plus(temp.balance,money);
       fwrite(&temp,sizeof(Account),1,fp);
       break;
      }
     }
     fclose(fp);
     Rem r(ID,money,1,latesttime());//把ID、钱、存款、最后时间写入 类中
     FILE* cfp=fopen("D://myout","ab");
     fwrite(&r,sizeof(Rem),1,cfp);
     fclose(cfp);
     MessageBox(0,"恭喜您存款成功!!!","温馨提示",MB_OK | MB_SYSTEMMODAL );
     over();
     return;
    }

    3.3实验小结(实验遇到的问题,解决方法)
    在帐号密码判断时 用了feof()是判断文件是否结束 并每次读取判断直到文件结束或找到并正确
    实验项目四银行储蓄系统取款模块设计与实现
    4.1库函数描述(原型、功能、头部文件)及其作用
    #include<iostream.h>//c++标准输入输出
    #include<stdio.h>//c的标准输入输出
    #include<shlobj.h>//massagebox()以警告框显示
    #include "myhead.h"//全部调用函数
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    4.2编码(必须附加注释)
    #include"myheader.H"
    //取款
    void withdraw()
    {
     FILE*fp;
     fp=fopen("D://mybank","rb");
     if(fp==NULL)
     {
      cout<<"您尚未在此开户!!!"<<endl;
      over();
      return;
     }
     cout<<"=====☆欢迎进入取款模块☆====="<<endl;
     cout<<"请输入您的身份证号:"<<endl;
     char ID[20]="";
     while(1)
     {
      cin>>ID;
      if(checkID(ID))
       break;
      else
       cout<<"您的输入有误,请重新输入您的身份证号:"<<endl;
      if(!finID(ID))
      {
       cout<<"您尚未在此开户!!!"<<endl;
       over();
       return;
      }
     }
     char code[10]="";
     while(1)
     {
      cout<<"请输入您的密码:"<<endl;
      int i;
      for(i=0;i<6;i++)
      {
       code[i]=getch();
       cout<<"*";
      }
      MessageBox(0,"密码位数已足","提示",MB_OK | MB_SYSTEMMODAL );
      cout<<endl;
      string choose;
      cout<<"确认请按1,否则请按0,请选择:"<<endl;
      while(1)
      {
       cin>>choose;
       if(choose.length()>1||choose[0]!='0'&&choose[0]!='1')
       {
        cout<<"您的确认输入您的输入有误,请重新输入:"<<endl;
        continue;
       }
       else
        break;
      }
      if(choose[0]=='0')
       continue;
      if(choose[0]=='1')
       break;
     }
     cout<<"请输入您的取款金额: ";
     char money[20]="";
     while(1)
     {
      cin>>money;
      if(checkmoney(money))
       break;
      else
       cout<<"您的输入有误,请重新输入:"<<endl;
     }
     fp=fopen("D://mybank","r+a");
     if(fp==NULL)
     {
      cout<<"您尚未在此建立帐户!!!"<<endl;
      over();
     }
     int flag1=0,flag2=0;
     Account temp;
     while(!feof(fp))
     {
      fread(&temp,sizeof(Account),1,fp);
      if(strcmp(temp.ID,ID)==0)
       flag1=1;
      if(flag1==1&&strcmp(temp.code,code)==0)
       flag2=1;
      if(flag1==1&&flag2==0)
      {
       cout<<"您的密码不正确,您无权进行此操作!!!"<<endl;
       over();
       return;
      }
      if(flag1==1&&flag2==1)
      {
       fseek(fp,-sizeof(Account)-1,SEEK_CUR);
       if(strcmp(temp.balance,money)==-1)
       {
        cout<<"您的余额已不足!!!"<<endl;
        break;
       }
       minus(temp.balance,money);
       fwrite(&temp,sizeof(Account),1,fp);
       break;
      }
      flag1=0;
     }
     fclose(fp);
     Rem r(ID,money,0,latesttime());
     FILE* cfp=fopen("D://myout","ab");
     fwrite(&r,sizeof(Rem),1,cfp);
     fclose(cfp);
     MessageBox(0,"您已取款成功!!!","温馨提示",0);
     over();
     return;
    }

    4.3实验小结(实验遇到的问题,解决方法)
    取款模块与取款相差无几
    实验项目五银行储蓄系统计息模块设计与实现
    5.1库函数描述(原型、功能、头部文件)及其作用
    #include<iostream.h>//c++标准输入输出
    #include<stdio.h>//c的标准输入输出
    #include<shlobj.h>//messagebox()消息框
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    #include"myhead.h"//zh类
    5.2编码(必须附加注释)
    #include"myheader.H"
    //计息 
    void computeprofit()

     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
     {
      cout<<"尚无储户!!!"<<endl;
      over();
      return;
     }
     fclose(fp);
     cout<<"=====☆欢迎进入计息模块☆====="<<endl;
     cout<<"本行超高利率10%."<<endl;
     int sum=0,num=0,i,j;
     fp=fopen("D://mybank","r");
     Account temp;
     while(!feof(fp))
     {
      fread(&temp,sizeof(Account),1,fp);
      num++;
     }
     num--;
     fclose(fp); 
     for(i=0;i<num;i++)
     {
      fp=fopen("D://mybank","r+a");
      for(j=0;j<num;j++)
      {
       fread(&temp,sizeof(Account),1,fp);
       Time t=latesttime();
       int time=t.isHalfYear(temp.time)/30;
       if(time<6)
        continue;
       fseek(fp,-sizeof(Account)-1,SEEK_CUR);
       if(!jixi(temp))
       {
        sum++;
        fwrite(&temp,sizeof(Account),1,fp);
        break;
       }
      }
      fclose(fp);
     }
     cout<<"本次计息帐户"<<sum<<"个"<<endl;
     MessageBox(0,"计息完毕!!!","温馨提示",MB_OK | MB_SYSTEMMODAL );
     over();
     return;
    }
    5.3实验小结(实验遇到的问题,解决方法)
    1.这里是边读取文件帐号信息并判断和计息
    实验项目六银行储蓄系统查询模块设计与实现
    6.1库函数描述(原型、功能、头部文件)
    #include<iostream.h>//c++标准输入输出
    #include<stdlib.h>//c库文件
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    #include"myhead.h"//zh类定义
    #include<stdio.h>//c标准输入输出
    #include<string.H>//string 字符串流 strcmp()比较两参数是否相等
    6.2编码(必须附加注释)
    #include"myheader.h"
    void checkbalance()
    {
     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
     {  
      cout<<"尚无储户,文件为空!!!"<<endl;
      over();
      return;
     }
     fclose(fp);
     cout<<"欢迎进入查询模块,很乐意为您服务!!!"<<endl;
     cout<<"请输入您的身份证号:"<<endl;
     char ID[20]="";
     while(1)
     {
      cin>>ID;
      if(checkID(ID))
       break;
      else
       cout<<"您的输入有误,请重新输入您的身份证号:"<<endl;
      if(!finID(ID))
      {
       cout<<"您尚未在此开户!!!"<<endl;
       over();
       return;
      }
     }
     char code[10]="";
     while(1)
     {
      cout<<"请输入您的密码:"<<endl;
      int i;
      for(i=0;i<6;i++)
      {
       code[i]=getch();
       cout<<"*";
      }
      MessageBox(0,"密码位数已足","提示",MB_OK | MB_SYSTEMMODAL );
      cout<<endl;
      string choose;
      cout<<"确认请按1,否则请按0,请选择:"<<endl;
      while(1)
      {
       cin>>choose;
       if(choose.length()>1||choose[0]!='0'&&choose[0]!='1')
       {
        cout<<"您的确认输入您的输入有误,请重新输入:"<<endl;
        continue;
       }
       else
        break;
      }
      if(choose[0]=='0')
       continue;
      if(choose[0]=='1')
       break;
     }
     Account temp;
     fp=fopen("D://mybank","r");
     while(!feof(fp))
     {
      fread(&temp,sizeof(Account),1,fp);
      if(strcmp(temp.ID,ID)==0)
      {
       if(strcmp(temp.code,code)==0)
       {
        temp.print2();
        output(temp.ID);
        break;
       }
       cout<<"您的密码输入与帐户不对应!!!"<<endl;
       break;
      }
     }
     fclose(fp);
     over();
     return;
    }
    6.3实验小结(实验遇到的问题,解决方法)
    这里大量用了string注意其开始也是0 且貌似字符串数组
    String中 有大量的属性函数 可以调用
    实验项目七 银行储蓄系统富豪排行榜模块设计与实现
    7.1库函数描述(原型、功能、头部文件)及其作用
    #include<iostream.h>//c++的标准输入输出
    #include<stdlib.h>//c的库文件
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    #include"myhead.h"//全部调用函数的声明和账户类的定义
    #include<string.h>//字符串
    #include<stdio.h>//c的标准输入输出
    #include<vector.H>//vector<Account> data; 是迭代器 帐号类容器
    7.2编码(必须附加注释)
    #include"myheader.h"
    void order()
    {
     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
     {
      cout<<"此时尚无帐户在此建立!!!"<<endl;
      over();
      return;
     }
     fclose(fp);
     cout<<"欢迎进入排序模块,很乐意为您服务!!!"<<endl;
     //排序标准种类
     cout<<"***********☆*************"<<endl;
     cout<<"  1--按身份证号排序:"<<endl;
     cout<<"  2--按余额大小排序:"<<endl;
     cout<<"  3--按时间先后排序:"<<endl;
     cout<<"请选择对应序号:"<<endl;
     string s;
     char command;
     while(1)
     {
      cin>>s;
      if(s.length()>1)
      {
       cout<<"您的输入有误请重新输入: "<<endl;
       continue;
      }
      command=s[0];
      if(command!='1'&&command!='2'&&command!='3')
       continue;
      else
       break;
     }
     //从文件中读入数据以备排序
     vector<Account> data;
     Account temp;
     fp=fopen("D://mybank","r");
     while(!feof(fp))
     {
      fread(&temp,sizeof(Account),1,fp);
      data.push_back(temp);
     }
     //最后一个数据会被重复读入所以要删一个最后的数据
     data.pop_back();//函数删除末尾元素
     int i,j;
     //按身份证小的顺序排序
     if(command=='1')
     {
      for(i=0;i<data.size();i++)
      {
       bool good=true;
       for(j=0;j<data.size()-i-1;j++)
        if(strcmp(data[j].ID,data[j+1].ID)==-1)
        {
         good=false;
         swap(data[j],data[j+1]);//交换
        }
       if(good)
        break;
      }
     }
     //按余额由大到小的顺序排序
     if(command=='2')
     {
      for(i=0;i<data.size();i++)
      {
       bool good=true;
       for(j=0;j<data.size()-i-1;j++)
        if(strcmp(data[j].balance,data[j+1].balance)==-1)
        {
         good=false;
         swap(data[j],data[j+1]);//交换
        }
       if(good)
        break;
      }
     }
     //按时间顺序先后排序
     if(command=='3')
     {
      for(i=0;i<data.size();i++)
      {
       bool good=true;
       for(j=0;j<data.size()-i-1;j++)
        if(!data[j].time.timebig(data[j+1].time))
        {
         good=false;
         swap(data[j],data[j+1]);//交换
        }
       if(good)
        break;
      }
     }
     for(i=0;i<data.size();i++)
      data[i].print1();
     cout<<"按任意键请继续...."<<endl;
     char ok;
     ok=getch();
     return;
    }
    7.3实验小结(实验遇到的问题,解决方法)
    这里用到了冒泡函数来排序
    实验项目八 银行储蓄系统被调用模块设计与实现
    8.1库函数描述(原型、功能、头部文件)及其作用
    #include<stdio.h>//c标准输入输出
    #include<iostream.h>//c++标准输入输出
    #include<shlobj.h>//MessageBox需要的头部文件
    #include<conio.h>//getch()从控制台读取一个字符,但不显示在屏幕上
    #include"myheader.h"//帐号类的定义 和 全部函数的声明
    #include<stdlib.h>//c库文件
    #include<fstream.h>//c++文件流
    8.2编码(必须附加注释)
    #include"myheader.h"
    //检查身份证号是否符合中华人民共和国身份证号的规则
    bool checkID(const char* s)
    {
     if(strlen(s)!=18&&strlen(s)!=15||!checknum(s))
      return false;
     if(strlen(s)==18)
     {
      int year=int(s[6]-'0')*1000+int(s[7]-'0')*100+int(s[8]-'0')*10+int(s[9]-'0');
      int month=int(s[10]-'0')*10+int(s[11]-'0');
      int day=int(s[12]-'0')*10+int(s[13]-'0');
      if(year>2010||year<1900)
       return false;
      if(month>12)
       return false;
      if(year%400==0||(year%4==0&&year%100!=0))
      {
       if(month==2&&day>29)
        return false;
      }
      else
      {
       if(month==2&&day>28)
        return false;
      }
      if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
      {
       if(day>31)
        return false;
      }
      else
      {
       if(day>30)
        return false;
      }
     }
     if(strlen(s)==15)
     {
      int year=1900+int(s[6]-'0')*10+int(s[7]-'0');
      int month=int(s[8]-'0')*10+int(s[9]-'0');
      int day=int(s[10]-'0')*10+int(s[11]-'0');
      if(month>12)
       return false;
      if(year%400==0||(year%4==0&&year%100!=0))
      {
       if(month==2&&day>29)
        return false;
      }
      else
      {
       if(month==2&&day>28)
        return false;
      }
      if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
      {
       if(day>31)
        return false;
      }
      else
      {
       if(day>30)
        return false;
      }
     }
     return true;
    }
    //检查此身份证号是否在此开过户未开户返回false,开过户返回true
    bool finID(const char* s)
    {
     Account temp;
     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
      return false;
     while(!feof(fp))
     { 
      fread(&temp,sizeof(Account),1,fp);
      if(strcmp(temp.ID,s)==0)
       return true;
     }
     return false;
    }
    //输出机器时间
    Time latesttime()
    {
     time_t t=time(NULL);
     tm *T=gmtime(&t);//获取当前时间
     int year=T->tm_year+1900;
     int month=T->tm_mon+1;
     int day=T->tm_mday;
     int hour=T->tm_hour+8;
     int minute=T->tm_min;
     int sec=T->tm_sec;
     return Time(year,month,day,hour,minute,sec);
    }
    //将金额大写读出
    void readmoney(char* s)
    {
     if(strlen(s)==1&&s[0]=='0')
     {
      cout<<"零元整"<<endl;
      return;
     }
     if(s[0]=='0')
      cout<<"零";
     int i,length,zeronum=0;
     for(i=0;i<strlen(s);i++)
      if(s[i]=='.')
       break;
     length=i;
     for(i=0;i<length;i++)
     {
      if(s[i]=='0')
       zeronum++;
      if(s[i]!='0'&&zeronum!=0&&length-i!=4&&length-i!=8)
      {
       cout<<"零";
       zeronum=0;
      }
      if(s[i]!='0')
       zeronum=0;
      switch(s[i])
      {
      case '1': cout<<"壹"; break;
      case '2': cout<<"贰"; break;
      case '3': cout<<"叁"; break;
      case '4': cout<<"肆"; break;
      case '5': cout<<"伍"; break;
      case '6': cout<<"陆"; break;
      case '7': cout<<"柒"; break;
      case '8': cout<<"捌"; break;
      case '9': cout<<"玖"; break;
      }
      if(s[i]=='0'&&((length-1-i)%4!=0||zeronum>=4))
       continue;
      switch(length-i-1)
      {
      case 5:
      case 9:
      case 1: cout<<"拾"; break;
      case 6:
      case 10:
      case 2: cout<<"佰"; break;
      case 7:
      case 11:
      case 3: cout<<"仟"; break;
      case 12:
      case 4: cout<<"万"; break;
      case 8: cout<<"亿"; break;
      }
     }
     if(length==strlen(s)||s[++i]=='0')
      cout<<"元整"<<endl;
     else
     {
      cout<<"元";
      switch(s[i])
      {
      case '0': cout<<"零"; break;
      case '1': cout<<"壹"; break;
      case '2': cout<<"贰"; break;
      case '3': cout<<"叁"; break;
      case '4': cout<<"肆"; break;
      case '5': cout<<"伍"; break;
      case '6': cout<<"陆"; break;
      case '7': cout<<"柒"; break;
      case '8': cout<<"捌"; break;
      case '9': cout<<"玖"; break;
      }
      cout<<"角"<<endl;
     }
    }
    //重载字符串比较函数
    int strcmp(const char* s1,const char*s2)
    {
     if(strlen(s1)>strlen(s2))
      return 1;
     else if(strlen(s1)<strlen(s2))
      return -1;
     else
     {
      int i;
      for(i=0;i<strlen(s1);i++)
      {
       if(s1[i]=='.')
        continue;
       if(s1[i]>s2[i])
        return 1;
       else if(s1[i]<s2[i])
        return -1;
      }
     }
     return 0;
    }
    //检查输入的字符串是否为全为数字字符
    bool checknum(const char* s)
    {
     int i;
     for(i=0;i<strlen(s);i++)
      if(s[i]>'9'||s[i]<'0')
       return false;
     return true;
    }
    void over()
    {
     cout<<"按任意键请继续...."<<endl;
     char ok;
     ok=getch();
    }
    //求两数字字符串之和
    void plus(char*s1,char*s2)
    {
     opposition(s1);
     opposition(s2);
     int i,length=strlen(s1);
     for(i=0;i<15;i++)
     {
      if(s1[i]=='.')
       continue;
      s1[i]=s1[i]+s2[i];
     }
     for(i=0;i<length;i++)
     {
      if(s1[i]=='.')
       continue;
      if(s1[i]>=96)
       s1[i]-=96;
      else
       s1[i]-=48;
     }
     if(s1[0]>=10)
     {
      s1[2]+=s1[0]/10;
      s1[0]%=10;
     }
     s1[0]+=48;
     for(i=2;i<length;i++)
     {
      if(s1[i]>=10)
      {
       s1[i+1]+=s1[i]/10;
       s1[i]%=10;
      }
      s1[i]+=48;
     }
     if(s1[i]!=0)
      s1[i]+=48;
     opposition(s1);
     opposition(s2);
     return;
    }
    //求两数字字符串之差
    void minus(char* s1,char* s2)
    {
     opposition(s1);
     opposition(s2);
     int i,length=strlen(s1);
     for(i=0;i<length;i++)
     {
      if(s1[i]=='.')
       continue;
      s1[i]=s1[i]-s2[i];
     }
     if(s1[0]<0)
     {
      s1[0]+=10;
      s1[2]-=1;
     }
     s1[0]+=48;
     for(i=2;i<length;i++)
     {
      if(s1[i]<0)
      {
       s1[i+1]-=1;
       s1[i]+=10;
      }
      if(s1[i]<48)
       s1[i]+=48;
     }
     for(i=length-1;i>=0;i--)
     {
      if(s1[i]=='.')
       continue;
      if(s1[i]==48)
       s1[i]-=48;
      else
       break;
     }
     int sum=0;
     for(i=0;i<length;i++)
      if(s1[i]!=0)
       sum++;
     if(sum==1)
     {
      s1[1]=0;
      s1[0]=48;
     }
     if(sum==2)
     {
      if(s1[0]!=0)
       s1[2]=48;
      else
       s1[0]=48;
     }
     opposition(s1);
     opposition(s2);
     return;
    }
    //将字符串倒置
    void opposition(char * s)
    {
     int i,j;
     for(i=0,j=strlen(s)-1;i<strlen(s)/2;i++,j--)
      swap(s[i],s[j]);
     return;
    }
    //检查输入的金额是否合法
    bool checkmoney(char*s)
    {
     if(strlen(s)>15)
      return false;
     int i,sum=-1;
     for(i=0;i<strlen(s);i++)
     {
      if(sum!=-1)
       sum++;
      if(s[i]=='.')
      {
       sum=0;
       continue;
      }
      if(s[i]<'0'||s[i]>'9')
       return false;
     }
     if(sum==-1)
     {
      s[i]='.';
      i++;
      s[i]='0';
     }
     if(sum==0||sum>1)
      return false;
     return true;
    }
    //计算利息专用,不能计息返回true,否则返回false
    bool jixi(Account& a)
    {
     Time t=latesttime();
     int time=t.isHalfYear(a.time)/30;
     if(time<6)
      return true;
     a.time.copy(t);
     char temp[20]="";
     strcpy(temp,a.balance);
     change(temp);
     plus(a.balance,temp);
     return false;
    }
    //移位
    void change(char*ch)
    {
     int i;
     for(i=0;i<strlen(ch);i++)
      if(ch[i]=='.')
       break;
     if(i==strlen(ch))
     {
      ch[i]=ch[i-1];
      ch[i-1]='.';
     }
     else
     {
      i++;
      if(ch[i]>'4')
       ch[i-2]+=1;
      ch[i]=0;
      i--;
      swap(ch[i],ch[i-1]);
     }
    }
    //输出备忘录
    void output(const char*s)
    {
     FILE *fp=fopen("D://myout","rb");
     if(fp==NULL)
      return;
     Rem temp;
     int i,sum=0;
     while(!feof(fp))
     {
      fread(&temp,sizeof(Rem),1,fp);
      sum++;
     }
     fclose(fp);
     sum--;
     int count=0;
     fp=fopen("D://myout","rb");
     for(i=0;i<sum;i++)
     {
      fread(&temp,sizeof(Rem),1,fp);
      if(strcmp(temp.ID,s)==0)
      {
       count++;
       cout<<count<<"  ";
       temp.print();
      }
     }
     fclose(fp);
    }
    //账户为空时开户
    void checkbalance()
    {
     FILE*fp;
     fp=fopen("D://mybank","r");
     if(fp==NULL)
     {  
      cout<<"尚无储户,文件为空!!!"<<endl;
      over();
      return;
     }
     fclose(fp);
     cout<<"欢迎进入查询模块,很乐意为您服务!!!"<<endl;
     cout<<"请输入您的身份证号:"<<endl;
     char ID[20]="";
     while(1)
     {
      cin>>ID;
      if(checkID(ID))
       break;
      else
       cout<<"您的输入有误,请重新输入您的身份证号:"<<endl;
      if(!finID(ID))
      {
       cout<<"您尚未在此开户!!!"<<endl;
       over();
       return;
      }
     }
     char code[10]="";
     while(1)
     {
      cout<<"请输入您的密码:"<<endl;
      int i;
      for(i=0;i<6;i++)
      {
       code[i]=getch();
       cout<<"*";
      }
      MessageBox(0,"密码位数已足","提示",MB_OK | MB_SYSTEMMODAL );
      cout<<endl;
      string choose;
      cout<<"确认请按1,否则请按0,请选择:"<<endl;
      while(1)
      {
       cin>>choose;
       if(choose.length()>1||choose[0]!='0'&&choose[0]!='1')
       {
        cout<<"您的确认输入您的输入有误,请重新输入:"<<endl;
        continue;
       }
       else
        break;
      }
      if(choose[0]=='0')
       continue;
      if(choose[0]=='1')
       break;
     }
     Account temp;
     fp=fopen("D://mybank","r");
     while(!feof(fp))
     {
      fread(&temp,sizeof(Account),1,fp);
      if(strcmp(temp.ID,ID)==0)
      {
       if(strcmp(temp.code,code)==0)
       {
        temp.print2();
        output(temp.ID);
        break;
       }
       cout<<"您的密码输入与帐户不对应!!!"<<endl;
       break;
      }
     }
     fclose(fp);
     over();
     return;
    }
    8.3实验小结(实验遇到的问题,解决方法)
    Getch()是键盘输入而屏幕不显示 在进行时最好清屏 防止上次输入误读
    Getch()是读入都是字符
    实验总结(实验心得及建议)

    模仿、更改、最后自己去写自己的东西。

    好的程序需要许多人的思维。

    一个人再强也要前期也要看别人的东西、去模仿。不然他写不出或不能写出较好的。

    通过跟他人的交流可以多了解自己并没有考虑到的问题。

    多去尝试改别人的程序,去改得更优化,毕竟一个人写的总有缺陷的地方。

    展开全文
  • 一个简单的应用程序,可让您管理不同的储蓄来源。 支持 支持是在每个国家/地区的基础上增加的。 请参阅Wiki,以了解有关添加您的国家/地区的详细信息 学分 该项目使用许多不同的未修改,所有这些都在build.gradle...
  • ============== 储蓄吸烟 在 SYMFONY 2 上使用 GRUNT、BOWER Fabien Zimmermann 的 Savingmoking.com 存储 先决条件 节点/rubis/php5 npm install -g grunt-cli npm install -g bower 第 1 步 - npm 安装 第 2 ...
  • Holyheld — DeFi新银行服务。 Holyheld使互联网经济变得容易,并且所有人都可以使用。 该应用程序抽象化了区块链的复杂性,因此您最终可以获得所有DeFi好处的优质金融服务。 通过我们的自动投资组合管理系统,您...
  • 中国邮政储蓄银行计算机类招聘Java笔试题
  • 中国邮政储蓄银行招聘考试真题,考银行的同学可以依据这个准备考试
  • 银行储蓄管理系统 构架设计 一体系结构 1系统需求 储户用卡取款时不能直接取款要先填取款表交给业务员输入资料再由储 户输入密码以确认身份还要在取款表单上签名以再次确认 最后业务员才把现 金交给储户 库存余额 ...
  • 让我们开始赚钱 如何评估您 我们喜欢好的代码。 易于阅读,并具有最佳实践。 我们需要自我记录的代码。 执行时间和内存使用效率。 易于测试。... 只需打开一个,我们将... 通过电子邮件与我们分享您的存储链接至 &
  • (6) 模型和方法设计(本系统所选用的数学模型和方法以及简要说明) (7) 安全保密设计 (8) 物理系统配置方案报告 l硬件配置设计 l通信与网络配置设计 l软件配置设计 l机房配置设计 (9) 系统实施方案及说明 ...
  • 2. 储蓄的出现 3. 银行的诞生 4. 利率 5. 高风险投资 6. 参考资料 1. 概述 这本书很早之前就在看了,最近想着把一些知识点总结一下,作为以后复习的资料,做事情要留下痕迹,俗话说人过留名、雁过留声。。。 ...

    目录

     

    1. 概述

    1.1 名词解释

    2. 储蓄的出现

    3. 银行的诞生

    4. 利率

    5. 高风险投资

    6. 参考资料


    1. 概述

    这本书很早之前就在看了,最近想着把一些知识点总结一下,作为以后复习的资料,做事情要留下痕迹,俗话说人过留名、雁过留声。。。

    1.1 名词解释

    • 储蓄

    1.把节约下来或暂时不用的钱或物积存起来,多指把钱存到银行里:~所。活期~。

    2.指积存的钱或物:家家有~。


    2. 储蓄的出现

    这一章节讲到,岛民存储的鱼(钱)越来越多,鱼的存储成了问题,主要体现在以下方面:

    • 自己存储的不便之处:鱼放在自己家里,鱼主人要解决如何存放的问题,还要防着偷鱼贼。就是说现金自己保存不安全,现金也会腐烂、找不到,这样鱼住人的财富就会变向的损失,道理就是这个道理。想想现在的我们谁会把自己的所有资产都以现金的方式保存在自己家里呢,想想都不安全。我们当然会把现金存银行、买理财产品等等。如下是书中给到的图,鱼住人拿着棍棒守着鱼都不敢睡觉(哈哈哈),鱼也散落一地,不宜久存,毕竟有保质期嘛,就像现在的纸质人民币一样,时间一长可能就破损了,或者找不到了。

     

    • 让多余的鱼增值:岛民虽愿意通过贷款和投资的方式实现鱼增值,但大多数人没时间、也没能力判断某商业计划的优劣。这就好比我们现在投资理财一样,自己平时上班那么忙,哪有时间搭理投资的事情。专业的人做专业的事,因此把钱交给基金经理,来帮我们实现财富的增值,基金经理帮我挣钱去吧,把钱交给你寡人放心(哈啊哈)。

     


    3. 银行的诞生

    这是有人嗅到了商机,自己看一家专门的储蓄所,来保管大家的鱼(钱),雇佣身强力壮的保安来看守。收取保管费、同时支付保安的工资,剩余的就是自己的利润所得。

    企业家可不会这么笨,他会拿着存储的钱(鱼)来投资、放贷,赚更多的钱,于是贷款公司也就诞生了。有了大家存储过来的前,贷款公司的老板擅长投资各种项目从中获利,看起来真是不错的生意。

     


    4. 利率

    书中提到,银行老板的收入和银行的经验状况密切相关,在放贷时,银行对可靠的(还款能力强的)借款人收取较低的利率,对风险高的借款人收取较高的利率来作为高风险的补偿。

    储户的存款利率,既能够支付给储户的利息,随着存款年限递增。存的时间越长,获得的利率也就越高,因位存的时间长造成银行存鱼(钱)短缺的风险就越低。

    • 利率的周期性波动

    随着生产率的大幅提高,岛上的存鱼(钱)越来越多,如果储藏室(银行)堆满了鱼(钱),银行的放贷利率就会主动降低(因为此时银行承受损失的能力较强,仓库里都是鱼(钱),不怕)。健康的经济也为新企业(需要钱的企业)提供了良好环境。

    贷款利率的降低,那么导致存款利率降低,从而抑制了储蓄。这时银行开始储蓄回落,相反的力量(例如提高存储利率)就会发挥作用,鼓励储蓄来补充银行的资产。

    银行存储变少时,就会提高贷款利率、同时高存款利率也会刺激储蓄,这样就会使银行再次积累资产,这时利率就又会下降,如此周而复始,动态变化。

    这种周期性的利率机制有利于市场稳定。该机制的运作完全取决于以下三点:

    (1)银行实现资产回报最大化的愿望

    (2)银行对高风险投资损失的 担忧

    (3)个人消费的时间偏好

    银行储蓄的安全和便捷促使人们增加储蓄、延迟消费,为新项目提供资金,这将有助于增加未来的产量并提高生活水平。在银行精心的经营下,岛上的储蓄不断增长,商业不断发展。

     


    5. 高风险投资

    银行不愿意对高风险的项目进行放贷,这时像一些类似消费贷款、度假贷款等其他仅仅用来消费娱乐的贷款,银行不愿意为之放贷,这时诞生了一些风投机构,通过吸收那些希望获得高收益的岛民的存款,来进行放贷。

     


    6. 参考资料

    《小岛经济学》

    https://blog.csdn.net/qq_32416677/article/details/81982281?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control

     

     

     

     

     

    展开全文
  • 摘要 随着金融业的发展,手工操作和旧的管理模式已经严重制约了质量和效率的...实现了系统初置、系统初值录入、定期储蓄、外部消费与结算模拟、综合统计查询等功能。 整个系统的设计过程中,充分考虑了数据库的...

     

     

    摘要

    随着金融业的发展,手工操作和旧的管理模式已经严重制约了质量和效率的问题,用计算机管理来代替手工管理是非常必要的。本文主要介绍了银行管理系统的方案论证、结构特性设计及行为特性设计的实现过程,详细论述了总体设计思想、数据库设计和功能模块设计。实现了系统初置、系统初值录入、定期储蓄、外部消费与结算模拟、综合统计查询等功能。

    整个系统的设计过程中,充分考虑了数据库的安全性、一致性、稳定性和可靠性的问题,并具有较强的向导作用,为操作人员提供了丰富的决策功能,而且操作简单方便。用此系统代替手工操作后,能大大减少在时间和空间上的浪费,为银行节省了大量的人力和物力。

     

    关键字  : 银行储蓄,管理系统,结构特性设计,行为特性设计

     

    Abstract

        As the development of financial trade, handwork operating and old management pattern already have seriously restricted the issue of quality and efficiency. It is very necessary to replace handwork management with computer management system. This paper primarily introduces the project argument, the structural characteristic design and the behavioral characteristic design of the bank management system. The total design idea, the database design and the functional module design are discussed in detail. The functions of this system mainly include the system initialization, code input, fixed deposit, and synthesize statistical inquiry etc.In the course of entire system design, the system has fully considerated about the safety, consistency, stability and reliability of the database, and also has a strong guidanance function. This system can satisfy the customer’s operation easily and offer a friendly user interface. By using this system, we believe that wastness of the time and space will be greatly reduced and plenty of manpower and material resources for bank will be saved.

     Keywords: Bank deposit, Management System, Structural characteristic Design, Behavioral characteristic Design

     

     第1章  引言

    1.1题目背景

    银行储蓄管理软件的主要作用是针对于各类银行中的储蓄业务进行有效管理。银行储蓄是我们现实生活中的常见活动。就储蓄业务而言,无论国外还是国内,也无论是那家银行,虽然所开展的业务种类稍有不同,利息的计算也存在差异,但储蓄的本质是完全相同的。在我国加入WTO以后,各银行的业务逐渐和国际接轨。

    本次开发以一个虚拟银行为背景,在深入了解通用的银行储蓄业务管理要求的基础上,力争开发出一个实用性强的通用储蓄系统软件,基本上可满足正常银行业的工作需要。本项目对系统的安全保密性要求也较高。另外,还要实现多币种的储蓄业务。设计者必须了解并掌握银行储蓄业务的一般要求及银行核算的规则(如利息计算的规则、节假日规则、币种兑换规则等)。同时,应该能模拟出消费者的外部消费与银行的结算业务。项目工作量和专业跨度较大。

    1.2项目内容

    具体的内容包括:

    1)储蓄类别管理及储蓄币种类别管理,其中储蓄类别管理包括活期储蓄、整存整取、零存整取、整存零取、存本取息、定活两便,储蓄币种类别管理主要是对多币种的储蓄进行管理。另外,定期存款业务应涉及到多币种、多类别如三个月、半年、一年、三年、五年等。

    2)初始化数据库:主要实现在软件正式运行前,把一个银行现行手工工作模式下的所有储蓄信息向计算机中进行转储。这是软件系统正确运行的前提条件。

    3)定期帐户档案管理,此功能主要是对定期储户的存储信息进行管理,方便了储户对存储信息的查询、修改。

    定期储蓄业务,主要包括定期开户,定期取款(包括提前支取,    到期支取,过期支取),挂失与解挂。定期储蓄业务是储户在存款时约定存期,一次或按期分次存入本金,整笔或分期、分次支取本金或利息的一种储蓄方式。定期储蓄可分为以下几种类型:整存整取、零存整取、整存零取、存本取息、定活两便。其存取方式因类型不同而有区别。整存整取定期储蓄存款:一般50元起存,存期分三个月、半年、一年、二年、三年、五年,本金一次性存入,由储蓄机构发给存单,到期凭存单支取本息。零存整取定期储蓄存款:每月固定存款,一般5元起存,存期分为一年、三年、五年,存款金额由储户自定,每月存入一次,中途如有漏存,应在次月补齐,未补齐者,到期支取 

    本表说明如下:

    ²        本表的主要作用是实现进入系统时的身份验证、装载本操作员的业务汇总情况。

    ²        上年存款量、上年存款额和上年取款额为本操作员去年一年的总业务量、总存款额和总取款额,在“年初承转”(这是一个行为,下同)时由本年数直接承转而来;

    ²        上月数为本年度开始到上月月底的业务总和,在“月初承转”时由本年数直接承转而来;

    ²        昨日数为本月月初至昨日止的业务总和,在“日初承转”时由本月数直接承转而来。

    ²        本日数为本日实际发生数,由“本日业务汇总”程序通过本日业务凭证汇总而来。

    ²        本月数为昨日数加上本日数得到,也通过本日业务汇总程序实现;

    ²        本年数时通过月底业务汇总程序通过上月数加上本月数得到。

    3.2.2系统管理员代码表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    代码

    int

    2

    用于唯一标识本币种

    2

    密码

    char

    6

    用于表示业务人员的密码

     

     

    本表说明如下:

    ²        本表的主要作用是实现系统管理员进入系统时的身份验证,装载系统管理员的代码和密码。

    ²        代码是位于标识该系统管理员的身份。

    3.2.3储蓄币种代码表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    币种代码

    int

    2

    用于唯一标识本币种

    2

    币种名称

    char

    10

    储蓄币种名称

    3

    兑换比率

    numeric

    12.2

    用于标识其它币种与RMB的比率

    4

    调整时间

    datetime

    8

    兑换比率的调整时间

    5

    上年业务量

    numeric

    9

    用于表示本币种去年累计业务笔数

    6    

    上年存款额

    money

    12.2

    用于表示本币种去年累计存款量

    7

    上年取款额

    money

    12.2

    用于表示本币种去年累计取款量

    8

    上年余额

    money

    12.2

    用于表示本币种去年累计余额

    9

    上年储户数

    decimal

    9

    用于表示本币种去年累计储户数

    10

    上月业务量

    numeric

    9

    用于表示年初至上月累计业务量

    11

    上月存款额

    money

    12.2

    用于表示年初至上月累计存款额

    12

    上月取款额

    money

    12.2

    用于表示年初至上月累计取款额

    13

    上月余额

    money

    12.2

    用于表示年初至上月累计余额

    14

    上月储户数

    decimal

    9

    用于表示年初至上月累计储户数

    15

    昨日业务量

    numeric

    9

    用于表示月初至昨日累计业务量

    16

    昨日存款额

    money

    12.2

    用于表示月初至昨日累计存款额

    17

    昨日取款额

    money

    12.2

    用于表示月初至昨日累计取款额

    18

    昨日余额

    money

    12.2

    用于表示月初至昨日累计余额

    19

    昨日储户数

    decimal

    9

    用于表示月初至昨日累计储户数

    20

    本日业务量

    numeric

    9

    用于表示本币种本日累计业务量

    21

    本日存款额

    money

    12.2

    用于表示本币种本日累计存款额

    22

    本日取款额

    money

    12.2

    用于表示本币种本日累计取款额

    23

    本日余额

    money

    12.2

    用于表示本币种本日累计余额

    24

    本日储户数

    decimal

    9

    用于表示本币种本日累计储户数

    25

    本月业务量

    numeric

    9

    用于表示月初至本月业务量

    26

    本月存款额

    money

    12.2

    用于表示月初至本月存款额

    27

    本月取款额

    money

    12.2

    用于表示月初至本月取款额

    28

    本月余额

    money

    12.2

    用于表示月初至本月余额

    29

    本月储户数

    decimal

    9

    用于表示月初至本月储户数

    30

    本年业务量

    numeric

    9

    用于表示本币种年初至本月累计业务量

    31

    本年存款额

    money

    12.2

    用于表示本币种年初至本月累计存款额

    32

    本年取款额

    money

    12.2

    用于表示本币种年初至本月累计取款额

    33

    本年余额

    money

    12.2

    用于表示本币种年初至本月累计余额

    34

    本年储户数

    decimal

    9

    用于表示本币种年初至本月累计储户数

     

    本表说明如下:

    ²        本表主要用于多币种储蓄

    ²        现在世界上币种很多,主要包括下面几种~~~美元,欧元,日元,港币,英镑,台币等等。

    ²        兑换比率是用于表示其它币种与RMB的交换率。

    3.2.4储蓄类别代码表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    币种名称

    char

    10

     

    2

    储蓄类别

    int

    2

    用于唯一标识本行内的所有业务类别

    3

    储蓄名称

    char

    10

    储蓄类别名称

    4

    利率

    numeric

    12.2

    本类别对应的利率数

    5

    周期

    int

    2

    利率核算的周期(若年利率则为月数)

    6

    调整时间

    datetime

    8

    本利率调整的时间

    7

    上年业务量

    numeric

    9

    用于表示本类别去年累计业务笔数

    8

    上年存款额

    money

    12.2

    用于表示本类别去年累计存款额

    9

    上年取款额

    money

    12.2

    用于表示本类别去年累计取款数额

    10

    上年余额

    money

    12.2

    用于表示本类别去年累计余额

    11

    上年支付利息

    money

    12.2

    用于表示本类别去年累计支付利息

    12

    上年储户数

    decimal

    9

    用于表示本类别去年累计储户数

    13

    上月业务量

    numeric

    9

    用于表示年初至上月累计业务笔数

    14

    上月存款额

    money

    12.2

    用于表示年初至上月累计存款数额

    15

    上月取款额

    money

    12.2

    用于表示年初至上月累计取款数额

    16

    上月余额

    money

    12.2

    用于表示年初至上月累计余额

    17

    上月支付利息

    money

    12.2

    用于表示年初至上月累计支付利息

     

    18

    上月储户数

    decimal

    9

    本类别上月月底的总储户数

    19

    昨日业务量

    numeric

    9

    用于表示月初至昨日累计业务笔数

    20

    昨日存款额

    money

    12.2

    用于表示月初至昨日累计存款数额

    21

    昨日取款额

    money

    12.2

    用于表示月初至昨日累计取款数额

    22

    昨日余额

    money

    12.2

    本类别昨日的沉淀额

    23

    昨日支付利息

    money

    12.2

    用于表示月初至昨日累计支付利息

    24

    昨日储户数

    decimal

    9

    本类别昨日的总储户数

    25

    本日业务量

    numeric

    9

    用于表示本日业务笔数

    26

    本日存款额

    money

    12.2

    用于表示本日存款数额

    27

    本日取款额

    money

    12.2

    用于表示本日取款数额

    28

    本日余额

    money

    12.2

    本类别本日的沉淀额

    29

    本日支付利息

    money

    12.2

    用于表示本日支付利息

    30

    本日储户数

    decimal

    9

    本类别本日的总储户数

    31

    本月业务量

    numeric

    9

    用于表示月初至本月累计业务笔数

    32

    本月存款额

    money

    12.2

    用于表示月初至本月累计存款数额

    33

    本月取款额

    money

    12.2

    用于表示月初至本月累计取款数额

    34

    本月余额

    money

    12.2

    用于表示月初至本月累计余额

    35

    本月支付利息

    money

    12.2

    用于表示月初至本月累计支付利息

    36

    本月储户数

    decimal

    9

    用于表示月初至本月累计储户数

    37

    本年业务量

    numeric

    9

    用于表示年初至本月累计业务笔数

    38

    本年存款额

    money

    12.2

    用于表示年初至本月累计存款数额

    39

    本年取款额

    money

    12.2

    用于表示年初至本月累计取款数额

    40

    本年余额

    money

    12.2

    用于表示年初至本月累计本年余额

    41

    本年支付利息

    money

    12.2

    用于表示年初至本月累计本年支付利息

    42

    本年储户数

    decimal

    9

    用于表示年初至本月累计本年储户数

     

    本表说明如下:

    ²        本表为储蓄类别的代码表,用于正常储蓄业务时的代码自动映射。

    ²        通过日汇总、月汇总、日出承转、月初承转和年初承转四个行为所产生的数据,可充分反映本单位的业务情况。

    3.2.5定期账户表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    存折号

    varchar

    15

    用于唯一标识本行内的所有定期储户

    2

    储户姓名

    char

    10

    用于表示用户的姓名

    3

    密码

    char

    6

    用于表示用户的密码

    4

    身份证号

    varchar

    20

    用于表示用户的身份证号

    5

    储蓄类别

    int

    2

    与表2关联

    6

    币种名称

    char

    10

    用于表示用户存款币种的名称

    7

    存款额

    money

    12.2

    当前本储户的存款额

    8

    存款时间

    datetime

    8

    用于表示本储户的开户时间

    9

    到期时间

    datetime

    8

    用于表示本储户的到期时间

    10

    到期利息

    money

    12.2

    当前本储户到期应得利息额

    11

    提前支取利息

    money

    12.2

    当前本储户未到期应得利息额(按活期)

    12

    超期利息

    money

    12.2

    当前本储户超期应得利息额(按活期)

    13

    挂失否

    char

    10

    用于表示该存折是否挂失

    14

    身份验证类别

    char

    10

    需要验证的证件类别

     

    本表说明如下:

    ²        本表用于存储所有定期账户的信息;

    ²        用户提前支取定期存款时,一律视为活期存款,并按取款日的活期利率计算利息。

    ²        用户超期支取定期存款时,超期部分一律视为活期存款,并按取款日的活期利率计算利息,支取时利息总和为两项之和。

    3.2.6 定期存取款业务凭证表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    存折号

    varchar

    15

    用于唯一标识本行内的所有定期储户

    2

    储蓄名称

    char

    10

    与表2关联

    3

    存取标志

    char

    10

    表示存款或取款业务

    4

    币种名称

    char

    10

    表示存款或取款业务的币种代码

    5

    发生额

    money

    12.2

    当前本储户的存、取款额

    6

    发生时间

    datetime

    8

    当前本储户的存、取款的发生时间

    7

    到期利息

    money

    12.2

    当前本储户到期应得利息额

    8

    提前支取利息

    money

    12.2

    当前本储户未到期应得利息额(按活期)

    9

    超期利息

    money

    12.2

    当前本储户超期应得利息额(按活期)

    10

    操作员代码

    int

    2

    经手人——前台操作员

    11

    出纳员

    int

    2

    经手人——出纳员

     

    本表说明如下:

    ²        本表用于存储所有定期存、取款业务凭证;

    ²        与本表结构相同的表共有三个,分别为日业务凭证表、月业务凭证表和年业务凭证表;其中日表用于装载本日用户存取款凭证,由“定期存款”、“定期取款”等行为自动生成。本表用于“本日汇总”行为的核算基表,次日日初即把该表的内容全部承转到月表中;月表用于装载本月用户存取款凭证,也可兼作“本月汇总”行为的核算基表,次月月初即把该表的内容全部承转到年表中;

    ²        “日初承转”时将日表中的记录转到月表中,并将日表清空;在“月初承转”时将月表中的记录转到年表中,并将月表清空。年底时将年表备份,并在“年初承转”时将年表清空。

     

     

    3.2.7节假日代码表

     

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    节假日名称

    char

    10

    用于唯一标识本行内的所有法定节假日

    2

    开始时间

    datetime

    8

    用于表示节假日的开始时间

    3

    结束时间

    datetime

    8

    用于表示节假日的结束时间

    4

    提前天数

    int

    2

    见备注

     

    本表说明如下:

    ²        本表用于存储本行内的所有法定节假日;

    ²        本表的主要作用为节假日银行休息时,储户在节假日到期的定期存款可在节假日前几天提取,而不视为提前支取行为。

    3.2.8存取标志代码表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    存取标志代码

    int

    1

    用于唯一标识所有存取款类别

    2

    存取标志名称

    char

    10

    储蓄类别名称

    3

    币种名称

    char

    10

    存取标志对应的币种的名称

    4

    上年数量

    numeric

    9

    去年全年发生数

    5

    上月数量

    numeric

    9

    年初至上月月底的累计数

    6

    昨日数量

    numeric

    9

    月初至昨日的累计数

    7

    本日数量

    numeric

    9

    本日实际发生数

    8

    本月数量

    numeric

    9

    月初至本日的累计数

    9

    本年数量

    numeric

    9

    年初至本月月底的累计数

     

    本表说明如下:

    ²        本表用于存储所有存取款类别;

    u       0~活期开户

    u       1~活期续存

    u       2~活期取款

    u       3~活期清户

    u       4~定期存款

    u       5~定期取款

    ²        本表中的后6个属性值由“本日汇总”、“本月汇总”、“日出承转”、“月初承转”和“年初承转”行为生成。

     

     

    3.2.9 统计查询报表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    月份

    int

    2

    用于表示月份

    2

    币种代码

    int

    2

    币种代码

    3

    活期户数

    decimal

    9

    本月份本行内所有活期存款户数

    4

    活期新开户数

    decimal

    9

    本月份本行内所有活期新开户数

    5

    活期清户数

    decimal

    9

    本月份本行内所有活期清户数

    6

    活期存款额

    money

    12.2

    本月份本行内所有活期存款额

    7

    活期取款额

    money

    12.2

    本月份本行内所有活期取款额

    8

    支付活期利息

    money

    12.2

    本月份本行内所有活期支付利息额

    9

    定期户数

    decimal

    9

    本月份本行内所有活期存款户数

    10

    定期新开户数

    decimal

    9

    本月份本行内所有活期新开户数

    11

    定期清户数

    decimal

    9

    本月份本行内所有活期清户数

    12

    定期存款额

    money

    12.2

    本月份本行内所有活期存款额

    13

    定期取款额

    money

    12.2

    本月份本行内所有活期取款额

    14

    支付定期利息

    money

    12.2

    本月份本行内所有活期支付利息额

     

    本表说明如下:

    ²        本表用于存储本行内综合业务统计数据;

    ²        本表在每月月底是由月汇总总程序得来,在每年年底时打印出来,并清空次表;

    ²        本表由“月底汇总”行为更新。

    3.2.10外部消费与结算帐户表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    卡号

    varchar

    15

    用于唯一标识卡的持有者

    2

    消费者姓名

    char

    10

     

    3

    密码

    char

    6

     

    4

    身份证号

    varchar

    20

     

    5

    发卡时间

    datetime

    8

     

    6

    到期时间

    datetime

    8

    当前消费者的消费总额

    7

    身份验证类别

    char

    10

    需要验证的证件类别

    8

    挂失否

    char

    10

    用于表示该存折是否挂失

     

    本表说明如下:

    ²        本表用于存储所有外部消费者账户的信息

    3.2.11外部消费与结算业务凭证表

     

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    卡号

    varchar

    15

    用于唯一标识所有卡信息

    2

    姓名

    char

    10

     

    3

    月份

    int

    2

    用于表示月份

    2

    发生比数

    int

    4

    用于表示本月内的发生笔数

    2

    发生额

    money

    12.2

    用于表示本月外部消费者的消费额

    3

    结算时间

    datetime

    8

    用于表示本月外部消费结算的时间

    4

    操作员代码

    int

    2

    经手人——前台操作员

    5

    出纳员

    int

    2

    经手人——出纳员

     

    本表说明如下:

    ²        本表用于所有外部消费者交付消费款的业务凭证;

    ²        “日初承转”时将日表中的记录转到月表中,并将日表清空;在“月初承转”时将月表中的记录转到年表中,并将月表清空。年底时将年表备份,并在“年初承转”时将年表清空。

    3.2.12外部消费帐明细表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    卡号

    varchar

    15

    用于唯一标识所有卡信息

    2

    月份

    int

    2

    用于表示月份

    3

    消费品种

    char

    10

    用于表示消费物品名称

    4

    消费额

    money

    12.2

    用于表示消费品的价格

    5

    消费地点

    char

    10

    用于表示不同的消费场所

    6

    消费时间

    datetime

    8

    用于表示消费的时间

     

    本表说明如下:

    ²        本表用于记录消费者在某月的具体消费情况

      

    4.1功能模块图(略)

    4.2功能概要设计

    银行储蓄软件的定期储蓄和外部消费与结算模拟是我负责的主要的部分,上述的几大模块是全部设计完毕的模块部分,模块设计是系统设计中非常重要的一部分,是编码的前提和基础,下面就上面所描画的功能模块图,我将具体、细致的介绍一下:

    1)初始界面模块图:

    这一个模块图主要描述了软件的整体设计。由初始窗体界面进入登录窗体界面,在登录窗体界面中,选择你的身份(操作员或系统管理员),输入代码和密码,确认后就可进入主界面窗体。如果你是新的成员,无论你是操作员还是系统管理员,都可以在此窗体界面上点击注册向导,在注册界面输入所要求的项,确定后你就可以进入主界面。

    在主界面中包含上述模块图的几部分,根据身份,即是操作员还是系统管理员,对应权限不同。

    1)系统设置模块图:

    这一模块图主要用于系统人员的自我设置,包括密码修改和退出。

              密码修改主要针对操作员和系统管理员,如果想修改自己的密码,在

              这儿就可实现。退出是用于退出本系统所用。

    2)系统管理模块图:

    这一模块图主要用于完成银行内部阶段性的统计业务。

         日汇总:日汇总业务是银行每天必须的工作,主要完成本日的业务汇总工作。基表是日业务凭证表,由此表出发得到操作员代码表、币种代码表、类别代码表、存取标志代码表的本日数。

              并把上述表中的昨日数加上本日数得到本月数。

                      日承转:日承转是用于第二天早上业务的承转,发生在新的一天工作的开始。主要完成日业务凭证表向月业务凭证表得承转,并把日业务凭证表清空;再就是完成操作员代码表、币种代码表、类别代码表、存取标志代码表个表中的本月数向昨日数的承转。

         月汇总:月汇总业务是银行每月月底必须的工作,主要完成本月的业务汇总业务。基表是月业务凭证表,由此表的得到综合查询表中的要求的综合信息。再就是完成操作员代码表、币种代码表、类别代码表、存取标志代码表中本年数的统计,即由上月数加本月数得到。

                              月承转:月承转是用于每月月初的工作。主要完成月业务凭证表向年业务凭证表得承转,并把月业务凭证表清空;再就是完成上述各表的本年数向上月数的承转。

                              年承转:年承转是用于每年年初的工作。主要完成年业务凭证表的清空,以及上述各表的本年数向上年数得承转。

                              数据备份和恢复:此部分对于数据库设计而言是至关重要的,再次模块中就可实现数据的备份和恢复。

    3)定期储蓄:

    定期储蓄是银行重要的业务之一,主要包括:

           定期存款、定期取款,其中定期存款又包括整存整取、零存整取、整存零取、存本取息、定活两便,定期取款包括提前支取、到期支取、过期支取。根据银行的存取款的凭条,添入相应的各项,操作员进行操作就可实现此业务,并打印出凭条。

                         挂失及解挂:您的存折(单)丢失,为了您的资金安全,您要立即到原储蓄存款网点办理挂失。存折(单)挂失时,您要提供身份证件,填写“挂失申请书”,并提供存款相关情况。银行经办人员根据您提供的资料,经查询存款确未被支取、未冻结止付,即可受理挂失申请,挂失生效。 解挂手续同上。

                       密码查询:主要用于用户忘记密码时用,用户必须提供身份验证类别和相应的身份证件号,这一部分工作由系统管理员来完成。

                       密码修改:主要用于用户修改密码所用,用户也必须提供身份验证类别和相应的身份证号,这一部分工作由操作员来完成。

                       定期转存:主要用于每天到期的整存整取定期存款的转存工作。这一部分在相应的模块中有很好的体现,您只需要按确定按钮,就可完成上述工作。这工作也由系统管理员来完成。

    4)外部消费与结算:

                          信用卡开户、信用卡销户:主要用于用户在银行办理信用卡和在不用信用卡时办理销户手续。

                          消费结算、帐单打印:主要用于消费者在一定时期(以月为单位)的外部消费结算和消费明细的清单打印。

                       密码查询:主要用于用户忘记密码时用,用户必须提供身份验证类别和相应的身份证件号,这一部分工作由系统管理员来完成。

                       密码修改:主要用于用户修改密码所用,用户也必须提供身份验证类别和相应的身份证号,这一部分工作由操作员来完成。

                       挂失及解挂:信用卡丢失,要立即到原储蓄存款网点办理挂失。要提供身份证件,填写“挂失申请书”。银行经办人员根据您提供的资料,即可受理挂失申请,挂失生效。 解挂手续同上。

    5)初始化系统:

    主要实现软件正式运行前银行业务原有信息的处理,包括操作员代码表、储蓄币种代码表、储蓄类别代码表、活期账户表、定期账户表、节假日代码表、存取标志代码表、综合业务统计表的添加、更新、删除、关闭。

    6)查询和报表:

    这一部分主要实现查询信息和报表打印。

    查询:

              操作员查询:可以根据操作员代码或者姓名的关键字来进行查询你所需要的信息。

              储蓄币种查询:可以根据币种代码或者名称的关键字来进行查询你所需要的信息。

              储蓄类别查询:可以根据类别代码和名称的关键字来进行查询你所需要的信息。

              存取标志查询:可以根据代码和名称的关键字来进行查询你所需要的信息。

             综合查询:查询每个月的综合信息,根据月份的关键字来查询。

    报表:主要打印日业务凭证表、月业务凭证表、年业务凭证表和综合信息表。

    7)工具模块:

         在工具模块里,可以用计算器来计算您想计算的数据,得到想要的结果。

    8)帮助:

    在帮助文件的内容中提供了各个模块的作用以及使用方法;在关于本软件的介绍中说明软件完成的地点和时间等内容。

     

     

    结束语

     

    转眼间三个月的毕业设计快结束了,我的体会很多,这次毕业设计是对我的大学四年学习的总结,使我的专业知识和实际应用的紧密结合起来。通过这次毕业设计使我对数据库理论有了较深刻的认识,并且对软件工程方面的设计理论和开发过程的也有了深刻的了解,在这一阶段的学习中,我基本上掌握了Visual Basic 6.0和SQL SERVER 7.0的基本操作和编程方法。

        在毕业设计过程中,对整个系统的设计特别是行为特性设计有很多的心得,行为特性设计阶段对整个程序设计很重要,由于刚开始时对行为特性设计的理解不够,至使到后来具体编程时出现问题,只能再重新进行设计,而程序也得进行修改,所以在今后的软件设计中我一定要把需求分析和行为特性设计做好,防止事倍功半。另外在开发的过程中,由于对SQL Server 7.0掌握的不够,所以在整个的软件开发的过程很多问题,到最后的调试阶段也费力不少。

      毕业设计的过程涉及大学四年的基础课和专业课的很多的理论知识,但是在实际应用方面涉及很少,而毕业设计是需要把这些知识贯通起来,综合运用,所以通过这次设计我的认识问题、分析问题、解决问题的能力都有了很大的提高。同时自己在动手能力上也有了很大的进步。

     

     

    致谢

    在这次毕业设计中,首先,非常感谢我的毕业设计的指导老师夏秀峰对我的精心指导,在本次毕业设计中,夏老师无论在理论上还是在实践中,都给予我很大的帮助,使我得到不少的提高,这对于我以后的工作和学习都有很大的帮助。另外,此次毕业设计论文撰写过程中,也得到了夏老师的大力帮助,无论从资料上还是从技术上,夏老师都给予极大的支持,并提供了许多宝贵的建议,也给予我极大的启示;从正式开始毕业设计起到现在论文的完成,夏老师随时关心我们的进度。我表示诚心的感谢!夏老师那种认真负责的工作态度,严谨的治学精神和深厚的理论水平也使我收益匪浅,这在我以后的工作中会有很大的帮助,再次感谢夏老师﹗

    其次,感谢系里领导和老师为我的毕业设计提供良好的环境。在这里尤其感谢实验室的各位老师,每天不辞辛劳的为我们服务,衷心的感谢。

    同时,也衷心的感谢我的合作伙伴臧洁同学,在毕设过程中所给予的帮助;当然也感谢在次期间给我帮助的同学和朋友以及其他老师。

    再次感谢以上的各位老师及同学。

     

     

    参考文献

     

    (1) 殷华蓓 Visual  Basic  6.0  入门与开发实例

    电子科大出版社     1997

    (2) 赖阿福 Visual  Basic  6.0  编程经验与技巧

    青岛出版社         1999

    (3)   Visual  Basic  6.0  实用程序100

    人民邮电出版社     2002

    (4) 王全兴 精通 MS  SQL  Server  7.0

    电子工业出版社     1999

    (5) 于松涛 精通 SQL Server 2000 数据库管理与开发

    人民邮电出版社     2001

    (6) 艾洪德 货币银行学教程

    东财出版社         1991

    (7) 张义和 商业银行义务与经营

    西南财经出版社     1995

    (8) 宋逢明 现代商业银行管理   

    清华大学出版社     1996

    (9)《西方经济学》

    清华大学出版社     1999

     

     

    1)时按实存金额和实际存期计算利息。存本取息定期储蓄存款:本金一次存入,一般5000元起存,存期分为一年、三年、五年,由储蓄机构发给存款凭证,到期一次支取本金,利息凭存单分期支取,可以一个月或几个月取息一次,由储蓄与储蓄机构协商确定。如果储户需要提前支取本金,这要按定期存款提前支取的规定计算存期内利息,并扣回多支付的利息。整存零取定期储蓄存款:本金一次存入,一般1000元起存,存期分一年、三年、五年,由储蓄机构发给存单,凭存单分期支取本金,支取期分一个月、三个月、半年一次,由储户与储蓄机构协商确定,利息于期满结清时支取。定活两便储蓄存款:本金一次存入,由储蓄机构发给存单,一般50元起存,存期不限,存期不满三个月的,按天数计付活期利息,存期在三个月以上(含三个月)不满半年的,整个存期按支取日定期整存整取三个月存款利率打六折计息,存期半年以上(含半年)不满一年的,整个存期按支取日定期整存整取半年期存款利率打六折计息,存期在一年以上(含一年),不论存期多长,整个存期一律按支取日整存整取一年期定期存款利率打六折计息。

    2)外部消费与结算模拟,此功能是对信用卡业务的模拟,现在信用卡正渐渐被中国的消费者所接受,此功能是通过软件对其进行模拟,主要包括帐单的打印,结算等功能。

    3)假日规则管理,主要作用是节假日银行休息时,储户在节假日到期的定期存款可在节假日前几天提取,而不视为提前支取行为。

    4)阶段业务处理:主要实现银行阶段业务综合信息的处理。包括日汇总、月汇总、日承转、月承转、年承转等。

    5)综合查询统计报表,主要实现对各种数据的查询、统计以及报表的打印。

    1.3系统设计目标

    1) 项目内容要求的储蓄类别管理及储蓄币种类别管理、初始化数据库、定期储蓄、外部消费与结算模拟、阶段业务处理和综合查询报表等。

    2)用户界面友好、性能稳定,软件具有较好的鲁棒性。充分考虑备份、存档等系统维护策略。

    3)优化数据的逻辑模型设计和物理模型设计,以便提高运行速度、降低存储空间,且能满足数据一致性要求。充分考虑行为的合理划分,提高软件使用的便利性。

    第2章 方案论证

    2.1总体设计思想

         银行储蓄软件设计涉及的专业知识很多,要想开发出一个具有一定使用价值的通用储蓄软件,必须深入了解通用的银行储蓄业务,针对这一特点,我们进行了大量的考察,在这个过程中我们遇到了很多困难,因为银行系统是一个非常保密的系统,不会轻易对外部人员透漏内部业务,这就给我们早期的需求分析造成了很大的困难,但我们通过大量的途径,对此做了合理的需求分析并在此基础上制定了合理的方案。现叙述如下:

    需求分析是一个数据库设计至关重要的阶段,也是一个工程成败的关键,在这一阶段里我们通过各种途径了解到了银行的一些规定。

    1)基本概念:

            1年=12个月,1月=30天

            活期利息每年结算一次,以6月30日为准,次日(7月1日)转为本金。

            活期清户的利息计算遵循“年对年、月对月、最后再算天”的原则。

            利息积数:存款额乘以存款天数,其中存款天数为本日至本年度(次年度)6月30日的天数。

            利息积数有正负之分。

            活期利率按取款日计算,定期利率按存款日计算

           活期存取款不算利息,只算利息积数,只在每年的6月30号和清户时计算;定期存款立即算出利息。

           提前支取:按支取日挂牌公告的活期储蓄存款利率计付利息。部分提前支取的,提前支取的部分按支取日挂牌公告的活期储蓄存款利率计付利息,其余部分到期时按开户日挂牌公告的整存整取定期储蓄存款利率计付利息,部分提前支取以一次为限。

            到期支取:按开户日挂牌公告的整存整取定期储蓄存款利率计付利息。

            过期支取:自到期日起按存单的原定存期自动转期。在自动转期后,存单再存满一个存期(按存单的原定存期),到期时按原存单到期日挂牌公告的整存整取定期储蓄存款利率计付利息;如果未再存满一个存期支取存款,此时将按支取日挂牌公告的活期储蓄存款利率计付利息。

            定期储蓄存款在存期内如遇利率调整,仍按存单开户日挂牌公告的相应的定期储蓄存款利率计算利息。

    2)具体利息计算方法

            计算活期储蓄利息:每年结息一次,7月1日利息并入本金起息。未到结息日前清户者,按支取日挂牌公告的活期储蓄存款利率计付利息,利息算到结清前一天止。

          计算零存整取的储蓄利息 到期时以实存金额按开户日挂牌公告的零存整取定期储蓄存款利率计付利息。逾期支取时其逾期部分按支取日挂牌公告的活期储蓄存款利率计付利息。零存整取定期储蓄计息方法有几种,一般家庭宜采用"月积数计息"方法。其公式是: 利息=月存金额×累计月积数×月利率其中:累计月积数=(存入次数+1)÷2×存入次数。

           计算存本取息的储蓄利息储户于开户的次月起每月凭存折取息一次,以开户日为每月取息日。储户如有急需可向开户银行办理提前支取本金(不办理部分提前支取),按支取日挂牌公告的活期储蓄存款利率计付利息,并扣回每月已支取的利息。逾期支取时其逾期部分按支取日挂牌公告的活期储蓄存款利率计付利息。

           计算定、活两便的储蓄利率:定活两便储蓄具有定期或活期储蓄的双重性质。存期三个月以内的按活期计算,三个月以上的,按同档次整存整取定期存款利率的六折计算。存期在一年以上(含一年),无论存期多长,整个存期一律按支取日定期整存整取一年期存款利率打六折计息。其公式:利息=本金×存期×利率×60%因定活两便储蓄不固定存期,支取时极有可能出现零头天数,出现这种情况,适用于日利率来计算利息。

        基于以上两点介绍和题目的基本要求,现分析如下(数据库的表的内容在第三章阐述):

            初始化操作:主要实现软件正式运行前银行业务原有信息的处理,包括操作员代码表、储蓄币种代码表、储蓄类别代码表、活期账户表、定期账户表、节假日代码表、存取标志代码表、综合业务统计表的初始化。为了实现外部消费模拟我又加了一个消费品的录入。

           定期储蓄:主要实现银行的正常的定期储蓄业务。包括定期存款、定期取款、定期销户、挂失及解挂、密码修改、密码查询。其中定期存款包括:整存整取、零存整取、整存零取、存本取息、定活两便;定期取款包括:提前支取、到期支取、过期支取。

            外部消费与结算业务模拟:主要实现对银行外部消费业务的模拟。包括信用卡开户、信用卡销户、消费结算、帐单打印、挂失及解挂、密码修改、密码查询。

            阶段业务处理:主要实现业务汇总和承转业务。包括日汇总、月汇总、日承转、月承转、年承转。

           查询与报表:主要实现查询业务和报表业务,用于方便银行的综合业务查询以及报表的管理。包括综合查询,这儿可以查询操作员代码表、储蓄币种代码表、储蓄类别代码表、存取标志代码表、综合业务统计表。报表包括日业务凭证表、月业务凭证表、年业务凭证表和综合查询报表。

            除上述的主要功能外,自然还包括数据备份与恢复,计算器、帮助文件和关于本软件的介绍等数据库必不可少的部分。

    以上是关于毕业设计的总体的设计思路,有些详细的部分会在以后阐述。

     

    2.2 E-R图及分析

    用E-R图来标识实体间联系是非常直观的。下图充分体现了本系统所涉及的实体间的联系,操作员(这里包括系统管理员)管理定期账户,包括定期账户的存、取款以及查询密码等等业务;又通过定期账户存储币种,来间接的管理币种;操作员对外部消费与结算帐户进行管理,包括外部消费与结算帐户的开户与销户业务以及查询密码等业务;又通过结算业务对外部消费与结算进行结算,主要包括外部消费的帐单打印,消费结算等业务。此E-R图仅是本系统重要实体之间联系的一个简单描述,我将在以后各章里对本系统进行更具体的描述,通过对本文的阅读您会对本系统有更进一步的了解。

          操作员  (代码、姓名、性别、出生年月、年龄、密码、上岗时间……)

         定期帐户(存折号、储户姓名、密码、身份证号……)

         货币币种(币种代码、币种名称、兑换比率、调整时间……)

         外部消费与结算帐户(卡号、姓名、密码、身份证号……)

    消费明细(卡号、月份、消费品种、消费额、消费地点、消费时间)

     

    2.3系统设计工具

    本次毕业设计我前台采用Visual Basic 6.0,后台采用MS SQL Server 7.0,操作系统采用Windows 98。

    Visual Basic 6.0是Microsoft推出的功能强大的集应用程序开发、测试、查错等功能于一体的集成式开发环境。使用Visual Basic 可以开发数据库、财务软件以及Internet构件等各种应用程序。Visual Basic 易学易用,对于初学者而言是一种非常好的编程语言。

    MS SQL Server 7.0是微软公司最新的企业级的网络关系型数据库产品,它是在由MS SQL Server 6.5建立的坚固基础之上产生的。客户的需求极大的推动了该产的革新,MS SQL Server 7.0在易用性、可缩放性和可靠性,以及数据仓库等诸多方面有了很大的增强。这使得MS SQL Server 7.0在很多数据库产品发展最快的应用领域(如电子商务、移动计算、分支自动化、商业级应用和数据交换中心等)中成为领先者。

    2.4经济技术分析

    操作员

    假如没有银行储蓄软件,那么银行在进行正常的业务,例如活期储蓄、定期储蓄外部消费与结算及阶段性的承转和汇总等业务时就会需要手工来完成。在银行规模不是很大的情况下,银行用来完成正常业务的人员至少10名,假如每个员工年薪2万元,那么一年就要赋给员工共20万元。

        并且如果没有本系统的话,所有的业务都需要手工来完成,就定期储蓄而言,开户时的用户信息、货币信息、存取款信息的记录、存档等工作都需要手工完成,不仅工作量大,而且容易出错。因为银行系统涉及的东西很多,而且最重要的是涉及到钱的问题,如果出什么错,那么直接造成的经济损失将是无法估量的。并且用来保存用户存取款、货币等信息的纸张将会不计其数,我在这做一个大体的估量,假如每天用纸的数量是5000张,,每张纸的价钱是4分,那么一天就需要200块钱,一年在此上花费的资金就会是7万左右,而这个只是一个大体的例子,实际的情况决不止如此。

    现在再比较一下应用此管理软件的情况。在系统开发上,一台电脑的费用是5000元左右,操作系统是Windows 98、后台数据库采用SQL Server

    7.0、前端采用Visual Basic 6.0其软件费用大概50000元左右。开发人员3名,开发本软件最多3个月,每个人每个月,假如花费是3000元,3个人3个月花费2.7万。开发费用合计大概是8.2万元左右。

    若银行采用此管理系统,首先在人员上可以节省到5名,这样每年就会节省10万元,这样光是人员方面节约的费用就可以用来开发一个很好的应用软件。所以如果应用此软件,不仅节约很多钱财,而且减少用纸量,对于环境保护也有很到的好处。

    在管理方面,银行管理系统软件为银行提供了丰富的辅助决策功能,为银行今后的发展奠定了基础,实现了银行管理的计算机化,尽量达到无纸化办公的目的。不仅如此,银行管理系统为系统本身提供了很高的保密性,直接提高了银行的保密措施。

    使用本管理软件是银行发展的必然趋势,无形的效益从使用本软件中产生。

    第3章 结构特性设计

      3.1结构设计

    这一部分主要向大家介绍系统后台数据库中的表,后台数据库采用 SQL  Server  7.0。下面做简要的介绍。

    本系统主要涉及到的数据库中的表有:

           操作员代码表:主要记载操作员的自然信息和综合业务信息。

           系统管理员表:主要记载系统管理员的自然信息。

           储蓄币种代码表:主要记载不同币种的自然信息和综合信息。  

     

       储蓄类别代码表:主要记载不同类别的自然信息和综合业务信息。类别有活期储蓄、定期的整存整取、零存整取、存本取息、整存零取、定活两便。

           定期账户表:主要记载所有定期用户信息。

          外部消费与结算帐户表:主要记载信用卡用户信息。

           外部消费与结算销户表:主要记载信用卡销户信息。

           外部消费与结算帐单表:主要记载某月消费者的消费明细。

     

    l        定期业务凭证表:主要记载定期储蓄每天的业务情况和所有记录。

    l        外部消费与结算业务凭证表:主要记载此项业务每天的结算记录。

    l        节假日代码表:主要记载节假日的开始时间、结束时间、提前时间。主要用于银行内部定期的提前支取的时间规定。

    l        存取标志代码表:主要记载活期开户、活期续存、活期取款、活期消户、定期存款、定期取款的业务情况。

    l        综合查询报表:记录银行每月的活期和定期的综合业务情况。

    3.2数据库设计

    3.2.1操作员代码表

     

    序号

    属性名

    属性类型

    长度

    备注

    1

    操作员代码

    int

    2

    用于唯一标识本行内的所有业务人员

    2

    姓名

    char

    10

    用于表示业务人员的姓名

    3

    性别

    char

    10

    用于表示业务人员的性别

    4

    出生年月

    datetime

    8

    用于表示业务人员的出生年月

    5

    年龄

    int

    2

    用于表示业务人员的年龄

    6

    密码

    char

    6

    用于表示业务人员的密码

    7

    上岗时间

    datetime

    8

    用于表示业务人员的上岗时间

    8

    币种名称

    char

    10

    用于表示本人的操作币种

    9

    上年业务量

    numeric

    9

    用于表示本人去年累计业务笔数

    10

    上年存款额

    money

    12.2

    用于表示本人去年累计存款数额

    11

    上年取款额

    money

    12.2

    用于表示本人去年累计取款数额

    12

    上月业务量

    numeric

    9

    用于表示本人年初至上月累计业务笔数

    13

    上月存款额

    money

    12.2

    用于表示本人年初至上月累计存款数额

    14

    上月取款额

    money

    12.2

    用于表示本人年初至上月累计取款数额

    15

    昨日业务量

    numeric

    9

    用于表示本人月初至昨日累计业务笔数

    16

    昨日存款额

    money

    12.2

    用于表示本人月初至昨日累计存款数额

    17

    昨日取款额

    money

    12.2

    用于表示本人月初至昨日累计取款数额

    18

    本日业务量

    numeric

    9

    用于表示本人本日业务笔数

    19

    本日存款额

    money

    12.2

    用于表示本人本日存款数额

    20

    本日取款额

    money

    12.2

    用于表示本人本日取款数额

    21

    本月业务量

    numeric

    9

    用于表示本人月初至本月累计业务笔数

    22

    本月存款额

    money

    12.2

    用于表示本人月初至本月累计存款数额

    23

    本月取款额

    money

    12.2

    用于表示本人月初至本月累计取款数额

    24

    本年业务量

    numeric

    9

    用于表示本人年初至本月累计业务笔数

    25

    本年存款额

    money

    12.2

    用于表示本人年初至本月累计存款数额

    26

    本年取款额

    money

    12.2

    用于表示本人年初至本月累计取款数额

     

     

    转载于:https://www.cnblogs.com/longshen/archive/2009/11/19/1606423.html

    展开全文
  • 课程设计——简单银行储蓄系统

    千次阅读 2015-07-17 17:21:56
    问题及代码: 主函数:main函数 /* ...*All rights reserved. *文件名称:lily.cpp ...*问题描述:简单的银行储蓄系统, 程序输入:根据业务界面输入 程序输出:业务运行结果 */ #include #include "bank.h" #i

    问题及代码:

    主函数:main函数

    /*
    Copyright (c) 2014,烟台大学计算机学院
    *All rights reserved.
    *文件名称:lily.cpp
    *作者:李莉
    *完成日期:2015年7月17日
    *版本号:v1.0
    *问题描述:简单的银行储蓄系统,
    程序输入:根据业务界面输入
    程序输出:业务运行结果
    */
    
    #include <iostream>
    #include "bank.h"
    #include <ctime>
    int main()
    {
        cout<<"******************************"<<endl;
        cout<<"** wellcome to Lily's Bank ***"<<endl;
        cout<<"******************************"<<endl;
        if(pass())
        {
            Bank b;
            b.work();
        }
        return 0;
    }
    

    头文件,文件

    bank.h文件

    /*
    Copyright (c) 2014,烟台大学计算机学院
    *All rights reserved.
    *文件名称:lily.cpp
    *作者:李莉
    *完成日期:2015年7月17日
    *版本号:v1.0
    *问题描述:简单的银行储蓄系统,
    程序输入:根据业务界面输入
    程序输出:业务运行结果
    */
    #ifndef BANK_H_INCLUDED
    #define BANK_H_INCLUDED
    #include <cstring>
    using namespace std;
    int pass();//银行工作人员登陆,如果登陆成功则执行下面的功能
    int chooseInMenue();//选择菜单
    int inputPassWord();//输入银行卡的密码
    class Bank;//银行业务类
    class Work;//主要用于储存业务信息的类
    class User
    {
    public:
        void setUser(int acc,string na,int pa,double bal,int sta,double ti);//录入用户
        void showName();//显示姓名
        void showBalance();//显示余额
        void showprofit();//计算利息
        bool passwordIsRight();//校验密码是否正确
        bool isNormalUser();//检验用户是否状态正常
        friend class Bank;//将bank设置为友元函数,方便bank中的函数访问Uer里面的数据成员
    private:
        int account;//银行卡账号
        int password;//设置密码
        string name;//用户姓名
        double balance;//余额
        int status;//0代表正常,1代表挂失,2代表销户
        double time;
    };
    class Work
    {
    public:
        friend class Bank;
    private:
        int usernum;
        string workinfo;
        string ymd;
        string hms;
    
    };
    class Bank
    {
    public:
        Bank();
        int jishu();//统计文件中有多少用户
        void savework(int usernum,string workinfo);//储存每笔业务
        void readwork();//
        void savefile();//读取文件中保存的每一笔业务
        void work();//业务驱动
        void openAccount();//开户
        void cancelAccount();//销户
        void save();//存款
        void withdrew();//取款
        void showAccount();//显示余额
        void transferAccount();//转账
        void reportLoss();//挂失
        void cancelLoss();//解挂
        void updatePassword();//改密
        void showprofits();//显示利息,
        void searchwork(int a);//查询业务明细
        int getUser();//输入账号查询,并返回用户下标
    private:
        int N;
        int n;
        Work yw[2000];
        User *users;
    };
    #endif // BANK_H_INCLUDED
    

    work.cpp文件

    /*
    Copyright (c) 2014,烟台大学计算机学院
    *All rights reserved.
    *文件名称:lily.cpp
    *作者:李莉
    *完成日期:2015年7月17日
    *版本号:v1.0
    *问题描述:简单的银行储蓄系统,
    程序输入:根据业务界面输入
    程序输出:业务运行结果
    */
    #include <iostream>
    #include <cstring>
    #include <fstream>
    #include <conio.h>
    #include <ctype.h>
    #include <cstdlib>
    #include "bank.h"
    using namespace std;
    /********************
    *函数功能:管理员登陆
    *输入参数:无
    *输出参数:无
    *其他说明:设置了密码输入三次错误自动退出
    ****************************/
    int pass()
    {
        char sNameInFile[20];
        char sPassInFile[20];
        ifstream infile("password.txt",ios::in);
        if(!infile)
        {
            cerr<<"password file can't 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(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0)
            {
                right=1;
                break;
            }
            else
            {
                itry--;
                if(itry>0)
                    cout<<"输入错误超过三次,系统将自动退出,您还可以尝试"<<itry<<"次"<<endl;
                else
                    cout<<"输入密码错误超过三次,系统自动退出,您不能登录!"<<endl;
            }
    
        }
        while(itry);
        return right;
    }
    /*****************
    *函数功能:银行业务界面,
    *输入参数:无
    *输出参数:无
    *其他说明:根据选择不同的业务代号,驱动不同的函数
    ***************/
    int chooseInMenue()
    {
        int i;
        while(1)
        {
            cout<<endl;
            cout<<"*******************************************"<<endl;
            cout<<"* 1.开户          2.销户           3.存款 *"<<endl;
            cout<<"* 4.取款          5.查询           6.转账 *"<<endl;
            cout<<"* 7.挂失          8.解挂           9.改密 *"<<endl;
            cout<<"* 10.计算利息                      0.退出 *"<<endl;
            cout<<"*******************************************"<<endl;
            cout<<endl;
            cin>>i;
            if(i>=0&&i<=10)
                break;
            else
                cout<<"选择有误,请重新选择!"<<endl;
        }
        return i;
    }
    /****************
    *函数功能:密码输入操作
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ****************/
    int inputPassWord()
    {
        int ipass=0;
        char ch;
        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<<"密码为6位数字,ing且不全为0:!"<<endl;
                cout<<"请重新输入密码:"<<endl;
            }
            else
                break;
        }
        return ipass;
    }
    
    


     
     user.cpp文件

    /*
    Copyright (c) 2014,烟台大学计算机学院
    *All rights reserved.
    *文件名称:lily.cpp
    *作者:李莉
    *完成日期:2015年7月17日
    *版本号:v1.0
    *问题描述:简单的银行储蓄系统,
    程序输入:根据业务界面输入
    程序输出:业务运行结果
    */
    #include <iostream>
    #include "bank.h"
    using namespace std;
    /*********************
    *函数功能:设置获取用户的具体信息
    *输入参数:用户账户,姓名,密码,余额,状态,存款年限
    *输出参数:无
    *其他说明”无
    *********************/
    void User::setUser(int acc,string na,int pa,double bal,int sta,double ti)
    {
        account=acc;
        password=pa;
        name=na;
        balance=bal;
        status=sta;
        time=ti;
    }
    /*******************
    *函数功能:显示用户姓名
    *输入参数:无
    *输出参数:无
    *其他说明:无
    **********************/
    void User::showName()
    {
        cout<<"用户姓名:"<<name<<endl;
    }
    /********************
    *函数功能:显示用户余额
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ******************/
    void User::showBalance()
    {
        cout<<"该账户余额为:"<<balance<<endl;
    }
    /**********************
    *函数功能:验证密码是否正确
    *输入参数:无
    *输出参数:无
    *其他说明:无
    *返回值:0-错误,1-正确
    **********************/
    bool User::passwordIsRight()
    {
        int ipass;
        bool right=true;
        cout<<"请输入密码:"<<endl;
        ipass=inputPassWord();
        if(ipass!=password)
        {
            right=false;
            cout<<"密码错误,请重新选择您要办理的业务!"<<endl;
        }
        return right;
    }
    /**************************
    *函数功能:显示利息
    *输入参数:无
    *输出参数:无
    *其他说明:不同存款年限有不同的利率,并按不同的利率计算
    *************************/
    void User::showprofit()
    {
        int a;
        double profit;
        cout<<"请选择您的存款方式:"<<endl;
        cout<<"1.活期存款      2.定期存款    "<<endl;
        cin>>a;
        switch(a)
        {
        case 1:
            profit=0.0035*time*balance;
            cout<<"活期存款利息为:"<<profit<<"元"<<endl;
            break;
        case 2:
            if(time==0.25)
            {
                profit=0.021/12*3*balance;
            }
            if(time==0.5)
            {
                profit=2.3*0.5/100*balance;
            }
            if(time==1)
            {
                profit=0.025*1*balance;
            }
            if(time==2)
            {
                profit=0.03*2*balance;
            }
            if(time==3)
                profit=0.035*3*balance;
            if(time>=5)
                profit=0.0375*balance*time;
            cout<<"您的定期存款利息为:"<<profit<<endl;
            break;
        }
    }
    /**************************
    *函数功能:验证账户是否处于正常状态
    *输入参数:无
    *输出参数:无
    *其他说明:无
    *返回值:2
    ************************/
    bool User::isNormalUser()
    {
        bool normal=true;
        if(status!=0)
        {
            normal=false;
            cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能继续操作!"<<endl;
        }
        return normal;
    }
    


    bank.cpp文件

    /*
    Copyright (c) 2014,烟台大学计算机学院
    *All rights reserved.
    *文件名称:lily.cpp
    *作者:李莉
    *完成日期:2015年7月17日
    *版本号:v1.0
    *问题描述:简单的银行储蓄系统,
    程序输入:根据业务界面输入
    程序输出:业务运行结果
    */
    #include <iostream>
    #include <cstring>
    #include "bank.h"
    #include <fstream>
    #include <conio.h>
    #include <ctype.h>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    int pass();//银行工作人员登陆,如果登陆成功则执行下面的功能
    int chooseInMenue();//选择菜单
    int inputPassWord();//输入银行卡的密码
    /*******************
    *函数功能:构造函数,把文件中已经保存的文件读入数组中
    *输入参数:无
    *输出参数:无
    *其他说明:构造函数中就已经把文件读取了,
    *******************/
    Bank::Bank()
    {
        ifstream infile("account.txt",ios::in);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        int i=0;
        int acc;
        int pw;
        string nam;
        double bal;
        int sta;
        double ti;
        N=jishu();
        users=new User[N+1];
        while(infile>>acc>>nam>>pw>>bal>>sta>>ti)
        {
            users[i].setUser(acc,nam,pw,bal,sta,ti);
            i++;
        }
        infile.close();
    }
    /*******************
    *功能说明:把后面建立的用户的信息读入到文件中
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ******************/
    void Bank::savefile()
    {
        ofstream outfile("account.txt",ios::out);
        if(!outfile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        for(int i=0; i<N; ++i)
        {
            outfile<<users[i].account<<" "<<users[i].name<<" "<<users[i].password<<" "<<users[i].balance<<" "<<users[i].status<<" "<<users[i].time<<endl;
        }
        outfile.close();
    
        return;
    }
    /****************
    *函数功能:统计文件中已有的用户数目
    *输入参数:无
    *输出参数:无
    *其他说明:确定动态数组的数组的长度
    ********************/
    
    int Bank::jishu()
    {
        int i=0;
        int account;
        string name;
        int password;
        double balance;
        int status;
        int time;
        ifstream infile("account.txt",ios::in);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        while(infile>>account>>name>>password>>balance>>status>>time)
        {
            i++;
        }
        infile.close();
        return i;
    }
    /********************
    *函数功能:读取文件,文件保存的是每个账户的具体操作
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ********************/
    void Bank::readwork()
    {
        int i=0;
        ifstream infile("history.txt",ios::in);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        while(infile>>yw[i].ymd>>yw[i].hms>>yw[i].usernum>>yw[i].workinfo)
        {
            ++i;
        }
        infile.close();
    }
    /*********************
    *函数功能:保存每笔业务的时间和具体操作信息到文件中去
    *输入参数:用户的账号和操作信息
    *输出参数:无
    *其他说明:这里应用了获取系统当前时间的函数,其头文件为ctime
    ************************/
    void Bank::savework(int usernum,string workinfo)
    {
        time_t t;
        tm *lt;//定义一个指针用来指向获取到的时间
        t = time(NULL);
        lt = localtime(&t);//获取当前时间,直接调用标准库内函数
        ofstream workfile("history.txt",ios::app);
        if(!workfile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        workfile<<lt->tm_year+1900<<"/"<<lt->tm_mon+1<<"/"<<lt->tm_mday<<" "<<lt->tm_hour<<":"<<lt->tm_min<<":"<<lt->tm_sec<<'\t';//年从1900年开始,月从0开始
        workfile<<usernum;
        workfile<<workinfo<<endl;
        workfile.close();
    }
    /********************
    *函数功能:查找函数中的账户具体操作明细
    *输入参数:用户账号
    *输出参数:用户的操作明细
    *其他说明:无
    ******************/
    void Bank::searchwork(int a)//查询业务
    {
    
        int i=0;
        ifstream infile("history.txt",ios::in);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        while(infile>>yw[i].ymd>>yw[i].hms>>yw[i].usernum>>yw[i].workinfo)
        {
            ++i;
            if(yw[i].usernum==a)
            {
                cout<<yw[i].ymd<<" "<<yw[i].hms<<" ";
                cout<<yw[i].usernum<<" ";
                cout<<yw[i].workinfo<<endl;
            }
            n=i;
        }
        infile.close();
    }
    /*********************
    *函数功能:银行系统的业务驱动
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ***********************/
    void Bank::work()
    {
        int ichoice;
    
        while(ichoice)
        {
            ichoice=chooseInMenue();
            readwork();
            switch(ichoice)
            {
            case 1:
                openAccount();
                break;
            case 2:
                cancelAccount();
                break;
            case 3:
                save();
                break;
            case 4:
                withdrew();
                break;
            case 5:
                showAccount();
                break;
            case 6:
                transferAccount();
                break;
            case 7:
                reportLoss();
                break;
            case 8:
                cancelLoss();
                break;
            case 9:
                updatePassword();
                break;
            case 10:
                showprofits();
                break;
            case 0:
                cout<<"欢饮您的再次光临!"<<endl;
            }
            savefile();
        }
    }
    /***********************
    *函数功能:开户操作
    *输入参数:无
    *输出参数:无
    *其他说明:新开的用户的账号是在文件中的用户的基础上增加的
    **************************/
    void Bank::openAccount()
    {
        int acc;
        int pw;
        string nam;
        double bal;
        int sta;
        double ti;
        cout<<"正在开户,请稍等:"<<endl;
        acc=10001+N;
        cout<<"新用户的银行卡号为:"<<acc<<endl;
        cout<<"请输入用户姓名:"<<endl;
        cin>>nam;
        int pass1,pass2;
        cout<<"请设置密码:"<<endl;
        pass1=inputPassWord();
        cout<<"请再次输入密码:"<<endl;
        pass2=inputPassWord();
        if(pass1==pass2)
        {
            pw=pass1;
            sta=0;
            cout<<"请输入您要存的金额!"<<endl;
            cin>>bal;
            cout<<"请输入存款年限:"<<endl;
            cin>>ti;
            users[N].setUser(acc,nam,pw,bal,sta,ti);
            N++;
            cout<<"开户成功!"<<endl;
            savework(acc,"开户成功");
        }
        else
        {
            cout<<"两次密码不同,请重新设定!"<<endl;
        }
    }
    /************************
    *函数功能:销户操作
    *输入参数:无
    *输出参数:无
    *其他说明:只有正常状态的用户才能销户,其他状态的不可以
    ***********************/
    void Bank::cancelAccount()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                users[who].showBalance();
                cout<<"确认销户?(y:确定/n:取消):"<<endl;
                if(getchar()=='y')
                {
                    users[who].balance=0;
                    users[who].status=2;
                    cout<<"销户成功!"<<endl;
                    savework(users[who].account,"销户成功");
                }
                else
                {
                    cout<<"销户操作已取消!"<<endl;
                    savework(users[who].account,"销户操作失败");
                }
                fflush(stdin);
            }
        }
    }
    /*********************
    *函数功能:存款操作
    *输入参数:无
    *输出参数:无
    *其他说明:正常状态的用户才能进行存款操作,而其他状态的不可以
    **********************/
    void Bank::save()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            if(users[who].status==0)
            {
                users[who].showName();
                users[who].showBalance();
                cout<<"请输入存款金额:"<<endl;
                double money;
                cin>>money;
                users[who].balance+=money;
                cout<<"请输入存款年限:"<<endl;
                double ti;
                cin>>ti;
                cout<<"存款后";
                users[who].showBalance();
                savework(users[who].account,"存款成功");
            }
            else if(users[who].status==1)
            {
                cout<<"您的账户已挂失,不能进行存款操作!"<<endl;
                savework(users[who].account,"账户已挂失,存款操作失败");
            }
            else
            {
                cout<<"您的账户已销户,不能进行存款操作!"<<endl;
                savework(users[who].account,"账户已销户,存款操作失败");
            }
        }
        return;
    }
    /******************
    *函数功能:取款操作
    *输入参数:无
    *输出参数:无
    *其他说明:只有状态正常的用户可以进行取款操作,而且取款金额不可以大于账户余额
    **********************/
    void Bank::withdrew()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].isNormalUser())
            {
                if(users[who].passwordIsRight())
                {
                    double money;
                    cout<<"请输入取款金额:"<<endl;
                    cin>>money;
                    if(money>users[who].balance)
                    {
                        cout<<"余额不足,取款失败!"<<endl;
                        savework(users[who].account,"余额不足,取款操作失败");
                    }
                    else
                    {
                        users[who].balance-=money;
                        cout<<"取款后";
                        users[who].showBalance();
                        savework(users[who].account,"取款成功");
                    }
                }
            }
        }
        return ;
    }
    /****************
    *函数功能:显示用户的账户的信息
    *输入参数:无
    *输出参数:无
    *其他说明:可以具体查询账户的操作记录
    ********************/
    void Bank::showAccount()
    {
        int who;
        string sta[3]= {"正常","挂失","销户"};
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"余额为:";
                users[who].showBalance();
                cout<<"状态为:"<<sta[users[who].status]<<" ";
                cout<<"需要继续查询业务明细么(y/n)?";
                if(tolower(getchar())=='y')
                {
                    searchwork(users[who].account);
                }
            }
        }
        return ;
    }
    /*******************
    *函数功能:转账操作
    *输入参数:无
    *输出参数:无
    *其他说明:转入转出账户状态正常,在文件中存在的账户,
    *********************/
    void Bank::transferAccount()
    {
        int whout,whin;
        cout<<"请输入要转出账户银行卡号:"<<endl;
        whout=getUser();
        if(whout>=0)
        {
            if(users[whout].isNormalUser())
            {
                users[whout].showName();
                if(users[whout].passwordIsRight())
                {
                    double money;
                    cout<<"请输入转账金额:"<<endl;
                    cin>>money;
                    if(users[whout].balance<money)
                    {
                        cout<<"您的余额不足,转账失败!"<<endl;
                        savework(users[whout].account,"余额不足,转账操作失败");
                    }
                    else
                    {
                        cout<<"请输入要转入账户银行卡号:"<<endl;
                        whin=getUser();
                        if(whin>=0)
                        {
                            if(users[whin].isNormalUser())
                            {
                                users[whout].balance-=money;
                                users[whin].balance+=money;
                                users[whout].showBalance();
                                savework(users[whout].account,"转账成功!");
                            }
                        }
                    }
                }
            }
        }
        return ;
    }
    /*************************
    *函数功能:挂失操作
    *输入参数:无
    *输出参数:无
    *其他说明:无
    **************************/
    void Bank::reportLoss()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                if(users[who].isNormalUser())
                {
                    users[who].status=1;
                    cout<<"挂失成功!"<<endl;
                    savework(users[who].account,"挂失成功");
                }
                else if(users[who].status==1)
                {
                    cout<<"该账户已经是挂失状态,不能继续挂失!"<<endl;
                    savework(users[who].account,"挂失操作失败!该账户已经是挂失状态,不能继续挂失!");
                }
                else
                {
                    cout<<"该账户已经是销户状态,不能挂失!"<<endl;
                    savework(users[who].account,"挂失操作失败!该账户已经是销户状态,不能挂失");
                }
            }
        }
        return ;
    }
    /*********************
    *函数功能:解挂操作
    *输入参数:无
    *输出参数:无
    *其他说明:无
    **********************/
    void Bank::cancelLoss()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                if(users[who].status==0)
                {
                    cout<<"该账户是正常状态,不需要解挂!"<<endl;
                    savework(users[who].account,"账户是正常状态,解挂失败!");
                }
                else if(users[who].status==1)
                {
                    users[who].status=0;
                    cout<<"解挂成功!"<<endl;
                    savework(users[who].account,"解挂成功");
                }
                else
                {
                    cout<<"该账户已经销户,不能解挂!"<<endl;
                    savework(users[who].account,"账户已经销户,解挂失败!");
                }
            }
        }
        return ;
    }
    /**************************
    *函数功能:修改密码
    *输入参数:无
    *输出参数:无
    *其他说明:无
    ***************************/
    void Bank::updatePassword()
    {
        int who;
        int pass1,pass2;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"请输入新密码:"<<endl;
                pass1=inputPassWord();
                cout<<"请确认新密码:"<<endl;
                pass2=inputPassWord();
                if(pass1==pass2)
                {
                    users[who].password=pass1;
                    cout<<"密码修改成功!"<<endl;
                    savework(users[who].account,"密码修改成功");
                }
                else
                {
                    cout<<"两次输入密码不同,修改失败!"<<endl;
                    savework(users[who].account,"密码修改失败");
                }
    
            }
        }
        return ;
    }
    /***********************
    *功能说明:计算存款利息
    *输入参数:无
    *输出参数:无
    *其他说明:关于存款期限在文件中读取,根据不同存款年限,调用不同的利息计算
    ***********************/
    void Bank::showprofits()
    {
        int who;
        who=getUser();
        if(who>=0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                users[who].showBalance();
                users[who].showprofit();
            }
        }
    }
    /**********************
    *功能描述:查询账号在文件中是否存在
    *输入参数:无
    *输出参数:查到的账号在文件中的下标
    *其他说明:二分查找
    ***********************/
    int Bank::getUser()
    {
        int id;
        cout<<"请输入要查询的账号:"<<endl;
        cin>>id;
        int index=-1;
        int low=0,high=N-1,mid;
        while(low<=high)
        {
            mid=(low+high)/2;
            if(users[mid].account==id)
            {
                index=mid;
                break;
            }
            else if(users[mid].account<id)
            {
                low=mid+1;
            }
            else
                high=mid-1;
        }
        if(index<0)
            cout<<"操作失败,该用户不存在!"<<endl;
        return index;
    }
    


    运行结果

    1.管理员登陆

    2.开户

    3.存款

    4.取款

    5.查询


    6.转账

    7.挂失

    8.解挂

    9.改密

    10计算利息

    11.销户

    12所有文件


    展开全文
  • SENG-310-人机交互项目 购物储蓄网站原型 下载此存储中的所有文件,并将它们保存在一个本地目录中,并打开一个index.html以运行该应用程序
  • 在其他存储中:有关动态借贷和储蓄问题,请参见; 有关代码示例,另请参见,和; 有关R的介绍性信息,请参见,有关Matlab的介绍性数学信息,请参见。 有关所有的公共存储,请参见。 如有任何问题,请联系。 安装...
  • 1、磁盘的概念、软盘和硬盘 要记住一点,我们用电脑处理的信息都是保存在磁盘里的。那您知道在磁盘上的什么地方吗?要想搞清楚这个问题,我们得从头说起。计算机的存储器有两类,一类是内部存储器,一断电就会把...
  • 本文讲的是一站式服务陪伴邮政储蓄银行一路同行,“贯穿企业IT系统建设生命周期的一站式服务”,即“一站式服务”是华胜天成在IT服务行业受到业界首肯的一大利器,虽然服务模式通过“内生+外延”的发展进一步完善,但...
  • 实训项目——银行储蓄系统

    千次阅读 2015-07-16 13:07:40
    头文件:bank.h /* ...*All rights reserved. * *文件名称:bank.h *文件标识:无 *内容摘要:该代码用于获取满足后缀要求的第一个文件 *其他说明:无 *当前版本:V1.0 *作 者:刘佳琦 *完成日期:2015年7月16日 ...
  • 将存储克隆到您的计算机 git clone https://github.com/Vincent-Juma/Moringa-Staff-Sacco.git 将目录更改为克隆目录 cd Moringa-Staff-Sacco 打开您喜欢的编辑器,然后继续进行操作。 已知错误 到目前为止没有...
  • if(uMoney ,还有用到#include函数里面的strlen统计字符数组包含的长度; 以及strrry()函数将字符串倒置。*/ void creatAccNum(int num)//根据实际人数自动生成账号 { int n; char s[20];//将num以字符形式保存 ...
  • iBanking信息系统具有大多数基本功能,因此将有助于消除这些金融和储蓄公司的日常困扰。 部署方式 克隆仓库或以zip格式下载 将其解压缩到xampp / htdocs /或opt / lampp / htdocs /或var / www / html / 创建一个名...
  • 问题及代码: main函数 /* ...*All rights reserved....*文件名称:lily.cpp *作者:李莉 ...*问题描述:简单的银行储蓄系统, 程序输入:根据业务界面输入 程序输出:业务运行结果 */ #include #include
  • 文章目录数据库函数数学函数聚合函数字符串函数trim() 返回去除指定格式的值日期时间函数储蓄过程概述简介优点创建存储过程不带参数的创建参数带参数的存储过程其他命令 数据库函数 MySQL 数据库函数提供了能够实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,427
精华内容 1,370
关键字:

储蓄库