首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事
您的当前位置:首页正文

C语言系统用户管理系统

2020-08-22 来源:画鸵萌宠网
/*******************************************************************************************************/

/*******************************************************************************************************/ /*题目十八 系统用户管理系统 【说明及要求】

设系统用户信息(用户代码,用户名,密码,系统身份)存放在一个名为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); }

因篇幅问题不能全部显示,请点此查看更多更全内容