1、C+课程设计银行管理系统C+课程设计_银行管理系统C+课程设计报告 设计题目:银行管理系统 学生姓名: XXXXXX 班 级: XXXXXXXXXXXXXX 指导教师: XXX 评分 2010年 12月 20日 2 1.需求与功能分析 2.系统总体框架 4 3.模块设计与分析 5 类的设计与分析 7 4.5.特色算法分析 9 6.功能测试 10 7.存在的不足与对策 15 8.程序源代码 17 - 1 - 一、 需求与功能分析 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越
2、来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。 近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业
3、务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理
4、系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。 主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。 - 2 - 系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。 储蓄卡开户管理模块:卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。(开户金额必须是数字,密码和确认密码必须一样是六位数字) *查询历史数据模块:存款记录、取款记录、余额显示等。 *注销模块:一旦注销该卡号就不存在且余额提醒你取出。 通过该银行账户
5、管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动 该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。经过实践证明,该划分是合理的,极大得提高了本系统的实现。 二、 系统总体框架 银行管理系统 登录界面 注册开户 主界页面 注销退出 存取余历注钱款额史销 页页页记页面 面 面 录 面 -1 图1 三、 模块设计与分析 - 3 - 储蓄卡开户管理模块: 3.1 登录页面 输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。 若卡号存在和密码不匹配或
6、无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。 3.2 主界面页面 主要导航栏有:欢迎使用储蓄卡管理(存款、取款、查询余额、查询历史记录、注销退出) 3.3 储蓄卡开户页面 提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。 3.4 存钱页面 从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。 3.5 取款页面 从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果
7、取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。 3.6 查询余额页面 从登录界面得到卡好,把该卡上的余额显示到界面中。 3.7 查询历史记录页面 从登录界面得到卡号,把该卡的所有存款取款信息查询出来,并显示在页面上。 3.8 注销页面 从关闭文件,状态为注销,最后关闭整个系统。 列举取款模块进行分析: void Function:Drawing(User &u) system(cls); - 4 - coutnnntt*nendl; couttt请输入取款金额:; string str1(ntt现取RMB 钞- ); s
8、tring str2; int k=0; while(kSaveAndDrawMoney; u.Fmoney -=SaveAndDrawMoney; if(u.Fmoney=0) system(cls); coutnnntt正在出炒,请稍等endl; strstream ss; ssstr2; string frist=Record+str2 +.txt; const char *RecordFile=frist.c_str(); ofstream outfile(RecordFile,ios:out|ios:app); outfilestr1SaveAndDrawMoney=3) syste
9、m(cls); cerrnnntt很抱歉,你重复输入错误多次endl ntt正在退卡中endl; exit(0); system(cls); u.Fmoney +=SaveAndDrawMoney; cerrnnntt对不起,你输入的金额超出有效金额。endl ntt 请重新输入: ; coutnntt操作成功,单击任何键返回主菜单; getch(); - 5 - 在取款页面中,输入取款金额并对取款金额与存款余额进行比较,如果三次都超过的话就输出:很抱歉,你重复输入错误多次,在退卡中,如果取款金额小于存款余额的话就执行,并保存记录。 四、 类的设计与分析 1(User 类 class User
10、 主要制定用户的成员数据,并进行登录与保存功能: 画出User 类的类图 相关代码: class User public: void get(User& ); friend class Function; ostream &print(ostream &os); /friend ostream & operator(istream & i, User & u); void PassWord(); bool Login(User &); void SaveFile(User &); vector StrFunction; User() User(int A,string N,int F,stri
11、ng I,string Ad,int - 6 - T):Accout(A),Name(N),Fmoney(F),ID(I),Address(Ad),Telephone(T) int Accout; string Name; int Fmoney; string ID; string Address; int Telephone; char Pword19; char Pword29; ; 表1 User 类说明表 名称 属性 说明 Accout 数据成员 用户账户数据 Name 数据成员 用户姓名 Fmoney 数据成员 用户首次金额 ID 数据成员 用户身份证号 Address 数据成员 用
12、户地址 Telephone 数据成员 用户电话 Pword1 数据成员 用户密码 Pword2 数据成员 用户再一次确认密码 Get() 构造函数 默认构造函数 Login() 成员方法 登录方法 Password() 成员方法 密码验证 SaveFile() 成员方法 保存数据 2(Function 类 Function 类 主要实现用户的各种功能: 画出User 类的类图: 相关代码: class Function public: - 7 - void Saving(User &); void Drawing(User &); void Balance(User &); void Reco
13、rd(User &); private: int SaveAndDrawMoney; ; 表1 User 类说明表 名称 属性 说明 SaveAndDrawMoney 数据成员 用户存入与取出金额 Saving() 成员方法 实现存款功能与保存数据 Drawing() 成员方法 实现取款功能与保存数据 Balance() 成员方法 查询余额功能 Record() 成员方法 查询历史记录 五、 特色算法分析 1.User类中的PassWord方法 功能:输入密码并进行确认,如果密码确认三次失败,则退出系统。 流程图: 否 While(n3) 是 输入:password1 Password2 否
14、strcmp(Pwor d1,Pword2) ,1 是 代码: - 8 - void User:PassWord() int num=0; while(num3) coutntt请输入位储蓄密码:; for(int i=0;i8;i+) Pword1i=getch();cout*; Pword18=0; coutendl; coutntt请再一次确认密码:; for( i=0;i8;i+) Pword2i=getch();cout*; coutendl; Pword28=0; if(strcmp(Pword1,Pword2)=0) coutnntt密码确认成功,单击任何键进入主菜单; getc
15、h(); return ; else num+; coutntt你输入的密码错误,请重新输入nendl; if(num=3) system(cls); cerrnnntt对不起,你三次输入不正确nendl tt感谢你的使用,再见 endl; exit(0); 六、 功能测试 6.1 首页: 图6-1: - 9 - 6.2 储蓄卡开户页面 图6-2: 6.3 主界面页面 主要导航栏有:欢迎使用储蓄卡管理(存款、取款、查询余额、查询历史记录、注销退出) 图6-3: - 10 - 6.4 存钱页面 图6-4: 6.5 取款页面 从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金
16、额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。 输入取款金额: 图6-5: 当取款金额大于现有金额: 图6-6: 当取款金额小于或等于现有金额: 图6-7: - 11 - 6.6 查询余额页面 图6-8: 6.7 查询历史记录页面 图6-9: 6.8 用户信息 图6-10: - 12 - 6.9 注销页面 从保存数据并关闭文件,状态为注销,最后关闭整个系统。 图6-11: 图6-12: 七、 存在的不足与对策 程序存在的不足之处在于程序以文件方式储存,并且每个用户信息与用户的历史记录分别用一个文件来储存,如果这样的话一个用户就需
17、要二个文件储存信息,那么一万个用户就需要用到二万个文件保存。这不但浪费内存而已在查找文件也会花费时间。 解决的对策是使用stl标准库或者数据库的方法进行解决,这里列举了一个用stl标准库里面用vector解决的例子: - 13 - #include #include #include #include using namespace std; class Account public: string account; / 如果你要保存0001这样的格式,用string方便 double balance; / 余额 /自己补充数据成员 friend ostream & operator(istr
18、eam & i, Account & t); ; ostream & operator(ostream & o, const Account & t) ot.account t.balance/*自己补充各个数据成员*/(istream & i, Account & t) it.accountt.balance/*自己补充各个数据成员*/; return i; int main() ifstream ifs(account.txt); vector vacc; vacc.assign(istream_iterator(ifs), istream_iterator(); ifs.close();
19、 for (vector:iterator it=vacc.begin(); it!=vacc.end(); +it) if (it-account = 0002) it-balance += 100; /余额增加100 break; - 14 - ofstream ofs(account.txt); copy(vacc.begin(), vacc.end(), ostream_iterator(ofs); return 0; 通过这个例子,我们就可以从程序中输入像 / account.txt里面的内容示例 0001 104.7 0002 252.1 0004 4299.04 0003 723
20、.2 八、 程序源代码 #include #include #include #include #include #include #include using namespace std; class Function; class User public: void get(User& ); friend class Function; ostream &print(ostream &os); /friend ostream & operator(istream & i, User & u); void PassWord(); bool Login(User &); void SaveFi
21、le(User &); vector StrFunction; User() User(int A,string N,int F,string I,string Ad,int T):Accout(A),Name(N),Fmoney(F),ID(I),Address(Ad),Telephone(T) int Accout; string Name; int Fmoney; string ID; string Address; int Telephone; - 15 - char Pword19; char Pword29; ; class Function public: void Saving
22、(User &); void Drawing(User &); void Balance(User &); void Record(User &); private: int SaveAndDrawMoney; ; void Function:Saving(User &u) system(cls); nntt*nencoutndl; coutSaveAndDrawMoney; u.Fmoney+=SaveAndDrawMoney; strstream ss; string str2; ssstr2; string frist=Record+str2 +.txt; const char *Rec
23、ordFile=frist.c_str(); ofstream outfile(RecordFile,ios:out|ios:app); outfilestr1SaveAndDrawMoneyendl; outfile.close(); outfile.clear(); coutnntt操作成功,单击任何键返回主菜单; getch(); void Function:Drawing(User &u) system(cls); coutnnntt*nendl; couttt请输入取款金额:; string str1(ntt现取RMB 钞- ); - 16 - string str2; int k=
24、0; while(kSaveAndDrawMoney; u.Fmoney -=SaveAndDrawMoney; if(u.Fmoney=0) system(cls); coutnnntt正在出炒,请稍等endl; strstream ss; ssstr2; string frist=Record+str2 +.txt; const char *RecordFile=frist.c_str(); ofstream outfile(RecordFile,ios:out|ios:app); outfilestr1SaveAndDrawMoney=3) system(cls); cerrnnntt很
25、抱歉,你重复输入错误多次endl ntt正在退卡中endl; exit(0); system(cls); u.Fmoney +=SaveAndDrawMoney; cerrnnntt对不起,你输入的金额超出有效金额。endl ntt 请重新输入: ; coutnntt操作成功,单击任何键返回主菜单; getch(); void Function:Balance(User &u) system(cls); - 17 - coutnnntt*nendl; couttt你当前的余额是:; coutttu.Fmoneyendl; coutntt*nendl; coutntt操作成功,单击任何键返回主菜单; getch(); void Function:Record(User &u) string str1,str2; system(cls); coutnnntt*nendl; couttt摘要币种钞汇存/取款金额endl; strstream ss; ssstr2; strin