聊城大学
《C语言实训》
题目 ATM银行管理模拟系统
指导教师: 王春哲
姓名: 匿 名
学号:
班级:
专业: 电子信息科学与技术
地点:
时间: 20##-7-9 至 20##-7-19
一、项目名称
基于控制台的银行存储系统模拟项目
二、功能要求
模拟ATM银行存储系统,设立管理端和客户端。
在管理端中,实现开户、查询帐户、修改密码、设置利率、结息和销户的操作。
在客户端中。实现存款、取款、查询账户、转帐和修改密码的操作。
三、需求分析
在模拟ATM银行存储系统中,要实现多个账户要运用结构体,更加方便的操作各个用户,使整个程序更加快捷。
要进行各个操作时,运用函数操作方便,整个程序更加合理化。
在客户和管理员查询时,运用指针操作,方便查询。
在整个程序中要对客户和管理员的操作进行保留,所以要进行文件的读写操作,这样文件才能保存
四、设计思想
模 块 划 分
图1
图二
图三
五、具体实现
主函数
int main()
{
char choice; //用于选择
printf("\t\t欢迎进入ATM机银行仿真模拟系统\n");
while(1)
{
printf("\t\t\t请输入要进入的角色 \n");
printf("\t\t******************* \n");
printf("\t\t\t1.客户端\n");
printf("\t\t\t2.管理端\n");
printf("\t\t\t3.退出程序\n");
printf("\t\t******************* \n");
printf("\n");
printf("\t请选择:");
choice=getch();
switch(choice)
{
case '1': user();
break;
case '2': admin();
break;
case '3':
return 0;
break;
default:
printf("非法选择,请重新选择\n");
}
}
}
结构体
typedef struct
{
char name[40]; //用户名
char mima[20]; //用户密码
char haoma[40]; // 用户号码
char tel[40]; // 账户电话
double money; //存入金额
}Atmuser;
typedef struct
{
char name1[40]; //用户名
char mima1[3]; //用户密码
}Atmadmin;
客户端
int kaihumima()
{
char mima[20];
if(strcmp(atm1[current].mima,mima)!=0)
{
printf("两次输入密码不相同,请重新输入\n");
return 0;
}
}
int load1()
{
FILE *fs1;
int count;
int succ;
fs1=fopen("AtmuserData.dat","rb");
if(fs1==NULL)
{
printf("不能打开文件\n");
return 1;
}
//判断文件是否有数据
succ=fseek(fs1,0,SEEK_END);
if(succ!=0)
{
printf("文件操作失败\n");
fclose(fs1);
return 1;
}
//文件数据大小
count=ftell(fs1);
fseek(fs1,0,SEEK_SET);
total=current=count/sizeof(Atmuser);
if(atm1==NULL)
{
atm1=(Atmuser*)malloc(total*sizeof(Atmuser));
}
if(atm1==NULL)
return 1;
// count 成功读取几个学生
count=fread(atm1,sizeof(Atmuser),current,fs1);
fclose(fs1);
if(count!=current)
{
printf("读取文件失败\n");
return 1;
}
printf("读取文件成功\n");
return 0;
}
int save1()
{
int count;
FILE *fs1;
fs1=fopen("AtmuserData.dat","wb");
if(fs1==NULL)
return 1;
count=fwrite(atm1,sizeof(Atmuser),current,fs1);
fclose(fs1);
if(count!=current)
{
printf("保存失败\n");
return 1;
}
//printf("保存文件成功\n");
return 0;
}
int qukuan()
{
double moneyqu;
printf("当前金额:%lf \n",atm1[q].money);
printf("温馨提示,您输入的金额必须是100的倍数,切一次不能输入大于两千元 \n");
printf("请输入 :");
scanf("%lf",&moneyqu);
printf("正在处理 请稍后......");
printf("剩余金额数 :%lf",atm1[q].money-moneyqu);
atm1[q].money=atm1[q].money-moneyqu; //取款减少金额
save1();
return 0;
}
int cunkuan()
{
char qq,aa;
double moneycun;
printf("当前金额:%lf \n",atm1[q].money);
qq=atm1[q].money;
printf("温馨提示,您输入的金额必须是100的倍数,切一次不能输入大于两千元 \n");
printf("请输入 :");
scanf("%lf",&moneycun);
printf("正在处理 请稍后......");
printf("剩余金额数 :%lf",atm1[q].money+moneycun);
atm1[q].money=atm1[q].money+moneycun; //存款增加金额
printf("%lf",atm1[q].money);
save1();
return 0;
}
int chaxunzhanghu1()
{
printf("账户号码:%s\n",atm1[q].name);
printf("密码:%s\n",atm1[q].mima);
printf("姓名:%s\n",atm1[q].haoma);
printf("电话号码:%s\n",atm1[q].tel);
printf("金额:%lf \n",atm1[q].money);
return 0;
}
int zhuanzhang()
{
char haoma[40];
double moneyqu;
int i;
printf("剩余金额数 :%lf",atm1[q].money);
printf("请输入要转入的账号");
scanf("%s",haoma);
for(i=0;i<current;i++)
{
if(strcmp(atm1[i].name,haoma)==0)
{
zhuanhao=i;
printf("请输入要转入的金额");
scanf("%lf",&moneyqu);
printf("剩余金额数 :%lf",atm1[q].money+moneyqu);
atm1[zhuanhao].money=(atm1[zhuanhao].money+moneyqu); // 转入账户增加金额
atm1[q].money=atm1[q].money+moneyqu; // 转账用户减少金额
printf("转账成功,请注意查收");
save1();
return 0;
}
}
printf("用户不存在 请重新输入");
}
int xiugai()
{
char mima[20];
char mima2[20];
printf("请输入密码 ");
scanf("%s",mima);
while(1)
{
if(strcmp(atm1[q].mima,mima)!=0)
{
printf("密码不正确,请重新输入");
return 0;
}
if(strcmp(atm1[q].mima,mima)==0)
break;
}
while(1)
{
printf("输入新密码:");
scanf("%s",atm1[q].mima);
printf("请重新输入密码:");
scanf("%s",mima);
if(strcmp(atm1[q].mima,mima)==0)
save1();
break;
kaihumima();
}
printf("修改成功");
return 0;
}
int user()
{
char name[40];
char mima[20];
char choice2;
int i;
char r=1;
while(r)
{
printf("请输入用户名:");
scanf("%s",name);
printf("请输入密码:");
scanf("%s",mima);
for(i=0;i<current;i++)
{
if(strcmp(atm1[i].name,name)==0) //验证是否存在用户
{
if(strcmp(atm1[i].mima,mima)!=0) //验证该用户的密码
{
printf("密码不正确,请重新输入");
}
if(strcmp(atm1[i].mima,mima)==0)
{
q=i;
r=0;
break;
}
}
}
if(strcmp(atm1[i].name,name)!=0)
printf("该用户不存在");
}
while(1)
{
printf("\t\t\t用户端功能主菜单 \n");
printf("\t\t******************* \n");
printf("\t\t\t1.取款\n");
printf("\t\t\t2.存款\n");
printf("\t\t\t3.查询账户\n");
printf("\t\t\t4.转账\n");
printf("\t\t\t5.修改密码\n");
printf("\t\t\t0.返回上一级\n");
printf("\t\t******************* \n");
printf("\t请选择:");
choice2=getch();
printf("\n\n");
switch(choice2)
{
case '1': qukuan(); //取款
break;
case '2': cunkuan();//存款
break;
case '3':chaxunzhanghu1();//查询账户
break;
case '4': zhuanzhang();//转账
break;
case '5': xiugai();//修改密码
break;
case '0':
return 0;
break;
default:
printf("非法选择,请重新选择\n");
}
}
return 0;
}
管理端
int save()
{
int count;
FILE *fs;
fs=fopen("AtmadminData.dat","wb"); // 打开文件
if(fs==NULL)
return 1;
count=fwrite(atm,sizeof(Atmadmin),current,fs); //读取文件数据
fclose(fs);
if(count!=current)
{
printf("保存失败\n");
return 1;
}
return 0;
}
int load()
{
FILE *fs;
int count;
int succ;
fs=fopen("AtmadminData.dat","rb");
if(fs==NULL)
{
printf("不能打开文件\n");
return 1;
}
succ=fseek(fs,0,SEEK_END); //判断文件是否有数据
if(succ!=0)
{
printf("文件操作失败\n");
fclose(fs);
return 1;
}
count=ftell(fs); //文件数据大小
fseek(fs,0,SEEK_SET);
total=current=count/sizeof(Atmadmin);
if(atm==NULL)
{
atm=(Atmadmin*)malloc(total*sizeof(Atmadmin));
}
if(atm==NULL)
return 1;
// count 成功读取几个学生
count=fread(atm,sizeof(Atmadmin),current,fs);
fclose(fs);
if(count!=current)
{
printf("读取文件失败\n");
return 1;
}
printf("读取文件成功\n");
return 0;
}
int kaihu()
{
char mima[20];
if(atm1==NULL)
{
atm1=(Atmuser*)malloc(total*sizeof(Atmuser));
}
if(atm1==NULL)
return 1;
printf("输入账户号码:");
scanf("%s",atm1[current].name);
while(1) //设置密码
{
printf("输入密码:");
scanf("%s",atm1[current].mima);
printf("请重新输入密码:");
scanf("%s",mima);
if(strcmp(atm1[current].mima,mima)==0)
break;
kaihumima();
}
printf("输入账户姓名:");
scanf("%s",atm1[current].haoma);
printf("输入电话号码:");
scanf("%s",atm1[current].tel);
printf("请输入要存入的金额:");
scanf("%lf",&atm1[current].money);
printf("\n账户建立成功 账户信息:");
printf("账户号码:%s\n",atm1[current].name);
printf("密码:%s\n",atm1[current].mima);
printf("姓名:%s\n",atm1[current].haoma);
printf("电话号码:%s\n",atm1[current].tel);
printf("存入的金额:%lf \n",atm1[current].money);
save();
current++;
return 0;
}
int chaxunzhanghu()
{
char name1[40];
int i;
printf("请输入要查询的账户号码 :");
scanf("%s",name1);
printf("正在处理中,请稍后.......\n");
for(i=0;i<current;i++)
{
if(strcmp(atm1[i].name,name1)==0) //查找账户
{
printf("账户号码:%s\n",atm1[i].name);
printf("密码:%s\n",atm1[i].mima);
printf("姓名:%s\n",atm1[i].haoma);
printf("电话号码:%s\n",atm1[i].tel);
printf("存入的金额:%lf\n",atm1[i].money);
printf("存入信息成功\n 请选择其它操作\n");
save();
return 0;
}
}
printf("用户不存在 请重新输入");
}
int xiugaimima()
{
char mima[20];
char mima2[20];
printf("请输入密码 ");
scanf("%s",mima);
while(1)
{
if(strcmp("00",mima)!=0) //验证原密码
{
printf("密码不正确,请重新输入");
return 0;
}
if(strcmp("00",mima)==0)
break;
}
while(1)
{
printf("输入新密码:");
scanf("%s",mima2);
printf("请重新输入密码:");
scanf("%s",mima);
if(strcmp(mima2,mima)==0)
break;
kaihumima();
}
return 0;
}
int shezhililv()
{
char lilv[40];
printf("当前的利率为 0.025");
printf("请输入新利率为 ");
scanf("%s",lilv);
printf("正在处理中,请稍后.......\n");
save();
printf("利率修改成功 请执行其他操作\n");
return 0;
}
int xiaohu()
{
char haoma[40];
int i;
printf("请输入要注销的卡号");
scanf("%s",haoma);
for(i=0;i<current;i++)
{
if(strcmp(atm1[i].name,haoma)==0) //寻找输入的账户
{
if(i<(current-1))
memmove(&atm1[i],&atm1[i+1],(current-1-i)*sizeof(Atmuser));
current--;
printf("正在处理中,请稍后.......\n");
printf("操作成功!");
save();
return 0;
}
}
printf("正在处理中,请稍后.......\n");
printf("该账户不存在!");
return 1;
}
int admin()
{
char choice3;
char mima1[20];
if(atm==NULL) //初始时设置密码
{
atm=(Atmadmin*)malloc(total*sizeof(Atmadmin));
printf("请设置");
scanf("%s",atm[3].mima1);
save();
}
while(1) //验证密码
{
printf("请输入密码:");
scanf("%s",mima1);
if(strcmp("0",mima1)!=0)
{
printf("密码不正确,请重新输入");
}
if(strcmp("0",mima1)==0)
break;
}
while(1)
{
printf("\t\t\t管理端功能主菜单 \n");
printf("\t\t******************* \n");
printf("\t\t\t1.开户\n");
printf("\t\t\t2.查询账户\n");
printf("\t\t\t3.修改密码\n");
printf("\t\t\t4.设置利率\n");
printf("\t\t\t5.结息\n");
printf("\t\t\t6.销户\n");
printf("\t\t\t0.返回上一级\n");
printf("\t\t******************* \n");
printf("\t请选择:");
choice3=getch();
printf("\n\n");
switch(choice3)
{
case '1': kaihu(); //开户
break;
case '2': chaxunzhanghu(); //查询账户
break;
case '3': xiugaimima(); //修改密码
break;
case '4': shezhililv(); //设置利率
break;
case '5': //jiexi(); //结息
break;
case '6': xiaohu (); //销户
break;
case '0':
return 0;
break;
default:
printf("非法选择,请重新选择\n");
}
}
return 0;
}
六、附录
函数功能
int user(); // 用户端
int admin(); // 管理端
int qukuan(); //取款
int cunkuan(); //存款
int chaxunzhanghu(); //查询账户
int zhuanzhang(); //转账
int xiugai(); //修改密码
int kaihu(); //开户
int kaihumima();
int chaxunzhanghu(); //查询账户
int xiugaimima(); //修改密码
int shezhililv(); //设置利率
int jiexi(); // 结息
int xiaohu (); //销户
这个星期,我们迎来了C语言实训——一次至为重要的实训。在这个星期里,同学们都很认真的做着那20多道实训题目,遇到不懂的互相请教,或…
C语言实训心得10903090113李新程在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为…
C语言实践心得体会在这个星期里,我们在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,…
C语言程序设计实训总结为加强学生的实践动手能力,为贯彻落实教学计划的要求,培养学生的专业实践技能,计算机系05级计算机网络工程与管…
计算机专业实践教学总结为了进一步增强实践教学效果,提高学生计算机编程能力,更好的理论联系实际,根据我院计算机专业专科实践性教学环节…
C语言程序设计实训总结为加强学生的实践动手能力,为贯彻落实教学计划的要求,培养学生的专业实践技能,计算机系05级计算机网络工程与管…
C语言实训心得10903090113李新程在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。在为…
C语言程序设计实训总结李爱强通过此次实训,同学们能够利用C语言面向过程的编程思想来完成系统的设计,熟练掌握C语言的基本知识和技能;…
计算机专业实践教学总结为了进一步增强实践教学效果,提高学生计算机编程能力,更好的理论联系实际,根据我院计算机专业专科实践性教学环节…
这个星期,我们迎来了C语言实训——一次至为重要的实训。在这个星期里,同学们都很认真的做着那20多道实训题目,遇到不懂的互相请教,或…
一、设计任务首先简述设计目标、选题意义与要实现的系统功能描述。正文格式是每段落首行缩进2个汉字,字体:宋体,字号:小四,行距:多倍…