还剩32页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
活期储蓄账目管理一目的满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求
①能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账;
②能比较简单,迅速地实现插入和删除,以实现开户和销户的需要;
③熟练使用语言编写程序,解决实际问题;c学会编制结构清晰、风格良好、数据结构适当的语言程序,从而具备利用计算机编程分C析解决综合性实际问题的初步能力二需求分析
1、数据需求需先进行储户开户才可进行之后的所有的操作
1..开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成
2.销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账号3及密码验证后方可进行交易
2、基本功能需求基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步也可看见交易后的信息)、显示所有储户信息
3、非功能性需求系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行三概要设计
1、数据结构设计用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,采用数组类型的存储结构
2、储存结构体设计本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统”中的信息其中,结构体由个分量构成用户账号、用户姓名、用户身份证号码、用户密码、开户金额
53、模块设计%火*用户存款业务*大*”;printf”45s\r^J*printf\n\n;int count;void getpasswordchar*password;FILE*fp;int i,num,mark;bool flag=false;struct user*temp;char password
[6];num=count;二〃根据记录数申请temp struct user*mallocnum*sizeofstruct user;空间iffp=fopenfile,rb==NULLprintfcannot open file!\n;exitl;〃将文件内容存入数组fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;”输入要存款账号;〃读取存款账号printf:”scanf%d,mark;ifimark||marknum{你要查询的账号不存在!;printf”return;}输入账号密码:;printfscanf%s,password;iffp=fopenfile,,,wb==NULL〃写方式打开文件,覆盖原文件中的内容printfcannot open file!\n;exitl;fori=0;inum;i++|iftemp[i].id==markstrcmptemp[i].password,password==0double money=0;输入要存入的金额printfscanf%lf,money;whilelifmoney=0”只能为正数!printf\n;money=0;输入要存入的金额;printf:scanf%lf,money;elsebreak;}+二temp[i].money money;flag=true;}〃修改该用户的信息fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;ifflag==false{甘您输入的密码不正确!prin\rT;}else甘你存款业务已办妥!prin\n;函数实现取款功能void getjnoney〃函数功能用户取款void get_money叫用户取款业务***;printf45s\nJ***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*mallocnum*sizeofstruct user;iffp=fopenfile,rb==NULLprintfcannot open file!\n;exitl;〃读取文件内容fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;输入要取款账号款printfscanf%d,mark;ifimark||marknum”你要查询的账号不存在!;printfreturn;输入账号密码:printfscanf%s,password;〃写方式打开文件,覆盖原文件iffp=fopenfile,wb==NULL中的内容甘prin cannot open file!\n;exitl;fori=0;inum;i++iftemp[i],id==markstrcmptemp[i].password,password==0double money=0;甘”输入要取出的金额prinscanf%lf,money;〃判断用户余额是否足够ifmoney=0只能为正数!printf\n”;money=0;else ifmoneytemp[i].money你的余额不足!printf\n;money=0;}temp[i],money-=money;flag=true;}fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;二二ifflag false您输入的密码不正确!printf\n;else你取款业务已办妥!printf\n;函数用于显示菜单void print〃函数功能输出界面void printQ活期储蓄帐目管理系统***”;printf”%48s\rT J***printf\n\n;:新建储户printf”%8s,%-20s\rT T:查询储户信息printf”%8s,%-20s\n12显示所有储户信息printf”%8s,%-20s\rTJ3”J删除储户printf%8s,%-20s\rTJ47映存款printf8s,%-20s\n”J57%取款printf”8s,%-20s\rTJ6”J%退出printf”8s,%-20s\rTJ77请选择功能printf\n函数用于实现菜单中的功能,主函数void mainvoidmain{char choose;do{;print〃读取功能标号,根据标号选择不同的函数scanf%c,choose;fflushstdin;systemCcls;switchchoosecase1:add;break;case2:select_id;break;case3:displayQ;break;case4:;delbreak;case5:save_money;break;case6:get_money;break;case7:exitl;default:对不起,你所选择的功能不存在所;printf}〃暂停功能读取任意键getch;继续乂conio.hsystemCcls;〃清除屏幕显示stdlib.h}whilel;五调试分析系统运行主界面如图所示,各子功能测试运行结果如下每个方面实现一个功能定义一个包含有五个变量的结构体数组,并存入文件中定义一个计数函数,贯穿整个程序然后每个函数实现一个功能,共有六个功能添加用户时会使用到录入姓名和录入身份证号码两个函数查询只需要比较字符串,然后输出即可实现显示全部储户信息只需将结构体数组依次输出即可实现储户的存款和取款按找账号依次从文件中查找到匹配的账号,然后加上或减去存取的金额即可实现销户时将储户除账号外信息全部置即0可.主界面截图1回汉■[D:\Visual+C+++
6.0+完整傩版新建文彳牛夹\33\Debug\
30.exe六测试结果X[D:\Visual+C+++
6.0+完整版新建文件夹\33\Debug\
30.exe-I oLhzU公.新建储户
23.查询储尸信息/D:\Visual+C+++
6.0+完整绿色版新建文件夹\33\Debug\3O.exe又兴兴查询储户信息又兴兴编号用户姓名身份证号码存款余额输入要查询账号1输入账号密码123456N
0.1李三
1000.00半:函数实现新建储户功能void add函数实现查询储户信息功能void select_id函数实现显示所有储户信息功能void display函数实现删除储户功能void del函数实现存款功能void save_money函数实现取款功能void getjnoney函数用于显示菜单void print函数用于实现菜单中的功能void mainU详细设计!struct user〃用户类型账号,姓名,身份证号,存款{int id;char name
[20];
1、结构体的详细定义.显示所有储尸信息4■「D:\Visual+C+++
6.0+完整养版\新建文件夹\33\Debug\
30.exe兴兴兴显示所有储户信息兴兴兴账号用户姓名身份证号码存款余额N
0.1李三
1000.00半:.存款5D:\Visual+C+++
6.0+完整^^版\新建文彳牛夹\33\Debug\
30.exe***用户存款业务又打输入要存款账号1输入账号密码123456输入要存入的金额1000你存款业务已办妥!*兴*显示所有储户信息***账号用户姓名身份证号码存款余额N
0.1李三
2000.00半:.取款6,「D:\Visual+C+++
6.0+完整绿色版新建文件夹\33\Debug\3O.exe”兴兴兴用户取款业务又兴兴输入要取款账号1输入账号密码123456输入要取出的金额200你取款业务已办妥!半:*兴*显示所有储户信息*W*账号用户姓名身份证号码存款余额N
0.1李三半:.删除储户7■J D:\Visual+C+++
6.U+完整^^版\新建文1牛夹\33\Debug\3U.exe兴兴兴删除储户兴兴兴账号用户姓名身份证号码存款余额输入要需要注销的账号1输入账号密码123456储户注销成功,半:七用户使用说明⑴本程序执行文件为”活期储蓄.exe”.进入本系统后,随即显示系统主菜单页面,用户可在该界面下输入各子菜单前对应的2数字并按回车键,执行相应子菜单命令账号或密码输入不正确时,会出现提示信息,然后按任意键退出3八课程设计总结这次课程设计中遇到了一些问题与同学一起讨论解决,从其他人身上学到了很多这个课程设计并不完美,还有很多要改善的地方,在删除储户时不能将储户信息从文件中删除,只能将储户信息全部置了还有一些没想到的细节虽然不是很完美,但发现不足之处并在以后0的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现我们的不完美,并想办法去改进这些不完美通过这次课程设计学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了理论和时间结合是很重要的让我进一步了解了程序设计方法,并且对这门课产生了浓厚的兴C++趣更重要的是培养了自己耐心、细心、用心的良好品质同时也非常感谢同学的帮助及老师的建议与指导源程序#includestdio.h#includestring.h#includeconio.h#includestdlib.h#define filetemp.txt〃数据储存文件名〃用户类型账号,姓名,身份证号,存款struct userint id;char name
[20];char person_num
[19];char password
[6];double money;;〃添加用户void add火火火新建储户***”;printf”%45s\rT Jprintf\n\n;struct usergetuser;struct usertemp;int count;自动账号〃函数目的计算文件中的记录数目以生成FILE*fp;int number;iffp=fopenfile,ab==NULL{printfCan notopen file!\n;exitl;〃读取用户名temp=getuser;number=count;〃生成自动账号temp.id=number+l;fwritetemp,sizeofstruct user,l,fp;(添加用户成功!)printf\n;fclosefp;〃函数目的计算文件中的记录总数int countFILE*fp;int num;struct usertemp;num=0;iffp=fopenfile,,,rb==NULL{printfCan notopen file!\n;exitl;whilefreadtemp,sizeofstruct user,l,fpnum++;fclosefp;return num;struct usergetuser|void getnamechar*name;void getperson_numchar*person_num;void getpasswordchar*password;struct usertemp;”请输入用户姓名字符数<printf20:;getnametemp.name;”请输入用户身份证号码:printfgetperson_numtemp.person_num;“请输入账户密码:;printf getpasswordtemp.password;输入开户金额:;〃判断开户金额printf=100doscanf%lf,temp.money;fflushstdin;iftemp.money100,00开户金额不能小于printf100\n;elsebreak;甘重新输入开户金额:;prin}whilel;return temp;〃函数功能读取用户姓名字数void getnamechar*name20do scanf%s,name;fflushstdin;姓名不能为空!ifstrlenname==O printf\rT;elseifstrlenname=20姓名不能超过个字符!printf20\n;else break;”重新输入姓名;循环,直到姓名输入printf//while有效}whilel;void getperson_numchar*person_numdoint i,mark;char ch;fori=0,mark=0;;i+4-ifch=getchar!=\n ifch9ch=101person_num[i]=ch;else”身份证号码只能是数字printf!\n;mark=l;break;elsebreak;person_num[i]=\0;ifmark==l continue;ifstrlenperson_num!=18/身份证号码只能是位!print18\n elsebreak;重新输入身份证号码:printf}whilel;void getpasswordchar*password{do{int ij;char ch;fori=0J=0;;i++ifch=getchar!=\nifch=9,ch=,01password[i]=ch;else{”密码只能是数字!printf\n”;j=1;break;}}elsebreak;password[i]=\0;ifj==lcontinue;ifstrlenpassword!=6密码只能是位!printf6\n“;elsebreak;”重新输入密码”;printf}whilel;〃查询储户信息void select_idint countQ;void getpasswordchar*password;,,查询储户信息***”;printfC%45s\nT***printf;\n编号”「用户姓名身份证号码;存款余额printf%s%15s%15s%15s\n”Jprintf\n\nM;FILE*fp;struct usertemp;int i,maxnum;char password
[8];bool flag=false;iffp=fopenfile,rb==NULLprintfcannot openfile!\n;exitl;maxnum=count;”输入要查询账号printfscanf%d,i;ifii||imaxnum”你要查询的账号不存在不printf return;输入账号密码}printfscanf%s,password;〃循环读取每一条记录判whilefreadtemp,sizeofstruct user,l,fp断是否为要查看的记录iftemp.id==istrcmptemp.password,password==0printfNO.%d%8s%25s%.2f\n,temp,id,temp.name,temp.person_num,temp.money;flag=true;break;}〃判断密码是否正确ifflag==false{您输入的密码不正确!printf\n”;return;fclosefp;}void displayQ〃显示所有储户信息char person_num
[19];char password
[6];double money;;
2、系统函数详细介绍函数实现新建储户功能void add〃添加用户void add{新建储户;printf%45s\rTJ******”printf\n\n;;struct usergetuserstruct usertemp;〃函数目的计算文件中的记录数目以生成自动账号int count;FILE*fp;int number;iffp=fopenfile,ab==NULLprintfCan notopenfile!\n;⑴;exit〃读取用户名temp=getuser;;number=count〃生成自动账号temp.id=number+l;fwritetemp,sizeofstruct user,l,fp;”添加用户成功!printf\rT;fclosefp;函数实现查询储户信息功能void select_id火*显示所有储户信息***;printf”%45s\rTJ*printf;\n账号二用户姓名身份证号码;存款余额printf%s%15s%15s%15s\rTJprintf\n;FILE*fp;struct usertemp;iffp=fopenfile,,,rb==NULLprintfcannot openfile!\n;exitl;whilefreadtemp,sizeofstruct user,l,fpprintfNO.%d%10s%23s%.2f\n,temp.id,temp.name,temp.person_num,temp.money;fclosefp;〃函数功能存款void save_money用户存款业务;printf”%45s\rTJ******”printf\n\n;int countQ;void getpasswordchar*password;FILE*fp;int i,num,mark;bool flag=false;struct user*temp;char password
[6];num=count;〃根据记录数申请temp=struct user*mallocnum*sizeofstruct user;空间iffp=fopenfile,rb==NULL{printfcannot openfile!\n;exitl;〃将文件内容存入数组fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;甘”输入要存款账号〃读取存款账号prinscanf%d,mark;ifimark||marknum”你要查询的账号不存在!printf return;输入账号密码:printfscanf%s,password;iffp=fopenfile,,,wb==NULL〃写方式打开文件,覆盖原文件中的内容甘prin“cannotopenfile!\n;exitl;fori=0;inum;i++iftemp[i].id==markstrcmptemp[i].password,password==0{double money=0;输入要存入的金额printfscanfC^lf.money;whilelifmoney=0只能为正数!printf\rT;money=0;输入要存入的金额printfscanf%lf,money;}else break;}temp[i].money+=money;flag=true;、〃修改该用户的信息fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;ifflag==false”您输入的密码不正确!printf\n”;else你存款业务已办妥!print/\n;〃函数功能用户取款void get_money用户取款业务***;printf%45s\n”J***printf\n\n;int count;FILE*fp;int i,num,mark;char password
[6];bool flag=false;struct user*temp;二;〃根据记录数申请空间num counttemp=struct user*mallocnum*sizeofstruct user;iffp=fopenfile,rb==NULLprintfcannot openfile!\n;exitl;〃读取文件内容fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;输入要取款账号printfscanf%d,mark;ifimark||marknum你要查询的账号不存在不printf return;”输入账号密码:printfscanf%s,password;iffp=fopenfile,,,wb==NULL〃写方式打开文件,覆盖原文件中的内容printfcannot openfile!\n;exitl;fori=0;inum;i++iftemp[i].id==markstrcmptemp[i],password password==0jdouble money=0;输入要取出的金额printsscanf%lf,money;〃判断用户余额是否足够ifmoney=0只能为正数!printf\n”;money=0;}else ifmoneytemp[i],money“你的余额不足!printf\rT;money=0;temp[i].money-=money;flag=true;}fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;二二ifflag false{您输入的密码不正确的”;printfelse“你取款业务已办妥!printf\n〃删除储户}void del删除储户***”;print-%45s\rTJ***printf;\n账号”「用户姓名身份证号码;存款余额printf%s%15s%15s%10s\n”Jprintf;\nint count;void getnamechar*name;void getperson_numchar*person_num;void getpasswordchar*password;FILE*fp;int i,num,mark;char password
[6];bool flag=false;struct user*temp;二;〃根据记录数申请空间num counttemp=struct user*mallocnum*sizeofstruct user;iffp=fopenfile,rb==NULL{printfcannot openfile!\n;exitl;〃读取文件内容fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;甘”输入要需要注销的账号:;prinscanf%d,mark;ifimark||marknum”你要注销的账号不存在不printf return;输入账号密码:printfscanf%s,password;〃写方式打开文件,覆盖原文件iffp=fopenfile,wb==NULL中的内容printfcannot openfile!\n;exitl;fori=0;inum;i++〃无效账户信息全部置为0}iftemp[i].id==markstrcmptemp[i].password,password==0temp[i].二二money
0.00{strcpy^emptO.person.num/O;strcpytemp[i].name/O;strcpytemp[i].password,0;flag=true;fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;ifflag==false您输入的密码不正确或是余额不为零!printf\rT;else储户注销成功!printf\rT;〃函数功能输出界面void print活期储蓄帐目管理系统;printf”%48s\n”,“******”printf\n\n;:新建储户printf”%8s,%-20s\n”,T;查询储户信息printf”%8s,%-20s\nT2叫;显示所有储户信息”;printf8s,%-20s\nT3删除储户printf”%8s,%-20s\n”J47存款printfC%8s,%-20s\n15:取款printf”%8s,%-20s\rTJ6”J%退出printf”8s,%-20s\rr7”J请选择功能printf\n1〜7:void maincharchoose;do{print;〃读取功能标号,根据标号选择不同的函数scanf%c”,choose;fflushstdin;systemcls;switchchoosecase1:add;break;select_id;break;displayQ;break;case4:;delbreak;case5:save_money;break;case6:get_money;break;case7:exitl;default:”对不起,你所选择的功能不存在!;printf\n”}〃暂停功能读取任意键getch;继续conio.h〃清除屏幕显示systemcls;stdlib.h}whilel;void select_id〃查询储户信息int count;void getpasswordchar*password;查询储户信息;printf”%45s\n”J******”printf;\n编号〈用户姓名身份证号码;存款余额printf%s%15s%15s%15s\n”J“Jprintf\n\n;FILE*fp;struct usertemp;int i,maxnum;char password
[8];bool flag=false;iffp=fopenfile,rb,,==NULLprintfcannot openfile!\n;exitl;maxnum=count;甘”输入要查询账号:;prin scanf%d,i;ifii||imaxnum”你要查询的账号不存在!printfreturn;“输入账号密码号printfscanfH%s,password;〃循环读取每一条记录判whilefreadtemp,sizeofstruct user,l,fp断是否为要查看的记录{iftemp.id==istrcmptemp.password,password==0|printfNO.%d%8s%25s%.2f\n,temp.id.temp.name,temp.person_num,temp.money;flag=true;break;}二二〃判断密码是否正确ifflag false”您输入的密码不正确!printf\nreturn;}fclosefp;函数实现显示所有储户信息功能void display〃显示所有储户信息void displayQ显示所有储户信息;printf”%45s\rTJ******”printf;\n账号用户姓名身份证号码存款余额printf%s%15s%15s%15s\rTJ7printf;\n火FILE fp;struct usertemp;iffp=fopenfile,rb==NULLprintfcannot openfile!\n;exitl;whilefreadtemp,sizeofstruct user,l,fpprintfNO.%d%10s%23s%.2f\n,temp.id,temp.name,temp.person_num,temp.money;}fclosefp;函数实现删除储户功能void del〃删除储户void del删除储户***”;print.%45s\nJ***printf;\n账号用户姓名;身份证号码存款余额printf%s%15s%15s%10s\rTJ“J“Jprintf\n;int countQ;void getnamechar*name;void getperson_numchar*person_num;void getpasswordchar*password;FILE*fp;inti,num,mark;char password
[6];bool flag=false;structuser*temp;二;〃根据记录数申请空间num counttemp=structuser*mallocnum*sizeofstruct user;iffp=fopenfile,rb==NULL printfcannotopenfile!\n;exitl;〃读取文件内容fori=0;inum;i++freadtemp[i],sizeofstruct user,l,fp;fclosefp;甘”输入要需要注销的账号;prin:scanf%d,mark;ifimark||marknum你要注销的账号不存在!,;printf,1return;输入账号密码:printfscanf%s,password;二二二〃写方式打开文件,覆盖原文件iffp fopenfile,wb NULL中的内容甘prin cannotopenfile!\n;fori=0;inum;i++〃无效账户信息全部置为0exitl;iftemp[i].id==markstrcmptemp[i].password,password==0temp[i].二二money
0.00strcpytemp[i].person_num,0;strcpytemp[i].name,O;strcpytemp[i].password,0;flag=true;}fwritetemp[i],sizeofstruct user,l,fp;fclosefp;freetemp;ifflag==false甘您输入的密码不正确或是余额不为零!prin\rT;else储户注销成功!printf\rT;函数实现存款功能void save_money〃函数功能存款void save_money。