银行账户管理系统
课程设计说明书
课程设计名称: 软件综合课程设计
课程设计题目:银行账户管理系统
学 院 名 称: 信 息 工 程 学 院
专业:电子信息科学与技术 班级:170432
学号: 1 7 0 4 3 2 1 1 姓名: 方 翔
评分: 教师:肖永生
20 20 年 5 月 30 日
摘要
通过课程设计,进一步巩固、加深所学专业课程《C语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。熟练掌握C语言的基本语法,灵活运用各种数据类型。进一步掌握在集成环境下如何调试程序。
设计计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、电话号码等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限,保存为文件。
程序运行时,可以由用户选择进行何种操作。
输入:
程常运行后,屏幕上显示一个文字菜单(根据序号选定相应的操作项目)当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。
输出:1.应用程序正常运行后,要在屏幕上显示一个文字菜单
2.要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容,格式及结束方式等 。
关键字:软件课设;C++;银行账户管理系统
目录
1.需求分析............................................................................................................................................... 4
1.1问题描述................................................................................................................................... 4
1.2基本要求................................................................................................................................... 4
2. 系统分析............................................................................................................................................. 4
3.1设计知识 ................................................................................................................................. 4
3.2数据类别................................................................................................................................... 5
3. 详细设计............................................................................................................................................. 5
4.1程序流程框图.......................................................................................................................... 5
4.2系统类的结构分析.................................................................................................................. 6
4. 程序调试与测试分析....................................................................................................................... 6
5. 运行结果........................................................................................................................................... 6
1).用户界面................................................................................................................................ 7
2).用户功能................................................................................................................................ 9
3).查询与测试............................................................................................................................ 9
6. 结论.................................................................................................................................................. 11
7. 参考文献......................................................................................................................................... 12
8. 附录.................................................................................................................................................. 13
一需求分析
银行账户管理程序
问题描述
设计计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、电话号码等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限,保存为文件。
基本要求
程序运行时,可以由用户选择进行何种操作。
输入:
程常运行后,屏幕上显示一个文字菜单(根据序号选定相应的操作项目)当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。
输出:1.应用程序正常运行后,要在屏幕上显示一个文字菜单
2.要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容,格式及结束方式等 。
二系统分析
本程序定义了一个银行类Bank,用户可根据界面提示自行操作。由于要实现界面的回复,所以用了大量的函数调用,在控制用户的循环操作时采用了大量的for循环、do while语句、if else语句、return语句、switch语句等。
程序大体分为九个方面:
1* 定义一个银行类Bank,数据成员主要有姓名、身份证号码、账号、电话号码、余额、密码等内容,可供用户操作的功能有首页,开户、存款、取款、转账、销户、查询等。
2* 构造首页函数,显示银行系统的操作选择界面,具体包括开户、销户、存款、取款、转账、查询、退出等七个部分,帮助客户清晰的看到需要进行服务的内容,以便按照提示进行选择。在选择是运用了do while 语句限定了只能按0~6之间的数字进行选择,按其他的键均不起作用。
3* 构造开户函数,按照提示输入相关信息进行账户的创建,该系统根据不同的客户可创建多个账户,运用for循环语句和if判断语句保证每个用户和账号都不重复(即唯一)。如果账号重复,系统会提示账号已经存在请重新创建,并且把开户的结果保存在文件中。
4* 构造存款函数,主要运用for循环语句和if判断语句,用户输入账号进行存款,如果账号不存在系统会提示账号不存在,然后提示重新输入账号或者先进行开户再进行存款。若账号正确系统提示输入所存金额,则存款成功,同时信息会保存在文件中。
5* 构造取款函数,主要运用for循环语句和if else判断语句,输入银行账号和密码,若账号正确密码错误会显示密码错误,然后重新输入密码。若密码和账号都正确则可以进行取款服务,若密码和账号都错误,则系统会提示该账户不存在。并且把信息保存在文件中。
6* 构造转账函数,主要运用for循环语句和if else判断语句及return语句等,只要正确输入转出、转入账户的密码和账号就可实现将一个账户所存的钱转给另一个账户,但若转账金额大于所存金额系统会提示余额不足,若密码和账户有一个出错则转账服务无法完成,并且把相关信息存在文件中。
7* 构造销户函数,主要运用for循环语句和if else判断语句及return语句等, 若输入的密码和账户信息均正确则系统会把所有的创建信息删除,若有一个不正确则销户服务完成不了。
8* 构造查询函数,主要运用for循环语句和if else判断语句及return语句等,只要正确输入信息就可以从页面上看到用户的账户号 、姓名 、余额等,若输入不正确则会提示账户不存在或密码错误。
9* 主函数部分,运用switch语句分7种情况进行函数调运,在主页中选择不同的服务,则进行调用上述的函数。
三.程序流程图为:
四.程序调试与测试分析
经过仔细检查之后进行上机调试。进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
五.运行结果
1、首先给出用户操作界面
2、用户根据提示选择相应功能
1*若选择的是1(开户)就有
只要多次选择1就可开多个账号
若建立的账号重复系统会提示让重新建立
2* 若选择的是2(存款)
若银行账号不存在系统会提示让先开户
3*若选择3(取款)若密码错误会提示重新输入
若账号不存在则取款服务完成不了
4*若选择的是4(转账)
若账号不存在系统会提示
5*若选择的是5(销户)
6*若选择的是6(查询)
若查询的是已开户的6221234只要输入信息正确就有
若查询的是已开户的1234567只要信息正确就有
若输入的信息错误就有
7*若选择的是0(退出)就有
六总结
通过此次课程设计,让我感触颇多,我们光靠课本上的知识是远远不够的,书上的内容仅仅是一些简单的基础知识,如果要编写大型的程序,我们必须要学习大量的其他知识,所以平时一定要养成自学的习惯。还有通过编程让我认识到好多基础知识都不扎实,有些当时上课感觉掌握了,但一到实践就查出问题了,所以以后无论学啥都要认真、都要仔细。
就本程序而言,虽然题目要求并未涉及用户密码,但是作为银行的模拟系统应当设置用户密码,所以我加入了密码,使系统更加的具有实用性和真实性,这是比较好的一面,但是销户后的帐户并不能直接通过类中定义的函数分配给其他的用户,程序在进行多次调用函数后在最后销户时会出错,这是需要进一步改进的一面。尽管如此,但并不影响用户的实际操作及用户的数据。
本程序全都采用通俗易懂的函数和语句构成,别人易看,操作简单、易懂,结构清晰,思路合理,但还有很多不足,在以后的学习中,一定要注意,争取在以后编程时,能够避免本程序的不足。
总之,此次课程实际,让我更加熟悉了C语言和C++,体会到了编程的酸甜苦辣,感受到了计算机语言的微妙与神奇。让我学会了很多知识。
七、参考文献
[1] 清华大学出版社的《java2实用教程》(第三版),张跃平、耿祥义著。
[2] 清华大学出版社的《java程序设计》,陈勇孝著。
[3] 清华大学出版社的《Java就业培训教程》,张孝祥著。
[4] CSDN 论坛 网址 http://www.csdn.net/。
--------------------------------------------------------
八.附录
程序代码(C++语言)
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
class Bank{
public:
static int num;
int shouye();//首页
void kaihu(Bank bank[]);//开户
void cunkuan(Bank bank[]);//存款
void qukuan(Bank bank[]);//取款
void zhuanzhang(Bank bank[]);//转帐
void xiaohu(Bank bank[]);//销户
void chaxun(Bank bank[]);//查询
private:
char name[20];//姓名
char ID[20]; //身份证
long count;//账号
int number;//电话号码
char mima[20]; //密码
int money; //余额
};
//构造首页函数显示选择界面
int Bank::num=0;
int Bank::shouye()
{
char i;
do{
system("cls");
cout<<"\t\t$*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@$" <<endl\
<<"\t\t$ $" <<endl\
<<"\t\t$ 银行账户管理系统 $" <<endl\
<<"\t\t$ $" <<endl\
<<"\t\t$ $" <<endl\
<<"\t\t$ 1. 开户. 4. 转帐. $" <<endl\
<<"\t\t$ $" <<endl\
<<"\t\t$ 2. 存款. 5. 销户. $" <<endl\
<<"\t\t$ $" <<endl\
<<"\t\t$ 3. 取款. 6. 查询. $" <<endl\
<<"\t\t$ 0. 退出 $" <<endl\
<<"\t\t$*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@$" <<endl <<endl\
<<"\t\t\t请选择要服务的内容(0~6) :" ;
cin>>i;
}while(i-'0'<0||i-'0'>6);
return i-'0';
}
//构造开户函数
void Bank::kaihu(Bank bank[])
{
int j;
char mima1[20];
ofstream os("账户.txt",ios::app);
bank[num].money=0;
cout<<"请输入创建姓名"<<endl;
cin>>bank[num].name;
cout<<"请输入身份证号"<<endl;
cin>>bank[num].ID;
cout<<"请输入创建账号"<<endl;
cin>>bank[num].count;
cout<<"请输入电话号码"<<endl;
cin>>bank[num].number;
cout<<"请输入密码"<<endl;
cin>>bank[num].mima;
cout<<"请再次输入密码"<<endl;
cin>>mima1;
if(strcmp(mima1,bank[num].mima)!=0)
{
cout<<"密码前后输入不一致,请重新输入"<<endl;
return;
}
for(j=0;j<num;j++)
if(bank[num].count==bank[j].count)
{
cout<<"账号已存在,请从新输入账号"<<endl;
this->kaihu(bank);
}
cout<<"账户创建成功,请牢记你的密码和账号!"<<endl;
os<<"姓名 账号 余额"<<endl;
os<<bank[num].name<<" "<<bank[num].count<<" "<<bank[num].money<<endl;
os.close();
num++;
}
//构造存款函数
void Bank::cunkuan(Bank bank[])
{
long count;
int money=0;
cout<<"请输入银行账号"<<endl;
cin>>count;
for(int i=0;i<num;i++)
if(count==bank[i].count)
{
cout<<"请输入所存金额"<<endl;
cin>>money;
bank[i].money+=money;
cout<<"存款成功!"<<endl;
ofstream os("账户.txt");
for(int j=0;j<num;j++)
os<<bank[i].name<<" "<<bank[i].count<<" "<<bank[i].mima<<endl;
return;
}
cout<<"此账户不存在,请先进行开户"<<endl;
}
//构造取款函数
void Bank::qukuan(Bank bank[])
{
long count;
int money=0;
char mima[20];
cout<<"请输入银行账号"<<endl;
cin>>count;
cout<<"请输入密码"<<endl;
cin>>mima;
for(int i=0;i<num;i++)
if((strcmp(mima,bank[i].mima)!=0)&&(count==bank[i].count))
{ cout<<"密码错误,请重新输入"<<endl;
cin>>mima;
if((strcmp(mima,bank[i].mima)==0)&&(count==bank[i].count))
{
cout<<"请输入取款金额"<<endl;
cin>>money;
bank[i].money-=money;
cout<<"取款成功!"<<endl;
ofstream os("账户.txt");
for(int j=0;j<num;j++)
os<<bank[i].name<<" "<<bank[i].count<<" "<<bank[i].mima<<endl;
return;
}
}
else
if((strcmp(mima,bank[i].mima)==0)&&(count==bank[i].count))
{
cout<<"请输入取款金额"<<endl;
cin>>money;
bank[i].money-=money;
cout<<"取款成功!"<<endl;
ofstream os("账户.txt");
for(int j=0;j<num;j++)
os<<bank[i].name<<" "<<bank[i].count<<" "<<bank[i].mima<<endl;
return;
}
cout<<"此账户不存在,请先进行开户"<<endl;
}
//构造转账函数
void Bank::zhuanzhang(Bank bank[])
{
long count1,count2;
int money;
cout<<"请输入您的账号:";
cin>>count1;
cout<<"请输入密码"<<endl;
cin>>mima;
for(int i=0;i<num;i++)
if((strcmp(mima,bank[i].mima)==0)&&(count==bank[i].count))
{
cout<<"请输入转账的用户账号"<<endl;
cin>>count2;
for(int j=0;j<num;j++)
if(count2==bank[j].count)
{
cout<<"请输入转账的金额";
cin>>money;
if(bank[i].money-money<0)
{
cout<<"对不起,您的账户上余额不足"<<endl;
return;
}
bank[i].money-=money;
bank[j].money+=money;
cout<<"转账成功!"<<endl;
ofstream os("账户.txt");
for(int k=0;k<num;k++)
os<<bank[i].name<<" "<<bank[i].count<<" "<<bank[i].mima<<endl;
return;
}
cout<<"该用户不存在"<<endl;
return;
}
cout<<"您输入的账户不存在或密码错误"<<endl;
}
//构造销户函数
void Bank::xiaohu(Bank bank[])
{
int i,j;
long count;
char mima[20];
cout<<"请输入银行账号"<<endl;
cin>>count;
cout<<"请输入密码"<<endl;
cin>>mima;
for(i=0;i<num;i++)
if((strcmp(mima,bank[i].mima)==0)&&(count==bank[i].count))
{
int c;
cout<<"您确定要注销此户(Y/N)?"<<endl;
cin>>c;
if(c=='n'||c=='N')
return;
else
{
for(j=i;j<num-1;j++)
{
strcpy(bank[j].name,bank[j+1].name);
strcpy(bank[j].ID,bank[j+1].ID);
strcpy(bank[j].mima,bank[j+1].mima);
bank[j].count=bank[j+1].count;
bank[j].money=bank[j+1].money;
bank[j].number=bank[j+1].number;
}
num--;
cout<<"\n\t\t\t账户注销成功!"<<endl;
ofstream os("账户.txt");
for(i=0;i<num;i++)
os<<bank[i].name<<" "<<bank[i].count<<" "<<bank[i].mima<<endl;
system("pause");
return;
}
}
cout<<"您输入的账户不存在或密码错误"<<endl;
}
//构造查询函数
void Bank::chaxun(Bank bank[])
{
int i;
long count;
char mima[20];
cout<<"请输入银行账号"<<endl;
cin>>count;
cout<<"请输入密码"<<endl;
cin>>mima;
for(i=0;i<num;i++)
if((strcmp(mima,bank[i].mima)==0)&&(count==bank[i].count))
{
cout<<"姓名"<<bank[i].name<<endl;
cout<<"账号"<<bank[i].count<<endl;
cout<<"余额"<<bank[i].money<<endl;
return;
}
cout<<"您输入的账户不存在或密码错误"<<endl;
}
//函数主体
void main()
{
Bank bank[100];
for(;;)
switch(bank->shouye())
{
case 0: cout<<"谢谢使用!"<<endl; exit(0);
case 1: bank->kaihu(bank) ; system("pause"); break;
case 2: bank->cunkuan(bank) ; system("pause"); break;
case 3: bank->qukuan(bank) ; system("pause"); break;
case 4: bank->zhuanzhang(bank) ; system("pause"); break;
case 5: bank->xiaohu(bank) ; system("pause"); break;
case 6: bank->chaxun(bank) ; system("pause"); break;
}
}