第一章目的及要求书上有。
第二章需求分析软件设计的一个重要的环节就是需求分析。
本章在对ATM取款机管理系统的应用情况作了全面调查的基础上,确定系统目标,并对系统所需要的基础功能进行分析,从而确定用户的需求。
以下是ATM取款机管理系统所需要的需求分析。
ATM管理系统包括六个模块:登录,挂失功能,修改密码,取款功能,转账功能,查询功能。
①登录:输入银行卡的账号,密码,验证银行卡的卡号,密码是否正确,之后进入主界面②挂失功能:确认是否对银行卡进行挂失,挂失后账户无法操作③修改密码:用户可自由对其银行卡密码进行修改,修改之后的新密码将会覆盖其原密码④取款功能:用户可自由取得所持银行卡内的存款,所取款数必须在其原有账户余额之内⑤转账功能:用户可将本账户中的存款转入其他账户,转账过程中,需要转入账户的账号⑥查询功能:用户可查询用户信息,其中包括用户姓名、用户身份证号码、银行卡号以及存款余额模拟ATM取款机的操作:首先录入账户信息,格式如下㈠、登录功能:输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。
㈡、查询功能:查询账户余额。
㈢、取款功能:取款,更新余额。
㈣、挂失功能:挂失后,该账户不能进行任何操作。
㈤、修改密码:输入原密码和新设置密码。
㈥、转账功能:输入转账的转出账户以及转账金额,进行转账。
第三章设计分析3.1、ATM系统管理3.1.1系统基本功能首先,确定系统中存在两种用户,一种是ATM,可以进行信息录入和后台管理。
另外一种是取款人,取款人主要是进行信息的查询,不能进行信息录入。
所以在创建类的时候,先创建一个ATM类,然后创建取款人类,并及ATM 类形成有元,进而继承ATM的所有功能,并添加录入信息的功能。
基本功能:登录功能---------输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。
查询功能---------查询账户余额。
取款功能---------取款,更新余额。
挂失功能---------挂失后,该账户不能进行任何操作。
修改密码---------输入原密码和新设置密码。
转账功能---------输入转账的转出账户以及转账金额,进行转账。
、系统功能如图3-1:图3-1 ATM系统的基本功能分类3.1.2相关数据结构的说明信息的载体用对象数组。
系统录入信息的操作非常枯燥,所以创建一个文件,把每次录入的信息保存入文件,在下一次进入系统时,它会默认读取文件原有的信息,当然也可以随时添加录入ATM信息。
然后系统的各个功能仅仅是通过查询找到具体对象的具体数据进行操作。
用户姓名:Name 字符型。
用户账号:Num 字符型。
用户密码:Password 字符型。
身份证号:Id 字符型。
存款数额:Money 实型。
3.1.3类的设计1)定义了一个ATM取款机类,类中包括以下几部分:公有段:依次为登陆界面,核对密码,挂失,修改密码,取款,转账,查询信息,退出系统,功能界面,锁机。
私有段:记录密码输入次数以及变量j。
友元函数:取款,转账,查询信息,账号,密码。
2)定义了一个consumer 类,类中包括以下几部分:公有继承了ATM类私有段:用户密码,用户姓名,用户身份证号,卡号,存款钱数保护段:取得姓名,取得卡号,取得身份证号,取得密码,取得余额,设置密码,取钱3.2系统流程图利用流程图来说明系统各个部分之间如何协调来完成任务。
1)登录流程如图3-2图3-2 登陆的基本流程2)查询功能图3-3 图中显示的是查询的基本流程:图3-3 图中显示的是查询的基本流程3)挂失功能图3-4 图中显示的是挂失的基本流程:图3-4 图中显示的是挂失的基本流程4)修改密码图3-5 图中显示的是修改密码的基本流程:图3-5 图中显示的是修改密码的基本流程5)取款功能图3-6 图中显示的是取款的基本流程:图3- 6 取款的基本流程6)转账功能图3-7 图中显示的是转账的基本流程:图3-7 转账的基本流程3.3参数说明全局变量,重要形式参数、全局变量局部变量等等,它们的命名及用途解释bool j: 全局变量。
char m,t,ch: 全局变量。
int times : 重要形式参数。
第四章系统实现对运行及测试结果进行说明,并添加运行界面的截图。
4.1、登录主界面图4-1 主界面登录窗口图4-2 登录主界面时,账号或密码出错时系统自动锁机图4-3 成功登录后,主界面所显示的窗口4.2、挂失功能图4-4 根据所选代码进行挂失,挂失后系统将退出主界面4.3、修改密码图4-5 xxxx图4-6 图为更改密码功能界面,更改后的密码为新密码图4-7为图为取款功能界面,图中显示为成功取款图4-8 图为取款失败后的功能界面图4-9 图为转账功能界面,图中显示为转账成功后的界面图4-10 图为转账失败后的功能界面图4-11 图中所示为用户个人信息,包括用户姓名、身份证号、银行卡号以及存款余额4.7、退出系统图4-12图为选择序号后系统退出的页面第五章总结课程设计旨在锻炼学生的实际动手能力和解决真实问题的能力。
并在其中掌握和熟练所学的知识,并能够运用所学知识解决比较简单的现实模拟问题。
本次课程设计在老师的帮助和自己的努力下终于能够成功运行,使我感到非常高兴以及提高了自己的编程信心,虽然这次课程设计的题目实现比较简单和不实用但毕竟是自己将近两个星期的努力地结果。
在期间我对编程的理念理解又加深了一点,课程设计使我明白好的算法或者是好的逻辑思维对编程的重要性,在调试期间我自卑过、高兴过、平静过。
可以说是我经历了比较大的情感波动。
当费很大劲才把程序调运行的时候那种感觉实在是太好了。
在本次课程设计活动中,我明显的感觉到自己知识的欠缺和实际动手能的差劲。
尤其是在传值传参的函数调用时更体现的非常明显,感觉自己的书本学的不透、学的不扎实。
有些地方更本就不会,不如说文件的操作,比如说系统时间的获取等以前在上课或作习题时更本就不会考虑的问题在课程设计当中完全暴露出来。
通过本次试验,主要加深了对于友元函数,友元类使用的熟练程度。
程序功能相对比较简单,没有设计复杂的继承和重载函数,完成的比较轻松!参考文献[1]吴敏,杨国林.C++面向对象程序设计内蒙古大学出版社.[2]康晓林,汪涛.标准C++使用教程电子工业出版社附录以下是程序的源代码,并且加上了详细的注释://====hcsdkhfsk====#include"iostream"using namespace std;class consumer;class ATM // ATM取款机类{public:ATM(consumer& cn):cnsm(cn){j=true;}void welcome(); // 登陆界面bool check_passwd(char n[],char pwd[]);// 核对密码bool check_zhang(char num[]);//核对转入账号bool gua();//挂失void change_passwd(); // 修改密码void fetchmoney(); // 取款void zhuan();//转账void information(); // 查询信息void exitATM(); // 退出系统void functionshow(); // 功能界面void lock();//锁机private:bool j;int times; // 记录密码输入次数consumer& cnsm;};class consumer// 用户类{public:friend class ATM;consumer(char Name[],char Num[],char Id[20],float Money,char Password[]);protected:char* get_name(); // 取得姓名char* get_num(); // 取得卡号char* get_id();//取得身份证号char* get_passwd();// 取得密码float get_money(); // 取得余额void set_passwd(char pwd[]);// 设置密码void set_money(float m);// 取钱private:char passwd[8];// 用户密码char name[20]; // 用户姓名char id[20];//用户身份证号char num[20];//float money;//};consumer::consumer(char Name[],char Num[],char Id[20],float Money,char Password[]){strcpy(name,Name);strcpy(num,Num);strcpy(id,Id);money=Money;strcpy(passwd,Password);}float consumer::get_money(){return money;}char* consumer::get_name() // 对于数组的返回操作返回指针{return name;}char* consumer::get_num(){return num;}char* consumer::get_id(){return id;}char* consumer::get_passwd(){return passwd;}void consumer::set_money(float m){money-=m;}void consumer::set_passwd(char pwd[]){strcpy(passwd,pwd);}void ATM::welcome(){times=0;cout<<"欢迎使用银行ATM自动取款机"<<endl;char pwd[8],num1[20],ch;int i=0;do{i=0;cout<<endl<<"请输入卡号:";do{cin.get(ch); //对于键盘字符串的接收!num1[i++]=ch;}while(ch!='\n');num1[i-1]='\0';i=0;cout<<"请输入密码:";do{cin.get(ch);pwd[i++]=ch;}while(ch!='\n');pwd[i-1]='\0';if(!check_passwd(num1,pwd)){cout<<"你输入的卡号或密码有误,请重新输入"<<endl;times++;}else{functionshow();}}while(times<3);lock();}bool ATM::check_passwd(char num[],char pwd[]){if(strcmp(num,cnsm.get_num())==0&&strcmp(pwd,cnsm.get_passwd())==0) return true;elsereturn false;}void ATM::functionshow(){int n;do{cout<<"本机可办理以下业务:"<<endl;cout<<"********************"<<endl;cout<<" "<<endl;cout<<"1>挂失"<<" "<<"2>修改密码"<<endl;cout<<" "<<endl;cout<<"3>取款"<<" "<<"4>转账"<<endl;cout<<" "<<endl;cout<<"5>查询余额"<<" "<<"6>退出系统"<<endl;cout<<" "<<endl;cout<<"********************"<<endl;cout<<endl<<"请您输入相应的操作序号进行操作:"<<endl;cin>>n;while(n<1||n>6){cout<<"请输入正确的操作序号!"<<endl;cin>>n;}switch(n){case 1: gua(); break;case 2: change_passwd(); break;case 3: fetchmoney(); break;case 4: zhuan(); break;case 5: information(); break;case 6: exitATM(); break;}}while(true);}bool ATM::gua(){char a;do{cout<<"是否确认挂失:(y/n) 继续请按y 退出请按n "<<endl;cin>>a;if(a=='y'){cout<<"您已挂失成功!"<<endl;exit(2);}else{cout<<"您已选择退出!"<<endl;}}while(a=='y');return j=true;}void ATM::change_passwd(){char pwd[8],repwd[8];times=0;do{cout<<endl<<"请输入旧密码:";cin>>pwd;if(!check_passwd(cnsm.get_num(),pwd))times++;elsebreak;}while(times<3);if(times==3)lock();int t=1;do{cout<<"请输入新密码:";cin>>pwd;cout<<"请再输入一次新密码:";cin>>repwd;t=strcmp(pwd,repwd); // 相同返回0;if(t!=0)cout<<"你输入的两次密码不一样,请重新输入!"<<endl;}while(t!=0);cnsm.set_passwd(pwd);cout<<"密码修改成功,请牢记!"<<endl;}void ATM::fetchmoney(){float m;char ch;do{cout<<endl<<"你要取多少钱:"<<endl; // 两种情况while(m<=0){cout<<"请输入正确的数字!"<<endl;cin>>m;}if(cnsm.get_money()-m<0){cout<<"对不起,你的余额不足!"<<endl;}else{cout<<endl<<"取款成功,请收好钱!"<<endl;cnsm.set_money(m);}cout<<"是否要继续取款:(y/n) "<<endl;cin>>ch;}while(ch=='y'||ch=='Y');}void ATM::zhuan(){char z[20];float num;cout<<"请输入所转账号:"<<endl;cin>>z;cout<<"请输入所转钱数:"<<endl;cnsm.money-=num;if(cnsm.money>0)cout<<"转账成功!"<<"您的余额:"<<cnsm.money<<endl;elsecout<<"余额不足!"<<endl;}void ATM::information(){cout<<"**********************************"<<endl;cout<<"* 用户姓名: "<<cnsm.get_name()<<endl;cout<<"* 身份证号: "<<cnsm.get_id()<<endl;cout<<"* 银行卡号: "<<cnsm.get_num()<<endl; //必须声明友元才能用cnsm调用其成员函数cout<<"* 存款余额: "<<cnsm.get_money()<<endl;cout<<"**********************************"<<endl;}void ATM::lock(){cout<<endl<<"对不起,由于你的操作有误,你的卡已经被没收! "<<endl;exit(1); // 系统非正常退出}void ATM::exitATM(){cout<<endl<<"感谢你对本银行的支持,欢迎下次光临!"<<endl;cout<<"请取卡……"<<endl;exit(0);}void main(){consumer c1("李四","3234","8080088",450.8,"123456");// 先构造一个用户ATM atm(c1);atm.welcome();}。