欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构课程设计银行储蓄系统

程序员文章站 2024-03-22 20:04:52
...
  1. /** 
  2. *版权所有(C)2017,panyanan
  3. * 
  4. *文件名称:main.cpp 
  5. *文件标识:无 
  6. *内容摘要:本文件的作用是调用算法库里面的函数,完成题目要求。 
  7. *其它说明:无 
  8. *当前版本:V1.0 
  9. *作者:潘亚楠
  10. *完成日期:2017,12,22
  11. **/  
  12. #include <stdio.h>
    #include <malloc.h>
    #include <string>
    #include <iostream>
    #include "list.h"
    using namespace std;
    typedef int ElemType;
    
    
    //void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
    
    //void DestroyList(LinkList *&L); //销毁单链表
    void kaihu(LinkList *&L);
    void ListInsert(LinkList *&L);
    void jiemian();
    void cunkuan(LinkList *&L);
    void qukuan(LinkList *&L);
    void xiaohu(LinkList *&L);
    void chaxun(LinkList *L);  //输出单链表
    void chaxunsuoyou(LinkList *L);
    void zhuanzhang(LinkList *L);
    bool ListEmpty(LinkList *L);
    void InitList(LinkList *&L);
    
    int main()
    {
    
       	int cmd;  //操作类型
        LinkList  *L2;
    	L2 = new LinkList;
    	L2 = NULL;
        int index=0;
        InitList(L2);//初始化
        while(1)
    	{
            jiemian();
    		cout<<endl;
            cout<<"请输入您要进行的业务号:";
            cin>>cmd;
    		switch(cmd)
    		{
    		    jiemian();
    
    			case 1:
                    kaihu(L2);
                    //index++;
    				break;
    			case 2:
                    cunkuan(L2);
    				break;
                case 3:
    				qukuan(L2);
    				break;
                case 4:
    				xiaohu(L2);
    				break;
                case 5:
                    zhuanzhang(L2);
                    break;
    			case 6:
    				chaxun(L2);  //输出单链表
    				break;
    
    			case 7:
    				chaxunsuoyou(L2);
    				break;
                default:
    				break;
    
    
    		}
    	}
    
    }
    1. /** 
    2. *版权所有(C)2017,panyanan
    3. * 
    4. *文件名称:list.cpp
    5. *文件标识:无 
    6. *内容摘要:本文件的作用是对调用函数的声明
    7. *其它说明:无 
    8. *当前版本:V1.0 
    9. *作者:潘亚楠
    10. *完成日期:2017,12,22
    11. **/ 
    #include <cstring>
    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    # include <string>
    #include "list.h"
    using namespace std;
    
    bool ListEmpty(LinkList *L) // 判断链表是否为空
    {
        return (L->next==NULL);
    }
    
    void InitList(LinkList *&L)//初始化链表
    {
        L = (LinkList *)malloc(sizeof(LinkList));
        L->next = NULL;
    }
    
    int LocateElem(LinkList *L,string name)//按元素位置查找,根据输入的名字判断是链表的第几个
    {
        int i = 1;
        LinkList *p = L->next;
        while(p!=NULL && p->name!=name)
        {
            p = p->next;
            i++;
        }
        if(p==NULL)//如果名字不存在,返回0,如果找到,返回他在第几个
            return 0;
        else
            return i;
    }
    
    void kaihu(LinkList *&L)//尾插法建立单链表
    {
        LinkList *s,*r;
    	s = new LinkList;
    	r = new LinkList;
        r=L;        //r始终指向终端结点,开始时指向头结点
    	while (r->next != NULL) {
    		r = r->next;
    	}
    
        cout<<"请输入姓名:";
        cin>>s->name;
        cout<<"请输入身份证号:";
        cin>>s->shenfen;
        cout<<"请输入密码:";
        cin>>s->mima;
        cout<<"请输入存款金额:";
        cin>>s->money;
    
        ////////////////////////////////////////////////
    
        if(s->money<=0)
            {
              cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
              cin>>s->money;
            }
    
    	if (r == NULL)
    	{
    
    	}
        r->next = s;
        s->next=NULL;
    
    
    cout<<"开户成功!啦啦啦~"<<endl;
    }
    
    
    void cunkuan(LinkList *&L)
      {
        LinkList *s,*r;
    
        string name;
        double money;
        string mima;
        int shenfen;
    
        cout<<"请输入姓名:";
        cin>>name;
        cout<<"请输入密码:";
        cin>>mima;
        cout<<"请输入存款金额:";
        cin>>money;
        if(money<=0)
        {
            cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
            cin>>money;
        }
        int locate = LocateElem(L,name);//调用他返回的位置
    
        if(locate==0){//如果返回的是0
            cout<<"账户不存在!请重新输入。"<<endl;
        }
        else{
            r = L;
            int i;
            for(i=0;i<locate;i++){
                r = r->next;
            }
            if(r->mima == mima){
                r->money = r->money + money;
            }else{
                cout<<"密码不正确"<<endl;
            }
        }
    
    
    
        //int j=0;
    /*
        while(r->mima!=mima){
            cout<<"密码不正确,请重新输入"<<endl;
            cin>>mima;
        }
    
        r->money=money+r->money;
        cout<<"存款成功!哈哈哈~";
    
    */
      }
    
      //3取款
      void qukuan(LinkList *&L)
      {
           LinkList *s,*r;
           //s=L;
        int i;
    
    
        string name;
        double money;
        string mima;
        int shenfen;
        cout<<"请输入姓名:";
        cin>>name;
        cout<<"请输入密码:";
        cin>>mima;
        cout<<"请输入取款金额:";
        cin>>money;
                   //r始终指向终端结点,开始时指向头结点
        if(money<=0)
        {
            cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
            cin>>money;
        }
        int locate = LocateElem(L,name);
        if(locate==0){
            cout<<"账户不存在!请重新输入。"<<endl;
        }
        else{
            r = L;
            int i;
            for(i=0;i<locate;i++){
                r = r->next;
            }
            if(r->mima == mima){
                while(r->money - money < 0){
                    cout<<"余额不足,重新输入:";
                    cin>>money;
                }
                r->money = r->money - money;
            }else{
                cout<<"密码不正确"<<endl;
            }
        }
    
    
      }
    
    //4销户
      void xiaohu(LinkList *&L)//销毁单链表
      {
    
            LinkList *last , *r;
            string name;
            string mima;
    
            int locate;
            cout<<"请输入姓名:";
            cin>>name;
            cout<<"请输入密码:";
            cin>>mima;
            locate = LocateElem(L,name);
            if(locate == 0){
                cout<<"该用户不存在"<<endl;
            }else{
                r = L;
                int i;
                for(i=0;i<locate-1;i++){//找上一个
                   r = r->next;
                }
                last = r->next;  //next要删除的
                if(last->mima == mima){
                    r->next = r->next->next;
                    cout<<"销户成功"<<endl;
                }else{
                    cout<<"密码不正确"<<endl;
                }
    
            }
      }
    
    
      //5转账
    void zhuanzhang(LinkList *L)
    {
        //LinkList *send,*to,*sendlist,*tolist;
        LinkList *r,*s;
        //sendlist = L;
        //tolist = L;
        int send,to;
        string sendname;
        string mima;
        string toname;
        //int wrong=0;
        double money;
        cout<<"请输入姓名:";
        cin>>sendname;
        cout<<"请输入密码:";
        cin>>mima;
        cout<<"请输入您要转账的姓名:";
        cin>>toname;
        cout<<"转账金额:";
        cin>>money;
    
        send = LocateElem(L,sendname);
        to = LocateElem(L,toname);
    
        if(send == 0)
            {
                cout<<"您输入的转款或收款人有误"<<endl;
            }
        else if(to == 0){
                cout<<"您输入的转款或收款人有误"<<endl;
        }
        else
            {
                r = L;
                s = L;
                int i;
                for(i=0;i<send;i++){
                    r = r->next;
                }
                for(i=0;i<to;i++){
                    s = s->next;
                }
                if(r->mima == mima){
                    while(r->money - money < 0){
                    cout<<"余额不足,重新输入:";
                    cin>>money;
                }
                    r->money = r->money - money;
                    s->money = s->money + money;
                    cout<<"转账成功"<<endl;
                }else{
                cout<<"密码不正确"<<endl;
                }
            }
    
    
    
    
    
    
        }
    
    
        //sendlist->money = sendlist->money - money;
        //tolist->money = tolist->money+money;
    
    
    
    
    //6查询
      void chaxun(LinkList *L)  //输出单链表
    {
        cout<<"您的用户名:"<<endl;
        string name;
        cin>>name;
        cout<<"您的密码:"<<endl;
        string mima;
        cin>>mima;
        LinkList *r ;
        int locate = LocateElem(L,name);
        if(locate==0){
            cout<<"账户不存在!请重新输入。"<<endl;
        }
        else{
            r = L;
            int i;
            for(i=0;i<locate;i++){
                r = r->next;
            }
            if(r->mima == mima){
                cout<<"您的姓名: "<<r->name<<" 您的金额为:"<<r->money<<endl;
            }else{
                cout<<"密码不正确"<<endl;
            }
        }
    
    }
    
    
    //7查询所有
    void chaxunsuoyou(LinkList *L)
    {
        LinkList *p=L->next;
        int i = 0;
        while (p!=NULL)
        {
            cout<<"第"<<i+1<<"位用户:";
            cout<<"姓名"<<p->name<<" "<<"账户余额"<<p->money<<endl;
            p=p->next;
            i++;
        }
        printf("\n");
    }
    
    //k开户二
    /*
    void ListInsert(LinkList *&L)
    {
        LinkList *p = L,*s;
        while(p->next!=NULL)
        {
            p=p->next;
        }
         string name;
        double money;
         string mima;
           int shenfen;
    
           s=(LinkList *)malloc(sizeof(LinkList));
        cout<<"请输入姓名:";
        cin>>s->name;
        cout<<"请输入身份证号:";
        cin>>s->shenfen;
        cout<<"请输入密码:";
        cin>>s->mima;
        cout<<"请输入存款金额:";
        cin>>s->money;
    
    
            p->next = s;
            s->next=NULL;
    }
    */
    
    
    
    
    
    1. /** 
    2. *版权所有(C)2017,panyanan
    3. * 
    4. *文件名称:list.h
    5. *文件标识:无 
    6. *内容摘要:本文件的作用是对结构体的声明
    7. *其它说明:无 
    8. *当前版本:V1.0 
    9. *作者:潘亚楠
    10. *完成日期:2017,12,22
    11. **/ 
    #include <cstring>
    #include <iostream>
    using namespace std;
    typedef struct LNode        //定义单链表结点类型
    {
        string name;
        double money;
        char mima[20];
        //string mima2;
        int guashi;
        int shenfen;
        struct LNode *next;     //指向后继结点
    } LinkList;
    
    void kaihu(LinkList *&L);//尾插法建立单链表
    void ListInsert(LinkList *&L);
    void cunkuan(LinkList *&L);
    void qukuan(LinkList *&L);
    void xiaohu(LinkList *&L);
    void zhuanzhang(LinkList *L);
    void chaxun(LinkList *L);
    void ListInsert(LinkList *&L);
    void chaxunsuoyou(LinkList *L);
    bool ListEmpty(LinkList *L);
    int LocateElem(LinkList *L,string name);
    void InitList(LinkList *&L);
    

    1. /** 
    2. *版权所有(C)2017,panyanan
    3. * 
    4. *文件名称:view.cpp
    5. *文件标识:无 
    6. *内容摘要:本文件的作用是视图界面部分
    7. *其它说明:无 
    8. *当前版本:V1.0 
    9. *作者:潘亚楠
    10. *完成日期:2017,12,22
    11. **/ 
    12.  #include <iostream>
       #include <stdio.h>
       using namespace std;
       void jiemian()
       {
              printf("*********银行储蓄平台******************\n");
              printf("**1  开户       2  存款      3  取款*********\n");
      		printf("**4  销户       5  转账      6  查询*********\n");
      	    printf("**7  查询所有                       *********\n");
       }



    运行结果:
  13. (1)   开户:利用尾插法建立新用户,输入用户名、身份证号、密码、存款金额,显示开户成功。数据结构课程设计银行储蓄系统

    (2)   存款:所有用户信息储存在单链表中,输入用户名、密码、存款金额,存款成功,显示余额。

    数据结构课程设计银行储蓄系统

    (3)   取款:所有用户信息存储在单链表中,输入用户名、密码、取款金额,取款成功,显示余额。

     

    数据结构课程设计银行储蓄系统

    (4)   转账:定义转出账号和转入账号,输入转出金额、转入账号,转入账号的金额不能超过该账号的余额,转出减少的金额,与转入账号增加的金额相同。

     数据结构课程设计银行储蓄系统

    (5)   销户:输入要销去账户的姓名、密码,采用销毁单链表的方法,销毁该账户。

    数据结构课程设计银行储蓄系统

    (6)   查询输入用户名、密码,,并显示余额。

    数据结构课程设计银行储蓄系统

    (7)   查询所有:输入用户名、密码,输出当前账户是第几个用户,并显余额。

     


  14. 数据结构课程设计银行储蓄系统



  15. 心得体会:

    本次课程设计基于上学期C++课程实训,把存储结构改成链表。我们对于页面的设计并不要求非常漂亮。因为我们主要是为了完成系统的功能。对于一个银行系统,最基本的功能的就是要有存取款功能,在此基础上还要查询功能、转账功能,功能越多系统就越强健。

      在整个过程中,我们遇到了很多问题。整个过程中我们组相互帮助,在尽量少的时间内完成整个系统的开发。虽然系统在规定时间内完成,但是所设计的系统并不完善。有些功能没有实现。例如:我本身还想在系统中对用户的账户增加挂失和解挂的功能。该功能应该是在用户遇到异常情况是对自己账户进行挂失操作,当异常情况解除时可以解挂。由于时间问题,这些问题只是做了相应的分析却来不及完善。这些仍然存在的缺陷我们将来在课余时间会尽量完善。

      这次课程设计中,我们求助了老师和同学,有很多解决不了的问题都是通过同学和老师的帮助完成的。我们周围有一些精通代码的同学,在他们指导下我才完成所设计的系统。在设计过程中我从这些同学的身上学到了很多知识,很多是以前没有听过的东西。

      这次课程设计我们运用的大多是老师在课堂上带我们做的一些代码。也接触到了以前没有接触到的东西。整个过程我们受益良多,无论我们付出了多少劳动都值得。这次课程设计也为我们将来的毕业设计打下了基础,为我们的人生道路添砖加瓦。