69,336
社区成员
发帖
与我相关
我的任务
分享
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 100
struct Date
{
int year;
int month;
int day;
};
struct client
{
char name[20]; //帐户名
struct Date birthday; //生日
char sex; //性别
char phone[20]; //手机号
char account[20]; //账号
char password[15]; //密码
char identity[20]; //身份证号
int balance; //账户余额
};
struct client dear[N];
void welcome(); //显示欢迎界面
int menu(); //初始界面 功能包括 注册 登录 用int返回一个数值在switch中
void gongneng(int n); //账户功能界面:功能包括 这里要用数组元素作为实参 在int login中用户登录后只能查看自己的信息
int roll(client per[],int n); //新用户注册 register为关键词
void login(client per[],int n); //登录账号
void display(client per[],int n); //管理账号可以查看所有信息
void query(client per[],int n);
void qukuan(client per[],int n);
void cunkuan(client per[],int n);
void gaimi(client per[],int n);
void save(client per[],int n); //写入文本文件
void read(client per[],int *n); //读入文本文件
void main()
{
int n=0;
welcome(); //显示欢迎界面
read(dear,&n);//首先读入系统已经保存的信息
system("pause");
for(;;)
{
switch(menu())
{
case 1:
printf("\n\t注册账户\n");
n=roll(dear,n);
break;
case 2:
printf("\n\t\t\t登录账户\n");
login(dear,n);
break;
case 3:
printf("\n\t管理权限\n");
display(dear,n);
printf("\t");
system("pause");
break;
case 4:
printf("\n\t保存信息\n");
save(dear,n);
printf("\t");
system("pause");
break;
case 5:
printf("\n是否需要保存?(y/n)\n");
fflush(stdin);//getchar();
char c=getchar();
if(c=='Y'||c=='y')
save(dear,n);
printf("\n\t\t谢谢使用,再见!\n");
printf("\n\t\t");
system("pause");
exit(0);
}
}
}
void welcome()
{
printf("\n\n\n\t\t 欢迎使用银行账户管理系统");
printf("\t\t\t 版本号1.0\n\n");
printf("\n\n\n\n\n\t\t\t 2018年1月3日");
}
int menu()
{
int select; //初始化
do{ //do while 先无条件执行一次
system("cls"); // 清屏
printf("\t\t*****功能界面******\n");
printf("\t\t \n");
printf("\t\t 1.注册账户 \n");
printf("\t\t 2.登录账户 \n");
printf("\t\t 3.管理权限 \n");
printf("\t\t 4.保存信息 \n");
printf("\t\t 5.退出程序 \n");
printf("\t\t\n");
printf("\t\t 请您选择(1-5):");
scanf("%d",&select);
}while(select<1||select>5);
return select;
}
int roll(client per[],int n)
{
int i=0;
printf("请输入您的真实信息!\n");
printf("帐户名:");
scanf("%s", per[n+1].name);
printf("输入生日年月日用空格隔开:");
scanf("%d%d%d", &per[n+1].birthday.year,&per[n+1].birthday.month,&per[n+1].birthday.day);
printf("请输入性别(m/f)");
getchar();
scanf("%c",&per[n+1].sex);
printf("手机号:");
scanf("%s",per[n+1].phone);
printf("账号(100以内):");
scanf("%s",per[n+1].account);
printf("密码:");
scanf("%s",per[n+1].password);
if(n+1==N)
{
printf("\n\t数组已满,不能继续添加!");
return(n);
}
return (n+1);
}
void login(client per[],int n)
{
int i,k,a,b;
char kahao[20],mima[20];
printf("请输入您的卡号:");
scanf("%d",&i);
printf("请再次输入您的卡号与密码:");
scanf("%s%s",kahao,mima);
a=strcmp(per[i].account,kahao);
b=strcmp(per[i].password,mima);
if(a==0&&b==0) {
system("cls"); // 清屏
printf("登录成功!请稍等…………\n");
k=i; //k记录该客户 方便后续的查询 改密等 功能
system("pause");
gongneng(k); //登录成功 跳出功能界面
} else {
printf("登录失败!请继续…………\n");
}
}
void gongneng(int n)
{
int select;
do
{
system("cls"); // 清屏
printf("\t\t*****功能界面******\n");
printf("\t\t\n");
printf("\t\t 1.查询 \n");
printf("\t\t 2.取款 \n");
printf("\t\t 3.存款 \n");
printf("\t\t 4.改密 \n");
printf("\t\t 5.登出 \n");
printf("\t\t \n");
printf("\t\t 请您选择(1-5)");
scanf("%d",&select);
if(select<1||select>5)
{
printf("\t\t非法输入!\n");
}
}while(select<1||select>5); //do while 先执行一次 如果select错误 不在1到5内 则继续执行 如果在跳出
while(select!=1&&select!=2&&select!=3&&select!=4)
{
printf("输入错误,请重新选择:");
scanf("%d",&select);
}
if(select==1) {
printf("\t查询:");
query(dear,n);
return;
}
if(select==2) {
printf("\t取款:");
qukuan(dear,n);
return;
}
if(select==3) {
printf("\t存款:");
cunkuan(dear,n);
return;
}
if(select==4) {
printf("\t改密:");
gaimi(dear,n);
return;
}
}
void display(client per[],int n)
{
int i;
char qx[]={"12345"}; //权限密码12345
char jy[9]; //检验是否为超管
printf("请输入密码!");
scanf("%s",jy);
if(strcmp(qx,jy)!=0)
printf("密码错误!");
return; //跳出子函数
if(strcmp(qx,jy)==0)
printf(" \n"); /*显示格式*/
printf("帐户名 生日 性别 手机号 账号 密码 身份证号 账户余额 \n");
printf(" \n");
for(i=0;i<n;i++)
{
printf("%-5s%-5d%d%d%-5c%-15s%-15s%-15s%-15s%-5d\n",
per[i].name,
per[i].birthday.year,
per[i].birthday.month,
per[i].birthday.day,
per[i].sex,
per[i].phone,
per[i].account,
per[i].password,
per[i].identity,
per[i].balance);
if(i+1>1&&(i+1)%10==0) //显示10个人信息暂停
{
printf("\t \n");
printf("\t");
system("pause");
printf("\t \n");
}
}
printf(" \n");
system("pause");
}
void query(client per[],int n)
{
printf(" -\n"); /*显示格式*/
printf("帐户名 生日 性别 手机号 账号 密码 身份证号 账户余额 \n");
printf(" \n");
printf("%-5s%-5d%d%d%-5c%-15s%-15s%-15s%-15s%-5d\n",
per[n].name,
per[n].birthday.year,
per[n].birthday.month,
per[n].birthday.day,
per[n].sex,
per[n].phone,
per[n].account,
per[n].password,
per[n].identity,
per[n].balance);
}
void qukuan(client per[],int n)
{
int w;
printf("请输入取款钱数:");
scanf("%d", &w);
if(w>per[n].balance)
printf("您的账户余额为%d,您的余额不够",per[n].balance);
if(w<=per[n].balance)
printf("取款成功!");
per[n].balance -= w;
return;
}
void cunkuan(client per[],int n)
{
int w;
printf("请输入存款钱数:");
scanf("%d", &w);
per[n].balance += w;
printf("存款成功!");
return;
}
void gaimi(client per[],int n)
{
char mm[20];
printf("请输入您的原密码:");
scanf("%s",mm);
if(strcmp(per[n].password,mm)!=0){
printf("密码错误!");
return;
}
if(strcmp(per[n].password,mm)==0) {
printf("密码验证成功!请输入您想修改的新密码:");
scanf("%s",per[n].password);
}
}
void save(client per[],int n)
{
int i=0;
FILE *fp; /*定义文件指针*/
printf("\t保存到文件...\n");
if((fp=fopen("d:\\information.txt","w"))==NULL)
{
printf("\t无法打开文件\n");
system("pause");
return;
}
fprintf(fp,"******************************************信息******************************************\n");
fprintf(fp,"帐户名 生日 性别 手机号 账号 密码 身份证号 账户余额 \n");
fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
while(i<n)
{
fprintf(fp,"%-5s\t%d%d%d\t%-5c\t%-10s\t%-10s\t%-10s\t%-10s\t%d\n",
per[i].name,
per[i].birthday.year,
per[i].birthday.month,
per[i].birthday.day,
per[i].sex,per[i].phone,
per[i].account,
per[i].password,
per[i].identity,
per[i].balance);
i++;
}
fclose(fp); /*关闭文件*/
printf("保存成功!\n");
}
void read(client per[],int *n)
{ // main用地址传递,指针变量n记录文件中读入记录的个数
int i=0;
FILE *fp; /*定义文件指针*/
printf("\t读文件...\n");
if((fp=fopen("d:\\data.txt","r"))==NULL)
{
printf("\t无法打开文件\n");
system("pause");
return;
}
char sss[200];
int flag=1;
fgets(sss,200,fp); //读第一行
fgets(sss,200,fp); //读第二行
fgets(sss,200,fp); //读第三行
while(flag)
{
flag=fscanf(fp,"%s %d %d %d %c %s %s %s %s %d\n",
per[i].name,
&per[i].birthday.year,
&per[i].birthday.month,
&per[i].birthday.day,
&per[i].sex,
per[i].phone,
per[i].account,
per[i].password,
per[i].identity,
&per[i].balance);
if(flag!=EOF)
{
i++;
}
else
break;
}
fclose(fp); /*关闭文件*/
*n=i;
printf("文件已读入,有%d个记录!\n",i);
}
参考一下吧,
都是一些基本的语法错误。为什么一下子写出来这么多代码,而不在没写完一个功能就测试一下呢,已下载出现这么多error不感觉特别难改吗?一些逻辑错误也一并修改了。建议对照代码看一下