ATM实验报告C++.docx
《ATM实验报告C++.docx》由会员分享,可在线阅读,更多相关《ATM实验报告C++.docx(27页珍藏版)》请在冰豆网上搜索。
ATM实验报告C++
《C++程序设计》开发总结报告
_____(ATM)的编程实现
姓名:
学号:
班级:
程序功能(50分)
代码质量
(20分)
报告质量(30分)
总成绩(100分)
批阅教师签字:
一、程序(或项目)背景
1.注册用户
(1)输入账号
(2)输入密码(3)再次输入密码确认:
若再次输入的密码与第一次不符,会提示重新设置密码。
在密码和账号输入完成之后输入姓名即可完成注册。
2.用户登录
输入账号登录,密码输入三次不正确之后系统自动退出。
(1)取款
(2)存款(3)查询余额(4)修改密码(再次确认)
ATM在社会中被使用的越来越多,一个安全方便的系统是很重要的。
二、相关技术
1.标准输入输出,类和函数
2.程序中使用的类库有、、;
三、程序(或项目)设计
1.分析程序(或项目)的开发思路:
在打开界面的时候可以选择注册新用户或者登录旧用户。
(1)注册时,输入账号、密码和姓名。
(2)登录时,确认账号和密码匹配之后执行取钱,存钱和查询的功能。
密码二次确认。
三次密码错误自动退出。
取款时不能超出当前金额。
2.画出程序流程图或项目的架构图,并加以适当说明;
3.
AccountItem
stringm_Anumber;
stringm_Password;
stringm_Name;
doublem_Balance;
string
AccountItem(AccountItem&a);
AccountItem&operator=(AccountItem&a);
AccountItem();
AccountItem(stringnumber,stringpassword,stringname,doublebalance);
voidDisplay();
voidwrite(ofstream&out);
voidread(ifstream&cin);
intCheckNumber(stringAnumber);
stringGetNumber();
stringGetPassword();
voidUpdatePassword(stringpassword);
voidDeductBalance(doublepay);
voidStoreBalance(doublemoney);
doubleGetBalance();
stringGetName();
intIsNull();
Accountbook
AccountItemb[100];
intm_AccountCount;
voidSetAccountbook();
Accountbook();
voidLoadAccountbook();
voidStoreAccountbook();
AccountItemFindItem(stringnumber);
boolUpdateItem(AccountItemItem);
画出程序(或项目)中的关键类图,并加以适当说明。
(可选)
四、程序(或项目)实现
(1)定义
private:
stringAnumber;
stringPassword;
stringName;
doubleBalance;
(2)存钱取钱
voidAccountItem:
:
StoreBalance(doublemoney){
Balance=Balance+money;
}
voidAccountItem:
:
DeductBalance(doublepay){
if(Balance-pay<0){
cout<<"对不起,你的余额不足!
"<return;
}
else{
Balance=Balance-pay;
}
}
(3)登录时do{
cout<<"请选择:
"<cin>>n;
switch(n){
case1:
MyAccountbook.SetAccountbook();
break;
case2:
MyAccountbook.LoadAccountbook();
cout<<"请输入帐号:
";
cin>>AccountNo;
FindItem=MyAccountbook.FindItem(AccountNo);
if(FindItem.IsNull())
cout<<"此用户不存在!
"<return;
cout<<"请输入密码:
";
cin>>AccountPassword;
if(FindItem.GetPassword()!
=AccountPassword)
cout<<"密码错误!
请重新输入"<time++;
cout<<"请输入密码:
";
cin>>AccountPassword;
(4)登录成功后do{
cout<<"1:
取款\n"
<<"2:
存款\n"<<"3:
查询余额\n"<<"4:
修改密码\n"<<"0:
退出\n"<cin>>m;
switch(m){
case1:
cout<<"请输入取款金额:
";
if(AccountPay>Balance)
break;
else{
cout<<"请取钱!
"<break;
}
case2:
cout<<"请输入存款金额(RMB):
";
cin>>AccountPay;
break;
case3:
cout<<"余额是:
"<break;
case4:
cout<<"请输入原密码:
"<cin>>AccountPassword;
if(FindItem.GetPassword()==AccountPassword)
{
cout<<"请输入新密码:
"<cin>>AccountPassword;
FindItem.UpdatePassword(AccountPassword);
cout<<"请确认新密码:
"<cin>>AccountPassword;
if(FindItem.GetPassword()==AccountPassword){
cout<<"修改成功!
"<MyAccountbook.UpdateItem(FindItem);
MyAccountbook.StoreAccountbook();
}
break;}}while(m!
=0);
case0:
break;
}}while(n!
=0);
return;}
intmain(){
Massaged;
d.MakeMassage();
return0;
}
列出实现中遇到的问题和解决方案。
开始的时候由于函数过多,经常混淆,后来把函数名以功能命名就得到了改善。
五、结果展示
登录界面
注册用户
密码错误三次自动退出
六、心得体会
这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨,如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据类型上。
就像我在写ATM类时,写完后,忘了在大括号后加个分号,这一点小小的错误也耽误了我几十分钟,所以说细节很重要。
程序设计时,也不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获,感觉课程设计很有意思。
在具体操作中对这学期所学的C++语言的理论知识得到巩固,达到课程设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C++语言具有的语句简洁,使用灵活,执行效率高等特点。
发现上机的重要作用,特别是对数组和循环有了深刻的理解。
七、参考文献
[1]陈维兴,林小茶:
《C++面向对象程序设计教程》[M],清华大学出版社
[2]丁峻岭:
《C语言程序设计》[M],中国铁道出版社
[3]孟程,刘峰:
《C++程序设计实例与操作》[M],航空工业出版社
源代码
#include
#include
#include
usingnamespacestd;
classAccountItem
{
private:
stringAnumber;
stringPassword;
stringName;
doubleBalance;
public:
AccountItem(AccountItem&a)
{
Anumber=a.Anumber;
Password=a.Password;
Name=a.Name;
Balance=a.Balance;
}
AccountItem&operator=(AccountItem&a)
{
Anumber=a.Anumber;
Password=a.Password;
Name=a.Name;
Balance=a.Balance;
return*this;
}
voidSetAccountItem(stringnumber,stringpassword,stringname,doublebalance);
AccountItem();
AccountItem(stringnumber,stringpassword,stringname,doublebalance);
voidDisplay();
voidwrite(ofstream&out);
voidread(ifstream&cin);
intCheckNumber(stringAnumber);
stringGetNumber();
stringGetPassword();
voidUpdatePassword(stringpassword);
voidDeductBalance(doublepay);
voidStoreBalance(doublemoney);
doubleGetBalance();
stringGetName();
intIsNull();
};
voidAccountItem:
:
SetAccountItem(stringnumber,stringpassword,stringname,doublebalance)
{
Anumber=number;
Password=password;
Name=name;
Balance=balance=0;
}
voidAccountItem:
:
UpdatePassword(stringpassword)
{
Password=password;
}
voidAccountItem:
:
StoreBalance(doublemoney)
{
Balance=Balance+money;
}
intAccountItem:
:
CheckNumber(stringAnumber)
{
if(Anumber==Anumber)
{
return1;
}
else
{
return0;
}
}
stringAccountItem:
:
GetNumber()
{
returnAnumber;
}
stringAccountItem:
:
GetPassword()
{
returnPassword;
}
voidAccountItem:
:
DeductBalance(doublepay)
{
if(Balance-pay<0)
{
cout<<"对不起,你的余额不足!
"<return;
}
else
{
Balance=Balance-pay;
}
}
doubleAccountItem:
:
GetBalance()
{
returnBalance;
}
stringAccountItem:
:
GetName()
{
returnName;
}
intAccountItem:
:
IsNull()
{
if(Anumber=="")
return1;
return0;
}
voidAccountItem:
:
read(ifstream&cin)
{
cin>>Name;
cin>>Balance;
cin>>Anumber;
cin>>Password;
}
voidAccountItem:
:
write(ofstream&cout)
{
cout<cout<cout<cout<}
AccountItem:
:
AccountItem()
{
Anumber="";
Password="";
Name="";
Balance=0;
}
AccountItem:
:
AccountItem(stringnumber,stringpassword,stringname,doublebalance)
{
Anumber=number;
Password=password;
Name=name;
Balance=balance;
}
voidAccountItem:
:
Display()
{
cout<<"账号:
";
cout<cout<<"密码:
";
cout<cout<<"姓名:
";
cout<cout<<"存款余额:
";
cout<}
classAccountbook
{
private:
AccountItemb[100];
intm_AccountCount;
public:
voidSetAccountbook();
Accountbook();
voidLoadAccountbook();
voidStoreAccountbook();
AccountItemFindItem(stringnumber);
boolUpdateItem(AccountItemItem);
};
voidAccountbook:
:
SetAccountbook()
{
stringAccountNo;
stringAccountPassword;
stringItemName;
doubleBalance;
stringpassword1,password2;
ofstreamOutput("accountbook.txt");
cout<<"请输入帐号:
";
cin>>AccountNo;
cout<<"请输入密码:
";
while
(1){
cin>>password1;
cout<<"请输入确认密码:
"<cin>>password2;
if(password1==password2)
{
AccountPassword=password1;
break;
}
else
{
cout<<"密码和确认密码不同!
"<<"请重新输入:
"<}
}
cout<<"请输入姓名:
";
cin>>ItemName;
b[m_AccountCount].SetAccountItem(AccountNo,AccountPassword,ItemName,Balance);
m_AccountCount++;
for(intj=0;j{
b[j].write(Output);
}
}
Accountbook:
:
Accountbook()
{
m_AccountCount=0;
}
voidAccountbook:
:
LoadAccountbook()
{
ifstreamInput("accountbook.txt");
intj=0;
while(Input)
{
b[j].read(Input);
j++;
}
Input.close();
m_AccountCount=j;
return;
}
AccountItemAccountbook:
:
FindItem(stringnumber)
{
inti;
boolFound=false;
for(i=0;i{
if(b[i].GetNumber()==number)
{
Found=true;
break;
}
}
if(Found==true)
{
returnb[i];
}
else
{
returnAccountItem();
}
}
boolAccountbook:
:
UpdateItem(AccountItemItem)
{
stringno=Item.GetNumber();
inti;
boolflag=false;
for(i=0;i{
if(b[i].GetNumber()==no)
{
flag=true;
break;
}
}
if(flag=true)
{
b[i]=Item;
}
returnflag;
}
voidAccountbook:
:
StoreAccountbook()
{
ofstreamOutput("accountbook.txt");
intk;
for(k=0;k{
b[k].write(Output);
}
Output.close();
return;
}
classMassage
{
private:
AccountbookMyAccountbook;
AccountItemFindItem;
public:
Massage(){}
voidMakeMassage();
};
voidMassage:
:
MakeMassage()
{
ifstreamInput("accountbook.txt");
intn;
inttime=0;
stringAccountNo;
stringAccountPassword;
doubleAccountPay;
stringItemName;
doubleBalance;
stringTransactionCode;
cout<do
{
cout<<"※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"
<<"※※\n"
<<"※欢迎使用银行管理系统模拟ATM机※\n"
<<"※※\n"
<<"※请用户在使用前选择开户:
※\n"
<<"※1:
注册开户※\n"
<<"※2:
用户登录※\n"
<<"※0:
退出※\n"
<<"※※\n"
<<"※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<cout<<"请选择:
"<cin>>n;
switch(n)
{
case1:
MyAccountbook.SetAccountbook();
break;
case2:
MyAccountbook.LoadAccountbook();
cout<<"请输入帐号:
";
cin>>AccountNo;
FindItem=MyAccountbook.FindItem(AccountNo);
if(FindItem.IsNull())
{
cout<<"此用户不存在!
"<return;
}
cout<<"请输入密码:
";
cin>>AccountPassword;
if(FindItem.GetPassword()!
=AccountPassword)
{
cout<<"密码错误!
请重新输入"<time++;
cout<<"请输入密码:
";
cin>>AccountPassword;
if(FindItem.GetPassword()!
=AccountPassword)
{
cout<<"密码错误!
请重新输入"<time++;
cout<<"请输入密码:
";
cin>>AccountPassword;
if(FindItem.GetPassword()!
=AccountPassword)
{
cout<<"密码错误3次!
系统自动退出!
"<return;
}
}
}
intm;
do{
cout<<"1:
取款\n"
<<"2:
存款\n"<<"3:
查询余额\n"<<"4:
修改密码\n"<<"0:
退出\n"<cin>>m;
switch(m)
{
case1:
cout<<"请输入取款金额:
";
cin>>AccountPay;
FindItem.DeductBalance(AccountPay);
MyAccountbook.UpdateItem(FindItem);
MyAccountbook.StoreAccountbook();
if(AccountPay>Balance)
break;
else{
cout<<"请取钱!
"<break;
}
case2:
cout<<"请输入存款金额(RMB