2008-2009学年度第二学期XXXX学院数学与计算机科学学院《算法与数据结构课程设计》综合设计报告课程设计名称:银行业务管理模拟专业:计算机科学与技术班级:0X计本(X)班学号:0X0X030XX姓名:高XX指导教师:肖XX《算法与数据结构课程设计》综合设计报告第2页共24页课程设计报告设计项目编号01名称银行业务管理模拟实验课时5主要仪器设备PC机附属设备优盘主要使用软件Win-TC实验时间2009年3月-5月1.问题的描述和分析商业银行业务模拟是对商业银行柜面业务进行模拟实习课程。随着金融业和信息技术的不断发展,银行的管理也已经和计算机接轨,实现了信息的数字化管理,了解并掌握商业银行柜台,周期业务的实际操作处理方法,了解现今商业银行综合业务系统的软件应用,着重于对学生实际操作能力的训练,使学生能初步具备工作岗位的适应各个业务的编程操作能力。多了解各行业编程需求,减少学生踏上工作岗位的适应磨合时间,提高就业竞争力,突出应用型人才的培养目标。下面我将对现行银行业务管理进行小部分模拟设计。◆写一个上述银行业务管理系统,能够实现一些常用功能,如:制卡,发卡,存款,取款。用于对用户信息进行管理,并能进行修改,查找,显示,求和等操作。2.算法的设计概要设计:◆建立银行卡管理系统,该系统的主要模块为:(1)实现系统内制卡、发卡功能;(2)实现系统内帐户和相关帐户管理;(3)实现卡交易和合法性检查;(4)实现卡金融交易积分功能;发卡制卡取款存款报表消费查找记录改密退出银行业务管理模拟统《算法与数据结构课程设计》综合设计报告第3页共24页(5)实现卡报表功能;(6)数据以文件形式存储在编辑过程中,需要使用串,查找等算法,同时需要对输入的信息进行存储。在制卡发卡后,对用户的信息进行查找,并显示出来。voidload(){FILE*fp1;if((fp1=fopen(c://user.txt,r))==NULL){printf(\nCannotopenthefile\n);exit(0);}for(N=0;!feof(fp1);N++){fscanf(fp1,%d%s%s%s%f%d%d,&u[N].cardNO,u[N].name,u[N].adnum,u[N].code,&u[N].left,&u[N].exp,&u[N].flag);return(N);}fclose(fp1);}3.数据结构的设计串是非数值处理中的主要对象,我们一般用串来表示字符流。而这个程序中要处理的就是银行类的字符流,所以我们需要用到串来实现这一功能。串的存储表示有三种形式,第一种是定长顺序存储结构。第二种是块链式存储结构。第三种是堆分配存储结构。在这里,我们采用串的第一种存储方式——定长顺序存储,而在程序编译时,要给出确定的空间大小,所以我们将串的空间大小设计为100个字符。#defineMAXSIZE100结构体定义如下:structuseru[]/*信用卡结构体*/{intcardNO;/*卡数*/charname[20];/*姓名*/charadnum[22];/*信用卡号*/charcode[8];/*密码*/floatleft;/*余额/存款*/intexp;/*消费*/intflag;/*确定是新卡还是旧卡*/}u[M];《算法与数据结构课程设计》综合设计报告第4页共24页4.具体程序的实现首先是系统内的制卡功能:是否有19位NY记录中卡号Y是否已经存在调函数N根据实际对密码等赋初值#includestdio.h#includedos.h#includestdlib.h#includestring.h#defineM100/*定义的数组上限*/intN;/*结构体数组下标量*/intH;/*帮助确定是否保存文件*/structuseru[]/*信用卡结构体*/{intcardNO;/*卡数*/charname[20];/*姓名*/charadnum[22];/*信用卡号*/charcode[8];/*密码*/floatleft;/*余额/存款*/intexp;/*消费*/intflag;/*确定是新卡还是旧卡*/}u[M];用户输入一个申请的卡号错误重新输入卡号已经存在需要重新输入回菜单《算法与数据结构课程设计》综合设计报告第5页共24页5.界面设计本程序的主控菜单如下:1.申请一个卡号2.使用这个卡号3.打印消费记录4.存款功能5.取款功能6.消费功能7.报表功能8.查找消费记录9.修改密码intmenu(void){intx;do{printf(\t\t*******************menu************************\n);printf(\t\t||(1)Applyforoneblankcard||\n);printf(\t\t||(2)Useoneblankcard||\n);printf(\t\t||(3)Printtherecord||\n);printf(\t\t||(4)Storethemoney||\n);printf(\t\t||(5)Fetchthemoney||\n);printf(\t\t||(6)Spendthemoney||\n);printf(\t\t||(7)Savethefile||\n);printf(\t\t||(8)Searchtherecord||\n);printf(\t\t||(9)Changethepassward||\n);printf(\t\t||(0)quitthesystem||\n);printf(\t\t\tPleaseinputyourchoice(0-10):()\b\b\b);scanf(%d,&x);if(x0||x10){printf(\t\t\tError!Inputagain.);}}while(x0||x10);return(x);}(1).制卡《算法与数据结构课程设计》综合设计报告第6页共24页voidmake(structuseru[]){inti;chara[22];load();/*读取文件中的可用空卡条数*/do{printf(\n\nEntertheADnumberofthecard:\n);scanf(%s,a);if(strlen(a)!=19){printf(\n\n\n\t\t****MistakenID,pleaseenteragain*********\n\n);continue;}for(i=0;iN;i++)if(strcmp(u[i].adnum,a)==0){printf(\n\n\t\t***TheADnumberexists,pleaseenteragain***\n\n);break;}}while(((strlen(a))!=10)||strcmp(u[i].adnum,a)==0);u[N].cardNO=N;strcpy(u[N].name,***);strcpy(u[N].adnum,a);strcpy(u[N].code,000000);u[N].flag=-1;u[N].left=0.00;u[N].exp=0;N++;H=1;printf(\n\n\n\t\t*************Successfullyapplied!*************\n\n);printf(\n\n\tPressanykeytoreturn.....\n\n);getchar();}其中voidload(){FILE*fp1;if((fp1=fopen(c://user.txt,r))==NULL){printf(\nCannotopenthefile\n);《算法与数据结构课程设计》综合设计报告第7页共24页exit(0);}for(N=0;!feof(fp1);N++){fscanf(fp1,%d%s%s%s%f%d%d,&u[N].cardNO,u[N].name,u[N].adnum,u[N].code,&u[N].left,&u[N].exp,&u[N].flag);return(N);}fclose(fp1);}使用该程序,要现在c盘建立一个名为user.txt的文件。(2)发卡:voiddeliever(structuseru[]){{inti;chara[20];floatb;charcode2[8];for(i=0;i=N;i++)if(u[i].flag==-1)/*-1是新申请的卡特有的值*/{printf(\n\n\t\t1.Pleaseenteryourname:);scanf(%s,a);strcpy(u[i].name,a);printf(\n\t\t2.Code:);scanf(%s,u[i].code);printf(\n\t\t3.Codeagain:);scanf(%s,code2);while(stricmp(u[i].code,code2)!=0)/*输入的密码两次应该相同*/{printf(Yourtwocodesarenotidentical,pleaseinputthemagain!);printf(\n\t\t\tCode:);scanf(%ld,&u1.code);printf(\n\t\t\tCodeagain:);scanf(%ld,&code2);}strcpy(u[i].code,a);printf(\n\n\t\tThemoneyyouwanttostore:);scanf(%f,&b);《算法与数据结构课程设计》综合设计报告第8页共24页printf(\n\n);u[i].left=b;u[i].flag=1;/*1是使用的卡特有的值*/H=1;printf(\n\n\t\t*********Youcanusethecard!Congratulations!*********\n\n);printf(\n\n\t\tPressanykeytoreturn.....\n\n);getchar();break;}if(iN){printf(\n\n\n\t\t**************Havenofreecard,pleasemakeone!***************\n\n);printf(\n\n\tPressanykeytoreturn.....\n\n);getchar();}}流程:输入姓名两次密码确定值相同之后存入一定金额就可以使用信用卡了(3).取款voidfetch(structuseru[]){floatmoney;/*money要取的数目*/inti,j=0;/*j记录同名的人数*/intlogic=0,account=0;/*logic记录是否在文件中找到使用者信息accout记录输入密码次数上限为3次*/intnum[10];/*记录同名的人在文件中的位置即条数*/chara[20],b[6];printf(\n\n\t\tPleaseinputyourname:);scanf(%s,a);for(i=0;i=N;i++)if(strcmp(u[i].name,a)==0){num[j]=i;/*查找是第几条记录*/j++;}if(j==0)printf(\n\n\t\t*********Cannotfindtherecordoftheperson%s!*********\n\n,a);if(j1){printf(\n\nEntertheADnumberofthe《算法与数据结构课程设计》综合设计报告第9页共24页card:(\t\t)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b);scanf(%s,a);for(i=0;ij;i++)if(strcmp(u[num[i]].adnum,a)==0){logic=1;num[j-1]=num[i];/*把数组中最后一个非零元素赋为正确的信息所在位置*/break;}if(logi