还剩45页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGYC语言程序设计课程设计报告课设题目银行账户信息管理专业电子信息工程(汽车电子)班级:T1223-14姓名朱鹏成绩完成日期:2013年18周-2013年19周指导教师:张吴波田漫柳目录TOC\o1-3\h\z\uC语言程序设计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遵循软件__过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力2运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程3学会利用数组、结构体、链表进行相关信息表示4功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确6所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰7界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析8程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果9学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现10掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法11C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象
2.2任务描述已知一银行有5个客户(客户信息为编号、客户姓名、客户地址、客户__、账户总金额(最开始为0))设计一程序,完成以下功能存、取款时间必须通过调用系统时间获得1存款输入客户编号、存款金额、存款日期,完成存款功能,需要判断客户编号是否存在,存款金额是否大于0,存款日期格式是否合法(格式为YYYY-MM-DD如2009-01-02))2取款输入客户编号、存款金额、取款日期,完成取款功能,需要判断客户编号是否存在,取款金额是否大于0,取款金额是否小于客户的账户总金额,取款日期格式是否合法(格式为YYYY-MM-DD如2009-01-02))3查询指定客户的余额4查询指定客户的存款记录5查询指定客户的取款记录6所有数据符合实际应用要求
2.3运行环境1Windows7系统2VC++
6.0编译环境
2.4__工具C语言
3.总体设计
3.1系统流设计程序整体功能结构如图一所示
3.2系统模块设计1)主函数函数int__in;显示菜单并完成选择和调用各子函数完成相应功能2____设置模块函数voidInitroom;可以使用预设方案或者手动输入两种方法设置____3)入住模块函数voidDeposit_Withdraw;实现存取款的功能,其中会使用相关其他函数共同实现4结账模块函数floatroomcost;根据住房日期计算账单5)日期审查模块函数intistime;实现对日期的审查
4.详细设计
4.1数据结构设计根据系统要求,__信息包括:数据项名称数据项系统表示数据类型数据长度备注__号码P1-number整型8____P1-pri__双精度16根据系统要求,日期信息包括:数据项名称数据项系统表示数据类型数据长度备注年P1-year整型8月P1-month整型8日P1-day整型8根据系统要求,住房记录包括:数据项名称数据项系统表示数据类型数据长度备注客户姓名P1-name字符串50客户___P1-id字符串25日期P1-StartTimeDatetime结构体24结账日期P1-EndTime字符串20__号P1-number整型8入住天数P1-days整型8费用P1-cost浮点型8为了能实现系统的优越性和c语言的精华采用链表的建立取款记录表,示意图如下
4.2模块接口设计1)所有函数声明//----------------------链表的操作-----------------------intInitListLinkListL;//分配空间int__keLNodeLinkListL;//插入一个数据intIsertListLinkListLLinkListL1;//释放节点intDeListLinkListLLinkListp;//寻找第number个数据LinkListLocateNumberLinkListLintnumber;//----------------------判断函数---------------------------------//添加客户的入住信息voidenterinfoLinkListL;//判断退房日期是否小于开房日期inttimecmpdatetimet1datetimet2;//判断时间是否合法boolisroomLinkListLLinkListL1;//判断___号码是否是18位boolisidLinkListL;//判断是否是闰年boolisleapintyear;//判断输入是否符合要求boolistimechartime[];//入住voidInitroom;//计算住房时间intdatesintmonth1intday1intmonth2intday2;//根据住房日期计算账单floatroomcostLinkListpdatetimet;//获得系统日期intgettimestructtm*timeinfo;int__invoid;2)全局变量
1、用roomr
[11];定义了十一个__用于存储酒店的是个__的入住情况
2、用Node*LinkList;定义了一个住房信息链表用于存放客户的住房信息3)主要模块的实现
1、__的__管理有两种管理模式第一个,使用预设方案,将所有的__的__设置为50元/天,实现:直接给__信息的结构体数组循环赋值;第二个,手动输入方式,实现:依次循环十个__信息的__属性进行赋值
2、客户入住首先调用__keLNodeLinkList;分配一个新节点的空间,然后在这个节点里面输入客户入住信息输入完了之后,逐一对入住时间(istimeLinkList-EndTime),客户___号码(isidLinkList),__是否为空进行判断(isroomLLinkList),若有一项不满足,则重新输入全部满足,则入住成功
3、客户结账首先,输入需要结账的__号码,从住房链表中找到相关信息(p=LocateNumberLnumber;)然后根据入住时间,结账时间还有__单价,进行账单(cost=roomcostpt;)的运算并输出
4.3主要功能模块的流程图1)系统初始化模块2)____输入模块3)入住模块4)结账模块5)日期审查模块
5.运行结果
5.1欢迎界面
5.2主菜单
5.3次菜单-信息输入界面
5.4信息查询界面
5.5记录查询界面
5.6退出界面
6.程序调试与测试测试数据客户编号客户姓名客户地址客户__账户余额账户__1唐僧东土大唐88888880_____0088888882孙悟空花果山88888881_____088888883猪八戒高老庄88888882_____88888884沙和尚流沙河88888883100088888885佛祖西天88888884_____
000088888886.1主菜单选择测试若用户输入错误选项,则如图显示:
6.2次菜单选择测试若用户输入错误选项,则如图显示:
6.3客户信息的输入测试1)若输入了不存在的客户编号2)若输入了不存在的客户姓名3)若输入了不存在的客户地址4)若输入了不存在的客户__
6.4客户__测试1)__输入错误2)__错误三次
6.5存取款金额测试1)金额为负值2)取款金额大于账户余额
6.6存取款日期测试1)若输入错误格式的日期2)若输入正确格式的日期,但是日期不符合实际
7.问题与不足
1、需求分析中存在的为题题目中说只有5个用户,而且没有对账户信息进行修改等操作,如果对账户信息的增删改三个功能,程序会更加__
2、程序设计中的缺陷存取款的时候,给系统添加记录的时候,会同时进行排序,排序方法用的是排序,排序方法比较简陋,数据量较大的时候会比较耗时间
8.建议课程设计的题目涉及范围应该更广对于课设的时间按排,可以提前把题目给学生,这样可以提前做课设以及复习考试程序设计的功能应相对更加复杂一点,这样有利培养同学们的分析问题,解决问题的能力,同时也能提高同学们对代码的掌握能力再者,就是题目,尽量少给一些提示,这样同学们可以更大程度的自己动脑子考虑怎解决问题
9.编程体会经历了编c语言课程设计后,我弄懂了在前几周课堂上没搞明白的东西,例如,链表的建立,排序,遍历等等也提高了自己对指针的熟练度以前就听说对指针的掌握程度决定了一个人的编程水平所以,虽然写程序的过程中,遇到各种问题,调试的时候也是遇到各种令人头大的问题,但能借助课程设计提高自己对指针的熟练度,提高自己对c语言编程的熟练度,我还是觉得很开心的,也希望学校可以多开设一些这样的课程,既是让我们对自己所学知识的一个综合理解与使用,也可以提高我们的动手实践能力、对知识的运用能力
10.程序源代码/***************************************简易银行信息管理系统**__朱鹏**学号201202___06**指导老师张吴波田漫柳***************************************//**************************************头文件**************************************/#includestdio.h#includestring.h#includestdlib.h#includetime.h#include__lloc.h#includeconio.h#includewindows.h#defineLENsizeofstructrecords/**************************************记录修改标记************************************/intRecorsChanged=0;FILE*fp;/**************************************日期结构体**************************************/typedefstructdata{intyear;intmonth;intday;inthour;intmin;intsec;}USEDATA;USEDATARightData;/**************************************客户信息结构体**************************************/typedefstructcustom{intid;charname
[10];charaddress
[1024];inttelnum;doubleaccount;intpassword;}CUSTOM;CUSTOMcustomer
[5];/**************************************存取款记录链表**************************************/typedefstructrecords{intid;USEDATAInOutData;intActionClass;doubleActionNum;structrecords*next;}RECORDS;//head为头指针,p1p2为链表操作指针RECORDS*head=NULL*p1=NULL*p2=NULL;/**************************************函数声明**************************************///初始化voidstartvalue;//头部信息voidSysTitle;//一级菜单intmenu;//二级菜单intmenu2intInfoClass;//输入函数voidInPutchar*cboxint*iboxdouble*moneyintInPutClasschar*boxname;/***************************************日期时间相关函数***************************************///将字符型的日期转换为整型,并分离出年月日voidChar2Intchar*DataInint*YearOutint*MonthOutint*DayOut;//判断是否为闰年intleapintyear;//计算某年某月的天数intmonth_daysintyearintmonth;//计算若干年的总天数unsignedintyearsdaysinttoyear;//计算某个月的总天数intdaysintyearintmonth;//日期换算为秒,用于排序unsignedintData2SecUSEDATA*DataIn;//判断日期逻辑是否正确intisDataNumRightintYearInintMonthInintDayIn;//判断日期是否正确intisDataRightchar*DataInint*YearOutint*MonthOutint*DayOut;//调用系统时间给结日期结构体添加时间voidsystimeUSEDATA*Data4Time;//客户编号验证intisIDexistintIDin;/***************************************存款、取款、查询相关函数***************************************///存取款voidDeposit_WithdrawintActClass;//信息查询intInfoFindintActClassintInfoClass;//寻找插入点RECORDS*InPoint;//将存取款记录按照日期排序voidtoorder;//增加存取款记录intInOutintIDindoubleActNumUSEDATA*ActDataintActClass;//ID、姓名、地址、__查询结构体数组idintFindintIDinchar*NameInchar*AddressInintTelNumIn;//存取款记录和余额查询并输出intFindOutPutintIDinchar*NameInchar*AddressInintTelNumInintactclass;//退出voidexit0;/**************************************主函数**************************************//*功能:调用各个子函数完成功能输入:无返回:无*/int__in{intcurID=0curTel=0;doublecurMoney=0;charInPutData
[20]={0}curName
[20]={0}curAddress
[1024];//客户__初始化startvalue;while1{switchmenu{case1://存款systemcls;Deposit_Withdraw1;break;case2://取款systemcls;Deposit_Withdraw-1;break;case3://余额查询systemcls;ifInfoFind03!=-1{printf\t\t查询完成!按任意键继续!;getch;}break;case4://存款记录查询systemcls;ifInfoFind14!=-1{printf\t\t查询完成!按任意键继续!;getch;}break;case5://取款记录查询systemcls;ifInfoFind-15!=-1{printf\t\t查询完成!按任意键继续!;getch;}break;case6://退出systemcls;exit0;break;default:break;}}return0;}/**************************************初始化**************************************//*功能:给用户结构体数组赋值,并从文件中读取历史操作记录写入链表输入:无返回:无*/voidstartvalue{inti=0startID=0startActClass=0;doublestartActNum=0;USEDATAstartData;customer
[0].id=1;strcpycustomer
[0].name唐僧;strcpycustomer
[0].address东土大唐;customer
[0].telnum=88888880;customer
[0].account=_____
00.0;customer
[0].password=8888888;customer
[1].id=2;strcpycustomer
[1].name孙悟空;strcpycustomer
[1].address花果山;customer
[1].telnum=88888881;customer
[1].account=_____
0.0;customer
[1].password=8888888;customer
[2].id=3;strcpycustomer
[2].name猪八戒;strcpycustomer
[2].address高老庄;customer
[2].telnum=88888882;customer
[2].account=_____.0;customer
[2].password=8888888;customer
[3].id=4;strcpycustomer
[3].name沙和尚;strcpycustomer
[3].address流沙河;customer
[3].telnum=88888883;customer
[3].account=
1000.0;customer
[3].password=8888888;customer
[4].id=5;strcpycustomer
[4].name佛祖;strcpycustomer
[4].address西天;customer
[4].telnum=88888884;customer
[4].account=_____
0000.0;customer
[4].password=8888888;if!fp=fopenrecords.___r==NULL{while!feoffp{fscanffp%d%lf%d%d%d%d%d%d%dstartIDstartActNumstartActClassstartData.yearstartData.monthstartData.daystartData.hourstartData.minstartData.sec;iffeoffpbreak;InOutstartIDstartActNumstartDatastartActClass;}fclosefp;}start:printf\n\n\n;SysTitle;printf\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n;printf\t\t▉__:朱鹏学号:201202___06▉\n;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;printf\t\t\n;ifi==0{printf\t\t\t系统正在初始化~不要着急哦~亲~;fori=0;i4;i++{Sleep1000;printf.;}systemcls;gotostart;}printf\t\t\t亲~恭喜哦!初始化成功了哦~\n;printf\t\t\t按任意键进入系统了哦~~;getch;fflushstdin;return;}/**************************************头部信息**************************************//*功能:显示程序头部信息输入:无返回:无*/voidSysTitle{systemtitle简易银行信息管理系统By朱鹏;printf\n\n;printf\t\t▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n;printf\t\t▉※※※※※※※※欢迎使用※※※※※※※※▉\n;printf\t\t▉※※※※※简易银行信息管理系统※※※※※▉\n;printf\t\t▉※※※※※※※※※※※※※※※※※※※※▉\n;}/**************************************一级菜单**************************************//*功能:显示主菜单,并完成菜单的选择输入:无返回:选择的菜单序号[整型]*/intmenu{intx;systemcls;SysTitle;printf\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n;printf\t\t▉主菜单▉\n;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;printf\t\t▉▉\n;printf\t\t▉
1、存款▉\n;printf\t\t▉
2、取款▉\n;printf\t\t▉
3、查询余额▉\n;printf\t\t▉
4、查询存款记录▉\n;printf\t\t▉
5、查询取款记录▉\n;printf\t\t▉
6、退出▉\n;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;printf\t\t亲~输入数字1~6就能使用对应的功能了哦:;do{fflushstdin;scanf%dx;ifx1||x6printf\t\t亲~您的输入有误哟~请重新输入:;}whilex1||x6;fflushstdin;returnx;}/**************************************二级菜单**************************************//*功能:显示二级菜单,并完成菜单的选择输入:操作类型[整型]返回:选择的菜单序号[整型]*/intmenu2intInfoClass{intx;charInfoName
[20]={0};switchInfoClass{case1:strcpyInfoName存款;break;case-1:strcpyInfoName取款;break;case3:strcpyInfoName余额;break;case4:strcpyInfoName存款记录;break;case5:strcpyInfoName取款记录;break;}systemcls;SysTitle;printf\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n;printf\t\t▉%s--用户信息查询\t▉\nInfoName;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;printf\t\t▉▉\n;printf\t\t▉
1、输入客户编号查询1~5▉\n;printf\t\t▉
2、输入客户姓名查询▉\n;printf\t\t▉
3、输入客户地址查询▉\n;printf\t\t▉
4、输入客户__查询▉\n;printf\t\t▉
0、返回▉\n;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;printf\t\t亲~输入数字0~4就能使用对应的功能了哦:;do{fflushstdin;scanf%dx;ifx0||x4printf\t\t亲~您的输入有误哟~请重新输入:;}whilex0||x4;fflushstdin;returnx;}/**************************************输入函数**************************************//*功能:显示需要输入的内容,并在给定的地址中赋值输入对应功能char*cbox存放字符串输入内容int*ibox存放整型数据double*money[金额]存放双精度数据[金额]intInPutClass[
1.
2.3]对应前面的三个输入值类型char*boxname输入信息的名字返回:无*/voidInPutchar*cboxint*iboxdouble*moneyintInPutClasschar*boxname{fflushstdin;printf\t\t请输入%s:boxname;ifInPutClass==1//值为1,输入字符getscbox;elseifInPutClass==2//值为2,输入整数scanf%dibox;elseifInPutClass==3//值为3,输入金额{do{scanf%lfmoney;if*money0printf\t\t金额不能为负值哦~重新输入吧亲~:;}while*money0;}fflushstdin;return;}/**************************************日期、时间相关函数**************************************//*功能:将字符型的日期转换为整型,并分离出年月日输入对应功能char*DataIn输入用户输入的字符型日期int*YearOut存放年int*MonthOut存放月int*DayOut存放日返回:无*/voidChar2Intchar*DataInint*YearOutint*MonthOutint*DayOut{intcount=0i=0;fori=0;istrlenDataIn;i++{ifDataIn[i]==-count++;elseifcount==0*YearOut=*YearOut*10+DataIn[i]-0;elseifcount==1*MonthOut=*MonthOut*10+DataIn[i]-0;elseifcount==2*DayOut=*DayOut*10+DataIn[i]-0;}return;}/**功能:判断是否为闰年*输入:整型数据年*返回:闰年1/非闰年0[整型]*/intleapintyear{intlp;lp=year%4==0year%100!=0||year%400==01:0;returnlp;}/**功能:计算某年某月份的天数*输入:年,月*返回:输入年份月份的天数[整型]*/intmonth_daysintyearintmonth{intday;switchmonth{case1:case3:case5:case7:case8:case10:case12:day=31;break;case2:day=leapyear29:28;break;default:day=30;}returnday;}/**功能:计算若干年的总天数*输入:当前年份*返回:从1900到当前年份的总天数[整型]*/unsignedintyearsdaysinttoyear{inti;unsignedintyds=0;fori=1900;itoyear;i++yds+=365+leapi;returnyds;}/**功能:计算某年前几个月份的总天数*输入:当前年,月*返回:该年从1月到输入月份的总天数[整型]*/intdaysintyearintmonth{intids=0;fori=1;imonth;i++ds=ds+month_daysyeari;returnds;}/**功能:将输入的日期转化为秒用于比较时间先后*输入:日期结构体的指针*返回:由日期换算的秒[无符号整型]*/unsignedintData2SecUSEDATA*DataIn{returnyearsdaysDataIn-year+daysDataIn-yearDataIn-month+DataIn-day*24*60*60+DataIn-hour*60*60+DataIn-min*60+DataIn-sec;}/**功能:判断日期逻辑是否正确*输入:年,月,日*返回:日期逻辑正确1/错误0[整型]*/intisDataNumRightintYearInintMonthInintDayIn{ifDayIn0DayInmonth_daysYearInMonthInreturn1;//返回1,表示日期逻辑正确elsereturn0;//返回0,表示日期逻辑错误}/**功能:判断日期是否正确*输入对应的功能*char*DataIn用户的字符型日期*int*YearOut存放整型年*int*MonthOut存放整型年*int*DayOut存放整型年*返回:日期正确1/错误0[整型]*/intisDataRightchar*DataInint*YearOutint*MonthOutint*DayOut{intcount=0i=0;*YearOut=*MonthOut=*DayOut=0;ifstrlenDataIn==10DataIn
[4]==-DataIn
[7]==-{Char2IntDataInYearOutMonthOutDayOut;ifisDataNumRight*YearOut*MonthOut*DayOut==1return1;//返回1,表示日期格式正确}else{*YearOut=*MonthOut=*DayOut=0;//格式错误,清空缓存return0;//返回0,表示日期格式错误}}/**功能:调用系统时间给结日期结构体添加时间*输入:需要添加时间的日期结构体*返回:无*/voidsystimeUSEDATA*Data4Time{chartemptime
[30]={0};time_trawtime;structtm*timeinfo;timerawtime;timeinfo=localtimerawtime;//给结构体赋值Data4Time-hour=timeinfo-tm_hour;Data4Time-min=timeinfo-tm_min;Data4Time-sec=timeinfo-tm_sec;return;}/**************************************客户编号验证**************************************//**功能:判断客户编号是否存在*输入:客户编号*返回:存在1/不存在0[整型]*/intisIDexistintIDin{inti=0;fori=0;i5;i++ifIDin==customer[i].id{return1;//客户编号正确break;}ifi=5return0;//客户编号错误}/**************************************存款、取款相关函数**************************************//**功能:存取款*输入:intActClass操作类型1存款-1取款*返回:无*/voidDeposit_WithdrawintActClass{intcurID=0curTel=0curPassword=0count=0;doublecurMoney=0;charInPutData
[20]={0}curName
[20]={0}curAddress
[1024]x=n;//输入客户编号do{curID=InfoFind0ActClass;ifcurID==-1return;ifisIDexistcurID==0{printf\t\t按任意键就可以继续了哦亲~;getch;}}whileisIDexistcurID==0;//输入存款金额InPutNULLNULLcurMoney3ActClass==1请输入存款金额:请输入取款金额;//输入日期do{InPutInPutDataNULLNULL1ActClass==1请输入存款日期YYYY-MM-DD:请输入取款日期YYYY-MM-DD;ifisDataRightInPutDataRightData.yearRightData.monthRightData.day==0printf\t\t日期输入错误了哦亲~\n;}whileisDataRightInPutDataRightData.yearRightData.monthRightData.day==0;//加上系统时间systimeRightData;//存取款ifInOutcurIDcurMoneyRightDataActClass==1{printf\t\t%s成功!\n\nActClass==1存款:取款;RecorsChanged=1;//修改记录修改标记,1为修改过do{InPutxNULLNULL1亲~要显示现在账户信息吗?Y/N;if!x==Y||x==y||x==N||x==nprintf\t\t亲~你输入的不正确哟~\n;fflushstdin;}while!x==Y||x==y||x==N||x==n;ifx==Y||x==yFindOutPutcurIDNULLNULLNULL0;}elseprintf\t\t亲~%s失败哟~\n\nActClass==1存款:取款;printf\t\t按任意键就可以继续了哦亲~;getch;return;}/**功能:信息查询*输入对应功能*intActClass操作类型1存款-1取款*intInfoClass信息类型3余额查询4存款记录5取款记录*返回:返回-1/客户编号id[整型]*/intInfoFindintActClassintInfoClass{intcurID=0curTel=0curPassword=0count=0IDNum=0;;doublecurMoney=0;charInPutData
[20]={0}curName
[20]={0}curAddress
[1024];while1{do{switchmenu2InfoClass{case1:InPutNULLcurIDNULL2客户编号1~5;break;case2:InPutcurNameNULLNULL1客户姓名;break;case3:InPutcurAddressNULLNULL1客户地址;break;case4:InPutNULLcurTelNULL2客户__;break;case0:return-1;break;}IDNum=FindcurIDcurNamecurAddresscurTel;curID=customer[IDNum].id;ifIDNum==-1isIDexistcurID==0{printf\t\t亲~你输入的用户不存在哦\n;printf\t\t按任意键继续;getch;}}whileIDNum==-1isIDexistcurID==0;//输入__do{InPutNULLcurPasswordNULL2请输入__;ifcurPassword!=customer[IDNum].passwordprintf\t\t__错误了哦亲~\n;ifcount=2{printf\t\t__错误了三次了哦亲~\n;printf\t\t按任意键返回系统吧~;getch;return-1;}count++;}whilecurPassword!=customer[IDNum].password;FindOutPutcurIDcurNamecurAddresscurTelActClass;returncurID;}}/**功能:寻找插入点*输入:无*返回:插入点地址*/RECORDS*InPoint{RECORDS*Point=NULL;ifhead==NULL//链表为空,新建链表{head=RECORDS*__llocLEN;head-next=NULL;Point=head;}else//链表不为空,插在链表尾部{forp1=head;p1!=NULL;p1=p1-nextPoint=p1;}returnPoint;}/**功能:将存取款记录按照日期排序*输入:无*返回:无*/voidtoorder{RECORDStemp;ifhead==NULLreturn;/*冒泡排序法*/p1=head;do{forp2=p1-next;p2!=NULL;p2=p2-nextifData2Secp1-InOutDataData2Secp2-InOutData{temp=*p1;*p1=*p2;*p2=temp;p2-next=p1-next;/*把链表链接恢复*/p1-next=temp.next;}p1=p1-next;}whilep1-next!=NULL;return;}/**功能:增加存取款记录*输入对应功能*intIDin客户编号*doubleActNum存取款金额*USEDATA*ActData存取款日期时间*intActClass操作类型1存款-1取款*返回:查询失败-1/成功用户信息在结构体数组中的编号[整型]*/intInOutintIDindoubleActNumUSEDATA*ActDataintActClass{RECORDS*AddPoint=NULL*temp=NULL;//获得插入点位置AddPoint=InPoint;//新建记录节点p1=RECORDS*__llocLEN;temp=AddPoint-next;//填写存取款信息p1-id=IDin;p1-ActionNum=ActNum;p1-InOutData=*ActData;p1-ActionClass=ActClass;//更改账户余额IDin=FindIDinNULLNULLNULL;ifActClass*ActNum+customer[IDin].account0{freep1;return0;}customer[IDin].account+=ActClass*ActNum;//将存取款记录接上AddPoint-next=p1;p1-next=temp;//排序toorder;return1;}/**************************************ID、姓名、地址、__查询结构体数组id**************************************//**功能:ID、姓名、地址、__查询结构体数组id*输入对应功能*intIDin客户编号*char*NameIn客户姓名*char*AddressIn客户地址*intTelNumIn客户__*返回:查询失败-1/成功用户信息在结构体数组中的编号[整型]*/intFindintIDinchar*NameInchar*AddressInintTelNumIn{inti=0;fori=0;i5;i++{ifcustomer[i].id==IDin||NameIn!=NULLstrcmpNameIncustomer[i].name==0||AddressIn!=NULLstrcmpAddressIncustomer[i].address==0||TelNumIn==customer[i].telnum{returni;break;}}ifi=5return-1;}/**************************************存取款记录和余额查询并输出**************************************//**功能:存取款记录和余额查询并输出*输入对应功能*intIDin客户编号*char*NameIn客户姓名*char*AddressIn客户地址*intTelNumIn客户__*intactclass操作类型0余额-1取款记录1存款记录*返回:查询失败0/成功1[整型]*/intFindOutPutintIDinchar*NameInchar*AddressInintTelNumInintactclass/*查询*/{//需要将输入的用户编号转换为用户对应的信息编号intIDNum=0;IDNum=FindIDinNameInAddressInTelNumIn;ifIDNum==-1isIDexistIDin==0{printf\t\t亲~你输入的用户不存在哦\n;return0;}else{systemcls;SysTitle;printf\t\t▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n\n;ifactclass==-1||actclass==1{printf\t客户编号姓名\t%s金额\t操作类型\t日期时间\n\nactclass==1存款:取款;forp1=head;p1!=NULL;p1=p1-nextifp1-id==IDinp1-ActionClass==actclass{printf\t%d\t%s\t%.2lf\t\t%s\t\t%d-%d-%d%d:%d:%d\np1-idcustomer[IDNum].namep1-ActionNumactclass==1存款:取款p1-InOutData.yearp1-InOutData.monthp1-InOutData.dayp1-InOutData.hourp1-InOutData.minp1-InOutData.sec;}}elseifactclass==0{printf\t客户编号姓名\t家庭住址\t__号码\t账户余额\n\n;printf\t%d\t%s\t\t%4s\t%d\t%.2lf\n\nIDincustomer[IDNum].namecustomer[IDNum].addresscustomer[IDNum].telnumcustomer[IDNum].account;}return1;}}/**************************************退出**************************************//**功能:释放链表,保存信息,退出*输入:无*返回:无*/voidexit0{charx;systemcls;printf\n\n\n;SysTitle;printf\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n;printf\t\t▉__:朱鹏学号:201202___06▉\n;printf\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n;ifRecorsChanged==1{do{printf\t\t存取款记录已经修改过但还没有保存!\n;printf\t\t是否先保存?Y/N;scanf%cx;fflushstdin;if!x==Y||x==N||x==y||x==nprintf\t\t输入有误!\n;}while!x==Y||x==N||x==y||x==n;ifx==y||x==Y{iffp=fopenrecords.___w==NULLprintf\t\t文件打开错误!\n;else{forp1=head;p1-next!=NULL;p1=p1-nextfprintffp%d\t%lf\t%d\t%d\t%d\t%d\t%d\t%d\t%d\np1-idp1-ActionNump1-ActionClassp1-InOutData.yearp1-InOutData.monthp1-InOutData.dayp1-InOutData.hourp1-InOutData.minp1-InOutData.sec;//fprintffp\n;}fclosefp;RecorsChanged=0;printf\t\t保存成功!\n;}}p1=head;whilep1!=NULL{p2=p1;p1=p1-next;freep2;}printf\t\t谢谢使用!\n;printf\t\t按任意键退出;getch;exit0;}
11.____
[1]廖湖声.C程序设计案例教程.人民邮电出版社
2010.9
[2]何钦铭.C语言程序设计.高等教育出版社,
2009.5.
[3]谭浩强.C程序设计(第
2、
3、4版).清华大学出版社,
2000.
1.
[4]《C语言程序设计教程》,杨路明著,北京邮电大学出版社
12.用户使用手册
12.1程序主要用途
1、对已有客户的账户信息,余额,存取款记录的查询
2、对已有客户的账户进行存取款操作
12.2使用说明
1、首先双击程序图标,进入使用程序,此时会进入一个欢迎界面,等待系统初始化结束,按任意键进入系统
2、选择
1、
2、
3、
4、5进行账户操作的时候,会进入二级输入菜单,会提示输入查询选项,客户编号、客户姓名、客户住址、客户__
3、在二级输入菜单里,若输入不存在的用户,系统会提示用户不存在,要求重新输入
4、若正确输入用户信息,接着会要求__验证,__输入错误次数最大不超过三次,三次之后会自动返回主菜单__正确之后,会显示被查询账户的信息
5、选择
1、2进行存取款时,首先执行上述步骤,在账户信息显示完成之后,会要求输入存取款金额,金额必须为正数,若为取款操作,则取款操作必须小于等于账户余额,否则将操作失败
6、存取款操作完成之后,会询问用户是否显示操作完成之后的用户信息,是,就显示;否,就返回主菜单
7、在主菜单选择6,系统首先会检查是否有新的存取款记录,若有的话,则询问是否保存,是,保存,然后退出;否,直接退出
8、在二级输入菜单,输入0,则可以直接返回主菜单
12.3注意事项
1、禁止对程序进行胡乱修改,胡乱在程序中增加或删减代码
2、使用正确合法的编译器编译程序
3、按照提示正确的输入相关信息,进行正确的信息处理
4、在任何一个操作结束后都进行保存,这样才能确保考勤信息的准确无误地记录
5、妥善保管好存储的信息,每次使用完毕最好将新存储信息拷贝保存,防止丢失
6、不要轻易将程序拷贝给他人
12.4维护与升级
1、如果程序使用过程中出现死机或者信息错误现象,请关闭程序,从新进行使用,如果任然存在问题,请让专业人员进行维修调试
2、若存储读入信息文件无法读入,请自行看程序内读入文件上的文件名是否正确,或者是否已经有创建文件,如果文件名records.___错误请从新输入,如果未创建文件请重新创建
3、如果存储文件不小心删除,请从回收站中还原(尽量多拷贝文件)
4、以后有新的版本会及时通知http://clp.huat.edu.cn/.请及时更新
5.对此系统有好___可以就您___发致zhp930211@hot__il.com我们会及时改进更新姓名朱鹏日期2013年6月12日开始初始化并显示欢迎信息显示主菜单,输入选择填写____客人申请入住客人申请结账结束住房记录1住房记录22通讯录信息1221住房记录3住房记录4显示欢迎信息菜单输入选项执行功能显示主菜单填写____输入选项预设方案手动输入所有____定为50循环输入10个__的__结束输入入住人的信息结束输入入住____空?成功日期合法?输入预计退房日期是否否是输入结账__号结算金额__正确?结束否是输入日期长度为10?第5位和第8位是‘-’?提取字符串中的数值,分离出年,月,日根据年,月,日判断日期逻辑是否正确正确?返回0返回1是是是否否否。