求c语言实验代码和详解,要求是银行储蓄系统,要能提供以下几个基本功能: (1) 工作人员根据口令进
发布网友
发布时间:2022-04-27 02:12
我来回答
共2个回答
热心网友
时间:2023-11-17 07:01
/*时间有限bug应该蛮多没改多少,操作不难只是麻烦了点毕竟技术有限,不少要求未完成你可以参考一下
事先在工程目录下创建001.txt作为存单文件
写入的顺序是,存期以月为单位
存单编号 储户姓名 身份证编号 住址 联系电话 存款金额 存期 密码
参考数据如下,直接复制,最后不要加换行
1001 张三 340755199212050866 花园路22号 13955667788 20000 48 123321
1002 李四 340866199305252233 逗比小区2栋11号 13155669988 3000 20 123321
1003 王五 34000000000000000X 沿江路75号 18666667777 200 2 123321
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//以下,利率
#define r1 0.0035//活期,三个月以下默认活期
#define r2 0.0135//三个月
#define r3 0.0155//半年
#define r4 0.0175//一年
#define r5 0.0235//两年
typedef struct Check//账单结构体
{
//存单编号,储户姓名,身份证编号,住址,联系电话,存款金额,存期,密码
char num[10];
char holder[8];
char ID[20];
char address[30];
char tel[15];
float money;
int time;//存期,单位 月
//int rate;//感觉利率没有必要加入
char pass[8];
}check;
check a[20];//存单数组
char command[10]="123654";//登陆口令
int sum;//存单数目
void menu();
void add();
void search();
void alter();
void coalter();
void main_menu();
void init()//初始化,读入txt数据
{
FILE *p;
int i=0;
p=fopen("001.txt","r");
if(!p)
{
return;
}
while(!feof(p))
{
fscanf(p,"%s%s%s%s%s%f%d%s",a[i].num,a[i].holder,a[i].ID,a[i].address,a[i].tel,&a[i].money,&a[i].time,a[i].pass);
/*if(a[i].time<3)a[i].rate=r1;
else if(a[i].time<6)a[i].rate=r2;
else if(a[i].time<12)a[i].rate=r3;
else if(a[i].time<24)a[i].rate=r4;
else a[i].rate=r5;*/
i++;
}
sum=i;//记录账单数目
fclose(p);
}
int main()//main函数
{
init();
main_menu();
}
void main_menu()//登陆界面
{
system("cls");
char password[10];
printf("======欢迎使用银行系统======\n\n\n请输入登陆口令:");
while(1)
{
scanf("%s",password);
if(strcmp(password,command)==0)
{
menu();
}
else
printf("口令错误请重新输入:");
}
}
void menu()//主界面
{
system("cls");
char c;
printf("======****选择操作****======\n\n");
printf("\t1.存单录入\n");
printf("\t2.存单查询\n");
printf("\t3.储户操作\n");
printf("\t4.口令修改\n");
printf("\t5.返回登陆\n");
printf("\t选择:");
scanf("%c",&c);
scanf("%c",&c);
if(c>='1'&&c<='5')
{
switch(c)
{
case '1':add();break;
case '2':search();break;
case '3':alter();break;
case '4':coalter();break;
case '5': main_menu();
}
}
else return;
}
void add()//添加存单
{
system("cls");
char c;
int i;
printf("======****添加操作****======\n");
printf("请输入添加存单编号:");
scanf("%s",a[sum].num);
for(i=0;i<sum;i++)
{
if(strcmp(a[sum].num,a[i].num)==0)
{
printf("该存单号已存在,是否重新输入(y确认,其他键返回):");
scanf("%c",&c);
scanf("%c",&c);
if(c=='y'||c=='Y')add();
else menu();
break;
}
}//确保没有重复单号
printf("请完善存单信息(不同项用空格间隔,请确认信息正确)\n");
printf("储户姓名 身份证编号 住址 联系电话 存款金额 存期 密码\n");
scanf("%s",a[sum].holder);
c=getchar();
scanf("%s",a[sum].ID);
c=getchar();
scanf("%s",a[sum].address);
c=getchar();
scanf("%s",a[sum].tel);
c=getchar();
scanf("%f",&a[sum].money);
c=getchar();
scanf("%d",&a[sum].time);
c=getchar();
scanf("%s",a[sum].pass);
/*if(a[i].time<3)a[sum].rate=r1;
else if(a[i].time<6)a[sum].rate=r2;
else if(a[i].time<12)a[sum].rate=r3;
else if(a[i].time<24)a[sum].rate=r4;
else a[sum].rate=r5;*/
sum++;//以上利率可考虑是否填入
FILE *p;
printf("录入存单信息...\n");
p=fopen("001.txt","w");
fclose(p);
p=fopen("001.txt","a");
for(i=0;i<sum;i++)
fprintf(p,"%s %s %s %s %s %.2f %d %s\n",a[i].num,a[i].holder,a[i].ID,a[i].address,a[i].tel,a[i].money,a[i].time,a[i].pass);
fclose(p);
printf("录入成功...\n");
printf("是否继续添加存单(y确认,其他键返回):");
scanf("%c",&c);
scanf("%c",&c);
if(c=='y'||c=='Y')add();
else menu();
}
void search()//查找
{
system("cls");
char c;
int i;
char nu[10];
printf("======****查询操作****======\n\n");
printf("请输入查询存单号:");
scanf("%s",nu);
for(i=0;i<sum;i++)
if(strcmp(nu,a[i].num)==0)
{
printf("查询存单信息如下\n");
printf("储户姓名:%s\t身份证:%s\n",a[i].holder,a[i].ID);
printf("住址:%s\n电话:%s\t金额:%.2f\n",a[i].address,a[i].tel,a[i].money);
printf("存期:%d\t密码:%s\n",a[i].time,a[i].pass);
printf("\n任意键输入返回:");
scanf("%c",&c);
scanf("%c",&c);
menu();
}
printf("未查找到该账单,是否重新查找(y确认,其他键返回):");
scanf("%c",&c);
scanf("%c",&c);
if(c=='y'||c=='Y')add();
else menu();
}
void alter()//取款
{
system("cls");
char c;
int i;
float rate;
FILE *p;
char nu[10];
printf("======****取款操作****======\n\n");
printf("请输入存单编号:");
scanf("%s",nu);
for(i=0;i<sum;i++)
if(strcmp(nu,a[i].num)==0)
{
printf("请输入密码:");
scanf("%s",nu);
if(strcmp(nu,a[i].pass)==0)
{
printf("取款成功\n");
if(a[i].time<3)rate=r1;
else if(a[i].time<6)rate=r2;
else if(a[i].time<12)rate=r3;
else if(a[i].time<24)rate=r4;
else rate=r5;//得利率
printf("支付:本金%.2f 利率%.2f%% 利息%.2f\n",a[i].money,rate*100,a[i].money*rate);
printf("更新存单数据...\n");
p=fopen("001.txt","w");
fclose(p);
p=fopen("001.txt","a");
//以下,删除该存单(最后一单覆盖本存单)
strcpy(a[i].num,a[sum-1].num);
strcpy(a[i].holder,a[sum-1].holder);
strcpy(a[i].ID,a[sum-1].ID);
strcpy(a[i].address,a[sum-1].address);
strcpy(a[i].tel,a[sum-1].tel);
a[i].money=a[sum-1].money;
a[i].time=a[sum-1].time;
strcpy(a[i].pass,a[sum-1].pass);
sum--;
for(i=0;i<sum;i++)
fprintf(p,"%s %s %s %s %s %.2f %d %s\n",a[i].num,a[i].holder,a[i].ID,a[i].address,a[i].tel,a[i].money,
a[i].time,a[i].pass);
fclose(p);
printf("更新成功...\n");
printf("\n任意键输入返回:");
scanf("%c",&c);
scanf("%c",&c);
menu();
}
printf("密码不正确,请重新执行该操作...\n");
printf("\n任意键输入重新执行该操作:");
scanf("%c",&c);
scanf("%c",&c);
alter();
}
printf("未查找到该账单,是否重新执行(y确认,其他键返回):");
scanf("%c",&c);
scanf("%c",&c);
if(c=='y'||c=='Y')add();
else menu();
}
void coalter()//修改登陆口令
{
system("cls");
char c;
printf("======****口令修改****======\n\n");
printf("请输入新的登陆口令:");
scanf("%s",command);
printf("修改成功...");
printf("\n任意键输入返回:");
scanf("%c",&c);
scanf("%c",&c);
menu();
}
热心网友
时间:2023-11-17 07:01
我也想知道答案