C语言课程设计报告(银行账户信息管理系统)更正版1317.docx
银行账户信息管理 HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序序设计课程设计报报告课设题目: 银行行账户信信息管理理 专 业: 电子信信息工程程(汽车车电子) 班 级: T12223-14 姓 名: 朱鹏 成 绩: 完成日期: 220133年18周周20013年19周周 指导教师: 张吴吴波 田漫柳柳 目录C语言程序序设计0课程设计报报告0目录11.课程设设计目的的22.需求分分析22.1 要要求22.2任务务描述32.3运行行环境42.4开发发工具43.总体设设计43.1系统统流设计计43.2系统统模块设设计54.详细设设计64.1数据据结构设设计64.2 模模块接口口设计74.3主要要功能模模块的流流程图95.运行结结果145.1 欢欢迎界面面145.2 主主菜单145.3 次次菜单-信息输输入界面面155.4 信信息查询询界面155.5记录录查询界界面165.6退出出界面166.程序调调试与测测试176.1 主主菜单选选择测试试176.2 次次菜单选选择测试试176.3客户户信息的的输入测测试186.4客户户密码测测试206.5存取取款金额额测试216.6存取取款日期期测试227.问题与与不足238.建议239.编程体体会2410.程序序源代码码2511.参考考文献4212.用户户使用手手册4212.1 程序主主要用途途4212.2使使用说明明4212.3注注意事项项4312.4维维护与升升级431.课程设设计目的的1) 通过课程设设计,加加深对结结构化程程序设计计思想的的理解,能能对系统统功能进进行分析析,并设设计合理理的模块块化结构构。2) 通过课程设设计,进进一步掌掌握C语语言中重重要的数数据结构构。掌握握并熟练练运用指指针、链链表、结结构体、文文件等数数据结构构。3) 通过课程设设计,提提高程序序开发能能力,能能运用合合理的控控制流编编写清晰晰高效的的程序。4) 通过课程设设计,培培养C语语言知识识运用和和自学能能力,真真正的把把课堂上上获得的的知识运运用起来来,培养养自己对对程序编编写的兴兴趣,并并能独立立设计和和实现一一个小型型系统。5) 通过课程设设计,加加强了自自己的程程序分析析能力。2.需求分分析2.1 要要求1) 遵循软件开开发过程程的基本本规范;能灵活活应用,初初步具备备运用CC程序解解决实际际问题的的能力。2) 运用结构化化程序设设计方法法,按照照课程设设计题目目要求,完完成包括括需求分分析、数数据结构构设计、概概要设计计、详细细设计、编编写代码码、调试试和测试试C程序序等过程程。3) 学会利用数数组、结结构体、链链表进行行相关信信息表示示。4) 功能模块划划分清晰晰,系统统结构图图符合功功能操作作要求,且且有详尽尽的功能能描述5) 各主要功能能模块有有详尽的的流程图图及描述述,用函函数的形形式实现现,且调调用入口口、功能能、出口口等关系系正确。6) 所设计的CC程序较较好的可可读性和和可靠性性;程序序书写风风格规范范,注释释清晰。7) 界面友好(良良好的人人机互交交),凡凡需要输输入信息息时,都都有较详详尽的提提示信息息,并对对输入信信息有较较完善的的值域分分析。8) 程序经上机机调试通通过,不不应出现现语法型型、功能能型错误误,并获获得满意意的结果果。9) 学会通过各各功能性性测试用用例测试试程序的的能力,尽尽可能避避免原则则性错误误的出现现。10) 掌握编写、调调试和测测试C语语言程序序的基本本技巧,充充分理解解结构化化程序设设计的基基本方法法。11) C语言课程程设计报报告的内内容反应应实际设设计过程程,且符符合格式式要求,无无抄袭现现象。2.2任务务描述已知一银行行有5个个客户(客客户信息息为:编编号、客客户姓名名、客户户地址、客客户电话话、账户户总金额额(最开开始为00)。设设计一程程序,完完成以下下功能。存存、取款款时间必必须通过过调用系系统时间间获得。1) 存款:输入入客户编编号、存存款金额额、存款款日期,完完成存款款功能,需需要判断断客户编编号是否否存在,存存款金额额是否大大于0,存存款日期期格式是是否合法法(格式式为:YYYYYY-MMM-DDD,如220099-011-022)。2) 取款:输入入客户编编号、存存款金额额、取款款日期,完完成取款款功能,需需要判断断客户编编号是否否存在,取取款金额额是否大大于0,取取款金额额是否小小于客户户的账户户总金额额,取款款日期格格式是否否合法(格格式为:YYYYY-MMM-DDD,如如20009-001-002)。3) 查询指定客客户的余余额4) 查询指定客客户的存存款记录录5) 查询指定客客户的取取款记录录6) 所有数据符符合实际际应用要要求2.3运行行环境1) Windoows 7系统统2) VC+66.0编编译环境境2.4开发发工具C语言3.总体设设计3.1系统统流设计计程序整体体功能结结构如图图一所示示:开始初始化并显示欢迎信息显示主菜单,输入选择存款取款余额查询存款记录查询取款记录查询显示输入菜单,输入并显示用户信息存取款?输入存取金额,日期,存取款是3.2系统统模块设设计1) 系统统初始化化模块 函数数voiid sstarrtvaaluee();实现初初始化欢欢迎信息息,并实实现值得得初始化化。2) 菜单单模块 函数数intt meenu();和和intt meenu22();分别实实现一级级二级菜菜单显示示,一级级菜单是是主菜单单,二级级菜单是是输入菜菜单,并并返回相相应的选选项值。3) 存取取款模块块 函函数vooid Depposiit_WWithhdraaw();实现现存取款款的功能能,其中中会使用用相关其其他函数数共同实实现。4) 信息息查询模模块 函数iint InffoFiind();实实现信息息的查询询功能,包包括账户户余额查查询,存存取款历历史记录录查询。5) 日期期审查模模块 函数iint isDDataaRigght();实实现对日日期的审审查,其其中同样样会调用用其他函函数辅助助实现。4.详细设设计4.1数据据结构设设计根据系统要要求,用用户信息息包括:数据项名称称数据项系统统表示数据类型数据长度备注客户编号P1->iid整型8客户姓名P1->nnamee字符串10客户地址P1->aaddrresss字符串1024客户电话P1->ttelnnum整型8账户余额P1->aaccoountt双精度16账户密码P1->ppasssworrd整型8根据系统要要求,日日期信息息包括:数据项名称称数据项系统统表示数据类型数据长度备注年P1->yyearr整型8月P1->mmontth整型8日P1->dday整型8时P1->hhourr整型8系统自动添添加分P1->mmin整型8系统自动添添加秒P1->ssec整型8系统自动添添加根据系统要要求,存存取款记记录包括括:数据项名称称数据项系统统表示数据类型数据长度备注客户编号P1->iid整型8日期信息P1-> InOOutDDataa结构体48存取款类型型P1-> ActtionnClaass整型8存取款金额额P1-> ActtionnNumm双精度16为了能实现现系统的的优越性性和c语语言的精精华采用用链表的的建立取取款记录录表,示示意图如如下。 存取款记录1存取款记录22通讯录信息1221存取款记录3存取款记录44.2 模模块接口口设计1)所有函函数声明明/初始化化void staartvvaluue();/头部信信息void SyssTittle();/一级菜菜单int mmenuu();/二级菜菜单int mmenuu2( intt InnfoCClasss );/输入函函数void InPPut(chaar *cboox,iint *ibbox,douublee * monney,intt InnPuttClaass,chaar *boxxnamme);/*日期期时间相相关函数数*/将字符符型的日日期转换换为整型型,并分分离出年年月日void Chaar2IInt ( ccharr *DDataaIn,intt *YYearrOutt,innt *MonnthOOut,intt *DDayOOut);/判断是是否为闰闰年int lleapp(innt yyearr);/计算某某年某月月的天数数int mmontth_ddayss(innt yyearr,innt mmontth);/计算若若干年的的总天数数unsiggnedd innt yyearrsdaays(intt tooyeaar);/计算某某个月的的总天数数int ddayss(innt yyearr,innt mmontth);/日期换换算为秒秒,用于于排序unsiggnedd innt DDataa2Seec( USEEDATTA * DaataIIn );/判断日日期逻辑辑是否正正确int iisDaataNNumRRighht(iint YeaarInn,innt MMontthInn,innt DDayIIn);/判断日日期是否否正确int iisDaataRRighht(ccharr *DDataaIn,intt *YYearrOutt,innt *MonnthOOut,intt *DDayOOut);/调用系系统时间间,给结结日期结结构体添添加时间间void sysstimme(UUSEDDATAA * Datta4TTimee);/客户编编号验证证int iisIDDexiist(intt IDDin);/*存款款、取款款、查询询相关函函数*/存取款款void Depposiit_WWithhdraaw(iint ActtClaass );/信息查查询int IInfooFinnd( intt AcctCllasss , intt InnfoCClasss );/寻找插插入点RECORRDS * IInPoointt();/将存取取款记录录按照日日期排序序void tooordeer();/增加存存取款记记录int IInOuut(iint IDiin,ddoubble ActtNumm, UUSEDDATAA * ActtDatta, intt AcctCllasss);/ID、姓姓名、地地址、电电话查询询结构体体数组iidint FFindd(innt IIDinn,chhar *NaameIIn,ccharr *AAddrresssIn,intt TeelNuumInn);/存取款款记录和和余额查查询并输输出int FFinddOuttPutt( iint IDiin,ccharr * NammeInn, ccharr * AdddresssInn, iint TellNummIn, innt aactcclasss );/退出void exiit0();2)全局变变量1、用于于存储正正确的日日期信息息的结构构体USSEDAATA RigghtDDataa;2、用于于存储客客户信息息的结构构体数组组CUSSTOMM cuustoomerr5;3、用于于存储存存取款记记录的链链表的指指针REECORRDS *heead=NULLL,*p1=NULLL,*p2=NULLL;3)主要模模块的实实现系统以 intt maain()为入入口,首首先调用用voiid sstarrtvaaluee()函函数进行行初始化化,并显显示欢迎迎信息。接接着,按按照用户户的要求求,调用用voiid DDepoositt_Wiithddraww()函函数进行行存取款款的操作作,或者者调用iint InffoFiind()函数数进行信信息的查查询。不不管还是是存取款款还是信信息查询询,都需需要调用用voiid IInPuut()函数进进行输入入信息的的输入。存存取款功功能还会会调用日日期审查查函数iint isDDataaRigght()对日日期进行行审查。通通过审查查之后,会会调用iint InOOut()函数数添加存存取款记记录,并并修改账账户余额额。最后调用用voiid eexitt0()函数退退出。4.3主要要功能模模块的流流程图1) 系统统初始化化模块 显示欢迎信息给系统初始化值进入系统 2) 菜单单模块 显示主菜单接受用户输入选项合法?显示次菜单是否为6接受用户输入选项合法?执行相应功能是否为0是是否否是否否执行退出函数3) 存取取款模块块 输入存取款人的信息显示存取款人的信息输入密码正确?输入存取款金额合法?输入存取款日期合法?新增记录,修改账户余额返回主菜单显示?是是是是否否否否显示存取款人的信息 4) 信息息查询模模块输入被查询人的信息将输入的信息转换为数组idId存在?输入密码正确?是否是否为余额?显示被查询人的余额显示被查询人的记录否是返回是否 5) 日期期审查模模块 输入日期长度为10?第5位和第8位是-?提取字符串中的数值,分离出年,月,日根据年,月,日判断日期逻辑是否正确正确?返回0返回1是是是否否否5.运行结结果5.1 欢欢迎界面面5.2 主主菜单5.3 次次菜单-信息输输入界面面5.4 信信息查询询界面5.5记录录查询界界面5.6退出出界面6.程序调调试与测测试测试数据:客户编号客户姓名客户地址客户电话账户余额账户密码1唐僧东土大唐888888880010000000888888882孙悟空花果山88888888111000000888888883猪八戒高老庄8888888822100000888888884沙和尚流沙河88888888331000888888885佛祖西天888888884410000000000888888886.1 主主菜单选选择测试试若用户输输入错误误选项,则则如图显显示:6.2 次次菜单选选择测试试若用户输输入错误误选项,则则如图显显示:6.3客户户信息的的输入测测试1)若输入入了不存存在的客客户编号号:2)若输入入了不存存在的客客户姓名名:3)若输入入了不存存在的客客户地址址:4)若输入入了不存存在的客客户电话话:6.4客户户密码测测试1)密码输输入错误误:2)密码错错误三次次:6.5存取取款金额额测试1)金额为为负值:2)取款金金额大于于账户余余额:6.6存取取款日期期测试1)若输入入错误格格式的日日期:2)若输入入正确格格式的日日期,但但是日期期不符合合实际:7.问题与与不足1、需求分分析中存存在的为为题题目中说说只有55个用户户,而且且没有对对账户信信息进行行修改等等操作,如如果对账账户信息息的增删删改三个个功能,程程序会更更加完美美。2、程序设设计中的的缺陷存取款的的时候,给给系统添添加记录录的时候候,会同同时进行行排序,排排序方法法用的是是排序,排排序方法法比较简简陋,数数据量较较大的时时候会比比较耗时时间。8.建议课程设计计的题目目涉及范范围应该该更广。对对于课设设的时间间按排,可可以提前前把题目目给学生生,这样样可以提提前做课课设以及及复习考考试。程程序设计计的功能能应相对对更加复复杂一点点,这样样有利培培养同学学们的分分析问题题,解决决问题的的能力,同同时也能能提高同同学们对对代码的的掌握能能力。再再者,就就是题目目,尽量量少给一一些提示示,这样样同学们们可以更更大程度度的自己己动脑子子考虑怎怎解决问问题。9.编程体体会经历了编编c语言言课程设设计后,我我弄懂了了在前几几周课堂堂上没搞搞明白的的东西,例例如,链链表的建建立,排排序,遍遍历等等等。也提提高了自自己对指指针的熟熟练度。以以前就听听说对指指针的掌掌握程度度决定了了一个人人的编程程水平。所所以,虽虽然写程程序的过过程中,遇遇到各种种问题,调调试的时时候也是是遇到各各种令人人头大的的问题,但但能借助助课程设设计提高高自己对对指针的的熟练度度,提高高自己对对c语言言编程的的熟练度度,我还还是觉得得很开心心的,也也希望学学校可以以多开设设一些这这样的课课程,既既是让我我们对自自己所学学知识的的一个综综合理解解与使用用,也可可以提高高我们的的动手实实践能力力、对知知识的运运用能力力。10.程序序源代码码/*简易易银行信信息管理理系统*作者者:朱鹏鹏*学号号:200120023114066*指导导老师:张吴波波 田漫漫柳*/*头文件件*/#inclludee<sttdioo.h>>#inclludee<sttrinng.hh>#inclludee<sttdliib.hh>#inclludee<tiime.h>#inclludee<maallooc.hh>#inclludee<coonioo.h>>#inclludee<wiindoows.h>#defiine LENN siizeoof(sstruuct reccordds)/*记录修修改标记记*/int RRecoorsCChanngedd = 0;FILE *fpp;/*日期结结构体*/typeddef strructt daataint yeaar;int monnth;int dayy;int houur;int minn;int secc;USEDDATAA;USEDAATA RigghtDDataa;/*客户信信息结构构体*/typeddef strructt cuustoomint id;charr naame10;charr adddreess10224;int tellnumm;doubble acccounnt;int passswoord;CUSTTOM;CUSTOOM ccusttomeer55;/*存取款款记录链链表*/typeddef strructt reecorrdsint id;USEDDATAA InnOuttDatta;int ActtionnClaass;doubble ActtionnNumm;struuct reccordds * neext;RECOORDSS;/heaad为头头指针,pp1,pp2为链链表操作作指针RECORRDS *heead=NULLL,*p1=NULLL,*p2=NULLL;/*函数声声明*/初始化化void staartvvaluue();/头部信信息void SyssTittle();/一级菜菜单int mmenuu();/二级菜菜单int mmenuu2( intt InnfoCClasss );/输入函函数void InPPut(chaar *cboox,iint *ibbox,douublee * monney,intt InnPuttClaass,chaar *boxxnamme);/*日期期时间相相关函数数*/将字符符型的日日期转换换为整型型,并分分离出年年月日void Chaar2IInt ( ccharr *DDataaIn,intt *YYearrOutt,innt *MonnthOOut,intt *DDayOOut);/判断是是否为闰闰年int lleapp(innt yyearr);/计算某某年某月月的天数数int mmontth_ddayss(innt yyearr,innt mmontth);/计算若若干年的的总天数数unsiggnedd innt yyearrsdaays(intt tooyeaar);/计算某某个月的的总天数数int ddayss(innt yyearr,innt mmontth);/日期换换算为秒秒,用于于排序unsiggnedd innt DDataa2Seec( USEEDATTA * DaataIIn );/判断日日期逻辑辑是否正正确int iisDaataNNumRRighht(iint YeaarInn,innt MMontthInn,innt DDayIIn);/判断日日期是否否正确int iisDaataRRighht(ccharr *DDataaIn,intt *YYearrOutt,innt *MonnthOOut,intt *DDayOOut);/调用系系统时间间,给结结日期结结构体添添加时间间void sysstimme(UUSEDDATAA * Datta4TTimee);/客户编编号验证证int iisIDDexiist(intt IDDin);/*存款款、取款款、查询询相关函函数*/存取款款void Depposiit_WWithhdraaw(iint ActtClaass );/信息查查询int IInfooFinnd( intt AcctCllasss , intt InnfoCClasss );/寻找插插入点RECORRDS * IInPoointt();/将存取取款记录录按照日日期排序序void tooordeer();/增加存存取款记记录int IInOuut(iint IDiin,ddoubble ActtNumm, UUSEDDATAA * ActtDatta, intt AcctCllasss);/ID、姓姓名、地地址、电电话查询询结构体体数组iidint FFindd(innt IIDinn,chhar *NaameIIn,ccharr *AAddrresssIn,intt TeelNuumInn);/存取款款记录和和余额查查询并输输出int FFinddOuttPutt( iint IDiin,ccharr * NammeInn, ccharr * AdddresssInn, iint TellNummIn, innt aactcclasss );/退出void exiit0();/*主函数数*/*功能:调用用各个子子函数完完成功能能输入:无返回:无*/int mmainn()int currID=0,ccurTTel=0;doubble currMonney=0;charr InnPuttDatta220=0,cuurNaame20=00,ccurAAddrresss10024;/客户户名单初初始化starrtvaaluee();whille(11)swiitchh( mmenuu() )caase 1:/存存款ssysttem("clls");DDepoositt_Wiithddraww(1);bbreaak;caase 2:/取取款ssysttem("clls");DDepoositt_Wiithddraww(-11);bbreaak;caase 3:/余余额查询询ssysttem("clls");iif( InffoFiind(0,33) != -1 )priintff("ttt 查查询完成成!按任任意键继继续!"");getcch();bbreaak;caase 4:/存存款记录录查询ssysttem("clls");iif( InffoFiind(1,44) != -1 )priintff("ttt 查查询完成成!按任任意键继继续!"");gettch();bbreaak;caase 5:/取取款记录录查询ssysttem("clls");iif( InffoFiind(-1,5) != -1 )priintff("ttt 查查询完成成!按任任意键继继续!"");gettch();bbreaak;caase 6:/退退出ssysttem("clls");eexitt0();bbreaak;deefauult:bbreaak;retuurn 0;/*初始化化*/*功能:给用用户结构构体数组组赋值,并并从文件件中读取取历史操操作记录录写入链链表输入:无返回:无*/void staartvvaluue()int i=00,sttarttID=0,sstarrtAcctCllasss=0;doubble staartAActNNum=0;USEDDATAA sttarttDatta;custtomeer00.iid=11;sttrcppy(ccusttomeer00.nnamee,"唐唐僧");sttrcppy(ccusttomeer00.aaddrresss,"东东土大唐唐");cusstommer0.tellnumm=88888888800;cuustoomerr0.acccouunt=100000000.00;cuustoomerr0.paasswwordd=888888888;custtomeer11.iid=22;sttrcppy(ccusttomeer11.nnamee,"孙孙悟空"");sstrccpy(cusstommer1.adddresss,""花果山山");cusstommer1.tellnumm=88888888811;cuustoomerr1.acccouunt=10000000.0;cusstommer1.passswoord=888888888;custtomeer22.iid=33;sttrcppy(ccusttomeer22.nnamee,"猪猪八戒"");sstrccpy(cusstommer2.adddresss,""高老庄庄");cusstommer2.tellnumm=88888888822;cuustoomerr2.acccouunt=100000.0;ccusttomeer22.ppasssworrd=8888888888;custtomeer33.iid=44;sttrcppy(ccusttomeer33.nnamee,"沙沙和尚"");sstrccpy(cusstommer3.adddresss,""流沙河河");cusstommer3.tellnumm=88888888833;cuustoomerr3.acccouunt=10000.00;cuustoomerr3.paasswwordd=888888888;custtomeer44.iid=55;sttrcppy(ccusttomeer44.nnamee,"佛佛祖");sttrcppy(ccusttomeer44.aaddrresss,"西西天");cuustoomerr4.teelnuum=88888888884;ccusttomeer44.aaccoountt=100000000000.00;cuustoomerr4.paasswwordd=888888888;if( !( ( ffp=ffopeen(""reccordds.ttxt"","rr") )=NULLL ) )whiile(!feeof(fp)fsscannf(ffp,""%d%lf%d%dd%d%d%dd%d%d",&&staartIID,&&staartAActNNum,&sttarttActtClaass,&sttarttDatta.yyearr,&sstarrtDaata.monnth,&sttarttDatta.dday,&sttarttDatta.hhourr,&sstarrtDaata.minn,&sstarrtDaata.secc);iff(feeof(fp)bbreaak;InnOutt(sttarttID,staartAActNNum,&sttarttDatta,sstarrtAcctCllasss);fcllosee(fpp)