1. 程式人生 > 其它 >【自制系列】自制文字編輯器(控制檯版本) 第三篇

【自制系列】自制文字編輯器(控制檯版本) 第三篇

好訊息!好訊息!新增新增使用者的功能了!

1,print函式:往控制檯列印所有的檔案內容。

注意:每次print完之後要fclose,否則再次print的時候就不能輸出東西了(因為檔案讀取指標已經到了最後)

2,adduser:新增使用者

3,open的時候,fopen的第二個引數應該是a+,這樣才能在檔案後面追加內容,否則關閉之後,第二次開啟就什麼都沒有了。

程式碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//全域性變數定義區 
struct USER{
    char name[100
]; int password; }user[10000]; int size=0; char s[100]; struct USER curr_user; int flag=0;//如果當前有使用者正在執行標記為1,否則為0 char curr_file[100]; struct FILE *userfile; struct FILE *read; char openfilename[100]; struct FILE* userinfo;//讀入使用者資訊 int user_ptr=0;//當前最大的使用者下標 //函式定義區 int check_user(struct USER u){//確認使用者名稱和密碼 for
(int i=0;i<size;i++){ if((strcmp(u.name,user[i].name)==0) && u.password==user[i].password)return 1; } return 0; } void open_file(const char *username,const char *filename){ char s[100]; sprintf(s,"%s-%s",username,filename);//檔案的最前面要加上使用者名稱的標記 userfile=fopen(s,"a+");//開啟檔案,原本內容保留,因此用a+
read=fopen(s,"r"); strcpy(openfilename,s); } void write_userinfo(void){ userinfo=fopen("userinfo.txt","w"); fprintf(userinfo,"%d\n",user_ptr+1); for(int i=0;i<=user_ptr;i++){ fprintf(userinfo,"%s %d",user[i].name,user[i].password); } fclose(userinfo); } //主程式 int main(void){ userinfo=fopen("userinfo.txt","r"); int i=0; fscanf(userinfo,"%d",&size); for(int i=0;i<size;i++){ fscanf(userinfo,"%s %d",user[i].name,&user[i].password); //printf("%s %d\n",user[i].name,user[i].password); } fclose(userinfo); for(;;){ putchar('>'); scanf("%s",&s); if(strcmp(s,"login")==0){ scanf("%s %d",curr_user.name,&curr_user.password); int i=check_user(curr_user); if(!i)printf("密碼錯誤或使用者名稱錯誤。\n"); else{ flag=1; } } else if(strcmp(s,"logoff")==0){ flag=0; } else if(strcmp(s,"getuser")==0){ if(flag==0)printf("無使用者登入\n"); else printf("%s\n",curr_user.name); } else if(strcmp(s,"open")==0){ scanf("%s",curr_file); if(!flag)printf("還沒有登入\n"); else open_file(curr_user.name,curr_file); } else if(strcmp(s,"line")==0){ char st[100]; scanf("%s",st); if(!flag)printf("還沒有登入\n"); else fprintf(userfile,"%s\n",st);//新加入一行 } else if(strcmp(s,"close")==0){ if(!flag)printf("還沒有登入\n"); else fclose(userfile); } else if(strcmp(s,"clear")==0){ system("cls"); } else if(strcmp(s,"print")==0){ read=fopen(openfilename,"r"); int temp;//EOF為負數,需要用int儲存 while((temp=fgetc(read))!=EOF)putchar(temp); fclose(read); } else if(strcmp(s,"adduser")==0){ ++user_ptr; scanf("%s %d",user[user_ptr].name,&user[user_ptr].password); curr_user=user[user_ptr]; flag=1; write_userinfo(); } else{ printf("%s不是可執行的指令。\n",s); } } }