|
5鱼币
- #include <stdio.h>
- #include <stdlib.h>//其中包含system函数
- #include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
- #include <string.h>//定义字符数组
- #include <math.h>
- #define LEN2 sizeof(struct land)//有关登录系统的结构体
- struct land//登录信息
- {
- int zhanghao;
- char password[20];
- struct land*next;
- };
- int tjzs();//统计library文本个数函数
- void xg(int,char[] );
- void mainmenu();//显示主菜单
- void lmenu();//显示登录菜单
- void main1();// 主菜单功能
- void land();//登录功能系统
- int xinjian(int,char[] );//创建账号密码
- void xgmm();//修改密码
- void lmain();//登录界面函数
- int tjzs3()//统计账号密码文本个数
- {
- FILE *fp;
- int zhao=0,n;
- char mm[20]={'\0'};
- fp=fopen("land.txt","r");//打开文件
- for (n=0;!feof(fp);n++)//逐个读文件
- fscanf(fp,"%d %s",&zhao,mm);
- n--;
- fclose(fp);//关闭文件
- return (n);//返回个数
- }
- void main1()
- {
- char choose;
- scanf(" %c",&choose);
- switch(choose)//功能函数
- {
- case'1':
- break;
- case'2':
- break;
- case'3':
- system("cls");
- getch();
- exit(0);
- system ("cls");
- break;
- }
- }
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
- void lmenu()//显示登录菜单
- {
- printf("\n\n\t 欢迎使用会员登录系统\n\n");
- printf("**********************************************");
- printf("\n\n\t\t1.登录系统\n\n");
- printf("\n\n\t\t2.创建账号\n\n");
- printf("\n\n\t\t3.修改密码\n\n");
- printf("\n\n\t\t4.退出系统\n\n");
- printf("\n\n\t 请按键选择,回车确定\n");
- printf("**********************************************");
- return ;
- }
- void lmain()//登录功能函数
- {
- void land();
- void xinjian();
- char choose;
- lmenu();
- scanf(" %c",&choose);
- switch(choose)//功能函数
- {
- case'1':
- land();
- break;
- case'2':
- xinjian();
- break;
- case'3':
- xgmm();
- break;
- case'4':
- system("cls");
- getch();
- exit(0);
- system ("cls");
- break;
- }
- }
- void xinjian()//新建账户密码
- {
- FILE *fp;
- int zhanghao;
- char password[20],password1[20];
- char hit=0;
- if ((fp=fopen("land.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
- {
- fp=fopen("land.txt","w");
- fclose(fp);
- }
- system("cls");
- fp=fopen("land.txt","a");
- for(;;)//输入两次密码确认,两次相同才能确认
- {
- printf("\n请按以下格式输入账户:\n学号 密码\n");
- printf("请输入:");
- scanf("%d %s",&zhanghao,password);
- printf("再次输入密码:\n");
- scanf("%s",password1);
- if(strcmp(password,password1)==0)
- {
- fprintf(fp,"%d %s\n",zhanghao,password);
- break;
- }
- else
- {
- printf("两次输入密码不一致,继续创建按回车,退出按ESC");
- hit=getch();
- if(hit=27)
- system("cls");
- lmain();
- }
- }
- fclose(fp);
- printf("创建成功,按任意键返回");
- getch();
- system("cls");
- lmain();
- }
- int match(int m,char a[20])//匹配数据库中的账号密码
- {
- FILE*fp;
- int n=0,i=0;
- int zhanghao;
- char password[20];
- if ((fp=fopen("land.txt","r"))==NULL)//不存在读者文件
- {
- system ("cls");
- printf("\n 还未存在用户!请新建账户");
- getch();
- system("cls");
- lmain();
- }
- for(;!feof(fp);)
- {
- fscanf(fp,"%d%s",&zhanghao,password);
- if(m==zhanghao)
- {
- if(strcmp(a,password)==0)
- return 1;
- else
- {
- return -1;
- }
- }
- }
- return 0;
- }
- void land()//输入账户密码的登录函数
- {
- int zhanghao;
- char password[20];
- int i=2,j,k,n;
- char hit=0;
- system("cls");
- do
- {
- printf("\n请输入账号:\n");
- scanf("%d",&zhanghao);
- printf("确认输入请安回车,重新输入请按ECS");
- hit=getch();//暂停程序当i接收后继续下一条指令
- for (;hit!=13&&hit!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
- {
- hit=getch();
- }
- }
- while(hit==27);
- printf("\n请输入密码:\n");
- scanf("%s",password);
- i=match(zhanghao,password);
- if(i==1)
- {
- printf("登陆成功!按任意键继续");
- getch();
- main1();
- }
- else
- {
- if(i==-1)
- {
- printf("密码错误!");
- getch();
- land();
- }
- if(i==0)
- printf("不存在此用户");
- getch();
- system("cls");
- lmain();
- }
- }
- void xg(int z,char m[20])//修改函数
- {
- FILE *fp;
- int zhanghao1,n,j,k;
- char mima1[20];
- struct land *head,*p,*p1,*p2;
- fp=fopen("land.txt","r");
- j =tjzs3();
- for (k=0;k<=j;k++)
- {
- fscanf(fp,"%d %s",&zhanghao1,mima1);
- if (z!=zhanghao1)//比较名字,将不同名字的信息复制到链表
- {
- n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
- if (n==1)//建立链表
- {
- p1=p2=(struct land*)malloc(LEN2);
- head=p1;
- }
- else
- {
- p2->next=p1;
- p2=p1;
- p1=(struct land*)malloc(LEN2);//新建链表
- }
- p1->zhanghao=zhanghao1;
- strcpy(p1->password,mima1);//复制账号密码
- }
- }
- if (n==0)
- {
- head=NULL;
- }
- else//建立链表的最后剩余一个储存空间,所以封底
- {
- p2->next=p1;
- p1->next=NULL;
- fclose(fp);
- }
- fp=fopen("land.txt","w");//清空文件,只写打开,然后关闭
- fclose(fp);
- fp=fopen("land.txt","a");//追加文件
- p=head;
- for (;p!=NULL;)//把链表内容覆盖到文件
- {
- fprintf(fp,"%d %s%\n",p->zhanghao,p->password);
- p=p->next;
- }
- fprintf(fp,"%d %s\n",z,m);
- fclose(fp);
- system ("cls");
- }
- void xgmm()//修改密码
- {
- FILE *fp;
- int zh=0,k=0,many=0,m=0,n=0;
- int chazhao,hit;
- char mima[20]={'\0'},password1[20]={'\0'};
- char mm[20]={'\0'};
- char i;
- if ((fp=fopen("land.txt","r"))==NULL)//打开文件
- {
- system ("cls");
- printf("\n记录文件不存在!按任意键返回");
- getch();
- system("cls");
- lmain();
- }
- system("cls");
- printf("请输入你的帐号和旧密码:\n");
- scanf("%d %s",&chazhao,mima);
- m =tjzs3();
- for (n=0;n<=m;n++)
- {
- fscanf(fp,"%d %s",&zh,mm);
- if(zh==chazhao)
- {
- if(!strcmp(mm,mima))
- {
- printf("请输入新的密码");
- scanf("%s",mima);
- printf("再次输入密码:\n");
- scanf("%s",password1);
- if(strcmp(mima,password1)==0)
- {
- xg(chazhao,mima);
- getch();
- lmain();
- system("cls");
- }
- else
- {
- printf("两次输入密码不一致,按任意键退出");
- hit=getch();
- system("cls");
- lmain();
- }
- }
- else
- {
- printf("旧密码错误,按任意键返回!");
- getch();
- system("cls");
- lmain();
- }
- }
- }
- printf("不存在此账号,按任意键返回");
- fclose(fp);//修改结束
- getch();
- system("cls");
- lmain();
- }
- int main()
- {
- system("color 1F");
- lmain();
- return 0;
- }
复制代码
大神求指教!如何使使密码输入时可以变成*号
你提两遍问题,我就答两遍得了
- #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- #ifdef CPP
- #define getch _getch
- #endif
- const char CHAR_BACKSPACE = 8;
- const char CHAR_ENTER = 13;
- COORD getxy() {
- CONSOLE_SCREEN_BUFFER_INFO info;
- HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
- GetConsoleScreenBufferInfo(hscr, &info);
- return info.dwCursorPosition;
- }
- void gotoxy(int x, int y) {
- COORD coord = { x,y };
- HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleCursorPosition(hscr, coord);
- }
- char* InputPassword(char* password) {
- COORD startpos = getxy();
- int i = 0;
- while ((password[i] = getch()) != CHAR_ENTER) {
- if (password[i] == CHAR_BACKSPACE) {
- if (i > 0) {
- gotoxy(startpos.X + (--i), startpos.Y);
- printf(" ");
- gotoxy(startpos.X + i, startpos.Y);
- }
- continue;
- }
- printf("*");
- ++i;
- }
- password[i] = '\0';
- return password;
- }
- int main() {
- printf("请输入密码:\n");
- char password[128];
- InputPassword(password);
- printf("\n您输入的密码为:%s", password);
- system("pause");
- }
复制代码
|
|