活期储蓄账目管理分解.docx
《活期储蓄账目管理分解.docx》由会员分享,可在线阅读,更多相关《活期储蓄账目管理分解.docx(30页珍藏版)》请在冰点文库上搜索。
![活期储蓄账目管理分解.docx](https://file1.bingdoc.com/fileroot1/2023-7/17/f7e57f8c-3618-4deb-bc65-ea5f3f12fe2b/f7e57f8c-3618-4deb-bc65-ea5f3f12fe2b1.gif)
活期储蓄账目管理分解
数据结构课程设计
题目:
活期储蓄账目管理
学院:
班级:
学生姓名:
学生学号:
指导教师:
2013年11月27日
课程设计任务书
姓名
班级
学号
设计题目
活期储蓄账目管理
理论要点
1.活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:
2.能比较迅速地找到储户的帐户,以实现存款、取款记账;并能实现排序。
3.能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
设计目标
1.代替营业员进行许多繁杂的手动操作。
2.给用户带来了很大的方便。
3.节省许多人力资源。
4.提高人们的工作效率。
研究方法步骤
1.设计程序流程图
2.编写源程序
3.编译运行,对指定文件进行编码译码
预期结果
实现对既定文件的读入,编码压缩后存入另一文件,调出编码后的文件进行译码输出并存入新文件。
计划与进步的安排
1.搜集资料,理解原理,分析已有的编码1天
2.分模块分析,画出实验流程图1天
3.编写源代码2天
4.编译运行,对既定文件进行编码译码2天
5.实验总结1天
2概要设计2
3详细设计2
4调试设计5
5用户使用说明6
6测试结果6
7结论体会8
8参考文献8
9源程序9
摘要
随着计算机的普及,现代人越来越多的想到用计算机来代替许多人做的事情。
从而提高办事效率,使经济收入更加可观,从而就产生了计算机这门课程。
随着信息技术的飞速发展,大量信息需要传输,传输信息就要先经过编码,然后再译码,可见编码技术的提高对整个信息产业有着举足轻重的作用。
而计算机主要是通过程序来实现各种事情的,再者程序也必须通过各种算法才能达到存储各种数据,所以数据结构这门课程就应运而生。
本课程设计主要是用数据结构编写关于活期储蓄账目管理的算法,来达到活期储蓄账目管理的目的。
关键词:
编码存储活期储存账目管理
1题目分析
活期储蓄管理系统用户通过该系统可以进行存款、取款、销户等业务。
该系统在金融业给人民带来了很大的方便,系统开发成功后,一旦应用于银行领域,会给管理员与用户带来很大的方便,其主要作用具体如下:
1)、可以代替营业员进行许多繁杂的手动操作。
2)、给用户带来了很大的方便。
3)、可以节省许多人力资源。
4)、可以提高人们的工作效率。
活期储蓄账目管理系统主要是由于在活期储蓄处理中,储户开户、销户、存入、支出活动频繁,为实现储户的各种操作而设计的,本课程设计的主要功能包括实现储户开户、销户、存入、支出等活动,为了能比较迅速找到账户,实现这样的几个功能,就要通过链表来存储数据结构,其结构则按照C语言的相关知识定义结构体,其中储户开户、销户就是实现链表的插入与删除,而存入、支出等活动则是实现链表中结点的查找,然后进行更改。
2概要设计
1)、数据结构:
typedefstructmessage{
charname[10];
charsex[3];
intold;
charno[20];
doublebase;
doubleir;
intcode;
intyear;
intyday;
message*next;
}message,*Message;
2)、各种函数说明:
Messageout();将txt文件中的信息读出
tm*date();调用系统时间
voidmake();对文件中已有账户进行处理
voidit(Message);将信息写入txt文件
voidcreate();创建新账户
voiddebit(Message);从账户中取款
voidcredit(Message);向账户中存款
intchaxun();查询账户信息
voidrework(Message);修改账户密码
intmain();主函数
3详细设计
1)、头文件headerfile.h中,声明结构体和函数:
typedefstructmessage{
charname[10];
charsex[3];
intold;
charno[20];
doublebase;
doubleir;
intcode;
intyear;
intyday;
message*next;
}message,*Message;
Messageout();
tm*date();
voidmake();
voidit(Message);
voidcreate();
voiddebit(Message);图1程序结构图
voidcredit(Message);图1程序结构图
intchaxun();
voidrework(Message);
2)、intmain()//主函数
{
intchoice=0;
while
(1)
{
cout<<"请选择操作:
1、创建账户2、查询账户0、退出\n";
cin>>choice;
switch(choice)
{
case1:
create();break;
case2:
chaxun();break;
case0:
return0;
default:
cout<<"你敲错键了。
\n";break;
}
}
}
tm*date()//调用系统时间
{
time_trawtime;
structtm*timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
returntimeinfo;
}
voidmake()//预处理账目
{
Messagep,q,head=out();
p=head->next;
while(p!
=NULL)
{
for(inti=1;i<=d->tm_yday-p->yday+365*(d->tm_year-p->year);i++)
{
p->base=p->base+p->base*p->ir;
}
p=p->next;
}
q=head->next;
ofstreamfout("Message.txt");
fout.close();
while(q!
=NULL){it(q);q=q->next;}
}
Messageout()//将txt文件中的信息读出
{
Messagep,q,head;head=newmessage;p=head;
ifstreamfin("Message.txt");
if(!
fin){cout<<"文件打开失败\n";returnhead;}
else
while(!
fin.eof())
{
q=newmessage;
fin>>q->name>>q->sex>>q->old>>q->no>>q->base>>q->ir>>q->code>>q->year>>q->yda;
q->next=NULL;
p->next=q;
p=p->next;
}
fin.close();
returnhead;
}
voidit(Messageq)//将信息写入txt文件
{
ofstreamfout("Message.txt",ios:
:
app);
if(!
fout){cout<<"文件打开失败\n";}
fout<name<<""<sex<<""<old<<""<no<<""<base<<""<ir<<""<code<<""<tm_year<<""<tm_yday;
fout.close();
}
voidcreate()//创建账户
{
Messageq=newmessage;
cout<<"**请输入客户的信息**"<cout<<"姓名:
";cin>>q->name;
cout<<"性别:
";cin>>q->sex;
cout<<"年龄:
";cin>>q->old;
cout<<"身份证号:
";cin>>q->no;
cout<<"本金:
";cin>>q->base;
cout<<"利率:
";cin>>q->ir;
cout<<"密码:
";cin>>q->code;
q->year=d->tm_year;q->yday=d->tm_yday;
q->next=NULL;
it(q);
}
voiddebit(Messagep)//取款
{
doublemoney,m;
cout<<"请输入取款金额:
";cin>>money;
m=p->base-money;
if(m<0.00){cout<<"余额不足!
\n";}
else{cout<<"取款成功!
\n"<<"当前余额为:
"<base=m;cout<}
voidcredit(Messagep)//存款
{
doublemoney,m;
cout<<"请输入存款金额:
";cin>>money;
m=p->base+money;
cout<<"存款成功!
\n"<<"当前余额为:
"<base=m;cout<}
voidrework(Messagep)//修改密码
{
intcode1,code2;
cout<<"请输入新密码:
";cin>>code1;
cout<<"请再次输入新密码:
";cin>>code2;
if(code1==code2){cout<<"修改密码成功!
\n";p->code=code1;}
elsecout<<"两次输入的新密码不一致!
修改密码失败!
\n";
}
intchaxun()//查询账户
{
make();
Messagehead=newmessage;head=out();
Messagep,q;p=head->next;
chara[20];intb,choice;
cout<<"请输入要查询的账户的身份证号:
";cin>>a;
cout<<"请输入密码:
";cin>>b;
while(p!
=NULL)
{
if(strcmp(a,p->no)==0&&b==p->code)
{
cout<<"**要查询的账户信息为**"<cout<<"姓名"<cout<name<sex<old<no<base<ir<break;
}
elsep=p->next;
}
if(p==NULL){cout<<"账户或密码错误!
\n";return0;}
while
(1)
{
cout<<"请选择操作:
1、存款2、取款3、修改密码0、回主菜单\n";cin>>choice;
switch(choice)
{
case1:
credit(p);break;
case2:
debit(p);break;
case3:
rework(p);break;
case0:
return0;
default:
cout<<"你敲错键了。
\n";break;
}
q=head->next;
ofstreamfout("Message.txt");
fout.close();
while(q!
=NULL)
{
it(q);q=q->next;
}
}
}
4调试分析
程序调试采用DevC++实现,程序在调试过程中遇到了各种问题,首先在开户程序是时我是主函调试错误,,在原理上是可行,但调试时总得不到正确结果,后来改为基本类型整型后就很好的得到了满意结果,其它一些小错误在不断地调试,不断地改善后,基本达到可满意的效果
5用户使用
按步骤开户完成一系列操作
图2主界面
6测试结果
图3取款
图4用户资料
图5余额查询
图6用户添加
7结论体会
第一次做课程设计,开始自己读题时,思路不是很清晰,首先定义了一个结构体,包含了储户的各类信息,如姓名,账号,金额等等,并利用文件将用户信息加以存储。
开户时将输入的信息写入文件,存款和取款时对用户的存款加以处理并更新到文件中。
在分析好活期储蓄帐目管理的功能模块后,开始编写代码,通过这次对银行管理系统的编写与调试,巩固了有关结构体的知识及其操作,锻炼了实际应用能力。
8参考文献
[1]冯博琴.软件技术基础(修改版).西安交通大学出版社,1997.
[2]严蔚敏.数据结构.清华大学出版社,2003.
[3]李芸芳.软件技术基础(第二版).清华大学出版社,2000.
[4]徐孝凯.数据结构(C语言描述).清华大学出版社,2004.
9源程序
#include
#include
#include
#include
#definefile"temp.txt"//数据存储的文件名
structuser//用户类型定义(账号,姓名,身份证号,余额)
{
intid;
charname[20];
charperson_num[19];
doublemoney;
};
voidadd()//添加用户资料
{
printf("%30s\n","***添加用户***");
printf("---------------------------------------------\n\n");
structusergetuser();
intcount();//函数目的:
计算文件中的记录数目以生成自动账号
FILE*fp;
intnumber;
structusertemp;
if((fp=fopen(file,"ab"))==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
temp=getuser();//读取用户名
number=count();
temp.id=number+1;//生成自动账号
fwrite(&temp,sizeof(structuser),1,fp);
printf("添加用户成功!
\n");
fclose(fp);
}
intcount()//函数目的:
计算文件中的记录总数
{
FILE*fp;
intnum;
structusertemp;
num=0;
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
while(fread(&temp,sizeof(structuser),1,fp))
{
num++;
}
fclose(fp);
returnnum;
}
structusergetuser()
{
voidgetname(char*name);
voidgetperson_num(char*person_num);
structusertemp;
printf("请输入用户姓名(字符数<20):
");//读取相关开户信息
getname(temp.name);
printf("请输入用户身份证号码:
");
getperson_num(temp.person_num);
printf("输入开户金额:
");
do{//判断开户金额(>=100)
scanf("%lf",&temp.money);
fflush(stdin);
if((temp.money)<100.0)
printf("开户金额不能小于100\n");
else
break;
printf("重新输入开户金额:
");
}while
(1);
returntemp;
}
voidgetname(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
(1);//循环以保证读入数据有效
}
voidgetperson_num(char*person_num)//函数功能:
读取用户身份证号码(15位或者18位)
{
do{
inti,mark;
charch;
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)!
=15&&strlen(person_num)!
=18)
printf("身份证号码只能是15位,或者18位!
\n");
else
break;
printf("重新输入身份证号码:
");
}while
(1);//循环以保证读入数据有效
}
voidselect_name()//按照姓名查询账户余额
{
voidgetname(char*name);
printf("%30s\n","***按照姓名查询账户余额***");
printf("%8s%15s%15s%10s\n","账号","用户姓名","身份证号码","存款余额");
printf("---------------------------------------------\n\n");
FILE*fp;
structusertemp;
charname[20];
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
printf("输入要查询的姓名:
");//调用读取用户名函数
getname(name);
while(fread(&temp,sizeof(structuser),1,fp))//循环读取每一条记录判断是否为要查看的记录
if(strcmp(temp.name,name)==0)
{
printf("NO.%d%15s%15s%.2f\n",temp.id,temp.name,temp.person_num,temp.money);
}
fclose(fp);
}
voidselect_id()//按照账号查询账户余额
{
intcount();
printf("%30s\n","***按照编号查询账户余额***");
printf("%8s%15s%15s%10s\n","编号","用户姓名","身份证号码","存款余额");
printf("---------------------------------------------\n\n");
FILE*fp;
structusertemp;
inti,maxnum;
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
maxnum=count();
printf("输入要查询账号:
");//判断账号是否在记录中
scanf("%d",&i);
if(i<1||i>maxnum)
{
printf("你要查询的账号不存在!
");
return;
}
while(fread(&temp,sizeof(structuser),1,fp))//循环读取每一条记录判断是否为要查看的记录
if(temp.id==i)
{
printf("NO.%d%15s%15s%.2f\n",temp.id,temp.name,temp.person_num,temp.money);
}
fclose(fp);
}
voiddisplay()//显示用户资料
{
printf("%30s\n","***用户资料显示***");
printf("%8s%15s%15s%10s\n","账号","用户姓名","身份证号码","存款余额");
printf("---------------------------------------------\n\n");
FILE*fp;
structusertemp;
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannotopenfile!
\n");
exit
(1);
}
while(fread(&temp,sizeof(structuser),1,fp))
{
printf("NO.%d%15s%15s%.2f\n",temp.id,temp.name,temp.person_num,temp.mon