C语言课程设计报告银行账户信息管理系统更正版Word文件下载.docx
《C语言课程设计报告银行账户信息管理系统更正版Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告银行账户信息管理系统更正版Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
设计一程序,完成以下功能。
存、取款时间必须通过调用系统时间获得。
1)存款:
输入客户编号、存款金额、存款日期,完成存款功能,需要判断客户编号是否存在,存款金额是否大于0,存款日期格式是否合法(格式为:
YYYY-MM-DD,如2009-01-02))。
2)取款:
输入客户编号、存款金额、取款日期,完成取款功能,需要判断客户编号是否存在,取款金额是否大于0,取款金额是否小于客户的账户总金额,取款日期格式是否合法(格式为:
3)查询指定客户的余额
4)查询指定客户的存款记录
5)查询指定客户的取款记录
6)所有数据符合实际应用要求
运行环境
1)Windows7系统
2)VC++编译环境
开发工具
C语言
3.总体设计
系统流设计
程序整体功能结构如图一所示:
系统模块设计
1)系统初始化模块函数voidstartvalue();
实现初始化欢迎信息,并实现值得初始化。
2)菜单模块函数intmenu();
和intmenu2();
分别实现一级二级菜单显示,一级菜单是主菜单,二级菜单是输入菜单,并返回相应的选项值。
3)存取款模块函数voidDeposit_Withdraw();
实现存取款的功能,其中会使用相关其他函数共同实现。
4)信息查询模块函数intInfoFind();
实现信息的查询功能,包括账户余额查询,存取款历史记录查询。
5)日期审查模块函数intisDataRight();
实现对日期的审查,其中同样会调用其他函数辅助实现。
4.详细设计
数据结构设计
根据系统要求,用户信息包括:
数据项名称
数据项系统表示
数据类型
数据长度
备注
客户编号
P1->
id
整型
8
客户姓名
name
字符串
10
客户地址
address
1024
客户电话
telnum
账户余额
account
双精度
16
账户密码
password
根据系统要求,日期信息包括:
年
year
月
month
日
day
时
hour
系统自动添加
分
min
秒
sec
根据系统要求,存取款记录包括:
日期信息
InOutData
结构体
48
存取款类型
ActionClass
存取款金额
ActionNum
为了能实现系统的优越性和c语言的精华采用链表的建立取款记录表,示意图如下。
模块接口设计
1)所有函数声明
行结果
欢迎界面
主菜单
次菜单-信息输入界面
信息查询界面
记录查询界面
退出界面
6.程序调试与测试
测试数据:
1
唐僧
东土大唐
1000000
8888888
2
孙悟空
花果山
100000
3
猪八戒
高老庄
10000
4
沙和尚
流沙河
1000
5
佛祖
西天
主菜单选择测试
若用户输入错误选项,则如图显示:
次菜单选择测试
客户信息的输入测试
1)若输入了不存在的客户编号:
2)若输入了不存在的客户姓名:
3)若输入了不存在的客户地址:
4)若输入了不存在的客户电话:
客户密码测试
1)密码输入错误:
2)密码错误三次:
存取款金额测试
1)金额为负值:
2)取款金额大于账户余额:
存取款日期测试
1)若输入错误格式的日期:
2)若输入正确格式的日期,但是日期不符合实际:
7.问题与不足
1、需求分析中存在的为题
题目中说只有5个用户,而且没有对账户信息进行修改等操作,如果对账户信息的增删改三个功能,程序会更加完美。
2、程序设计中的缺陷
存取款的时候,给系统添加记录的时候,会同时进行排序,排序方法用的是排序,排序方法比较简陋,数据量较大的时候会比较耗时间。
8.建议
课程设计的题目涉及范围应该更广。
对于课设的时间按排,可以提前把题目给学生,这样可以提前做课设以及复习考试。
程序设计的功能应相对更加复杂一点,这样有利培养同学们的分析问题,解决问题的能力,同时也能提高同学们对代码的掌握能力。
再者,就是题目,尽量少给一些提示,这样同学们可以更大程度的自己动脑子考虑怎解决问题。
9.编程体会
经历了编c语言课程设计后,我弄懂了在前几周课堂上没搞明白的东西,例如,链表的建立,排序,遍历等等。
也提高了自己对指针的熟练度。
以前就听说对指针的掌握程度决定了一个人的编程水平。
所以,虽然写程序的过程中,遇到各种问题,调试的时候也是遇到各种令人头大的问题,但能借助课程设计提高自己对指针的熟练度,提高自己对c语言编程的熟练度,我还是觉得很开心的,也希望学校可以多开设一些这样的课程,既是让我们对自己所学知识的一个综合理解与使用,也可以提高我们的动手实践能力、对知识的运用能力。
10.程序源代码
/*
*************************************
*简易银行信息管理系统*
*作者:
朱鹏*
*指导老师:
张吴波田漫柳*
*/
/**************************************头文件**************************************/
#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
USEDATAInOutData;
intActionClass;
doubleActionNum;
structrecords*next;
}RECORDS;
;
}
system("
cls"
);
gotostart;
}
printf("
\t\t\t亲~恭喜哦!
初始化成功了哦~\n"
\t\t\t按任意键进入系统了哦~~"
getch();
fflush(stdin);
return;
}
/**************************************头部信息**************************************/
/*
功能:
显示程序头部信息
输入:
无
返回:
voidSysTitle()
system("
title简易银行信息管理系统By朱鹏"
\n\n"
\t\t▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\n"
\t\t▉※※※※※※※※欢迎使用※※※※※※※※▉\n"
\t\t▉※※※※※简易银行信息管理系统※※※※※▉\n"
\t\t▉※※※※※※※※※※※※※※※※※※※※▉\n"
/**************************************一级菜单**************************************/
显示主菜单,并完成菜单的选择
选择的菜单序号[整型]
intmenu()
intx;
SysTitle();
\t\t▉▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▉\n"
\t\t▉主菜单▉\n"
\t\t▉▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▉\n"
\t\t▉▉\n"
\t\t▉1、存款▉\n"
\t\t▉2、取款▉\n"
\t\t▉3、查询余额▉\n"
\t\t▉4、查询存款记录▉\n"
\t\t▉5、查询取款记录▉\n"
\t\t▉6、退出▉\n"
\t\t亲~输入数字1~6就能使用对应的功能了哦:
"
do{
fflush(stdin);
scanf("
%d"
&
x);
if(x<
1||x>
6)
printf("
\t\t亲~您的输入有误哟~请重新输入:
}while(x<
6);
returnx;
/**************************************二级菜单**************************************/
显示二级菜单,并完成菜单的选择
操作类型[整型]
intmenu2(intInfoClass)
charInfoName[20]={0};
switch(InfoClass)
{
case1:
strcpy(InfoName,"
存款"
);
break;
case-1:
取款"
case3:
余额"
case4:
存款记录"
case5:
取款记录"
\t\t▉%s--用户信息查询\t▉\n"
InfoName);
\t\t▉1、输入客户编号查询(1~5)▉\n"
\t\t▉2、输入客户姓名查询▉\n"
\t\t▉3、输入客户地址查询▉\n"
\t\t▉4、输入客户电话查询▉\n"
\t\t▉0、返回▉\n"
\t\t亲~输入数字0~4就能使用对应的功能了哦:
0||x>
4)
4);
/**************************************输入函数**************************************/
显示需要输入的内容,并在给定的地址中赋值
输入对应功能
char*cbox存放字符串输入内容
int*ibox存放整型数据
double*money[金额]存放双精度数据[金额]
char*boxname输入信息的名字
voidInPut(char*cbox,int*ibox,double*money,intInPutClass,char*boxname)
\t\t请输入%s:
boxname);
if(InPutClass==1)d)
{
return1;
d;
if(IDNum==-1&
&
isIDexist(curID)==0)
{
printf("
\t\t亲~你输入的用户不存在哦\n"
\t\t按任意键继续"
getch();
}
}while(IDNum==-1&
isIDexist(curID)==0);
assword)
\t\t密码错误了哦亲~\n"
if(count>
=2)
\t\t密码错误了三次了哦亲~\n"
\t\t按任意键返回系统吧~"
return-1;
count++;
}while(curPassword!
=customer[IDNum].password);
FindOutPut(curID,curName,curAddress,curTel,ActClass);
returncurID;
}
*功能:
寻找插入点
*输入:
*返回:
插入点地址
RECORDS*InPoint()
RECORDS*Point=NULL;
if(head==NULL)ccount<
0)
free(p1);
return0;
customer[IDin].account+=ActClass*ActNum;
d==IDin)
||(NameIn!
=NULL&
strcmp(NameIn,customer[i].name)==0)
||(AddressIn!
strcmp(AddressIn,customer[i].address)==0)
||(TelNumIn==customer[i].telnum))
returni;
break;
if(i>
=5)
return-1;
/**************************************存取款记录和余额查询并输出**************************************/
存取款记录和余额查询并输出
*输入对应功能
*intIDin客户编号
*char*NameIn客户姓名
*char*AddressIn客户地址
*intTelNumIn客户电话
*intactclass操作类型0余额-1取款记录1存款记录
查询失败0/成功1[整型]
intFindOutPut(intIDin,char*NameIn,char*AddressIn,intTelNumIn,intactclass)/*查询*/
lf\t\t%s\t\t%d-%d-%d%d:
%d:
%d\n"
p1->
id,customer[IDNum].name,p1->
ActionNum,(actclass==1)"
:
p1->
}
elseif(actclass==0)
\t客户编号姓名\t家庭住址\t联系号码\t账户余额\n\n"
\t%d\t%s\t\t%4s\t%d\t%.2lf\n\n"
IDin,customer[IDNum].name,customer[IDNum].address,customer[IDNum].telnum,customer[IDNum].account);
return1;
/**************************************退出**************************************/
释放链表,保存信息,退出
voidexit0()
charx;
\n\n\n"
\t\t▉▉\n"
if(RecorsChanged==1)
do
\t\t存取款记录已经修改过,但还没有保存!
\n"
\t\t是否先保存(Y/N)"
scanf("
%c"
fflush(stdin);
if(!
(x=='
Y'
||x=='
N'
y'
n'
))
\t\t输入有误!
}while(!
));
if(x=='
)
if((fp=fopen("
"
w"
))==NULL)
\t\t文件打开错误!
else
for(p1=head;
p1->
next!
=NULL;
p1=p1->
next)
fprintf(fp,"
%d\t%lf\t%d\t%d\t%d\t%d\t%d\t