面向对象分析/设计课程大作业
银行业务处理系统
13级软件学院测试班
1367004029
曾丹
1.需求分析
随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。
现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如
何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。
近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。
随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。
特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。
主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。
系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。
储蓄卡开户管理模块:卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。(开户金额必须是数字,密码和确认密码必须一样是六位数字)
*注销模块:一旦注销该卡号就不存在且余额提醒你取出。
通过该银行账户管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动化。
该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。经过实践证明,该划分是合理的,极大得提高了本系统的实现。
2.UML静态建模表示2.1用例图
2.2类图
3.1序列图
3.2协同图
3.3状态图
4.UML物理架构建模表示4.1组件图
4.2配置图
5.系统总体框架5.1框架图
5.2数据流图
5.3实体关系图
6.模块设计与分析
储蓄卡开户管理模块:
6.1 登录页面
输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。
若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。
6.2 主界面页面
主要导航栏有:欢迎使用储蓄卡管理(存款、取款、修改密码、转账功能、注销退出)
6.3 储蓄卡开户页面
提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。
6.4 存钱页面
从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。
6.5 取款页面
从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。
6.6 注销页面
从关闭文件,状态为注销,最后关闭整个系统。
列举取款模块进行分析:
void consumer::fetchmoney()
{
float m;
char ch;
do
{
cout< cin>>m; while(m<=0) { cout<<"请输入正确的数字!"< cout<<"→"; cin>>m; } if(money { cout<<"对不起,你的余额不足!"< } else {money=money-m; cout< < } cout<<"是否要继续该项操作:(Y/N) " < cout<<"→"; cin>>ch; while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')//选择错误时判定 { cout<<"→"; cin>>ch; } }while(ch=='y'||ch=='Y'); } 在取款页面中,输入取款金额并对取款金额与存款余额进行比较,如果取款金额小于零,请输入正确的数字;如果取款金额大于存款金额,对不起,您的余额不足;如果取款金额小于存款余额的话就执行,并保存记录。 7.类的设计与分析 7.1 consumer类 class consumer:public YH//用户类,继承银行类的属性 { public: friend class YH; consumer(int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m) { ID=id;name=Name;number=Number;in=IN;company=Company;address=Addres s;money=m;passwd=PassWord; } consumer(){ID=0;name='0';number=0;in=0;company='0';address='0';money=0;p asswd='0';} int get_id(){return ID;} void savemoney();// 取钱 string get_passwd(){return passwd;}// 取得密码 void display(); void fetchmoney(); //取钱 void change_passwd(); void add_money(float);//计算余额 void dec_money(float);//计算余额 float get_money();//卡卡转帐 private: int ID; //开户帐号 string passwd; // 用户密码 string name; // 用户姓名 float money; //开户金额 int number;string company;string address;double in; }; comsumer 类说明表 名称属性说明 ID 数据成员用户账户数据name 数据成员用户姓名money 数据成员用户首次金额in 数据成员用户身份证号address 数据成员用户地址number 数据成员用户电话Passwd 数据成员用户密码savemoney() 成员方法存钱fetchmoney () 成员方法取钱change_passwd() 成员方法修改密码 get_money() 成员方法卡卡转账 7.2 YH 类 class YH //银行类 { public: void set_account();//银行开户功能 void del_account(); //注销账户功能 void transfer(int); //转账功能 void enter_account(); //进入用户个人信息功能 oid addmoney(int,float);//存款功能 void exitYH();// 退出系统 void functionshow(); void save(); void load();// 功能界面 protected: consumer *account[20]; static int acnum;//账户数 YH 类说明表 名称属性说明 acnum 数据成员账户数 set_account () 成员方法开户功能 del_account () 成员方法注销账户功能transfer () 成员方法转账功能functionshow() 成员方法主界面显示功能addmoney() 成员方法存钱功能exitYH() 成员方法退出系统功能 8.程序源码 consumer.cpp #include #include #include using namespace std; class consumer; class YH //银行类 { public: void set_account();//银行开户功能 void del_account(); //注销账户功能 void transfer(int); //转账功能 void enter_account(); //进入用户个人信息功能void addmoney(int,float);//存款功能 void exitYH();// 退出系统 void functionshow(); void save(); void load();// 功能界面 protected: consumer *account[20]; static int acnum;//账户数 }; class consumer:public YH//用户类,继承银行类的属性 { public: friend class YH; consumer(int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m) { ID=id;name=Name;number=Number;in=IN;company=Company;address=Address; money=m;passwd=PassWord; } consumer(){ID=0;name='0';number=0;in=0;company='0';address='0';money =0;passwd='0';} int get_id(){return ID;} void savemoney();// 取钱 string get_passwd(){return passwd;}// 取得密码 void display(); void fetchmoney(); //取钱 void change_passwd(); void add_money(float);//计算余额 void dec_money(float);//计算余额 float get_money();//卡卡转帐 private: int ID; //开户帐号 string passwd; // 用户密码 string name; // 用户姓名 float money; //开户金额 int number;string company;string address;double in; }; void YH::save() {ofstream ofile("bankdat.dat",ios::out);//以输出方式打开文件ofstream outfile("bankdat.dat",ios::out);//以输出方式打开文件bankdat.dat接收从内存输出的数据 int n=0; outfile< for(n=0;n {outfile< outfile< outfile< outfile< outfile< outfile< outfile< outfile< } outfile.close(); } /*读入用户信息功能实现*/ void YH::load() {ifstream infile("bankdat.dat",ios::in);//以输入方式打开文件 if(!infile) {cerr<<"读取错误,无资料中!"< return; } int n=0; int id,m; string nam,passw;int number;string company;string address;double in; infile>>acnum; for(n=0;n {infile>>id;//从磁盘文件bankdat.dat读入信息 infile>>m; infile>>nam; infile>>passw; infile>>company; infile>>number; infile>>address; infile>>in; account[n]->passwd; consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); //每读入一个n开辟一段内存 account[n] = acc; //赋值首地址 } infile.close(); cout<<"系统正在正常运行,您可以办理以下业务:"< } /*转账功能实现*/ void YH::transfer(int x) {int id; cout<<"请输入帐号:"; cin>>id; int flag = 1; int i = 0; while((i { if(id==account[i]->get_id()) flag = 0; else i++; } if(flag) { cout<<"帐号不存在!"< return ; } float b; cout< cin>>b; while(b<=0) { cout<<"请输入正确的数字!"< cout<<"→"; cin>>b; } if(account[x]->get_money() cout<<"对不起,金额不够!!"< else {account[x]->dec_money(b);account[i]->add_money(b);} cout<<"转账成功!!"< return; } /*账户金额计算*/ void consumer::add_money(float x) {money=x+money;} void consumer::dec_money(float x) {money=money-x;} void YH::addmoney(int x,float y) {account[x]->money=account[x]->money-y; } 《面向对象程序设计C++》期末考试试卷(B) 一、单项选择题(每小题2分,共40分) 1、关于C++与C语言关系的描述中,()是错误的。 A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法中,()是正确的。 A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m; 3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下面函数调用中,不合法的是()。 A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是()。 A.函数的返回值类型B.参数的类型C.函数名称D.参数个数 5、下列有关C++类的说法中,不正确的是()。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中,如果不做特别说明,所有成员的访问权限均为私有的 D.在类中,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X类,则当程序执行到语句X array[3];时,调用了()次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是()。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类型 一、填空题(每空1分,共14分) 1、观看以下程序: class point{ public: void show() {cout<<”point”< (A)指针(B)引用(C)枚举(D)结构 3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。 (A)share (B)public (C)private (D)protected 4、关于构造函数,下列说法不正确的是()。 (A)构造函数名字和类名相同 (B)构造函数在创建对象时自动执行 (C)构造函数无任何函数返回类型 (D)构造函数有且只有一个 5、派生类可以访问其基类的()。 (A)公有成员(B)保护成员 (C)私有派生(D)公有和保护成员 6、下列关于运算符重载的描述中,错误的是()。 (A)运算符重载不可以改变操作数的个数 (B)运算符重载不可以改变运算符的功能 (C)运算符重载不可以改变结合方向 (D)运算符重载不可以改变运算优先级 7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() (A)面向过程(B)面向对象(C)安全性(D)复用性 8、对于类中定义的成员,其隐含访问权限为()。 A.public B.protected C.private D.static 9、下面有关重载函数的说法中正确的是() (A)重载函数必须具有不同的返回值类型;(B)重载函数形参个数必须不同; (C)重载函数必须有不同的形参列表(D)重载函数名可以不同; 10、有如下的对类“CSample”的说明,其中()是错误的。 class CSample { A.int a=23; B.CSample(); public: C.CSample(int val); D.~ CSample(); 11、在int a=3,int *p=&a;中,*p的值是( ) A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 12、每个类()构造函数。 (A)只能有一个(B)只可有公有的 实验一C语言的运行环境的使用 一、目的与要求 1. 了解Windows系统下C语言的运行环境,熟悉C程序调试、运行的基本操作方法。 2. 熟练掌握编辑、编译、连接和运行C程序的方法。 3. 通过运行简单的C程序,初步了解C源程序的特点。 4. 初步理解C语言的数据类型,了解变量定义、变量赋值以及简单运算方法,了解程序运 行结果的基本输出方法。 二、实验例题 在C语言运行环境下,按以下例题要求完成程序的编辑、编译、连接和运行,直至取得正确的运行结果。 【例1】编程实现在屏幕上显示如下三行文字 Hello, world ! Wolcome to the C language world! Everyone has been waiting for. (1)输入如下程序: #include 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。 《C语言程序设计》作业参考答案 作业一 C语言概述 一、选择题: 1-5 ACDCB 二、编程题: main() { printf(“****************************************\n”); printf(“ Hello,world! \n”); printf(“****************************************\n”); } 作业二程序的灵魂——算法 一、填空题: 1.确定性有效性有零个或多个输入有一个或多个输出 2.顺序结构选择结构循环结构 3.函数 作业三数据类型、运算符与表达式 一、选择题: 1-5 BDDAB 6-10 BCAAB 11-15 BCADC 16-20 DACCA 21-25 ADDBA 26-30 DDDDD 作业四顺序结构 一、选择题: 1-5 BCDDD 6-10 BDADD 二、填空题: 1.【31.415920,3.14159e+01】 2.【c=k】 3.【a=1,b=空格,c=2】 4.【a=12,b=345】 5.【c=A】 作业五选择结构 一、选择题:1-5 ADCBC 6-10 BBBBA 11-15 DBAAC 16-17 CB 二、填空题: 1.【-1】 2.【3】 3.【4】 4.【11】 5.【97或'a'】 作业六循环结构 一、选择题: 1-5 CBAAC 6-10 CBCCB 11-15 DBDDB 16-20 BCAAC 21-25 CDBBB 作业七数组 一、选择题: 1-5 CDDAC 6-10 CCDBC 11-15 DDBCA 16-20 DCBDD 21-23 BDB 二、填空题: 1. LBLMNP 2. SW* 3. mo 4. a=2,b=1 作业八函数 一、选择题: 1-5 AAACA 二、填空题: 1.【编程中的main( )函数】 2.【函数说明部分】和【函数体】 3.【–125= –5*5*5】 4.【void add (float a, float b)】【float add (float a, float b)】 5.【i=7; j=6; x=7 i=2; j=7; x=5】 6.【111】 三、编程题: 1.参考代码 main() { int score,temp,log; char grade; log=1; while (log) { printf(“enter score:”); scanf(“%d”,&score); if ((score>100)||(score<0)) printf(“\n error,try again! \n”); else log=0; } if (score==100)temp=9; else temp=(score-score%10)/10; switch(temp) { case 0:case 1:case2: case 3:case 4:case 5:grade=’E’;break; case 6:grade=’D’;break; case 7:grade=’C’;break; case 8:grade=’B’;break; case 9:grade=’A’; } printf(“score=%d,grade=%c\n”,score,grade); } 2.解:设计以高度n为参数的函数trangle(int n),打印等边三角形。参考程序如下: #include 《面向对象程序设计C 》期末试卷及标准答案
c面向对象程序设计试题和答案(经典题目)
《C程序设计》作业内容
什么是面向对象程序设计
C语言程序设计作业参考答案
《面向对象程序设计》答案