收藏 分销(赏)

C语言课程设计报告(银行账户信息管理系统)更正版.doc

上传人:二*** 文档编号:4514852 上传时间:2024-09-26 格式:DOC 页数:48 大小:957KB 下载积分:5 金币
下载 相关 举报
C语言课程设计报告(银行账户信息管理系统)更正版.doc_第1页
第1页 / 共48页
本文档共48页,全文阅读请下载到手机保存,查看更方便
资源描述
银行账户信息管理 HUBEIUNIVERSITY OF AUTOMOTIVE TECHNOLOGY C语言程序设计 课程设计报告 课设题目: 银行账户信息管理 专 业:电子信息工程〔汽车电子 班 级:T1223-14 姓 名:朱鹏 成 绩: 完成日期:20XX18周-20XX19周 指导教师:张吴波 田漫柳 目录 C语言程序设计0 课程设计报告0 目录1 1.课程设计目的2 2.需求分析2 2.1 要求2 2.2任务描述3 2.3运行环境4 2.4开发工具4 3.总体设计4 3.1系统流设计4 3.2系统模块设计5 4.详细设计6 4.1数据结构设计6 4.2 模块接口设计7 4.3主要功能模块的流程图9 5.运行结果14 5.1 欢迎界面14 5.2 主菜单14 5.3 次菜单-信息输入界面15 5.4 信息查询界面15 5.5记录查询界面16 5.6退出界面16 6.程序调试与测试17 6.1 主菜单选择测试17 6.2 次菜单选择测试17 6.3客户信息的输入测试18 6.4客户密码测试20 6.5存取款金额测试21 6.6存取款日期测试22 7.问题与不足23 8.建议23 9.编程体会24 10.程序源代码25 11.参考文献42 12.用户使用手册42 12.1 程序主要用途42 12.2使用说明42 12.3注意事项43 12.4维护与升级43 1.课程设计目的 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 系统初始化模块函数void startvalue<>;实现初始化欢迎信息,并实现值得初始化。 2 菜单模块 函数int menu<>;和int menu2<>;分别实现一级二级菜单显示,一级菜单是主菜单,二级菜单是输入菜单,并返回相应的选项值。 3 存取款模块 函数void Deposit_Withdraw<>;实现存取款的功能,其中会使用相关其他函数共同实现。 4 信息查询模块 函数int InfoFind<>;实现信息的查询功能,包括账户余额查询,存取款历史记录查询。 5 日期审查模块 函数int isDataRight<>;实现对日期的审查,其中同样会调用其他函数辅助实现。 4.详细设计 4.1数据结构设计 根据系统要求,用户信息包括: 数据项名称 数据项系统表示 数据类型 数据长度 备注 客户编号 P1->id 整型 8 客户姓名 P1->name 字符串 10 客户地址 P1->address 字符串 1024 客户电话 P1->telnum 整型 8 账户余额 P1->account 双精度 16 账户密码 P1->password 整型 8 根据系统要求,日期信息包括: 数据项名称 数据项系统表示 数据类型 数据长度 备注 年 P1->year 整型 8 月 P1->month 整型 8 日 P1->day 整型 8 时 P1->hour 整型 8 系统自动添加 分 P1->min 整型 8 系统自动添加 秒 P1->sec 整型 8 系统自动添加 根据系统要求,存取款记录包括: 数据项名称 数据项系统表示 数据类型 数据长度 备注 客户编号 P1->id 整型 8 日期信息 P1-> InOutData 结构体 48 存取款类型 P1-> ActionClass 整型 8 存取款金额 P1-> ActionNum 双精度 16 为了能实现系统的优越性和c语言的精华采用链表的建立取款记录表,示意图如下。 存取款记录1 存取款记录2 2 通讯录信息1 221 存取款记录3 存取款记录4 4.2 模块接口设计 1所有函数声明 //初始化 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、姓名、地址、电话查询结构体数组id int Find<int IDin,char *NameIn,char *AddressIn,int TelNumIn>; //存取款记录和余额查询并输出 int FindOutPut< int IDin,char * NameIn, char * AddressIn, int TelNumIn, int actclass >; //退出 void exit0<>; 2全局变量 1、用于存储正确的日期信息的结构体USEDATA RightData; 2、用于存储客户信息的结构体数组CUSTOM customer[5]; 3、用于存储存取款记录的链表的指针RECORDS *head=NULL,*p1=NULL,*p2=NULL; 3主要模块的实现 系统以 int main<>为入口,首先调用void startvalue<>函数进行初始化,并显示欢迎信息。接着,按照用户的要求,调用void Deposit_Withdraw<>函数进行存取款的操作,或者调用int InfoFind<>函数进行信息的查询。不管还是存取款还是信息查询,都需要调用void InPut<>函数进行输入信息的输入。存取款功能还会调用日期审查函数int isDataRight<>对日期进行审查。通过审查之后,会调用int InOut<>函数添加存取款记录,并修改账户余额。 最后调用void exit0<>函数退出。 4.3主要功能模块的流程图 1 系统初始化模块 显示欢迎信息 给系统初始化值 进入系统 2 菜单模块 显示主菜单 接受用户输入选项 合法? 显示次菜单 是否为6 接受用户输入选项 合法? 执行相应功能 是否为0 是 是 否 否 是 否 否 执行退出函数 3 存取款模块 输入存取款人的信息 显示存取款人的信息 输入密码 正确? 输入存取款金额 合法? 输入存取款日期 合法? 新增记录,修改账户余额 返回主菜单 显示? 是 是 是 是 否 否 否 否 显示存取款人的信息 4 信息查询模块 输入被查询人的信息 将输入的信息转换为数组id Id存在? 输入密码 正确? 是 否 是否为余额? 显示被查询人的余额 显示被查询人的记录 否 是 返回 是 否 5 日期审查模块 输入日期 长度为10? 第5位和第8位是‘-’? 提取字符串中的数值,分离出年,月,日 根据年,月,日判断日期逻辑是否正确 正确? 返回0 返回1 是 是 是 否 否 否 5.运行结果 5.1 欢迎界面 5.2 主菜单 5.3 次菜单-信息输入界面 5.4 信息查询界面 5.5记录查询界面 5.6退出界面 6.程序调试与测试 测试数据: 客户编号 客户姓名 客户地址 客户电话 账户余额 账户密码 1 唐僧 东土大唐 88888880 1000000 8888888 2 孙悟空 花果山 88888881 100000 8888888 3 猪八戒 高老庄 88888882 10000 8888888 4 沙和尚 流沙河 88888883 1000 8888888 5 佛祖 西天 88888884 100000000 8888888 6.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<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include<malloc.h> #include<conio.h> #include<windows.h> #define LEN sizeof<struct records> /**************************************记录修改标记************************************/ int RecorsChanged = 0; FILE *fp; /**************************************日期结构体**************************************/ typedef struct data { int year; int month; int day; int hour; int min; int sec; }USEDATA; USEDATA RightData; /**************************************客户信息结构体**************************************/ typedef struct custom { int id; char name[10]; char address[1024]; int telnum; double account; int password; }CUSTOM; CUSTOM customer[5]; /**************************************存取款记录链表**************************************/ typedef struct records { int 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、姓名、地址、电话查询结构体数组id int 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 InPutData[20]={0},curName[20]={0},curAddress[1024]; //客户名单初始化 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<"\t\t 查询完成!按任意键继续!">; getch<>; } break; case 4: //存款记录查询 system<"cls">; if< InfoFind<1,4> != -1 > { printf<"\t\t 查询完成!按任意键继续!">; getch<>; } break; case 5: //取款记录查询 system<"cls">; if< InfoFind<-1,5> != -1 > { printf<"\t\t 查询完成!按任意键继续!">; 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; customer[0].id=1;strcpy<customer[0].name,"唐僧">;strcpy<customer[0].address,"东土大唐">;customer[0].telnum=88888880;customer[0].account=1000000.0;customer[0].password=8888888; customer[1].id=2;strcpy<customer[1].name,"孙悟空">;strcpy<customer[1].address,"花果山">;customer[1].telnum=88888881;customer[1].account=100000.0;customer[1].password=8888888; customer[2].id=3;strcpy<customer[2].name,"猪八戒">;strcpy<customer[2].address,"高老庄">;customer[2].telnum=88888882;customer[2].account=10000.0;customer[2].password=8888888; customer[3].id=4;strcpy<customer[3].name,"沙和尚">;strcpy<customer[3].address,"流沙河">;customer[3].telnum=88888883;customer[3].account=1000.0;customer[3].password=8888888; customer[4].id=5;strcpy<customer[4].name,"佛祖">;strcpy<customer[4].address,"西天">;customer[4].telnum=88888884;customer[4].account=100000000.0;customer[4].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<"\n\n\n">; SysTitle<>; printf<"\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n">; printf<"\t\t▉ 作者:朱鹏 学号:20120231406 ▉\n">; printf<"\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n">; printf<"\t\t\n">; if<i==0> { printf<"\t\t\t系统正在初始化~不要着急哦~亲~">; for<i=0;i<4;i++> { Sleep<1000>; printf<".">; } system<"cls">; goto start; } printf<"\t\t\t亲~恭喜哦!初始化成功了哦~\n">; printf<"\t\t\t按任意键进入系统了哦~~">; getch<>; fflush<stdin>; return; } /**************************************头部信息**************************************/ /* 功能:显示程序头部信息 输入:无 返回:无 */ void SysTitle<> { system<"title 简易银行信息管理系统 By 朱鹏">; printf<"\n\n">; printf<"\t\t▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n">; printf<"\t\t▉※※※※※※※※欢迎使用※※※※※※※※▉\n">; printf<"\t\t▉※※※※※简易银行信息管理系统※※※※※▉\n">; printf<"\t\t▉※※※※※※※※※※※※※※※※※※※※▉\n">; } /**************************************一级菜单**************************************/ /* 功能:显示主菜单,并完成菜单的选择 输入:无 返回:选择的菜单序号[整型] */ int menu<> { int x; system<"cls">; 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{ fflush<stdin>; scanf<"%d",&x>; if<x<1||x>6> printf<"\t\t 亲~您的输入有误哟~请重新输入:">; }while<x<1||x>6>; fflush<stdin>; return x; } /**************************************二级菜单**************************************/ /* 功能:显示二级菜单,并完成菜单的选择 输入:操作类型[整型] 返回:选择的菜单序号[整型] */ int menu2< int InfoClass > { int x; char InfoName[20]={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<"\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n">; printf<"\t\t▉ %s--用户信息查询 \t ▉\n",InfoName>; 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{ fflush<stdin>; scanf<"%d",&x>; if<x<0||x>4> printf<"\t\t 亲~您的输入有误哟~请重新输入:">; }while<x<0||x>4>; fflush<stdin>; return x; } /**************************************输入函数**************************************/ /* 功能:显示需要输入的内容,并在给定的地址中赋值 输入 对应功能 char *cbox 存放字符串输入内容 int *ibox 存放整型数据
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 管理财经 > 金融保险

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服