h〉
#include〈process。
h>
#defineH100/*最大允许保存学生信息数*/
#defineprprintf
#defineSscanf
structyonghuxx/*用户信息*/
{
intdaima;//用户代码
charsname[17];//用户名
charmima[17];//密码
charshengf[9];//系统省份
};
structyonghuxxs;
intp=0;//普通用户p=0;管理员用户p=1
inth;//信息数
intu=0;//强制管理员标记,如果系统使用时数据库还没有任何用户信息,则把第一个打开系统的用户设置为管理员权限u=1
intxiugai();//修改密码
intshanchu();//删除
voiddenglu();//用户登陆
intshenqing();//新增,申请账号
intfuzhi(char*sFile,char*dFile);//将一个文件复制到另一个文件
intguanliyuan();/*管理员*/
intputongyh();/*普通用户*/
/*******************************************************************************************************/
/*******************************************************************************************************/
/*************/
/***主函数****/
/*************/
main()
{
charn;
charv;//清空缓冲区暂存变量
pr("\n\007");
for(;;)
{
pr("主菜单:
\nD登录;”);
pr(”S申请账号;”);
//觉得应该允许普通用户申请账号
pr(”Q退出\n\007");
scanf(”%c”,&n);
/*清空输入流,通过while循环把输入流中的余留数据“吃”掉*/
while((v=getchar())!
='\n’&&v!
=EOF);//清空缓冲区
if(n==’D’)denglu();
elseif(n==’S’)shenqing();
elseif(n==’Q')break;
elsepr(”输入不正确,请重新输入,(注意区分大小写)");
Sleep(1000);
system("cls");/*清屏,stdlib.h中函数*/
}
pr(”你按了Q,系统即将关闭\n”);
Sleep(1000);/*沉睡1秒,windows。
h中的函数*/
return0;
}
/*******************************************************************************************************/
/*******************************************************************************************************/
/***************/
/*****复制******/
/***************/
intfuzhi(char*dFile,char*sFile)//将sFile指向的文件复制到dFile中
{
FILE*sfp,*dfp;
if((sfp=fopen(sFile,"r"))==NULL)
return0;
if((dfp=fopen(dFile,"w”))==NULL)
return0;
while(!
feof(sfp))
{
fscanf(sfp,"%d%s%s%s\n”,&s。
daima,s.sname,s。
mima,s.shengf);
fprintf(dfp,"%d%s%s%s\n”,s.daima,s.sname,s。
mima,s。
shengf);
}
fclose(sfp);
fclose(dfp);
return(0);
}
/*******************************************************************************************************/
/*******************************************************************************************************/
/**************/
/***用户登录***/
/**************/
voiddenglu()
{FILE*fp;
charv;//清空缓冲区暂存变量
charc[18],d[18];
inte,f,i,j,k=0;
if((fp=fopen(”user。
txt”,"r"))==NULL||feof(fp)){pr("由于你是第一个进入本系统的用户,\n你自动成为管理员\n请设置自己的管理员账号和密码\n");p=1;u=1;shenqing();guanliyuan();}//自动成为管理员
else
{for(i=0;i〈3;i++)
{
puts("请输入用户名:
”);
scanf("%s",c);
while((v=getchar())!
='\n’&&v!
=EOF);//清空缓冲区
puts(”请输入密码:
");
scanf("%s”,d);
while((v=getchar())!
='\n’&&v!
=EOF);//清空缓冲区
rewind(fp);
while(!
feof(fp))
{j++;
fscanf(fp,"%d%s%s%s",&s。
daima,s。
sname,s.mima,s.shengf);
e=strcmp(s.sname,c);
f=strcmp(s.mima,d);
system(”cls");/*清屏,stdlib。
h中函数*/
if(e==0,f==0)
{
if(s。
daima==1)
{printf("欢迎管理员%s:
\n”,s。
sname);p=1;guanliyuan();}/*管理员*/
else
{pr(”欢迎%s使用用户管理系统”,s.sname);p=0;putongyh();}/*普通用户*/
}
else
printf("用户名或密码错误!
请重新输入!
!
!
:
\n”);
}
}
pr("您的输入次数超过3次,系统关闭");
Sleep(2000);/*沉睡2秒,windows。
h中的函数*/
exit(0);/*关闭系统,process.h*/
}
}
/*******************************************************************************************************/
/*******************************************************************************************************/
/**************/
/***申请账号***/
/**************/
intshenqing()//申请账号
{
charv;//清空缓冲区暂存变量
charm[18],a[18],b[18];
inti=0,j=0;
FILE*fp;
if(u==1)
{
s。
daima=1;
strcpy(s.shengf,”系统管理员");
}
else
{
if(p==1)
{
for(;;)
{
pr(”申请管理员请输入1,申请普通用户请输入0\n");
scanf("%d”,&i);
if(i==1)
{
s。
daima=1;
strcpy(s。
shengf,"系统管理员”);
break;
}
if(i==0)
{
s.daima=0;
strcpy(s。
shengf,”普通用户”);
break;
}
elsepr("输入错误,请重新输入");
}
}
if(p==0)/*普通用户权限*/
{
s.daima=0;
strcpy(s.shengf,"普通用户”);
}
}
for(;;)
{
j=0;
pr("请输入用户名(16个以下字母或数字,注意区分大小写:
)\n”);
scanf(”%s",m);
while((v=getchar())!
='\n'&&v!
=EOF);//清空缓冲区
if((fp=fopen(”user。
txt”,”r”))==NULL){fp=fopen("user.txt","w”);gotolable;}
rewind(fp);
while(!
feof(fp))
{
fscanf(fp,”%d%s%s%s\n”,&s。
daima,s.sname,s.mima,s。
shengf);
if(strcmp(s。
sname,m)==0)
{j=1;break;}
}
fclose(fp);
if(j==1)pr("用户名已存在,请重新输入”);
else
lable:
{
pr("该用户名可以使用!
\n”);
for(;;)
{
for(;;)
{
pr(”请输入密码(6至16个字母或数字,注意区分大小写:
):
\n");
scanf("%s",a);
while((v=getchar())!
='\n’&&v!
=EOF);//清空缓冲区
{for(i=0;i<18;i++)if(a[i]==’\0’)break;if(i>=6&&i<=16)break;pr("密码长度不正确,请重新输入\n");}
}
pr(”请再次输入密码\n");
scanf("%s”,b);
while((v=getchar())!
='\n'&&v!
=EOF);//清空缓冲区
if(strcmp(a,b)==0)break;
elsepr("您输入的密码与第一次输入不相同,");
}
fp=fopen(”user.txt”,"at”);
fprintf(fp,"%d%s%s%s\n”,s。
daima,m,a,s.shengf);
fclose(fp);
pr(”恭喜你申请账号成功\n你的账号是%s,密码是%s\n请妥善保管你的账号和密码\n\n任意键返回”,m,a);
getchar();
system(”cls”);/*清屏,stdlib。
h中的函数*/
return0;
}
}
}
/*******************************************************************************************************/
/*******************************************************************************************************/
/*******************************************************************************************************/
/*******************************************************************************************************/
/*******************/
/****管理员权限*****/
/*******************/
intguanliyuan()
{charv;//清空缓冲区暂存变量
charn;
pr(”\n\007");
for(;;)
{
pr("管理员菜单:
\nD修改用户信息;X新增;S删除;Q退出\n\007");
scanf(”%c”,&n);
while((v=getchar())!
='\n'&&v!
=EOF);//清空缓冲区
if(n=='D')xiugai();//修改密码
elseif(n=='X')shenqing();//新增,申请账号
elseif(n==’S’)shanchu();//删除
elseif(n==’Q')break;
elsepr(”输入不正确,请重新输入,(注意区分大小写)”);
Sleep(1000);
system("cls");/*清屏,stdlib.h中函数*/
}
pr("你按了Q,系统即将关闭\n");
Sleep(1000);/*沉睡1秒,windows。
h中的函数*/
return0;
}
/*******************/
/***普通用户权限****/
/*******************/
intputongyh()
{charv;//清空缓冲区暂存变量
charn;
pr(”\n\007”);
for(;;)
{
pr("用户菜单:
\nD修改密码;");
pr(”S申请账号;");
//觉得应该允许普通用户申请账号
pr("Q退出\n\007");
scanf("%c”,&n);
while((v=getchar())!
='\n’&&v!
=EOF);//清空缓冲区
if(n==’D’)xiugai();//修改密码
elseif(n=='S’)shenqing();//新增,申请账号
elseif(n==’Q')break;
elsepr("输入不正确,请重新输入,(注意区分大小写)");
Sleep(1000);
system("cls");/*清屏,stdlib.h中函数*/
}
pr(”你按了Q,系统即将关闭\n”);
Sleep(1000);/*沉睡1秒,windows.h中的函数*/
return0;
}
intxiugai()
{
charv;//清空缓冲区暂存变量
char*dFile="user。
txt”;
char*sFile=”fuser.txt”;
inta;//用户代码
charb[17];//用户名
charc[17];//密码
chard[9];//系统省份
chare[17];//用户名2
charf[17];//密码2
intg=0;
FILE*sfp,*dfp;
if((dfp=fopen(dFile,”r”))==NULL)//打开user.txt
return0;
if(p=1)
{
strcpy(e,s.sname);
pr("请输入你要修改密码的用户名”);
scanf("%s”,b);
while((v=getchar())!
=’\n'&&v!
=EOF);//清空缓冲区
while(!
feof(dfp))
{
fscanf(dfp,"%d%s%s%s\n”,&s.daima,s。
sname,s。
mima,s。
shengf);
if(strcmp(s.sname,b)==0){g=1;break;}//找到所输入的用户名
}
fclose(dfp);//关闭user。
txt
if(g==1){pr("没有%s\n\n任意键返回");getchar();return0;}
if(s.daima==1&&strcmp(e,b)!
=0){pr(”对不起:
%s是管理员,你不可以修改对方的资料\n\n任意键返回",a);getchar();return0;}
if(s.daima==1)
{
pr("你现在是管理员,不修改管理权限请输入1,降低管理权限请输入0;\n\n”);
for(;;)
{
scanf(”%d”,&a);
if(a==1){pr("你仍然是管理员\n\n”);strcpy(d,”系统管理员");break;}
elseif(a==0){pr("你将成为普通用户\n\n");strcpy(d,”普通用户”);break;}
elsepr("输入错误,请重新输入\n\n");
}
}
else
{
pr(”%s是普通用户,提高他的管理权限请输入1,否则输入0;\n\n”,b);
for(;;)
{
scanf("%d”,&a);
while((v=getchar())!
=’\n’&&v!
=EOF);//清空缓冲区
if(a==1){pr("%s成为管理员\n\n”,s.sname);strcpy(s。
shengf,"系统管理员");break;}
elseif(a==0){pr("%s仍然是普通用户\n\n",s.sname);break;}
elsepr("输入错误,请重新输入\n\n”);
}
}
}
else
{
a=0;
strcpy(d,"普通用户”);
}
for(;;)
{
pr("现在请输入新密码\n");
scanf("%s”,c);
while((v=getchar())!
='\n'&&v!
=EOF);//清空缓冲区
pr("请再次输入新密码\n”);
scanf(”%s”,f);
while((v=getchar())!
=’\n’&&v!
=EOF);//清空缓冲区
if(strcmp(f,c)==0)break;
pr("两次输入不相同,请重新输入\n");
}
fuzhi(sFile,dFile);
if((sfp=fopen(sFile,”r”))==NULL)return0;
if((dfp=fopen(dFile,”w"))==NULL)return0;
while(!
feof(sfp))
{
fscanf(sfp,”%d%s%s%s\n”,&s。
daima,s.sname,s.mima,s。
shengf);
if(strcmp(s。
sname,b)==0){s。
daima=a;strcpy(s.mima,c);strcpy(s.shengf,d);}
fprintf(dfp,"%d%s%s%s\n”,s.daima,s.sname,s.mima,s。
shengf);
}
fclose(dfp);
fclose(sfp);
pr("恭喜你修改用户信息成功,%s的新密码是%s;系统身份是%s\n\n按任意键返回”,b,c,d);
getchar();
return(0);
}
intshanchu()
{
char*dFile=”user。
txt";
char*sFile=”fuser.txt”;
chara[18];
FILE*sfp,*dfp;
if(p=1)
{
pr(”请输入你要删除的用户名");
scanf("%s”,a);
}
else