/*******************************************************************************************************/ /*题目十八 系统用户管理系统 【说明及要求】
设系统用户信息(用户代码,用户名,密码,系统身份)存放在一个名为user。txt的文件中, 请编写程序实现用户信息的新增、修改密码、删除功能(实现新增和删除时,用户的系统身份必须是“系统管理员\"),
并能模拟用户的登陆。如果输入的用户代码和密码在文件中存在,
则显示欢迎某某用户登陆的界面和操作菜单(N。新增、M.修改密码、D。删除), 以便用户完成相应操作,如果输入错误则提示用户重新输入(最多可以尝试3次). 【提示】
(1)定义一个结构体表示用户信息;
(2)分别编写函数实现用户信息的新增、修改密码、删除、用户登陆等功能; (3)用户的尝试登陆的次数要通过一个静态变量实现; (4)编写main函数进行演示。*/
/*******************************************************************************************************/ /*******************************************************************************************************/ #include〈stdio.h〉 #include #define H 100 /*最大允许保存学生信息数*/ #define pr printf #define S scanf struct yonghuxx/*用户信息*/ { int daima;//用户代码 char sname [17];//用户名 char mima[17];//密码 char shengf[9]; //系统省份 }; struct yonghuxx s; int p=0;//普通用户p=0;管理员用户p=1 int h;//信息数 int u=0;//强制管理员标记,如果系统使用时数据库还没有任何用户信息,则把第一个打开系统的用户设置为管理员权限u=1 int xiugai();//修改密码 int shanchu();//删除 void denglu();//用户登陆 int shenqing();//新增,申请账号 int fuzhi(char *sFile, char *dFile) ;//将一个文件复制到另一个文件 int guanliyuan();/*管理员*/ int putongyh();/*普通用户*/ /*******************************************************************************************************/ /*******************************************************************************************************/ /*************/ /***主函数****/ /*************/ main() { char n; char v;//清空缓冲区暂存变量 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(); else if(n==’S’)shenqing(); else if(n==’Q')break; else pr(”输入不正确,请重新输入,(注意区分大小写)\"); Sleep(1000); system(\"cls\"); /*清屏, stdlib.h中函数*/ } pr(”你按了Q,系统即将关闭\\n”); Sleep(1000);/*沉睡1秒,windows。h中的函数*/ return 0; } /*******************************************************************************************************/ /*******************************************************************************************************/ /***************/ /*****复制******/ /***************/ int fuzhi(char *dFile, char *sFile) //将sFile指向的文件复制到dFile中 { FILE *sfp,*dfp; if ((sfp=fopen(sFile,\"r\"))==NULL) return 0; if ((dfp=fopen(dFile,\"w”))==NULL) return 0; 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); } /*******************************************************************************************************/ /*******************************************************************************************************/ /**************/ /***用户登录***/ /**************/ void denglu() {FILE *fp; char v;//清空缓冲区暂存变量 char c[18],d[18]; int e,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\ 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*/ } } /*******************************************************************************************************/ /*******************************************************************************************************/ /**************/ /***申请账号***/ /**************/ int shenqing()//申请账号 { char v;//清空缓冲区暂存变量 char m[18],a[18],b[18]; int i=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; } else pr(\"输入错误,请重新输入\"); } } if(p==0)/*普通用户权限*/ { s.daima=0; strcpy( s.shengf,\"普通用户”); } } for(;;) { j=0; pr(\"请输入用户名(16个以下字母或数字,注意区分大小写:)\\n”); scanf(”%s\); while ( (v= getchar()) != '\\n' && v != EOF ) ;//清空缓冲区 if((fp=fopen(”user。txt”,”r”))==NULL){fp=fopen(\"user.txt\",\"w”);goto lable;} 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\); 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; else pr(\"您输入的密码与第一次输入不相同,\"); } 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中的函数*/ return 0; } } } /*******************************************************************************************************/ /*******************************************************************************************************/ /*******************************************************************************************************/ /*******************************************************************************************************/ /*******************/ /****管理员权限*****/ /*******************/ int guanliyuan() {char v;//清空缓冲区暂存变量 char n; pr(”\\n\\007\"); for(;;) { pr(\"管理员菜单:\\nD修改用户信息;X新增;S删除;Q退出\\n\\007\"); scanf(”%c”,&n); while ( (v= getchar()) != '\\n' && v != EOF ) ;//清空缓冲区 if(n=='D')xiugai();//修改密码 else if(n=='X')shenqing();//新增,申请账号 else if(n==’S’)shanchu();//删除 else if(n==’Q')break; else pr(”输入不正确,请重新输入,(注意区分大小写)”); Sleep(1000); system(\"cls\"); /*清屏, stdlib.h中函数*/ } pr(\"你按了Q,系统即将关闭\\n\"); Sleep(1000);/*沉睡1秒,windows。h中的函数*/ return 0; } /*******************/ /***普通用户权限****/ /*******************/ int putongyh() {char v;//清空缓冲区暂存变量 char n; 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();//修改密码 else if(n=='S’)shenqing();//新增,申请账号 else if(n==’Q')break; else pr(\"输入不正确,请重新输入,(注意区分大小写)\"); Sleep(1000); system(\"cls\"); /*清屏, stdlib.h中函数*/ } pr(”你按了Q,系统即将关闭\\n”); Sleep(1000);/*沉睡1秒,windows.h中的函数*/ return 0; } int xiugai() { char v;//清空缓冲区暂存变量 char *dFile=\"user。txt”; char *sFile=”fuser.txt”; int a;//用户代码 char b[17];//用户名 char c[17];//密码 char d[9]; //系统省份 char e[17];//用户名2 char f[17];//密码2 int g=0; FILE *sfp,*dfp; if((dfp=fopen(dFile,”r”))==NULL) //打开user.txt return 0; 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();return 0;} if(s.daima==1 && strcmp(e,b)!=0){pr(”对不起:%s是管理员,你不可以修改对方的资料\\n\\n任意键返回\);getchar();return 0;} if(s.daima==1) { pr(\"你现在是管理员,不修改管理权限请输入1,降低管理权限请输入0;\\n\\n”); for(;;) { scanf(”%d”,&a); if(a ==1){pr(\"你仍然是管理员\\n\\n”);strcpy(d,”系统管理员\");break;} else if(a ==0){pr(\"你将成为普通用户\\n\\n\");strcpy(d,”普通用户”);break;} else pr(\"输入错误,请重新输入\\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;} else if(a ==0){pr(\"%s仍然是普通用户\\n\\n\} else pr(\"输入错误,请重新输入\\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)return 0; if((dfp=fopen(dFile,”w\"))==NULL)return 0; 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); } int shanchu() { char *dFile=”user。txt\"; char *sFile=”fuser.txt”; char a[18]; FILE *sfp,*dfp; if(p=1) { pr(”请输入你要删除的用户名\"); scanf(\"%s”,a); } else strcpy(a,s.sname); fuzhi(sFile,dFile); if ((sfp=fopen(sFile,”r”))==NULL) return 0; if ((dfp=fopen(dFile,\"w”))==NULL) return 0; while(!feof(sfp)) { fscanf(sfp,”%d %s %s %s\\n\",&s.daima,s。sname,s。mima,s.shengf); if(strcmp(s.sname,a)==0){continue;} fprintf(dfp,”%d %s %s %s\\n\。daima,s.sname,s。mima,s。shengf); } fclose(sfp); fclose(dfp); pr(”恭喜你删除用户%s成功\\n\\n任意键返回”,a); getchar(); return(0); } 因篇幅问题不能全部显示,请点此查看更多更全内容