C语言课程设计报告银行账户信息管理系统更正版.docx
- 文档编号:24481276
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:51
- 大小:30.52KB
C语言课程设计报告银行账户信息管理系统更正版.docx
《C语言课程设计报告银行账户信息管理系统更正版.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告银行账户信息管理系统更正版.docx(51页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告银行账户信息管理系统更正版
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY
C语言程序设计
课程设计报告
课设题目:
银行账户信息管理
专业:
电子信息工程(汽车电子)
班级:
T1223-14
姓名:
朱鹏
成绩:
完成日期:
2013年18周-2013年19周
指导教师:
张吴波田漫柳
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)Windows7系统
2)VC++6.0编译环境
2.4开发工具
C语言
3.总体设计
3.1系统流设计
程序整体功能结构如图一所示:
开始
初始化并显示欢迎信息
显示主菜单,输入选择
存款
取款
余额查询
存款记录查询
取款记录查询
显示输入菜单,输入并显示用户信息
存取款?
输入存取金额,日期,存取款
是
3.2系统模块设计
1)系统初始化模块函数voidstartvalue();实现初始化欢迎信息,并实现值得初始化。
2)菜单模块函数intmenu();和intmenu2();分别实现一级二级菜单显示,一级菜单是主菜单,二级菜单是输入菜单,并返回相应的选项值。
3)存取款模块函数voidDeposit_Withdraw();实现存取款的功能,其中会使用相关其他函数共同实现。
4)信息查询模块函数intInfoFind();实现信息的查询功能,包括账户余额查询,存取款历史记录查询。
5)日期审查模块函数intisDataRight();实现对日期的审查,其中同样会调用其他函数辅助实现。
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)所有函数声明
//初始化
voidstartvalue();
//头部信息
voidSysTitle();
//一级菜单
intmenu();
//二级菜单
intmenu2(intInfoClass);
//输入函数
voidInPut(char*cbox,int*ibox,double*money,intInPutClass,char*boxname);
/******日期时间相关函数******/
//将字符型的日期转换为整型,并分离出年月日
voidChar2Int(char*DataIn,int*YearOut,int*MonthOut,int*DayOut);
//判断是否为闰年
intleap(intyear);
//计算某年某月的天数
intmonth_days(intyear,intmonth);
//计算若干年的总天数
unsignedintyearsdays(inttoyear);
//计算某个月的总天数
intdays(intyear,intmonth);
//日期换算为秒,用于排序
unsignedintData2Sec(USEDATA*DataIn);
//判断日期逻辑是否正确
intisDataNumRight(intYearIn,intMonthIn,intDayIn);
//判断日期是否正确
intisDataRight(char*DataIn,int*YearOut,int*MonthOut,int*DayOut);
//调用系统时间,给结日期结构体添加时间
voidsystime(USEDATA*Data4Time);
//客户编号验证
intisIDexist(intIDin);
/*******存款、取款、查询相关函数*****/
//存取款
voidDeposit_Withdraw(intActClass);
//信息查询
intInfoFind(intActClass,intInfoClass);
//寻找插入点
RECORDS*InPoint();
//将存取款记录按照日期排序
voidtoorder();
//增加存取款记录
intInOut(intIDin,doubleActNum,USEDATA*ActData,intActClass);
//ID、姓名、地址、电话查询结构体数组id
intFind(intIDin,char*NameIn,char*AddressIn,intTelNumIn);
//存取款记录和余额查询并输出
intFindOutPut(intIDin,char*NameIn,char*AddressIn,intTelNumIn,intactclass);
//退出
voidexit0();
2)全局变量
1、用于存储正确的日期信息的结构体USEDATARightData;
2、用于存储客户信息的结构体数组CUSTOMcustomer[5];
3、用于存储存取款记录的链表的指针RECORDS*head=NULL,*p1=NULL,*p2=NULL;
3)主要模块的实现
系统以intmain()为入口,首先调用voidstartvalue()函数进行初始化,并显示欢迎信息。
接着,按照用户的要求,调用voidDeposit_Withdraw()函数进行存取款的操作,或者调用intInfoFind()函数进行信息的查询。
不管还是存取款还是信息查询,都需要调用voidInPut()函数进行输入信息的输入。
存取款功能还会调用日期审查函数intisDataRight()对日期进行审查。
通过审查之后,会调用intInOut()函数添加存取款记录,并修改账户余额。
最后调用voidexit0()函数退出。
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
唐僧
东土大唐
1000000
8888888
2
孙悟空
花果山
88888881
100000
8888888
3
猪八戒
高老庄
88888882
10000
8888888
4
沙和尚
流沙河
1000
8888888
5
佛祖
西天
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.程序源代码
/*
*************************************
*简易银行信息管理系统*
*作者:
朱鹏*
*指导老师:
张吴波田漫柳*
*************************************
*/
/**************************************头文件**************************************/
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(structrecords)
/**************************************记录修改标记************************************/
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为头指针,p1,p2为链表操作指针
RECORDS*head=NULL,*p1=NULL,*p2=NULL;
/**************************************函数声明**************************************/
//初始化
voidstartvalue();
//头部信息
voidSysTitle();
//一级菜单
intmenu();
//二级菜单
intmenu2(intInfoClass);
//输入函数
voidInPut(char*cbox,int*ibox,double*money,intInPutClass,char*boxname);
/***************************************日期时间相关函数***************************************/
//将字符型的日期转换为整型,并分离出年月日
voidChar2Int(char*DataIn,int*YearOut,int*MonthOut,int*DayOut);
//判断是否为闰年
intleap(intyear);
//计算某年某月的天数
intmonth_days(intyear,intmonth);
//计算若干年的总天数
unsignedintyearsdays(inttoyear);
//计算某个月的总天数
intdays(intyear,intmonth);
//日期换算为秒,用于排序
unsignedintData2Sec(USEDATA*DataIn);
//判断日期逻辑是否正确
intisDataNumRight(intYearIn,intMonthIn,intDayIn);
//判断日期是否正确
intisDataRight(char*DataIn,int*YearOut,int*MonthOut,int*DayOut);
//调用系统时间,给结日期结构体添加时间
voidsystime(USEDATA*Data4Time);
//客户编号验证
intisIDexist(intIDin);
/***************************************存款、取款、查询相关函数***************************************/
//存取款
voidDeposit_Withdraw(intActClass);
//信息查询
intInfoFind(intActClass,intInfoClass);
//寻找插入点
RECORDS*InPoint();
//将存取款记录按照日期排序
voidtoorder();
//增加存取款记录
intInOut(intIDin,doubleActNum,USEDATA*ActData,intActClass);
//ID、姓名、地址、电话查询结构体数组id
intFind(intIDin,char*NameIn,char*AddressIn,intTelNumIn);
//存取款记录和余额查询并输出
intFindOutPut(intIDin,char*NameIn,char*AddressIn,intTelNumIn,intactclass);
//退出
voidexit0();
/**************************************主函数**************************************/
/*
功能:
调用各个子函数完成功能
输入:
无
返回:
无
*/
intmain()
{
intcurID=0,curTel=0;
doublecurMoney=0;
charInPutData[20]={0},curName[20]={0},curAddress[1024];
//客户名单初始化
startvalue();
while
(1)
{
switch(menu())
{
case1:
//存款
system("cls");
Deposit_Withdraw
(1);
break;
case2:
//取款
system("cls");
Deposit_Withdraw(-1);
break;
case3:
//余额查询
system("cls");
if(InfoFind(0,3)!
=-1)
{
printf("\t\t查询完成!
按任意键继续!
");
getch();
}
break;
case4:
//存款记录查询
system("cls");
if(InfoFind(1,4)!
=-1)
{
printf("\t\t查询完成!
按任意键继续!
");
getch();
}
break;
case5:
//取款记录查询
system("cls");
if(InfoFind(-1,5)!
=-1)
{
printf("\t\t查询完成!
按任意键
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 银行 账户 信息管理 系统 正版