算法设计与分析课程设计.docx
《算法设计与分析课程设计.docx》由会员分享,可在线阅读,更多相关《算法设计与分析课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
算法设计与分析课程设计
数据结构课程设计
题目活期储蓄账目管理
系(部)电子与信息工程系
班级13级计算机科学与技术
姓名*****
学号******
指导教师****
2014年06月07日
电子与信息工程系
活期储蓄账目管理课程设计任务书
设计题目
活期储蓄账目管理
已知技术参数和设计要求
活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:
1、能比较迅速地找到储户的帐户,以实现存款、取款记账;
2、能比较简单,迅速地实现插入和删除,以实现开户和销户的需要
设计内容与步骤
1、结点结构的设计
2、算法设计与分析
3、程序设计、实现、调试
4、课程设计说明书
设计工作计划与进度安排
1、设计工作4学时
2、实现与调试16学时
3、课程设计说明书8学时
设计考核要求
1、考勤30%
2、课程设计说明书70%
计算机教研室制
活期储蓄账目管理
***
安康学院计算机科学与技术13级陕西省安康市725000
摘要:
活期储蓄账目管理系统通过数组来存储数据结构,其结构则按照C语言的相关知识定义结构体,其中储户开户、销户就是实现数组的插入与删除,而存入、支出等活动则是实现数组中数的查找,然后进行更改。
关键字:
编码;存储;活期储存账目管理
Abstract:
Savingsaccountsmanagementsystemthroughthelisttostorethedatastructure,thestructureinaccordancewiththedefinitionoftherelevantknowledgeofClanguagestructure,whichdepositoraccount,canceltheaccountistorealizetheinsertanddeletethelist,whiledeposit,expensesandotheractivitiesareachievinglistnodesinthesearch,andthenmakechanges.
Keyword:
Coding;Storage;DemandStorageaccountmanagement
1引言
随着计算机的普及,现代人越来越多的想到用计算机来代替许多人做的事情。
从而提高办事效率,使经济收入更加可观,从而就产生了计算机这门课程。
随着信息技术的飞速发展,大量信息需要传输,传输信息就要先经过编码,然后再译码,可见编码技术的提高对整个信息产业有着举足轻重的作用。
而计算机主要是通过程序来实现各种事情的,再者程序也必须通过各种算法才能达到存储各种数据,所以数据结构这门课程就应运而生。
本课程设计主要是用数据结构编写关于活期储蓄账目管理的算法,来达到活期储蓄账目管理的目的。
2活期储蓄账目管理
2.1题目分析
活期储蓄管理系统用户通过该系统可以进行存款、取款、销户等业务。
该系统在金融业给人民带来了很大的方便,系统开发成功后,一旦应用于银行领域,会给管理员与用户带来很大的方便,其主要作用具体如下:
1)、可以代替营业员进行许多繁杂的手动操作。
2)、给用户带来了很大的方便。
3)、可以节省许多人力资源。
4)、可以提高人们的工作效率。
活期储蓄账目管理系统主要是由于在活期储蓄处理中,储户开户、销户、存入、支出活动频繁,为实现储户的各种操作而设计的,本课程设计的主要功能包括实现储户开户、销户、存入、支出等活动,为了能比较迅速找到账户,实现这样的几个功能,就要通过数组来存储数据结构,其结构则按照C语言的相关知识定义结构体,其中储户开户、销户就是实现数组的插入与删除,而存入、支出等活动则是实现数组中元素的查找,然后进行更改。
2.2方案分析
在本课程设计的方案设计中,我采用数组作为其存储结构,首先用结构体来定义其数据类型,然后通过数组的相关知识将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,这样就完成了本课程设计的方案设计。
2.3算法分析
对于本课程设计中,主要运用到了数组的相关知识,其主要算法也就来源于数组的相关算法,首先对于储户开户与销户主要是数组的插入与删除,与其主要的区别在于其数据类型不一样而已,在这里我们的数据类型主要是自己定义的类型,还有储户的存入及其支出也就是按照相关条件在数组中进行查找与修改运算而已,故此程序的主要算法都不难。
3概要设计
3.1逻辑结构与物理结构
该存储结构是顺序存储结构,所以逻辑结构与物理结构相对应都是线性的,元素在物理结构中的相对位置来表示数据元素之间的逻辑关系。
3.2数据结构
structp
{
charname[20];
intzhanghao;
intmima;
floatjine;
};
structpa[10000];
3.3各种函数说明
voidb();主菜单函数
voidkaihu();控制开户函数
voidcunkuan();控制存款函数
voidchaxun();控制查询账户函数
voidqukuan();控制取款函数
voidxiaohu();控制销户函数
3.4模块功能分析及其外部设计
开户模块主要是输入需要开户的姓名,然后建立开户账号,提醒输入账号密码。
销户模块则是输入需要销户的账号及其密码,然后从系统中销去些账号的相关记录。
同样存款是根据提醒输入需要登录的账号,然后再输入其密码,之后就可以查看其账号上的相关资料。
取款则是要求登录需要存入及其支出的账号,然后对该账号进行相关的存入及支出。
程序的外部设计主要是通过编写一个菜单功能来实现各个模块功能的调用,从而更好的协调各个模块功能之间的关系,同时还要编写一段代码来实现所有数据更改后将其写入文件中,实现数据的及时更新,维护数据的正确性。
3.5流程图设计
3.5.1主菜单功能模块
图1主菜单
3.5.2储户开户模块
储户输入要想开户的储户输入其姓名及其开户账号的密码,然后显示开户成功,则开户就成功了。
图2开户
3.5.3储户的存入及其支出模块
储户的存取款,首先在登录账户的基础上,选择存或者取款,然后输入相应的金额,若是取款应判断其金额是否小于账户上的金额,如果不小于,则提示储户重新输入相应的金额,或者退出。
图3存款
图4取款
3.5.4储户销户模块
储户输入需要销户的账号,然后程序自动判断该账号是否存在,然后输入账号密码,若账号与密码相对应,则删除该账号。
图5销户
4实现调试与分析
4.1实现环境
该课程设计中程序的实现环境是VISUALC++6.0。
4.2语言选择
本课程设计选用的语言是C语言。
4.3调试分析
经过调试分析解决了程序在储户开户过程中关于储户的账号问题,取款过程中取款金额大于存款金额问题。
同时在调试过程中还遇到了在登录账号后,对账号中选择相应的存款、取款功能时,如果输入与要求不一致可能导致程序直接结束,这就导致了程序更改的数据没有写入文件中,这种无理退出也在程序的调试中给解决了。
5测试分析
5.1测试用例
首先进入VC++6.0,然后进入源程序,接着选择debug文件夹下的cpp1.exe文件即可运行程序。
图5.1菜单界面
从图5.1可以看出程序进入到了活期储蓄账目管理的菜单界面,并且要求你选择相应的功能,当我选择功能1时:
图5.2储户开户
从图5.2可以知道选择功能1后,要求输入开户姓名,并要求我输入账号和密码,按要求输入后,就显示开户成功。
说明开户成功了。
再按enter就返回菜单了。
然后我再选择功能2:
图5.3账号存款及查询金额
从图5.3可以看出程序实现了登录账号存款的功能,并且还可以查询金额,也同时更新了账户内金额的信息。
然后就退出了账号。
返回主菜单选择相应的功能3进行测试:
图5.4账号取款及查询金额
从图5.4可以看出程序实现了登录账号取款的功能,并且还可以查询金额,也同时更新了账户内金额的信息。
然后就退出了账号。
返回主菜单选择相应的功能4进行测试:
图5.5账号查询
从图5.5可以看出程序实现了账户查询的功能,显示此账户所有信息。
然后返回主菜单选择功能5进行测试:
图5.6储户销户
从图5.6可以看出再选择功能5后,就进入储户销户模式,输入要销户的账号及其密码,当显示账号销户成功则表明储户销户成功了。
同样返回主菜单,按6退出此程序。
5.2测试结果
从5.1测试用例中,可以看出该程序实现了程序的各个模块的功能,同时也解决了程序在调试与分析过程中遇到的各种问题。
总之这个程序的各个模块的功能的测试结果合格。
5.3性能分析
该程序能够迅速的进行储户开户以及销户等各项操作,同时程序在储户取款以及存款过程都详尽的描述了各种操作提示,也解决了程序在不按要求输入时可能造成的情况进行了适当的处理。
可见此课程设计的性能较好。
6结语
通过本次账目管理系统课程设计,实现了银行活期储蓄账目的存储及其管理。
能比较迅速地找到储户的账户,以实现存款、取款记账。
同时也能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
本课程设计好的地方就在于对用户不按要求输入造成程序出错的问题进行了有效的处理,该情况不会造成该系统的崩溃,虽然以前没有做过课程设计,但是经过自己自行学习了方面相应的知识,成功完成了此次的课程设计。
本课程设计还未完成之前还存在一些小问题,那就是程序再进行取款时,出现了取款数目大于存款数目的问题,经过修改和完善,终于解决了这个小问题,使用户操作的结果都合乎实际,保证了此程序的有效性和合理性。
参考文献:
[1]唐发根.数据结构教程[M].北京:
北京航空航天大学出版社,2009
[2]谭浩强.C程序设计(第4版)[M].北京:
清华大学出版社,2010
附件:
#include"stdio.h"
#include"stdlib.h"
voidb();
voidkaihu();
voidcunkuan();
voidqukuan();
voidchaxun();
voidxiaohu();
intq=0,count1=0,u=0,r=0;
structp
{
charname[20];
intzhanghao;
intmima;
floatjine;
};
structpa[10000];
voidmain()
{
system("color0f");
intl,k;
printf("\t|※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※中国银行※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※欢迎您的使用!
※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※※|\n");
printf("\t|※∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴∴※|\n");
printf("\t|※※|\n");
printf("\t|※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※|\n");
printf("\n");
printf("\n");
printf("\t\t\t请稍后,正在检测运行环境...\n");
for(l=0;l<80;l++)
{
for(k=0;k<9000000;k++)
{
if(k<9000000)
{
}
}
printf(">");
}
printf("\t\t\t检测完成请按回车键进入系统");
getchar();
system("cls");
b();
}
voidb()
{
intx;
do
{
printf("==================================主菜单========================================\n");
printf("\t\t\t1.开户:
\n");
printf("\t\t\t2.存款:
\n");
printf("\t\t\t3.取款:
\n");
printf("\t\t\t4.查询:
\n");
printf("\t\t\t5.销户:
\n");
printf("\t\t\t6.退出:
\n");
printf("请输入你您要办理的业务:
");
scanf("%d",&x);
if(x==6)
break;
switch(x)
{
case1:
kaihu();break;
case2:
cunkuan();break;
case3:
qukuan();break;
case4:
chaxun();break;
case5:
xiaohu();break;
default:
printf("\a\a\t\t\t请在1~6中选择\n");break;
}
}while
(1);
}
voidkaihu()
{
intx,y;
system("cls");
printf("==================================开户========================================\n");
printf("请输入用户名:
");
scanf("%s",&a[q].name);
printf("请输入账号:
");
scanf("%d",&a[q].zhanghao);
printf("请输入密码(至多6位数):
");
scanf("%d",&x);
printf("请再次输入密码:
");
scanf("%d",&y);
if(x!
=y)
{
printf("\t\t两次密码输入不正确,请返回主页重新注册开户...");
fflush(stdin);
getchar();
system("cls");
b();
}
a[q].mima=x;
printf("请输入存款金额:
");
scanf("%f",&a[q].jine);
printf("你的帐户信息如下:
\n");
printf("\t\t\t用户名:
%s\n",a[q].name);
printf("\t\t\t帐号:
%d\n",a[q].zhanghao);
printf("\t\t\t密码:
%d\n",a[q].mima);
printf("\t\t\t余额:
%0.2f\n",a[q].jine);
q++;
printf("\t\t\t按回车回主菜单\n");
fflush(stdin);
getchar();
system("cls");
}
voidcunkuan()
{
intcount=0;
system("cls");
printf("==================================存款========================================\n");
intx;
inty;
inti;
floatz;
printf("请输入帐户名:
");
scanf("%d",&x);
printf("请输入密码:
");
scanf("%d",&y);
for(i=0;i{
if(a[i].zhanghao==x&&a[i].mima==y)
//if(x==1&&y==2)
{
printf("请输入您要存款的金额:
");
scanf("%f",&z);
a[i].jine=a[i].jine+z;
printf("现在的金额是%f",a[i].jine);
fflush(stdin);
printf("\t\t\t按回车回主菜单\n");
getchar();
system("cls");
}
else{
printf("\t\t\t你输入的密码或帐户名有误\n");
fflush(stdin);
printf("\t\t\t按回车回主菜单\n");
getchar();
system("cls");
b();
count++;
if(count==3)
{
printf("\t\t\t由于你连续3次输入错误。
系统自动退出...");
}
}
}
}
voidqukuan()
{
intcount=0;
system("cls");
printf("==================================取款========================================\n");
intx;
inty;
inti,l,k;
floatz;
printf("请输入帐户名:
");
scanf("%d",&x);
printf("请输入密码:
");
scanf("%d",&y);
for(i=0;i{
if(a[i].zhanghao==x&&a[i].mima==y)
{
printf("请输入你要取款的金额:
");
scanf("%f",&z);
if(a[i].jine{
fflush(stdin);
printf("\t\t\t对不起您的帐户余额不足,系统拒绝透支\n\t\t\按回车回主菜单\n");
getchar();
system("cls");
b();
}
a[i].jine=a[i].jine-z;
printf("\t\t\t系统正在为您办理\n\t\t\t请稍后....\n");
for(l=0;l<80;l++)
{
for(k=0;k<10000000;k++)
{
if(k<10000000)
{
}
}
printf(">");
}
printf("\n\n\t\t\t请在30秒内取出\n");
printf("\t\t\t您本次取款%f元\n",z);
printf("\t\t\t现在的金额是%f\n",a[i].jine);
fflush(stdin);
printf("\t\t\t按回车回主菜单\n");
getchar();
system("cls");
b();
}
}
printf("\t\t\t你输入的密码或帐户名有误\n");
fflush(stdin);
printf("\t\t\t按回车回主菜单\n");
getchar();
system("cls");
b();
r++;
if(r==3)
{
printf("\t\t\t由于你连续3次输入错误。
系统自动退出...");
}
}
voidchaxun()
{
system("cls");
printf("==================================查询========================================\n");
inti;
for(i=0;i{
printf("\n\n第%d个用户:
\n",i+1);
printf("\t\t\t用户名:
%s\n",a[i].name);
printf("\t\t\t帐号:
%d\n",a[i].zhanghao);
printf("\t\t\t帐户余额:
%0.2f\n",a[i].jine);
}
fflush(stdin);
printf("\t\t\t按回车回主菜单");
getchar();
system("cls");
b();
}
//===========================销户=======================================
voidxiaohu()
{
inti,x,y,m,j;
//这里的COUNT也是全局变量,没有办法。
这个IF判断是也是用来锁定改密功能的
if(count1==3)
{
system("cls");
printf("\t\t改密功能暂时锁定,请选择其他你要办理的业务\n\t\t无须办理其他业务,请回到主菜单后选择退出\n\n\n");
fflush(stdin);
printf("\t\t\t按回车回主菜单");
getchar();
system("cls");
b();
}
system("cls");
if(count1==3)
{
fflush(stdin);
printf("\t\t温馨提示,改密功能以锁定\n\t\t给你带来的不便请谅解\n");
printf("\t\t\t按回车回主菜单");
getchar();
system("cls");
b();
}
printf("==================================销户========================================\n");
printf("请登陆:
\n");
printf("\t\t\t请输入帐号");
scanf("%d",&x);
if(a[0].zhanghao==0)
{
system("cls");
printf("请先开户,请按回车返回主菜单\n\n\n");
fflush(stdin);
getchar();
system("cls");
b();
}
for(i=0;i{
if(x!
=a[i].zhanghao)//判断帐号是否存在
{
fflush(stdin);
system("cls");
printf("你输入的帐号不存在,请按回车返回主菜单\n\n\n");
getchar();
system("cls");
b();
}
if(x==a[i].zhanghao)//这个IF判断不可以用ELSE代替
{
j=i;
break;
}
}
printf("\t\t\t请输入密码");
scanf("%d",&y);
if(y!
=a[j].mima)
{
count1++;//同上
fflush(stdin);
system("cls");
printf("\t\t你输入的密码错误,请按回车返回主菜单\n\n\n");
printf("\t\t温薪提示,错误输入3次将无法使用销户功能\n");
printf("\t\t\t给你带来的不便请谅解");
getchar();
system("