1、/*/*/*题目十八 系统用户管理系统【说明及要求】设系统用户信息(用户代码,用户名,密码,系统身份)存放在一个名为 user.txt 的文件中,请编写程序实现用户信息的新增、修改密码、删除功能(实现新增和删除时,用户的系统身份必须是“系统管理员” ) ,并能模拟用户的登陆。如果输入的用户代码和密码在文件中存在,则显示欢迎某某用户登陆的界面和操作菜单(N. 新增、M.修改密码、D.删除) ,以便用户完成相应操作,如果输入错误则提示用户重新输入(最多可以尝试 3 次) 。【提示】(1)定义一个结构体表示用户信息;(2)分别编写函数实现用户信息的新增、修改密码、删除、用户登陆等功能;(3)用户的尝
2、试登陆的次数要通过一个静态变量实现;(4)编写 main 函数进行演示。*/*/*/#include#include#include #include#include#include #define H 100 /*最大允许保存学生信息数*/#define pr printf#define S scanfstruct yonghuxx/*用户信息*/int daima;/用户代码char sname 17;/用户名char mima17;/密码char shengf9; /系统省份;struct yonghuxx s;int p=0;/普通用户 p=0;管理员用户 p=1int h;/信息数i
3、nt u=0;/强制管理员标记,如果系统使用时数据库还没有任何用户信息,则把第一个打开系统的用户设置为管理员权限 u=1int xiugai();/修改密码int shanchu();/删除void denglu();/用户登陆int shenqing();/新增,申请账号int fuzhi(char *sFile, char *dFile) ;/将一个文件复制到另一个文件int guanliyuan();/*管理员*/int putongyh();/*普通用户*/*/*/*/*主函数*/*/main()char n;char v;/清空缓冲区暂存变量pr(“n007“);for(;)pr(“
4、主菜单:nD 登录;“);pr(“S 申请账号;“);/觉得应该允许普通用户申请账号pr(“Q 退出n007“);scanf(“%c“,/* 清空输入流,通过 while 循环把输入流中的余留数据“吃”掉 */while ( (v= getchar() != n /清空缓冲区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“);Slee
5、p(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 %sn“,fprintf(dfp,“%d %s %s %sn“,s.daima,s.snam
6、e,s.mima,s.shengf);fclose(sfp); fclose(dfp); return(0); /*/*/*/*用户登录*/*/void denglu()FILE *fp;char v;/清空缓冲区暂存变量char c18,d18;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=6pr(“密码长度不正确,
7、请重新输入n“);pr(“请再次输入密码 n“);scanf(“%s“,b);while ( (v= getchar() != n /清空缓冲区if(strcmp(a,b)=0)break;else pr(“您输入的密码与第一次输入不相同,“);fp=fopen(“user.txt“,“at“);fprintf(fp,“%d %s %s %sn“,s.daima,m,a,s.shengf);fclose(fp);pr(“恭喜你申请账号成功 n 你的账号是 %s,密码是%sn 请妥善保管你的账号和密码nn 任意键返回“,m,a);getchar(); system(“cls“); /*清屏,st
8、dlib.h 中的函数*/return 0;/*/*/*/*/*/*管理员权限*/*/int guanliyuan()char v;/清空缓冲区暂存变量char n;pr(“n007“);for(;)pr(“管理员菜单:nD 修改用户信息;X 新增;S 删除;Q 退出n007“);scanf(“%c“,while ( (v= getchar() != n /清空缓冲区if(n=D)xiugai();/修改密码else if(n=X)shenqing();/新增,申请账号else if(n=S)shanchu();/删除else if(n=Q)break;else pr(“输入不正确,请重新输入
9、,( 注意区分大小写)“);Sleep(1000);system(“cls“); /*清屏, stdlib.h 中函数*/pr(“你按了 Q,系统即将关闭n“);Sleep(1000);/*沉睡 1 秒,windows.h 中的函数*/return 0;/*/*普通用户权限*/*/int putongyh()char v;/清空缓冲区暂存变量char n;pr(“n007“);for(;)pr(“用户菜单:nD 修改密码;“);pr(“S 申请账号;“);/觉得应该允许普通用户申请账号pr(“Q 退出n007“);scanf(“%c“,while ( (v= getchar() != n /清
10、空缓冲区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“; i
11、nt a;/用户代码char b17;/用户名char c17;/密码char d9; /系统省份char e17;/用户名 2char f17;/密码 2int g=0;FILE *sfp,*dfp; if(dfp=fopen(dFile,“r“)=NULL) /打开 user.txtreturn 0; if(p=1)strcpy(e,s.sname);pr(“请输入你要修改密码的用户名 “);scanf(“%s“,b);while ( (v= getchar() != n /清空缓冲区while(!feof(dfp) fscanf(dfp,“%d %s %s %sn“,if(strcmp(
12、s.sname,b)=0)g=1;break; /找到所输入的用户名fclose(dfp); /关闭 user.txtif(g=1)pr(“没有%snn 任意键返回“);getchar();return 0;if(s.daima=1 getchar();return 0;if(s.daima=1)pr(“你现在是管理员,不修改管理权限请输入 1,降低管理权限请输入0;nn“);for(;)scanf(“%d“,if(a =1)pr(“你仍然是管理员nn“);strcpy(d,“系统管理员“);break;else if(a =0)pr(“你将成为普通用户nn“);strcpy(d,“ 普通用户
13、“);break;else pr(“输入错误,请重新输入nn“);else pr(“%s 是普通用户,提高他的管理权限请输入 1,否则输入 0;nn“,b);for(;)scanf(“%d“,while ( (v= getchar() != n /清空缓冲区if(a =1)pr(“%s 成为管理员nn“,s.sname );strcpy(s.shengf ,“系统管理员“);break;else if(a =0)pr(“%s 仍然是普通用户nn“,s.sname );break;else pr(“输入错误,请重新输入nn“);elsea=0;strcpy(d,“普通用户“);for(;)pr(
14、“现在请输入新密码 n“);scanf(“%s“,c);while ( (v= getchar() != n /清空缓冲区pr(“请再次输入新密码 n“);scanf(“%s“,f);while ( (v= getchar() != n /清空缓冲区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
15、%s %sn“,if(strcmp(s.sname,b)=0)s.daima =a;strcpy(s.mima,c);strcpy(s.shengf,d);fprintf(dfp,“%d %s %s %sn“,s.daima,s.sname,s.mima,s.shengf);fclose(dfp); fclose(sfp); pr(“恭喜你修改用户信息成功 ,%s 的新密码是%s;系统身份是%snn 按任意键返回“,b,c,d);getchar();return(0); int shanchu()char *dFile=“user.txt“; char *sFile=“fuser.txt“;
16、char a18;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 %sn“,if(strcmp(s.sname,a)=0)continue;fprintf(dfp,“%d %s %s %sn“,s.daima,s.sname,s.mima,s.shengf);fclose(sfp); fclose(dfp); pr(“恭喜你删除用户%s 成功nn 任意键返回“,a);getchar();return(0);