分享
分销 收藏 举报 申诉 / 25
播放页_导航下方通栏广告

类型数据结构课程设计--活期储蓄账目管理.doc

  • 上传人:w****g
  • 文档编号:3991012
  • 上传时间:2024-07-24
  • 格式:DOC
  • 页数:25
  • 大小:72.54KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数据结构 课程设计 活期 储蓄 账目 管理
    资源描述:
    《软件技术基础》课程设计 活期储蓄账目管理 一 目的 满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求。 ①能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账; ②能比较简单,迅速地实现插入和删除,以实现开户和销户的需要; ③熟练使用 C 语言编写程序,解决实际问题; 学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 二 需求分析 1、数据需求 1。需先进行储户开户才可进行之后的所有的操作。 2。开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成. 3。销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账号及密码验证后方可进行交易。 2、基本功能需求 基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步也可看见交易后的信息)、显示所有储户信息. 3、 非功能性需求 系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。 三 概要设计 1、数据结构设计 用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,采用数组类型的存储结构。 2、储存结构体设计 本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统"中的信息。其中,结构体由5个分量构成:用户账号、用户姓名、用户身份证号码、用户密码、开户金额。 3、 模块设计 活期储蓄账目管理 显示菜单 选择功能 1.新建储户 2.查询储户信息 3.显示所有储户信息 4.删除储户 5.存款 6.取款 7.退出账目管理。 void add()函数实现新建储户功能 void select_id()函数实现查询储户信息功能 void display()函数实现显示所有储户信息功能 void del()函数实现删除储户功能 void save_money() 函数实现存款功能 void get_money()函数实现取款功能 void print()函数用于显示菜单 void main()函数用于实现菜单中的功能 四 详细设计 1、结构体的详细定义 struct user //用户类型(账号,姓名,身份证号,存款) { int id; char name[20]; char person_num[19]; char password[6]; double money; }; 2、系统函数详细介绍 void add()函数实现新建储户功能 void add() //添加用户 { printf("%45s\n”,”***新建储户***"); printf("---———--————-—-——-———--————--—-——----——-——-———--———————-——----——-——-—--————-————\n\n"); struct user getuser(); struct user temp; int count(); //函数目的:计算文件中的记录数目 以生成自动账号 FILE *fp; int number; if((fp=fopen(file,”ab”))==NULL) { printf("Can not open file!\n”); exit(1); } temp=getuser(); //读取用户名 number=count(); temp。id=number+1; //生成自动账号 fwrite(&temp,sizeof(struct user),1,fp); printf(”添加用户成功!\n”); fclose(fp); } void select_id()函数实现查询储户信息功能 void select_id() //查询储户信息 { int count(); void getpassword(char *password); printf("%45s\n”,”***查询储户信息***”); printf("—-------——--——-—-—-———-———--—--——-————---————-——----——-—-—-——-—-—--—————-—-—-———\n”); printf(”%s %15s %15s %15s\n”,”编号”,”用户姓名”,"身份证号码”,”存款余额”); printf(”—--—-————--—-—-—————-—-————————---——----——--——-———-——-—--—-——-——-————————-—-——-—\n\n"); FILE *fp; struct user temp; int i,maxnum; char password[8]; bool flag=false; if((fp=fopen(file,”rb"))==NULL) { printf("cannot open file!\n"); exit(1); } maxnum=count(); printf("输入要查询账号:"); scanf(”%d",&i); if(i〈i||i>maxnum) { printf(”你要查询的账号不存在!”); return; } printf(”输入账号密码:”); scanf("%s",&password); while(fread(&temp,sizeof(struct user),1,fp)) //循环读取每一条记录 判断是否为要查看的记录 { if(temp。id==i&&strcmp(temp。password,password)==0) { printf("NO.%d %8s %25s %。2f\n”,temp。id,temp。name,temp。person_num,temp.money); flag=true; break; } } if(flag==false) //判断密码是否正确 { printf(”您输入的密码不正确!\n"); return; } fclose(fp); } void display()函数实现显示所有储户信息功能 void display() //显示所有储户信息 { printf(”%45s\n”,"***显示所有储户信息***”); printf(”-——--——-—-—-————-—-—————---——-—--——————--—-———--—--——---——————-----——-—-—-—-——--\n"); printf(”%s %15s %15s %15s\n”,”账号”,”用户姓名",”身份证号码”,"存款余额"); printf("———-—--——-—----—-—-—-——----—-—-—--—--—-—-—--—---——————--——-——————--—-—-—-————-——\n"); FILE *fp; struct user temp; if((fp=fopen(file,"rb”))==NULL) { printf("cannot open file!\n”); exit(1); } while(fread(&temp,sizeof(struct user),1,fp)) { printf("NO.%d %10s %23s %。2f\n",temp。id,temp.name,temp。person_num,temp。money); } fclose(fp); } void del()函数实现删除储户功能 void del() //删除储户 { printf(”%45s\n”,"***删除储户***”); printf(”-——-———————————-——-——----———---————--————-———--—-——---—--—-————----————--—-———-—\n"); printf(”%s %15s %15s %10s\n",”账号”,"用户姓名",”身份证号码”,”存款余额”); printf(”—————————--—-——————-——-———--——-——————————-———-——---———-——--—-—-——-—————-—-————--\n”); int count(); void getname(char *name); void getperson_num(char *person_num); void getpassword(char *password); FILE *fp; int i,num,mark; char password[6]; bool flag=false; struct user *temp; num=count();//根据记录数申请空间 temp=(struct user *)malloc(num*sizeof(struct user)); if((fp=fopen(file,"rb”))==NULL) { printf(”cannot open file!\n”); exit(1); } for(i=0;i〈num;i++)//读取文件内容 fread(&temp[i],sizeof(struct user),1,fp); fclose(fp); printf(”输入要需要注销的账号:"); scanf(”%d”,&mark); if(i〈mark||mark〉num) { printf(”你要注销的账号不存在!”); return; } printf(”输入账号密码: "); scanf("%s”,&password); if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容 { printf("cannot open file!\n"); exit(1); } for(i=0;i<num;i++) //无效账户信息全部置为0 { if(temp[i]。id==mark&&strcmp(temp[i].password,password)==0&&temp[i]。money==0。00) { strcpy(temp[i].person_num,”0”); strcpy(temp[i]。name,”0”); strcpy(temp[i]。password,"0”); flag=true; } fwrite(&temp[i],sizeof(struct user),1,fp); } fclose(fp); free(temp); if(flag==false) { printf(”您输入的密码不正确或是余额不为零!\n"); } else printf(”储户注销成功!\n"); } void save_money() 函数实现存款功能 void save_money() //函数功能:存款 { printf("%45s\n”,"***用户存款业务***"); printf("——-———-—-—————————---——-———-————-—---—————-——-————-————--—-——————————-—————————-\n\n”); int count(); void getpassword(char *password); FILE *fp; int i,num,mark; bool flag=false; struct user *temp; char password[6]; num=count(); temp=(struct user *)malloc(num*sizeof(struct user)); //根据记录数申请空间 if((fp=fopen(file,"rb”))==NULL) { printf(”cannot open file!\n”); exit(1); } for(i=0;i<num;i++) //将文件内容存入数组 fread(&temp[i],sizeof(struct user),1,fp); fclose(fp); printf("输入要存款账号:"); //读取存款账号 scanf("%d”,&mark); if(i〈mark||mark〉num) { printf(”你要查询的账号不存在!"); return; } printf(”输入账号密码: "); scanf(”%s",&password); if((fp=fopen(file,”wb"))==NULL) //写方式打开文件,覆盖原文件中的内容 { printf("cannot open file!\n"); exit(1); } for(i=0;i<num;i++) { if(temp[i]。id==mark&&strcmp(temp[i].password,password)==0) { double money=0; printf("输入要存入的金额:"); scanf(”%lf”,&money); while(1) { if(money<=0) { printf(”只能为正数!\n”); money=0; printf(”输入要存入的金额:”); scanf(”%lf",&money); } else break; } temp[i]。money +=money; flag=true; } fwrite(&temp[i],sizeof(struct user),1,fp); //修改该用户的信息 } fclose(fp); free(temp); if(flag==false) { printf(”您输入的密码不正确!\n”); } else printf(”你存款业务已办妥!\n”); } void get_money()函数实现取款功能 void get_money() //函数功能:用户取款 { printf(”%45s\n”,"***用户取款业务***”); printf(”--—--——————-—-—————---—-—-————————————————-——-—--————-—---—-—-—————---—-——---—--\n\n"); int count(); FILE *fp; int i,num,mark; char password[6]; bool flag=false; struct user *temp; num=count();//根据记录数申请空间 temp=(struct user *)malloc(num*sizeof(struct user)); if((fp=fopen(file,”rb"))==NULL) { printf(”cannot open file!\n"); exit(1); } for(i=0;i<num;i++)//读取文件内容 fread(&temp[i],sizeof(struct user),1,fp); fclose(fp); printf("输入要取款账号:"); scanf(”%d”,&mark); if(i〈mark||mark>num) { printf(”你要查询的账号不存在!"); return; } printf("输入账号密码: ”); scanf("%s”,&password); if((fp=fopen(file,”wb”))==NULL) //写方式打开文件,覆盖原文件中的内容 { printf(”cannot open file!\n”); exit(1); } for(i=0;i〈num;i++) { if(temp[i]。id==mark&&strcmp(temp[i].password,password)==0) { double money=0; printf(”输入要取出的金额:”); scanf("%lf",&money); if(money〈=0)//判断用户余额是否足够 { printf(”只能为正数!\n”); money=0; } else if(money〉temp[i]。money) { printf("你的余额不足!\n”); money=0; } temp[i]。money —=money; flag=true; } fwrite(&temp[i],sizeof(struct user),1,fp); } fclose(fp); free(temp); if(flag==false) { printf("您输入的密码不正确!\n”); } else printf(”你取款业务已办妥!\n”); } void print()函数用于显示菜单 void print()//函数功能:输出界面 { printf("%48s\n","***活期储蓄帐目管理系统***"); printf(”-————-—--—-———-———-—--—-—----—--——-—--——-———--—-——--——-———-———---—--—————————--—\n\n"); printf("%8s,%-20s\n",”1","新建储户”); printf(”%8s,%—20s\n”,"2",”查询储户信息”); printf(”%8s,%—20s\n",”3”,"显示所有储户信息"); printf(”%8s,%—20s\n",”4”,”删除储户"); printf("%8s,%-20s\n”,”5”,”存款”); printf(”%8s,%-20s\n","6",”取款”); printf("%8s,%—20s\n","7”,”退出"); printf(”\n请选择功能(1~7):”); } void main()函数用于实现菜单中的功能,主函数 void main() { char choose; do{ print(); scanf(" %c",&choose);//读取功能标号,根据标号选择不同的函数 fflush(stdin); system("cls”); switch(choose) { case '1’: add(); break; case ’2': select_id(); break; case ’3’: display(); break; case '4’: del(); break; case ’5': save_money(); break; case ’6’: get_money(); break; case ’7’: exit(1); default: printf(”对不起,你所选择的功能不存在!\n”); } getch();//暂停功能(读取任意键继续)(conio。h) system(”cls");//清除屏幕显示(stdlib。h) }while(1); } 五 调试分析 系统运行主界面如图所示,各子功能测试运行结果如下: 每个方面实现一个功能。定义一个包含有五个变量的结构体数组,并存入文件中。定义一个计数函数,贯穿整个程序。然后每个函数实现一个功能,共有六个功能。添加用户时会使用到录入姓名和录入身份证号码两个函数。查询只需要比较字符串,然后输出即可实现。显示全部储户信息只需将结构体数组依次输出即可实现.储户的存款和取款按找账号依次从文件中查找到匹配的账号,然后加上或减去存取的金额即可实现.销户时将储户除账号外信息全部置0即可. 六 测试结果 1。主界面截图 2.新建储户 3。查询储户信息 4.显示所有储户信息 5.存款 6。取款 7。删除储户 七 用户使用说明 (1) 本程序执行文件为"活期储蓄.exe”。 (2) 进入本系统后,随即显示系统主菜单页面,用户可在该界面下输入各子菜单前对应的数字并按回车键,执行相应子菜单命令。 (3) 账号或密码输入不正确时,会出现提示信息,然后按任意键退出. 八 课程设计总结 这次课程设计中遇到了一些问题与同学一起讨论解决,从其他人身上学到了很多。 这个课程设计并不完美,还有很多要改善的地方,在删除储户时不能将储户信息从文件中删除,只能将储户信息全部置0了。还有一些没想到的细节。虽然不是很完美,但发现不足之处并在以后的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现我们的不完美,并想办法去改进这些不完美。 通过这次课程设计学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了理论和时间结合是很重要的.让我进一步了解了C++程序设计方法,并且对这门课产生了浓厚的兴趣.更重要的是培养了自己耐心、细心、用心的良好品质.同时也非常感谢同学的帮助及老师的建议与指导。 源程序: #include〈stdio。h> #include〈string.h〉 #include<conio.h〉 #include<stdlib。h> #define file "temp。txt" //数据储存文件名 struct user //用户类型(账号,姓名,身份证号,存款) { int id; char name[20]; char person_num[19]; char password[6]; double money; }; void add() //添加用户 { printf("%45s\n”,”***新建储户***"); printf(”———--———————---——-——-—--——-——-—-—--—--—--—-—-—---——--—————--—-—-————------———--—\n\n”); struct user getuser(); struct user temp; int count(); //函数目的:计算文件中的记录数目 以生成自动账号 FILE *fp; int number; if((fp=fopen(file,”ab”))==NULL) { printf("Can not open file!\n”); exit(1); } temp=getuser(); //读取用户名 number=count(); temp.id=number+1; //生成自动账号 fwrite(&temp,sizeof(struct user),1,fp); printf("添加用户成功!\n”); fclose(fp); } int count() //函数目的:计算文件中的记录总数 { FILE *fp; int num; struct user temp; num=0; if((fp=fopen(file,”rb”))==NULL) { printf(”Can not open file!\n”); exit(1); } while(fread(&temp,sizeof(struct user),1,fp)) { num++; } fclose(fp); return num; } struct user getuser() { void getname(char *name); void getperson_num(char *person_num); void getpassword(char *password); struct user temp; printf(”请输入用户姓名(字符数<20): "); getname(temp。name); printf("请输入用户身份证号码: ”); getperson_num(temp。person_num); printf("请输入账户密码: ”); getpassword(temp.password); printf(”输入开户金额:”); //判断开户金额(〉=100) do { scanf(”%lf”,&temp。money); fflush(stdin); if(temp.money<100。00) printf(”开户金额不能小于100\n”); else break; printf("重新输入开户金额: "); }while(1); return temp; } void getname(char *name) //函数功能:读取用户姓名(字数〈20) { do { scanf(”%s”,name); fflush(stdin); if(strlen(name)==0) printf(”姓名不能为空!\n”); else if(strlen(name)〉=20) printf(”姓名不能超过20个字符!\n”); else break; printf(”重新输入姓名: "); //while循环,直到姓名输入有效 }while(1); } void getperson_num(char *person_num) { do { int i,mark; char ch; for(i=0,mark=0;;i++) if((ch=getchar())!='\n’) { if(ch〈'9’&&ch>='0’) person_num[i]=ch; else { printf("身份证号码只能是数字!\n"); mark=1; break; } } else break; person_num[i]=’\0’; if(mark==1) continue; if(strlen(person_num)!=18) printf("身份证号码只能是18位!\n”); else break; printf(”重新输入身份证号码: ”); }while(1); } void getpassword(char *password) { do { int i,j; char ch; for(i=0,j=0;; i++) if((ch=getchar())!=’\n') { if(ch〈=’9’&&ch>=’0’) password[i]=ch; else { printf(”密码只能是数字!\n"); j=1; break; } } else break; password[i]='\0’; if(j==1) continue; if(strlen(password)!=6) printf(”密码只能是6位!\n”); else break; printf("重新输入密码: "); } while(1); } void select_id() //查询储户信息 { int count(); void getpassword(char *password); printf("%45s\n”,”***查询储户信息***”); printf(”-———-—--——--———-——--——-—————--—-———-—-—-——--—————-——————--————————-—---———-—————\n”); printf(”%s %15s %15s %15s\n",”编号”,"用户姓名",”身份证号码”,”存款余额”); printf("——————-——-————-——--—--—————-—-———-—---—-—-—-———-—————-——---————————-—--———-——--—\n\n”); FILE *fp; struct user temp; int i,maxnum; char password[8]; bool flag=false; if((fp=fopen(file,"rb”))==NULL) { printf("cannot open file!\n"); exit(1); } maxnum=count(); printf(”输入要查询账号:”); scanf(”%d",&i); if(i〈i||i>maxnum) { printf("你要查询的账号不存在!”); return; } printf(”输入账号密码:”); scanf("%s”,&password); while(fread(&temp,sizeof(struct user),1,fp)) //循环读取每一条记录 判断是否为要查看的记录 { if(temp。id==i&&strcmp(temp.password,password)==0) { printf("NO。%d %8s %25s %。2f\n”,temp。id,temp。name,temp。person_num,temp。money); flag=true; break; } } if(flag==false) //判断密码是否正确 { printf(”您输入的密码不正确!\n"); return; } fclose(fp); } void display() //显示所有储户信息 { printf(”%45s\n”,”***显示所有储户信息***"); printf(”--———--——-——-——--——-——-————--------———-————-——-—-——-————-———-------——————-—-———-\n”); printf("%s %15s %15s %15s\n","账号",”用户姓名”,”身份证号码”,”存款余额”); printf(”————————————————-—-——--—————-—-————-———-—--—-———-—————-——-—-—-——--—————--—-——-——\n”); FILE *fp; struct user temp; if((fp=fopen(file,”rb”))==NULL) { printf(”cannot open file!\n"); exit(1); } while(fread(&temp,sizeof(struct user),1,fp)) { printf("NO。%d %10s %23s %.2f\n”,temp。id,temp。name,temp。person_num,temp。money); } fclose(fp); } void save_money() //函数功能:存款 { printf(”%45s\n”,”***用户存款业务***"); printf("-----——-—---————-———--—--———--———-——--————-—————--——-———--———-—----——---———-—---\n\n”); int count(); void getpassword(char *password); FILE *fp; int i,num,mark; bool flag=false; struct user *temp; char password[6]; num=count(); temp=(struct user *)malloc(num*sizeof(struct user)); //根据记录数申请空间 if((fp=fopen(file,”rb"))==NULL) { printf("cannot open file!\n"); exit(1); } for(i=0;i〈num;i++) //将文件内容存入数组 fread(&temp[i],sizeof(struct user),1,fp); fclose(fp); printf(”输入要存款账号:"); //读取存款账号 scanf(”%d”,&mark); if(i〈mark||mark>num) { printf(”你要查询的账号不存在!"); return; } printf(”输入账号密码: ”); scanf(”%s”
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:数据结构课程设计--活期储蓄账目管理.doc
    链接地址:https://www.zixin.com.cn/doc/3991012.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


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

    自信网络  |  ZixinNetwork