【自制系列】自制文本编辑器(控制台版本) 第二篇

我们准备新加入下面的功能:

1,之前既然有了用户的功能,那么就要这样处理:每个用户只可以访问自己的文件,不可以访问他人的文件

因此,我们可以在文件名之前加上前缀,例如:admin-a.txt

admin-前缀表示这个文件是admin的

因此,代码如下:

 

 userfile和read都是FILE*类型的全局变量,用于存储当前正在打开的文件。

sprintf此处用于连接字符串。(一般我们连接字符串只会想到strcat,其实sprintf也可以)

 

 

然后,是open指令,用于进行文件的打开操作。

 

 

 

既然有打开,那么肯定有关闭操作。只需要调用fclose函数即可。

 

 

接下来是line指令,用于往文件里面加入一行。

 

 

 

需要注意的是,所有的操作都需要在登录之后才能进行。

 

全部代码如下:

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 //全局变量定义区 
 6 struct USER{
 7     char name[100];
 8     int password;
 9 }user[10000];
10 int size=0;
11 char s[100];
12 struct USER curr_user;
13 int flag=0;//如果当前有用户正在运行标记为1,否则为0 
14 char curr_file[100];
15 struct FILE *userfile;
16 struct FILE *read;
17 
18 
19 //函数定义区 
20 int check_user(struct USER u){//确认用户名和密码 
21     for(int i=0;i<size;i++){
22         if((strcmp(u.name,user[i].name)==0) && u.password==user[i].password)return 1;
23     }
24     return 0;
25 }
26 void open_file(const char *username,const char *filename){
27     char s[100];
28     sprintf(s,"%s-%s",username,filename);//文件的最前面要加上用户名的标记 
29     userfile=fopen(s,"w+");//打开文件 
30     read=fopen(s,"r");
31 }
32 
33 
34 //主程序 
35 int main(void){
36     struct FILE* userinfo;//读入用户信息 
37     userinfo=fopen("userinfo.txt","r");
38     int i=0;
39     fscanf(userinfo,"%d",&size);
40     for(int i=0;i<size;i++){
41         fscanf(userinfo,"%s %d",user[i].name,&user[i].password);
42         //printf("%s %d\n",user[i].name,user[i].password);
43     }
44     fclose(userinfo);
45     
46     for(;;){
47         putchar('>');
48         scanf("%s",&s);
49         if(strcmp(s,"login")==0){
50             scanf("%s %d",curr_user.name,&curr_user.password);
51             int i=check_user(curr_user);
52             if(!i)printf("密码错误或用户名错误。\n");
53             else{
54                 flag=1;
55             }
56         }
57         else if(strcmp(s,"logoff")==0){
58             flag=0;
59         }
60         else if(strcmp(s,"getuser")==0){
61             if(flag==0)printf("无用户登录\n");
62             else printf("%s\n",curr_user.name);
63         }
64         else if(strcmp(s,"open")==0){
65             scanf("%s",curr_file);
66             if(!flag)printf("还没有登录\n");
67             else open_file(curr_user.name,curr_file);
68         }
69         else if(strcmp(s,"line")==0){
70             char st[100];
71             scanf("%s",st);
72             if(!flag)printf("还没有登录\n");
73             else fprintf(userfile,"%s\n",st);//新加入一行 
74         }
75         else if(strcmp(s,"close")==0){
76             if(!flag)printf("还没有登录\n");
77             else fclose(userfile);
78         }
79         else if(strcmp(s,"clear")==0){
80             system("cls");
81         }
82         else{
83             printf("%s不是可执行的指令。\n",s);
84         }
85     }
86 }

 

 

完。

 

posted @ 2021-08-18 12:03  计算机知识杂谈  阅读(90)  评论(0编辑  收藏  举报