




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
银行账户信息管理 hubei university of automotive technologyc语言程序设计课程设计报告课设题目: 银行账户信息管理 专 业: 电子信息工程(汽车电子) 班 级: t1223-14 姓 名: 朱鹏 成 绩: 完成日期: 2013年18周2013年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) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用c程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试c程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的c程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试c语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) c语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。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运行环境1) windows 7系统2) vc+6.0编译环境2.4开发工具c语言3.总体设计3.1系统流设计程序整体功能结构如图一所示:开始初始化并显示欢迎信息显示主菜单,输入选择填写房间价格客人申请入住客人申请结账结束3.2系统模块设计1) 主函数 函数int main();显示菜单并完成选择和调用各子函数完成相应功能。2) 房间价格设置模块 函数void initroom();可以使用预设方案或者手动输入两种方法设置房间价格。3) 入住模块 函数void deposit_withdraw();实现存取款的功能,其中会使用相关其他函数共同实现。4) 结账模块 函数float roomcost();根据住房日期计算账单。5) 日期审查模块 函数int istime();实现对日期的审查。 4.详细设计4.1数据结构设计根据系统要求,房间信息包括:数据项名称数据项系统表示数据类型数据长度备注房间号码p1-number整型8房间价格p1-price双精度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语言的精华采用链表的建立取款记录表,示意图如下。 住房记录1住房记录22通讯录信息1221住房记录3住房记录44.2 模块接口设计1)所有函数声明/-链表的操作-int initlist(linklist &l);/分配空间int makelnode(linklist &l);/插入一个数据int isertlist(linklist l,linklist l1);/释放节点int delist(linklist l,linklist p);/寻找第number个数据linklist locatenumber(linklist &l,int number);/-判断函数-/添加客户的入住信息void enterinfo(linklist &l);/判断退房日期是否小于开房日期int timecmp(datetime t1,datetime t2);/判断时间是否合法bool isroom(linklist l,linklist l1);/判断身份证号码是否是18位bool isid(linklist l);/判断是否是闰年bool isleap(int year);/判断输入是否符合要求bool istime(char time);/入住void initroom();/计算住房时间int dates(int month1,int day1,int month2,int day2);/根据住房日期计算账单float roomcost(linklist p,datetime t);/获得系统日期int gettime(struct tm * &timeinfo);int main(void);2)全局变量1、用room r11;定义了十一个房间。用于存储酒店的是个房间的入住情况。2、用node *linklist;定义了一个住房信息链表。用于存放客户的住房信息。3)主要模块的实现1、房间的价格管理。有两种管理模式。第一个,使用预设方案,将所有的房间的价格设置为50元/天,实现:直接给房间信息的结构体数组循环赋值;第二个,手动输入方式,实现:依次循环十个房间信息的价格属性进行赋值。2、客户入住。首先调用makelnode(linklist);分配一个新节点的空间,然后在这个节点里面输入客户入住信息。输入完了之后,逐一对入住时间(istime(linklist-endtime)),客户身份证号码(isid(linklist)),房间是否为空进行判断(isroom(l,linklist)),若有一项不满足,则重新输入。全部满足,则入住成功。3、客户结账。首先,输入需要结账的房间号码,从住房链表中找到相关信息(p = locatenumber(l,number);)。然后根据入住时间,结账时间还有房间单价,进行账单(cost = roomcost(p,t);)的运算并输出。4.3主要功能模块的流程图1) 系统初始化模块 显示欢迎信息菜单输入选项执行功能 2) 房间价格输入模块 显示主菜单填写房间价格输入选项预设方案手动输入所有房间价格定为50循环输入10个房间的价格结束3) 入住模块 输入入住人的信息结束输入入住房间房间空?成功日期合法?输入预计退房日期是否否是 4) 结账模块输入结账房间号结算金额房间正确?结束否是 5) 日期审查模块 输入日期长度为10?第5位和第8位是-?提取字符串中的数值,分离出年,月,日根据年,月,日判断日期逻辑是否正确正确?返回0返回1是是是否否否5.运行结果5.1 欢迎界面5.2 主菜单5.3 次菜单-信息输入界面5.4 信息查询界面5.5记录查询界面5.6退出界面6.程序调试与测试测试数据:客户编号客户姓名客户地址客户电话账户余额账户密码1唐僧东土大唐88888880100000088888882孙悟空花果山8888888110000088888883猪八戒高老庄888888821000088888884沙和尚流沙河88888883100088888885佛祖西天8888888410000000088888886.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.程序源代码/*简易银行信息管理系统*作者:朱鹏*学号:20120231406*指导老师:张吴波 田漫柳*/*头文件*/#include#include#include#include#include#include#include#define len sizeof(struct records)/*记录修改标记*/int recorschanged = 0;file *fp;/*日期结构体*/typedef struct dataint year;int month;int day;int hour;int min;int sec;usedata;usedata rightdata;/*客户信息结构体*/typedef struct customint id;char name10;char address1024;int telnum;double account;int password;custom;custom customer5;/*存取款记录链表*/typedef struct recordsint id;usedata inoutdata;int actionclass;double actionnum;struct records * next;records;/head为头指针,p1,p2为链表操作指针records *head=null,*p1=null,*p2=null;/*函数声明*/初始化void startvalue();/头部信息void systitle();/一级菜单int menu();/二级菜单int menu2( int infoclass );/输入函数void input(char *cbox,int *ibox,double * money,int inputclass,char *boxname);/*日期时间相关函数*/将字符型的日期转换为整型,并分离出年月日void char2int ( char *datain,int *yearout,int *monthout,int *dayout);/判断是否为闰年int leap(int year);/计算某年某月的天数int month_days(int year,int month);/计算若干年的总天数unsigned int yearsdays(int toyear);/计算某个月的总天数int days(int year,int month);/日期换算为秒,用于排序unsigned int data2sec( usedata * datain );/判断日期逻辑是否正确int isdatanumright(int yearin,int monthin,int dayin);/判断日期是否正确int isdataright(char *datain,int *yearout,int *monthout,int *dayout);/调用系统时间,给结日期结构体添加时间void systime(usedata * data4time);/客户编号验证int isidexist(int idin);/*存款、取款、查询相关函数*/存取款void deposit_withdraw(int actclass );/信息查询int infofind( int actclass , int infoclass );/寻找插入点records * inpoint();/将存取款记录按照日期排序void toorder();/增加存取款记录int inout(int idin,double actnum, usedata * actdata, int actclass);/id、姓名、地址、电话查询结构体数组idint find(int idin,char *namein,char *addressin,int telnumin);/存取款记录和余额查询并输出int findoutput( int idin,char * namein, char * addressin, int telnumin, int actclass );/退出void exit0();/*主函数*/*功能:调用各个子函数完成功能输入:无返回:无*/int main()int curid=0,curtel=0;double curmoney=0;char inputdata20=0,curname20=0,curaddress1024;/客户名单初始化startvalue();while(1)switch( menu() )case 1:/存款system(cls);deposit_withdraw(1);break;case 2:/取款system(cls);deposit_withdraw(-1);break;case 3:/余额查询system(cls);if( infofind(0,3) != -1 )printf(tt 查询完成!按任意键继续!);getch();break;case 4:/存款记录查询system(cls);if( infofind(1,4) != -1 )printf(tt 查询完成!按任意键继续!);getch();break;case 5:/取款记录查询system(cls);if( infofind(-1,5) != -1 )printf(tt 查询完成!按任意键继续!);getch();break;case 6:/退出system(cls);exit0();break;default:break;return 0;/*初始化*/*功能:给用户结构体数组赋值,并从文件中读取历史操作记录写入链表输入:无返回:无*/void startvalue()int i=0,startid=0,startactclass=0;double startactnum=0;usedata startdata;customer0.id=1;strcpy(,唐僧);strcpy(customer0.address,东土大唐);customer0.telnum=88888880;customer0.account=1000000.0;customer0.password=8888888;customer1.id=2;strcpy(,孙悟空);strcpy(customer1.address,花果山);customer1.telnum=88888881;customer1.account=100000.0;customer1.password=8888888;customer2.id=3;strcpy(,猪八戒);strcpy(customer2.address,高老庄);customer2.telnum=88888882;customer2.account=10000.0;customer2.password=8888888;customer3.id=4;strcpy(,沙和尚);strcpy(customer3.address,流沙河);customer3.telnum=88888883;customer3.account=1000.0;customer3.password=8888888;customer4.id=5;strcpy(,佛祖);strcpy(customer4.address,西天);customer4.telnum=88888884;customer4.account=100000000.0;customer4.password=8888888;if( !( ( fp=fopen(records.txt,r) )=null ) )while(!feof(fp)fscanf(fp,%d%lf%d%d%d%d%d%d%d,&startid,&startactnum,&startactclass,&startdata.year,&startdata.month,&startdata.day,&startdata.hour,&startdata.min,&startdata.sec);if(feof(fp)break;inout(startid,startactnum,&startdata,startactclass);fclose(fp);start:printf(nnn);systitle();printf(ttn);printf(tt 作者:朱鹏 学号:20120231406 n);printf(ttn);printf(ttn);if(i=0)printf(ttt系统正在初始化不要着急哦亲);for(i=0;i4;i+)sleep(1000);printf(.);system(cls);goto start;printf(ttt亲恭喜哦!初始化成功了哦n);printf(ttt按任意键进入系统了哦);getch();fflush(stdin);return;/*头部信息*/*功能:显示程序头部信息输入:无返回:无*/void systitle()system(title 简易银行信息管理系统 by 朱鹏);printf(nn);printf(ttn);printf(tt欢迎使用n);printf(tt简易银行信息管理系统n);printf(ttn);/*一级菜单*/*功能:显示主菜单,并完成菜单的选择输入:无返回:选择的菜单序号整型*/int menu()int x;system(cls);systitle();printf(ttn);printf(tt 主菜单 n);printf(ttn);printf(tt n);printf(tt 1、存款 n);printf(tt 2、取款 n);printf(tt 3、查询余额 n);printf(tt 4、查询存款记录 n);printf(tt 5、查询取款记录 n);printf(tt 6、退出 n);printf(ttn);printf(tt 亲输入数字16就能使用对应的功能了哦:);dofflush(stdin);scanf(%d,&x);if(x6)printf(tt 亲您的输入有误哟请重新输入:);while(x6);fflush(stdin);return x;/*二级菜单*/*功能:显示二级菜单,并完成菜单的选择输入:操作类型整型返回:选择的菜单序号整型*/int menu2( int infoclass )int x;char infoname20=0;switch (infoclass)case 1:strcpy( infoname,存款 );break;case -1:strcpy( infoname,取款 );break;case 3:strcpy( infoname,余额 );break;case 4:strcpy( infoname,存款记录 );break;case 5:strcpy( infoname,取款记录 );break;system(cls);systitle();printf(ttn);printf(tt %s-用户信息查询 t n,infoname);printf(ttn);printf(tt n);printf(tt 1、输入客户编号查询(15) n);printf(tt 2、输入客户姓名查询 n);printf(tt 3、输入客户地址查询 n);printf(tt 4、输入客户电话查询 n);printf(tt 0、返回 n);printf(ttn);printf(tt 亲输入数字04就能使用对应的功能了哦:);dofflush(stdin);scanf(%d,&x);if(x4)printf(tt 亲您的输入有误哟请重新输入:);while(x4);fflush(stdin);return x;/*输入函数*/*功能:显示需要输入的内容,并在给定的地址中赋值输入对应功能char *cbox存放字符串输入内容int *ibox存放整型数据double * money金额存放双精度数据金额int inputclass1.2.3对应前面的三个输入值类型char *boxname输入信息的名字返回:无*/void input(char *cbox,int *ibox,double * money,int inputclass,char *boxname)fflush(stdin);printf(tt 请输入%s:,boxname);if(inputclass=1)/值为1,输入字符gets(cbox);else if(inputclass=2)/值为2,输入整数scanf(%d,ibox);else if(inputclass=3)/值为3,输入金额doscanf(%lf,money);if( *money 0 )printf(tt 金额不能为负值哦重新输入吧亲:);while( *money 0 );fflush(stdin);return ;/*日期、时间相关函数*/*功能:将字符型的日期转换为整型,并分离出年月日输入对应功能char *datain输入用户输入的字符型日期int *yearout存放年int *monthout存放月int *dayout存放日返回:无*/void char2int ( char *datain,int *yearout,int *monthout,int *dayout)int count=0,i=0;for (i=0;istrlen(datain);i+)if(dataini=-)count+;else if(count=0)*yearout = (*yearout)*10 + dataini-0;else if(count=1)*monthout = (*monthout)*10 + dataini-0;else if(count=2)*dayout = (*dayout)*10 + dataini-0;return ;/*功能:判断是否为闰年*输入:整型数据年*返回:闰年1/非闰年0整型*/int leap(int year) int lp; lp=( year%4=0 & year%100!=0 | year%400=0)?1:0;return lp;/*功能:计算某年某月份的天数*输入:年,月*返回:输入年份月份的天数整型*/int month_days(int year,int month) int day;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:day = 31;break;case 2: day = leap(year)?29:28;break;default:day = 30; return day;/*功能:计算若干年的总天数*输入:当前年份*返回:从1900到当前年份的总天数整型*/unsigned int yearsdays(int toyear)int i;unsigned int yds=0;for (i=1900;itoyear;i+)yds +=365+leap(i);return yds;/*功能:计算某年前几个月份的总天数*输入:当前年,月*返回:该年从1月到输入月份的总天数整型*/int days(int year,int month) int i,ds=0; for (i=1;iyear )+days( datain-year, datain-month )+datain-day)*24*60*60+ datain-hour *60*60 +datain-min *60 +datain-sec);/*功能:判断日期逻辑是否正确*输入:年,月,日*返回:日期逻辑正确1/错误0整型*/int isdatanumright(int yearin,int monthin,int dayin)if( dayin0 & dayin hour = timeinfo-tm_hour;data4time-min = timeinfo-tm_min;data4time-sec = timeinfo-tm_sec;return ;/*客户编号验证*/*功能:判断客
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业废气催化燃烧技术环保产业发展报告
- 自媒体技术使用合同范本
- 游戏行业临时工合同协议
- 江苏招聘教师就业协议书
- 用吊车维修楼房合同范本
- 门市房出租协议合同范本
- 舞蹈机构合作人合同协议
- 门窗代加工项目合同范本
- 祖屋继承公证协议书范本
- 港龙文化体育合作协议书
- JJF 1918-2021 电容式加速度传感器校准规范
- 中兴通讯 ZXV10 IAD 速查手册
- 义务教育科学课程标准(2022年版)
- 超星尔雅学习通《大学体育(上海体育学院)》章节测试(含答案)
- GB/T 34652-2017全断面隧道掘进机敞开式岩石隧道掘进机
- GB/T 21872-2008铸造自硬呋喃树脂用磺酸固化剂
- 中国铂族金属供需发展趋势
- 风电施工合同模板
- GA/T 1567-2019城市道路交通隔离栏设置指南
- 氧化还原反应的类型
- 小学英语素材-1-5年级英语牛津词汇表(带音标) 牛津上海版
评论
0/150
提交评论