C++课程设计报告模拟银行管理系统.docx
《C++课程设计报告模拟银行管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告模拟银行管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
![C++课程设计报告模拟银行管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/30/d2256e8a-6d84-4415-80b5-236d4e07b86a/d2256e8a-6d84-4415-80b5-236d4e07b86a1.gif)
C++课程设计报告模拟银行管理系统
湖南文理学院计算机科学与技术学院
实践教学(实验、课程设计、实习)报告
课程名称C++语言程序设计(课程设计)
设计选题:
模拟银行管理系统
指导老师:
专业班级:
姓名:
学号:
同组人员:
完成日期:
2008年9月
附件:
1.报告电子版;
2.相关源代码和数据原始电子版文件
说明:
结论(通过、不通过)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。
报告和电子数据必须作为实验现象重复的关键依据。
指导教师评语:
审查结论签名:
年月日
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果;也不包含其它教育机构使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
一、课题:
模拟银行管理系统
模拟银行的管理系统,用户登陆银行管理系统时,可以进行开户,销户,修改登录密码,存钱,取钱,转账等操作,并把用户的资料保存起来,以便于下次登陆。
二、设计功能、算法、体会:
系统由2个类构成,YH(银行类)和Consumer(客户类),Consumer(客户类)是YH(银行类)的公有继承类。
YH(银行类)中有实现登陆系统,开户,销户,转账,退出系统等功能函数,Consumer(客户类)中有实现存钱,取钱,修改个人账号密码,显示个人账号信息等功能函数。
因为Consumer(客户类)是YH(银行类)的公有继承类,所以,一个用户只需创建一个Consumer(客户类)对象,当用户进行开户,销户等操作时,可以直接调用YH(银行类)的成员函数。
YH(银行类)中的成员函数:
1.开户功能:
功能:
实现在银行系统中用户开设自己的账户。
基本思想:
利用Set_account()函数,用户输入自己的账号,姓名,密码,开户金额,然后进行保存,并记录用户个数加1。
具体步骤:
先定义几个变量,用来保存用户输入的账号,姓名,密码,开户金额,用户按照相应的提示输入相应的数据,如账号是整型,姓名是字符型等。
语句描述如下:
1.cout<";
2.cin>>id;
3.cout<";
4.cin>>nam;
5.cout<";
6.cin>>passw;
7.cout<";
8.cin>>m;
因为开户金额只能是大于0的数字,所以,需要对输入的数据进行判断,以确保输入无误,当输入都正确后,用Save()函数进行保存,并让记录用户数目的静态成员变量acnum加1,语句描述如下:
9.while(m<=0)
10.{
11.cout<<"请输入正确的数字!
"<12.cin>>m;
13.}
14.consumer*acc=newconsumer(id,nam,passw,m);
15.account[acnum]=acc;
16.cout<<"开户成功!
!
"<17.acnum++;
18.save();
2.销户功能:
功能:
实现删除账户的操作。
有开户的,那肯定也有销户的,但是销户函数比开户函数步骤简单些。
因为它是把该账号所有的信息都删除,不需要对该账号的信息进行筛选。
基本思想:
输入要销户的账号,把该账号的所有信息删除。
具体步骤:
先输入要销户的账号,然后,进行查找,看该账号是否存在,不存在则返回,存在则删除该账号的所有信息,同时,记录账号数目的静态成员变量acnum减1,并用save()函数对修改后的数据进行保存,语句描述如下:
19.intflag=1;
20.inti=0;
21.while((i22.{
23.if(id==account[i]->get_id())
24.{
25.flag=0;
26.}
27.else
28.{
29.i++;
30.}
31.}
32.if(flag)
33.{
34.
35.cout<<"帐号不存在!
"<36.return;
37.}
38.for(intj=i;j39.{
40.account[j]=account[j+1];
41.}
42.account[acnum-1]=NULL;
43.acnum--;
44.cout<<"注销成功!
!
"<45.save();
体会:
这个销户函数步骤虽然简单,但比开户函数更有技巧性,因为它需要判断要销户的账号是否存在。
我是定义了一个中间变量flag,先让它等于1,然后用while循环进行查找,看是否有该账号,如果账号存在,则令flag=0,这样就可以通过flag的值来判断是否有相同的账号,语句描述如下:
46.intflag=1;
47.while((i48.{
49.if(id==account[i]->get_id())
50.{
51.flag=0;
52.}
53.else
54.{
55.i++;
56.}
57.}
58.if(flag)
59.{
60.
61.cout<<"帐号不存在!
"<62.return;
63.}
这样就可以判断账号是否存在,并显示出来。
当登陆系统和转账时,同样都需要判断账号是否存在,本可以把这段代码编译成一个功能函数,专门用来判断账号是否存在,可以程序变的更简洁,但因为需要修改的地方不少,所以就没去做了,如果下次我还碰到这样的问题,那一定要采用。
3.转账功能:
功能:
实现用户与用户之间进行转账的操作。
基本思想:
首先登陆自己的账号,然后,输入别人的账号以及转账的数目。
具体步骤:
创建一个transfer()函数,当用户登陆账号后,如果进行转账操作,则调用它。
进行转账时首先输入别人账号,这时需要判断输入的账号是否存在,这跟前面销户函数的一样,用while+if来实现,然后输入你要转给别人的钱的数目,这个数目跟前面你开户输入的数目一样,不能为负数,因为不可能你转账给别人,还让别人减少钱,同时这个数目也不能大于你自己账户里金额,如果这些都符合,则进行可以转账,自己的账户减少一定的金额,别人账户增加相应的金额。
语句描述如下:
64.cout<<"请输入帐号:
";
65.cin>>id;
66.intflag=1;
67.inti=0;
68.while((i69.{
70.if(id==account[i]->get_id())
71.flag=0;
72.elsei++;
73.}
74.if(flag)
75.{
76.cout<<"帐号不存在!
"<77.return;
78.}
79.floatb;
80.cout<";
81.cin>>b;
82.while(b<=0)
83.{
84.cout<<"请输入正确的数字!
"<85.cout<<"$>";
86.cin>>b;
87.}
88.if(account[x]->get_money()
89.cout<<"对不起,金额不够!
!
"<90.else
91.{
92.account[x]->dec_money(b);
93.account[i]->add_money(b);
94.}
体会:
这个功能函数虽然没什么难的地方,但它有一些实际问题要考虑,我们转账的时候,不可能会让别人的金额减少,不然,谁还敢去银行存钱。
当我们写其他程序时,同样要牢记,函数实现的功能要与实现相符合。
4.用户登陆功能:
基本思想:
定义enter_account()函数,当用户登陆时,调用此函数,用户输入自己的账号,密码后,并可以进行相应的操作。
主要步骤:
用户登陆时,输入自己的账号,这时,与前面销户函数,转账函数一样,判断账号是否存在,如果存在,则输入账号的密码,如果密码正确,则显示该账号的信息,如:
用户的姓名啊,余额啊,同时还可以进行其他的操作,如取钱,存钱,转账,修改密码等。
描述语句如下:
95.cout<<"请选择你要进行的操作:
"<96.<<"2)取款"<97.<<"5)转账"<98.cin>>n;
99.switch(n)
100.{
101.case1:
account[i]->display();break;
102.case2:
account[i]->fetchmoney();save();break;
103.case3:
account[i]->savemoney();save();break;
104.case4:
account[i]->change_passwd();save();break;
105.case5:
transfer(i);save();break;
106.case6:
return;
107.}
体会:
这个函数功能简单,但是必不可少,用户可以通过这个函数来管理自己的账号。
在后面作判断时,因为只可能出现1到6,所以采用switch()来判断,虽然采用if,else的嵌套可以实现,但看着会觉的很复杂。
5.开始菜单功能:
功能:
显示操作信息,用户可以根据显示的信息,按照提示,进行相应的操作。
算法思想:
用cout输出操作信息,如输出“1)用户开户2)账户登陆3)帐户注销4)退出系统”,用户根据上面显示的信息,按照提示,可以进行相应的操作,如输入1,则调用开户函数,用户并可以进行开户操作了,如果输入的不是1到4,则重新输入,描述语句如下:
108.cout<"<109.cout<<"1)用户开户"<110.<<"3)帐户注销"<111.cout<<"请选择>";
112.cin>>n;
113.while(n<1||n>4)
114.{
115.cout<<"请输入正确的操作序号!
"<116.cout<<"请选择>";
117.cin>>n;
118.}
119.switch(n)
120.{
121.case1:
set_account();
122.break;
123.case2:
enter_account();
124.break;
125.case3:
del_account();
126.break;
127.case4:
exitYH();
128.break;
129.}
体会:
这个功能是整个程序的开始,通过它来调用其他功能函数进行其他的操作,本来可以把它做的更美观点的,但感觉没什么实际意思就没去修改了。
6.读取与保存功能:
功能:
用来保存用户的信息以及登陆时读取用户的信息。
算法思想:
利用ofstream,ifstream输入输出流,将用户的信息保存在文件里,
具体步骤:
创建输入输出流ofstream,ifstream,将用户的信息保存进来,当用户登陆时,则对保存的信息进行读取,看是否有相符合的信息,实现语句如下:
//保存
130.ofstreamoutfile("bankdat.dat",ios:
:
out);
131.intn=0;
132.outfile<133.for(;n134.{
135.outfile<ID<<"";
136.outfile<money<<"";
137.outfile<name<<"";
138.outfile<passwd<<"";
139.}
140.outfile.close();
//读取
141.ifstreaminfile("bankdat.dat",ios:
:
in);
142.if(!
infile)
143.{
144.cerr<<"读取错误,无资料中!
"<145.return;
146.}
147.intn=0;
148.intid,m;
149.stringnam,passw;
150.infile>>acnum;
151.for(;n152.{
153.infile>>id;
154.infile>>m;
155.infile>>nam;
156.infile>>passw;
157.account[n]->passwd;
158.consumer*acc=newconsumer(id,nam,passw,m);
159.account[n]=acc;
160.}
161.infile.close();
162.cout<<"读取资料正常!
"<体会:
我很少用文件的形式来保存信息,因为自己对这一块不太懂,感觉很陌生,这一次也是参考了别人的程序才能编写完成,用了这个方法后,发现这种方法还是很有优势的,将信息保存下来后,你把VS关了,下次登陆时,还可以读取到上次的信息,因为它会在文件夹里会生成一个dat类型的文件,将信息保存在这个文件里。
以后有机会,我一定要多试试这种方法,好好的掌握它。
以上都是YH(银行类)里的功能函数,它们主要是用来实现用户对银行系统的操作,而下面的Consumer(客户类)里的功能的函数,它们则主要是用来实现对自己账户的操作。
Consumer(客户类)中的成员函数:
1.存钱功能:
功能:
可以对自己的账户进行存款。
算法思想:
先输入存钱的数目,当然又要判断输入的数目是否为负数或者0,如果是,则重新输入。
存完钱后,你有可能还需要进行操作,因此,后面再作个判断,描述语句如下:
163.do
164.{
165.cout<"<<"$>"<166.cin>>c;
167.while(c<=0)
168.{
169.cout<<"请输入正确的数字!
"<170.cin>>c;
171.}
172.money=money+c;
173.cout<<"操作已成功!
"<174.cout<<"是否要继续该项操作:
(Y/N)"<175.cin>>ch;
176.while(ch!
='n'&&ch!
='N'&&ch!
='Y'&&ch!
='y')
177.{
178.cout<<"是否要继续该项操作:
(Y/N)"<179.cin>>ch;
180.}
181.}
182.while(ch=='y'||ch=='Y');
体会:
有些程序,虽然实现的功能的差不多,但有的人写的就是好,我觉的好可能就好在他考虑了一般人使用这个程序的习惯,让程序变的更人性化了,别人用起来舒服,顺手,自然感觉就好。
所以,我们以后写程序的时候一定要留心观察,注意细节,尽量多站在用户角度思考问题,这样才能做的更好,更受用户欢迎。
8.取钱功能;
功能:
可以冲自己的账号进行取钱的操作。
算法思想:
这个函数跟前面的存钱函数差不多,先是输入你要取钱的数目,并判断输入的数目是否符合要求,不符合则重新输入。
同样,输入完后,可能还需要进行该操作,因此,在后面再作个判断,描述语句如下:
183.do
184.{
185.cout<"<<"$>"<186.cin>>c;
187.while(c<=0)
188.{
189.cout<<"请输入正确的数字!
"<190.cin>>c;
191.}
192.money=money+c;
193.cout<<"操作已成功!
"<194.cout<<"是否要继续该项操作:
(Y/N)"<195.cin>>ch;
196.while(ch!
='n'&&ch!
='N'&&ch!
='Y'&&ch!
='y')
197.{
198.cout<<"是否要继续该项操作:
(Y/N)"<199.cin>>ch;
200.}
201.}
202.while(ch=='y'||ch=='Y');
203.}
9.修改密码功能;
功能:
用于修改用户自己账号的登陆密码。
算法思想:
创建change_passwd()函数用以修改密码,当用户输入修改密码的操作时,就可以直接调用它。
因为密码一旦丢失,则不能登陆相应的账号,会造成无法挽回的损失,所以,当你在修改密码时,一般都会被要求输入2次,以免产生错误。
这个系统也是一样,修改密码时,要求输入2次,如果前后输入的不同,则修改密码失败,重新输入,直到2次输入的密码相同,才修改密码成功。
描述语句如下:
204.stringpwd,repwd;
205.cout<<"请输入新密码:
";
206.cin>>pwd;
207.cout<<"请再输入一次新密码:
";
208.cin>>repwd;
209.while(pwd!
=repwd)
210.{
211.cout<<"你输入的两次密码不一样,请重新输入!
"<212.cout<<"请输入新密码:
";
213.cin>>pwd;
214.cout<<"请再输入一次新密码:
";
215.cin>>repwd;
216.}
217.passwd=pwd;
218.cout<<"密码修改成功,请牢记!
"<体会:
俗话说的好“不怕一万,就怕万一”,成功可能离你只有一步,但因为你的疏忽也错过。
因此我们做任何事情都应该要细心,注意观察,万万不可大意。
同时我们在写程序时,还要考虑到别人容易出错的地方,并提醒他们,以免他们出错了而怪你写的程序有问题。
三、程序结构:
Main()函数包括2个类,图形显示如下:
图1:
程序的函数结构
在YH(银行)中包含8个函数,图形显示如下:
图2:
程序的函数结构
在Consumer(客户类)中还包括4个函数,图形显示如下:
图3:
程序的函数结构
四、系统运行:
这里只显示一下“开户”与“登陆”功能,其它功能用户可以自行调试查看.
------------------------------------------------------------------
读取错误,无资料中!
请你输入相应的操作序号进行操作:
1)用户开户
2)账户登陆
3)帐户注销
4)退出系统
请选择>1
------------------------------------------------------------------
你输入1,并选择了开户。
然后按照提示输入账号,姓名,密码等。
------------------------------------------------------------------
读取错误,无资料中!
请你输入相应的操作序号进行操作:
1)用户开户
2)账户登陆
3)帐户注销
4)退出系统
请选择>1
请输入开户号:
001
请输入开户人姓名:
liu
请输入开户密码:
123
请输入存入金额:
100
开户成功!
!
------------------------------------------------------------------
按照上面的操作,在这个银行系统中开户成功。
于是,你可以用你刚开的账号进行登陆了。
选择2,然后输入自己的账号,密码。
------------------------------------------------------------------
读取资料正常!
请你输入相应的操作序号进行操作:
1)用户开户
2)账户登陆
3)帐户注销
4)退出系统
请选择>2
请输入帐号:
001
请输入密码:
123
------------------------------------------------------------------
输入完毕后,按回车。
如果,账号和密码输入无误的话,则会显示这个账号的信息,表明登陆成功。
------------------------------------------------------------------
**********************************
* 用户姓名:
liu
* 帐号:
1
* 余额:
100
**********************************
------------------------------------------------------------------
以上便是登陆后显示的信息,与你在开户时输入的完全一致。
五、源程序:
1.
#include
2.