1、C语言储蓄综合平台1项目概述项目概述项目名称项目名称储蓄综合业务平台储蓄综合业务平台 代码量代码量 600-800600-800行行课时安排课时安排共共3636学时(一周,第学时(一周,第1 1周),理论授课周),理论授课1212学时,教师上机指学时,教师上机指导导1212学时,个人实践学时,个人实践1212学时学时项目简介项目简介本项目的目标是开发一套银行储蓄柜台的综合业务平台,本项目的目标是开发一套银行储蓄柜台的综合业务平台,它包括最常使用的开户、销户、存款、取款、查询等功能它包括最常使用的开户、销户、存款、取款、查询等功能项目目标项目目标1.1.使学生更深一步了解软件开发过程,了解复杂软
2、件的组使学生更深一步了解软件开发过程,了解复杂软件的组织过程,复杂程序的控制过程。织过程,复杂程序的控制过程。2.2.提高代码的规范度。提高代码的规范度。3.3.掌握掌握C C语言中大部分的知识点。语言中大部分的知识点。主要技术主要技术1.1.结构体数组及其访问方法结构体数组及其访问方法2.C2.C语言的格式化输出语言的格式化输出3.3.文件的访问文件的访问技术重点技术重点结构体数组的访问结构体数组的访问 技术难点技术难点 文件的读写文件的读写第一阶段:需求分析第一阶段:需求分析第二阶段:详细设计与实现第二阶段:详细设计与实现第三阶段:项目调试及部署第三阶段:项目调试及部署第四阶段:项目总结第
3、四阶段:项目总结四个设计阶段四个设计阶段第一阶段:需求分析第一阶段:需求分析项目背景项目背景需求描述需求描述需求分析需求分析模块划分模块划分概要设计概要设计1.1 项目背景项目背景储蓄业务越来越走进人们的生活。代发工资、代储蓄业务越来越走进人们的生活。代发工资、代缴水电费、代缴电话费等业务极大的方便了人们缴水电费、代缴电话费等业务极大的方便了人们的日常生活。越来越多的人们也开始使用银行业的日常生活。越来越多的人们也开始使用银行业务、储蓄业务,同时银行储蓄客户越来越多。银务、储蓄业务,同时银行储蓄客户越来越多。银行还在使用手工记帐,由于手工记帐工作效率非行还在使用手工记帐,由于手工记帐工作效率非
4、常低,通常有储户等待,排成长龙的现象,同时常低,通常有储户等待,排成长龙的现象,同时这给工作人员增加了非常大的负担和额外的工作这给工作人员增加了非常大的负担和额外的工作负荷,也给银行的发展带来了严重的制约和压力负荷,也给银行的发展带来了严重的制约和压力,银行储蓄信息化已经到了不解决不行的地步。,银行储蓄信息化已经到了不解决不行的地步。1.2 需求描述需求描述 系统的具体需求:系统的具体需求:银行操作员输入用户名密码后,登录本系统。银行操作员输入用户名密码后,登录本系统。银行操作员通过本系统为储蓄用户进行开户操作。银行操作员通过本系统为储蓄用户进行开户操作。银行操作员根据储蓄用户要求,通过本系统
5、存入存款。银行操作员根据储蓄用户要求,通过本系统存入存款。银行操作员根据储蓄用户要求,通过本系统完成取款业务银行操作员根据储蓄用户要求,通过本系统完成取款业务操作。操作。银行操作员通过本系统查询储蓄用户的余额。银行操作员通过本系统查询储蓄用户的余额。银行操作员根据储蓄用户要求,通过本系统完成销户业务银行操作员根据储蓄用户要求,通过本系统完成销户业务操作。操作。储蓄用户的帐户信息保存到文件中。储蓄用户的帐户信息保存到文件中。1.3 需求分析需求分析角色、功能分析:角色、功能分析:角色名称角色名称操作功能操作功能银行操作员银行操作员登录、开户、存款、取款、查询余额、登录、开户、存款、取款、查询余额
6、、销户销户银行管理员银行管理员银行操作员管理银行操作员管理用例图用例图 操作员管理管理员日志浏览1.3 需求分析需求分析1.4 模块划分模块划分功能编号功能编号功能简述功能简述功能描述功能描述0退出退出退出应用程序,返回到操作系统退出应用程序,返回到操作系统1登录登录输入用户名和密码,验证后进入本系统输入用户名和密码,验证后进入本系统2开户开户为储户在本系统中开立一个帐户,供后续业务为储户在本系统中开立一个帐户,供后续业务使用使用3存款存款把储户的存款额加在其帐户上把储户的存款额加在其帐户上4取款取款从该储户的帐户余额上减去取款额从该储户的帐户余额上减去取款额5查询查询查询储户的帐户余额及其他
7、信息查询储户的帐户余额及其他信息6销户销户结算帐户余额,并将该帐户的状态置为销户结算帐户余额,并将该帐户的状态置为销户1.4 模块划分模块划分 体系结构示意图体系结构示意图业务模块业务模块服务模块服务模块1.5 概要设计概要设计业务函数业务函数 函数名称函数名称功能简述功能简述void openAccount()开户,在结构体数组中增加一个数组成员,该成员信开户,在结构体数组中增加一个数组成员,该成员信息就是一个储户的信息息就是一个储户的信息void closeAcount()销户,将该帐户的帐户状态置为销户,将该帐户的帐户状态置为1,余额置为,余额置为0void deposit()存款,将存
8、款金额加到该帐户的余额上存款,将存款金额加到该帐户的余额上void withdraw()取款,从该帐户的余额上扣除取款金额取款,从该帐户的余额上扣除取款金额void query()查询,查询某帐户的信息查询,查询某帐户的信息1.5 概要设计概要设计服务函数服务函数 函数名称函数名称功能简述功能简述void welcome()显示欢迎信息显示欢迎信息void mainmenu()系统主菜单系统主菜单int findAnAccount()查找一个帐号在数组中的位置查找一个帐号在数组中的位置void dispAnAccount()显示一个帐号的帐户信息显示一个帐号的帐户信息int createAcc
9、Number()生成一个新的可用帐号生成一个新的可用帐号int readData()把储户信息从文件中读到结构体数组中把储户信息从文件中读到结构体数组中int writeData()把储户信息从结构体数组写入文件中把储户信息从结构体数组写入文件中int checkInput()检查录入的户名、密码、存入金额格式是否合法检查录入的户名、密码、存入金额格式是否合法第二阶段:详细设计与实现第二阶段:详细设计与实现任务一:登录业务模块功能及主函数实现任务一:登录业务模块功能及主函数实现任务二:系统菜单及开户功能实现任务二:系统菜单及开户功能实现 任务三:存款功能实现任务三:存款功能实现任务四:取款功能
10、实现任务四:取款功能实现任务五:文件的读写操作任务五:文件的读写操作任务六:查询功能实现任务六:查询功能实现 任务七:销户功能及系统退出功能实现任务七:销户功能及系统退出功能实现任务一:登录业务模块功能及主函数实现任务一:登录业务模块功能及主函数实现 登录时,操作员输入用户名和密码。如果验证通过,显示登录时,操作员输入用户名和密码。如果验证通过,显示系统主菜单,否则提示错误消息,要求用户重新输入;三系统主菜单,否则提示错误消息,要求用户重新输入;三次输入错误,退出系统。次输入错误,退出系统。任务一:登录业务模块功能及主函数实现任务一:登录业务模块功能及主函数实现开始开始输入用户名和密码输入用户
11、名和密码用户名及密码判断用户名及密码判断从文件中读取数据放入结构体数从文件中读取数据放入结构体数组中,并得到数组的最大下标值组中,并得到数组的最大下标值选择操作类型选择操作类型开户开户销户销户存款存款取款取款查询查询退出退出结束结束错误错误三次错误三次错误正确正确代码实现:步骤代码实现:步骤1创建头文件,创建头文件,bankObankOperationperation.h.h和和bankSbankServeerve.h.h,将概,将概要设计中分析得到的函数声明分别添加到该头文件中要设计中分析得到的函数声明分别添加到该头文件中 1.1.函数在头文件中声明,并在实现文件中定义。函数在头文件中声明,
12、并在实现文件中定义。2.2.一个实现文件中不能两次包含同一个头文件。一个实现文件中不能两次包含同一个头文件。3.3.考虑使用具有描述性的名称,对于项目开发非考虑使用具有描述性的名称,对于项目开发非常重要,是一个很值得养成的习惯。常重要,是一个很值得养成的习惯。代码实现:步骤代码实现:步骤2创建源文件:创建源文件:bank.cbank.c。在在bank.cbank.c中添加中添加main()main()函数,声明用户数组函数,声明用户数组userNameuserName和用户密码数组和用户密码数组userPWRuserPWR。main()main()char userName9;char use
13、rName9;char userPWD7;char userPWD7;printf(printf(请输入您的用户名请输入您的用户名:);:);scanf(%s,userName);scanf(%s,userName);printf(printf(请输入您的密码请输入您的密码:);:);scanf(%s,userPWD);scanf(%s,userPWD);C C语言中的输语言中的输入输出功能入输出功能的实现的实现判断用户输入的用户名和密码是否有效判断用户输入的用户名和密码是否有效代码实现:步骤代码实现:步骤3if(strcmp(userName,admin)=0)&if(strcmp(user
14、Name,admin)=0)&(strcmp(userPWD,admin)=0)(strcmp(userPWD,admin)=0)C C语言中字符串语言中字符串的比较函数的比较函数l 注意,程序中只要使用了任何一个串处理函数,注意,程序中只要使用了任何一个串处理函数,都要在程序前面加上都要在程序前面加上#include#include 利用利用FORFOR循环语句控制三次判断用户有效性验证循环语句控制三次判断用户有效性验证如果验证通过,显示系统主菜单如果验证通过,显示系统主菜单mainmenu()mainmenu(),否,否则退出系统。则退出系统。注意头文件的包含。注意头文件的包含。代码实现:
15、步骤代码实现:步骤4创建函数的实现文件创建函数的实现文件bankSbankServeerve.c.c与头文件与头文件 bankSbankServeerve.h.h 对应对应在在bankSbankServeerve.c.c中对中对mainmenu()mainmenu()函数进行定函数进行定义,先暂时定义为空。义,先暂时定义为空。代码实现:步骤代码实现:步骤5最后,在最后,在main()main()函数中调用一个自定义的函数中调用一个自定义的welcome()welcome()函数,以完善我们的程序。函数,以完善我们的程序。在在bankSbankServeerve.c.c中对中对welcome()
16、welcome()函数进行定义。函数进行定义。代码实现:步骤代码实现:步骤6操作员在系统菜单中选择要使用的功能模块。操作员在系统菜单中选择要使用的功能模块。操作员为储户在储蓄系统中开立一个帐户,供操作员为储户在储蓄系统中开立一个帐户,供后续业务使用。后续业务使用。任务二:系统菜单及开户功能实现任务二:系统菜单及开户功能实现l任务需求描述:任务需求描述:步骤步骤1:在在bankSbankServeerve.c.c中对中对mainmenu()mainmenu()函函数进行定义。数进行定义。步骤步骤2:利用利用dowhiledowhile循环循环 实现反复选择实现反复选择系统菜单功能系统菜单功能步骤
17、步骤3:使用使用switchswitch语句确认操作员选择的语句确认操作员选择的具体功能模块,并调用对应的功能模块函数具体功能模块,并调用对应的功能模块函数系统主菜单代码实现系统主菜单代码实现:步骤步骤4:创建函数的实现文件创建函数的实现文件bankOperation.cbankOperation.c与与头文件头文件 bankOperation.hbankOperation.h 对应对应步骤步骤5:在在bankOperation.cbankOperation.c中对以下函数进行定中对以下函数进行定义,先暂时定义为空,若无定义,不能对义,先暂时定义为空,若无定义,不能对bankmain.cban
18、kmain.c进行链接。进行链接。void openAccount();/开户开户void closeAccount();/销户销户void deposit();/存款存款void withdraw();/取款取款void query();/查询查询系统主菜单代码实现系统主菜单代码实现:系统主菜单代码实现系统主菜单代码实现:开户功能代码实现:开户功能代码实现:l任务需求描述:任务需求描述:l 操作员接收储户交来的现金和存款凭证,开始执行开操作员接收储户交来的现金和存款凭证,开始执行开户操作。户操作。l 操作员输入储户姓名、密码(本来应由储户自已从密操作员输入储户姓名、密码(本来应由储户自已从密
19、码键盘输入,本系统简化成由操作员代输入)。码键盘输入,本系统简化成由操作员代输入)。l 系统自动生成该储户帐号,每次最大开户人数为系统自动生成该储户帐号,每次最大开户人数为9999人人l 存入金额默认开户金额为存入金额默认开户金额为0 0元。元。l 开户成功后,显示该储户信息,按任意键返回主界面开户成功后,显示该储户信息,按任意键返回主界面开户功能代码实现:开户功能代码实现:步骤步骤1:创建一个新的头文件创建一个新的头文件bankDataStruct.hbankDataStruct.h步骤步骤2:在在bankDataStruct.hbankDataStruct.h中添加对帐户结构中添加对帐户结
20、构体的声明体的声明struct record int accNumber;/账号账号 char accName9;/户名户名 char accPWD7;/密码密码 double balance;/账户余额账户余额 char flag2;/销户标志销户标志;步骤步骤3:在开户在开户openopenAccount()Account()函数中声明帐户函数中声明帐户信息变量信息变量,并对变量进行初始化。帐户信息包括帐并对变量进行初始化。帐户信息包括帐户的帐号、名称、密码和存入金额。户的帐号、名称、密码和存入金额。开户功能代码实现:开户功能代码实现:int accNumber;/账号账号 char ac
21、cName9;/户名户名 char accPWD7;/密码密码 double cash;/存入金额存入金额 accNumber=0;memset(accName,0,sizeof(accName);memset(accPWD,0,sizeof(accPWD);cash=0;步骤步骤4:依次获取帐户的帐号、名称、密码和存入金依次获取帐户的帐号、名称、密码和存入金额。额。注意账号为自动生成数据,其它数据都从键盘注意账号为自动生成数据,其它数据都从键盘输入获取。输入获取。createAccNumbercreateAccNumber、getaccNamegetaccName、getaccPWDgeta
22、ccPWD、getcashgetcash函数将在后续步骤中实现函数将在后续步骤中实现开户功能代码实现:开户功能代码实现:accNumber=createAccNumber();getaccName(accName);getaccPWD(accPWD);cash=getcash(0);步骤步骤5:将获取的帐户信息对应赋给帐户信息结构将获取的帐户信息对应赋给帐户信息结构体(体(recordrecord)中声明的帐户信息)中声明的帐户信息 开户功能代码实现:开户功能代码实现:maxAccount+;/帐户的数量帐户的数量rsmaxAccount.accNumber=accNumber;strcpy(
23、rsmaxAccount.accName,accName);strcpy(rsmaxAccount.accPWD,accPWD);rsmaxAccount.balance=cash;strcpy(rsmaxAccount.flag ,0);l 注意:注意:maxAccountmaxAccount变量的含义是记录操作员现在录入变量的含义是记录操作员现在录入账户在结构体数组中的位置,需要在账户在结构体数组中的位置,需要在mainmenu()mainmenu()中对它中对它初始化为初始化为0.0.步骤步骤6:将帐户信息保存到文件中,并显示帐将帐户信息保存到文件中,并显示帐户信息。户信息。这里我们只保
24、留写文件函数这里我们只保留写文件函数writeData()writeData()的调用,具的调用,具体实现在后续任务中完成。体实现在后续任务中完成。此处,为了暂时调试程序能正常运行,应该将此处,为了暂时调试程序能正常运行,应该将writeData()writeData()函数返回值设成函数返回值设成false;false;开户功能代码实现:开户功能代码实现:if(writeData()printf(写文件出错!写文件出错!);return;dispAnAccount(maxAccount);/显示帐户信息显示帐户信息 printf(开户成功!按任意键返回主菜单开户成功!按任意键返回主菜单.);
25、步骤步骤7:实现显示帐户信息函数实现显示帐户信息函数dispAnAccount,dispAnAccount,在在bankSever.cbankSever.c中实现中实现开户功能代码实现:开户功能代码实现:步骤步骤8:实现自动生成账号函数实现自动生成账号函数createAccNumber,createAccNumber,在在bankSever.cbankSever.c中实现中实现int createAccNumber()if(maxAccount=-1)return 10001;else return rsmaxAccount.accNumber+1;步骤步骤9:实现获取账户名称函数实现获取账户
26、名称函数getaccName().getaccName().步骤步骤10:实现获取账户密码函数实现获取账户密码函数getaccPWD().getaccPWD().步骤步骤11:实现获取存入金额函数实现获取存入金额函数getcash().getcash().该函数及后续的该函数及后续的getaccPWDgetaccPWD和和getcash()getcash()函数都用函数都用到了到了checkInput()checkInput()函数,这个函数实现的功能是函数,这个函数实现的功能是检查操作员输入的账号信息是否规范。我们将在检查操作员输入的账号信息是否规范。我们将在最后的步骤中实现。最后的步骤中实
27、现。开户功能代码实现:开户功能代码实现:步骤步骤1212:实现:实现checkInput()checkInput()函数,这个函数实现函数,这个函数实现的功能是检查操作员输入的账号信息是否规范。的功能是检查操作员输入的账号信息是否规范。开户功能代码实现:开户功能代码实现:至此,我们的开户功能全部实现至此,我们的开户功能全部实现开户功能代码实现:开户功能代码实现:任务总结任务总结 1.在头文件中对所需要的函数进行声明在头文件中对所需要的函数进行声明 2.每个头文件要对应有相应的实现文件每个头文件要对应有相应的实现文件 3.搞清楚程序的结构搞清楚程序的结构,各个函数的调用及调用关系各个函数的调用及调用关系u三个三个.h.h文件,三个文件,三个.c.c文件,文件,u编写了编写了1010函数的实现函数的实现 4.用好用好C语言的字符型函数,在编程中多查资料并做语言的字符型函数,在编程中多查资料并做好记录,这是以后基础。好记录,这是以后基础。5.好的编程风格要从一点一滴逐步养成好的编程风格要从一点一滴逐步养成。