NEUQ 数据结构课设Word下载.docx
《NEUQ 数据结构课设Word下载.docx》由会员分享,可在线阅读,更多相关《NEUQ 数据结构课设Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
![NEUQ 数据结构课设Word下载.docx](https://file1.bdocx.com/fileroot1/2023-2/2/ef147f39-031b-417e-985d-54891099fd6c/ef147f39-031b-417e-985d-54891099fd6c1.gif)
查询账户信息
voidrework(Message);
修改账户密码
intmain();
主函数
1)、头文件headerfile.h中,声明结构体和函数:
typedefstructmessage{
}message,*Message;
2)、intmain()//主函数
{
intchoice=0;
while
(1)
{
cout<
<
"
请选择操作:
1、创建账户2、查询账户0、退出\n"
;
cin>
>
choice;
switch(choice)
{
case1:
create();
break;
case2:
chaxun();
case0:
return0;
default:
cout<
你敲错键了。
\n"
}
}
}
tm*date()//调用系统时间
time_trawtime;
structtm*timeinfo;
time(&
rawtime);
timeinfo=localtime(&
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->
q=head->
ofstreamfout("
Message.txt"
);
fout.close();
while(q!
=NULL){it(q);
q=q->
Messageout()//将txt文件中的信息读出
Messagep,q,head;
head=newmessage;
p=head;
ifstreamfin("
if(!
fin){cout<
文件打开失败\n"
returnhead;
else
while(!
fin.eof())
q=newmessage;
fin>
q->
name>
sex>
old>
no>
base>
ir>
code>
year>
yda;
q->
next=NULL;
next=q;
p=p->
fin.close();
returnhead;
voidit(Messageq)//将信息写入txt文件
ios:
:
app);
fout){cout<
fout<
endl<
name<
"
sex<
old<
no<
base<
ir<
code<
d->
tm_year<
tm_yday;
voidcreate()//创建账户
Messageq=newmessage;
cout<
**请输入客户的信息**"
endl;
姓名:
cin>
name;
性别:
sex;
年龄:
old;
身份证号:
no;
本金:
base;
利率:
密码:
code;
q->
year=d->
tm_year;
yday=d->
it(q);
voiddebit(Messagep)//取款
doublemoney,m;
请输入取款金额:
cin>
money;
m=p->
base-money;
if(m<
0.00){cout<
余额不足!
else{cout<
取款成功!
当前余额为:
m;
p->
base=m;
voidcredit(Messagep)//存款
请输入存款金额:
base+money;
存款成功!
voidrework(Messagep)//修改密码
intcode1,code2;
请输入新密码:
code1;
请再次输入新密码:
code2;
if(code1==code2){cout<
修改密码成功!
code=code1;
elsecout<
两次输入的新密码不一致!
修改密码失败!
intchaxun()//查询账户
make();
Messagehead=newmessage;
head=out();
Messagep,q;
p=head->
chara[20];
intb,choice;
请输入要查询的账户的身份证号:
a;
请输入密码:
b;
if(strcmp(a,p->
no)==0&
&
b==p->
code)
cout<
**要查询的账户信息为**"
姓名"
setw(6)<
性别"
setw(5)<
年龄"
setw(15)<
身份证号"
setw(13)<
余额"
setw(10)<
利率\n"
setw(20)<
setw(9)<
break;
elsep=p->
if(p==NULL){cout<
账户或密码错误!
1、存款2、取款3、修改密码0、回主菜单\n"
credit(p);
debit(p);
case3:
rework(p);
q=head->
ofstreamfout("
fout.close();
while(q!
it(q);
三、调试分析
程序在调试过程中遇到了各种问题,首先在开户程序时是主函调试错误,,在原理上是可行,但调试时总得不到正确结果,后来改为基本类型整型后就很好的得到了满意结果,其它一些小错误在不断地调试,不断地改善后,基本达到满意的效果。
四、测试结果
五、心得体会
刚开始自己读题时,思路不是很清晰,首先定义了一个结构体,包含了储户的各类信息,如姓名,账号,金额等等,并利用文件将用户信息加以存储。
开户时将输入的信息写入文件,存款和取款时对用户的存款加以处理并更新到文件中。
在分析好活期储蓄帐目管理的功能模块后,开始编写代码,通过这次对银行管理系统的编写与调试,巩固了有关结构体的知识及其操作,锻炼了实际应用能力,对专业知识了解更多,学会如何把自己平时所学的东西应用到实际中。
六、附录
#include<
stdio.h>
string.h>
conio.h>
stdlib.h>
#definefile"
temp.txt"
//数据存储的文件名
structuser//用户类型定义(账号,姓名,身份证号,余额)
intid;
charname[20];
charperson_num[19];
doublemoney;
};
voidadd()//添加用户资料
printf("
%30s\n"
"
***添加用户***"
---------------------------------------------\n\n"
structusergetuser();
intcount();
//函数目的:
计算文件中的记录数目以生成自动账号
FILE*fp;
intnumber;
structusertemp;
if((fp=fopen(file,"
ab"
))==NULL)
printf("
cannotopenfile!
exit
(1);
temp=getuser();
//读取用户名
number=count();
temp.id=number+1;
//生成自动账号
fwrite(&
temp,sizeof(structuser),1,fp);
添加用户成功!
fclose(fp);
intcount()//函数目的:
计算文件中的记录总数
intnum;
num=0;
rb"
while(fread(&
temp,sizeof(structuser),1,fp))
num++;
returnnum;
structusergetuser()
voidgetname(char*name);
voidgetperson_num(char*person_num);
请输入用户姓名(字符数<
20):
//读取相关开户信息
getname(temp.name);
请输入用户身份证号码:
getperson_num(temp.person_num);
输入开户金额:
do{//判断开户金额(>
=100)
scanf("
%lf"
&
temp.money);
fflush(stdin);
if((temp.money)<
100.0)
printf("
开户金额不能小于100\n"
else
重新输入开户金额:
}while
(1);
returntemp;
voidgetname(char*name)//函数功能:
读取用户姓名(字符数<
20)
do{
%s"
name);
if(strlen(name)==0)
姓名不能为空!
if(strlen(name)>
=20)
printf("
姓名不能超过20个字符!
else
break;
重新输入姓名:
//循环以保证读入数据有效
voidgetperson_num(char*person_num)//函数功能:
读取用户身份证号码(15位或者18位)
{
inti,mark;
charch;
for(i=0,mark=0;
i++)//输入有效性判断(只能是数字)
if((ch=getchar())!
='
\n'
)
{
if(ch<
9'
ch>
0'
person_num[i]=ch;
else
{
printf("
身份证号码只能是数字!
mark=1;
break;
}
}
else
person_num[i]='
\0'
if(mark==1)
continue;
if(strlen(person_num)!
=15&
strlen(person_num)!
=18)
身份证号码只能是15位,或者18位!
重新输入身份证号码:
//循环以保证读入数据有效
voidselect_name()//按照姓名查询账户余额
***按照姓名查询账户余额***"
%8s%15s%15s%10s\n"
账号"
用户姓名"
身份证号码"
存款余额"
FILE*fp;
输入要查询的姓名:
//调用读取用户名函数
getname(name);
temp,sizeof(structuser),1,fp))//循环读取每一条记录判断是否为要查看的记录
if(strcmp(temp.name,name)==0)
NO.%d%15s%15s%.2f\n"
temp.id,temp.name,temp.person_num,temp.money);
voidselect_id()//按照账号查询账户余额
***按照编号查询账户余额***"
编号"
inti,maxnum;
maxnum=count();
输入要查询账号:
//判断账号是否在记录中
scanf("
%d"
i);
if(i<
1||i>
maxnum)
你要查询的账号不存在!
return;
temp,sizeof(structuser),1,fp))//循环读取每一条记录判断是否为要查看的记录
if(temp.id==i)
voiddisplay()//显示用户资料
***用户资料显示***"
voidsave_money()//函数功能:
按账号存款
***用户存款业务***"
inti,num,mark;
structuser*temp;
num=count();
//根据记录数申请空间
temp=(structuser*)malloc(num*sizeof(structuser));
for(i=0;
num;
i++)//将文件内容存入数组
fread(&
temp[i],sizeof(structuser),1,fp);
输入要存款账号:
//读取存款账号
mark);
if(mark<
1||mark>
num)
你要存款账号不存在!
wb"
))==NULL)//写方式打开文件,覆盖原文件中的内容
if(temp[i].id==mark)
doublemoney=0;
输入要存入的金额:
scanf("
money);
if(money<
=0)
只能为正数!
money=0;
temp[i].money+=money;
//修改该用户的信息
fwrite(&
free(temp);
你存款业务已办妥!
voidget_money()//函数功能:
用