| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
这个小项目主要实现的是用C语言自带的文件控制函数来读写文本内容,实现增删改查 
 
这次用的是fwrite和fread函数来读写文本。 
 
在这里,我遇到了一个问题,头疼比较久,就是在用fread 读取文件后,如果你要对文件里面的一个值修改,这样的话必须要调整光标位置,然后才能写到文本里面,如果没有调整光标位置,及时你在内存中修改了值也不能写到文件中。 
 
错误代码如下: 
 
 scanf_s("%s",&scwad[0].Pass,20); 
/*这里是在一个结构体中修改一个成员的值, 
执行这行语句的时候内存的 值是已经被修改了。*/  
 fwrite(scwad, sizeof(account), 100, newfile); 
/*如果这样直接写入文件,文件是没有任何变化的, 
所以在执行这个这个文件之前,要执行fseek函数来重新定位光标的位置。*/ 
 
 
  接下来是正式代码(main) 
 
#include <stdio.h> 
#include<stdlib.h> 
#include"SavePW.h" 
 
 
extern account cWhAD[100]; 
account scwad[100]; 
int main(){ 
loop: 
        ; 
        system("cls"); 
        int i; 
 
        int j = 0; 
    printf("1、保存账号密码\n"); 
        printf("2、修改账号密码\n"); 
        printf("3、账号密码查询\n"); 
        printf("4、删除账号密码\n\n"); 
         
 
         
        while (1) 
        { 
                printf("输入你要用的功能编号:\n"); 
                scanf_s("%d", &i); 
                if (i >= 1 && i <= 4){ 
                switch (i) 
                { 
                case 1: j=SavePSW(); break; 
                case 2: j=modPW(); break; 
                case 3: j=inqu(); break; 
                case 4: j=delte(); break; 
                } 
                break; 
                } 
                else 
                { 
                        printf("请输入数字1-4\n"); 
                } 
                 
                 
        } 
        if (j == 1){ 
                goto loop; 
        } 
        system("pause"); 
 
} 
 
//密码修改 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include"SavePW.h" 
//修改账号密码 
extern account cWhAD[100]; 
extern account scwad[100]; 
 
int modPW(){ 
        FILE* newfile; 
        char a[20]; 
        int i = 0; 
        /*char rePassword[20];*/ 
        fopen_s(&newfile, "123.bin", "rb+"); 
        while (1) 
{ 
 
        system("cls"); 
        //fseek(newfile,0, SEEK_SET); 
        printf("请问你要修改哪个账号\n"); 
        //scanf_s("%s",&i,10); 
        scanf_s("%s", &a,20); 
        //取出所有文本信息 
        fread(scwad, sizeof(account), 100, newfile); 
        ///////////////////////////////////// 
        ////////////////////找到账号的位置/// 
        for (int i = 0; i <100; i++) 
        { 
                if (strcmp(a, scwad[i].Name)==0){ 
                        printf("找到了!\n"); 
                        printf("给%s的账号修改密码\n", scwad[i].Name); 
                        scanf_s("%s",&scwad[i].Pass,20); 
                        //对密码进行加密 
                        for (int K = 0; K < sizeof(scwad[i].Pass); K++) 
                        { 
                                scwad[i].Pass[K] = scwad[i].Pass[K] ^ 5; 
                        } 
                        ///////// 
                        fseek(newfile, 0, SEEK_SET);//因为光标会消失,重新指定光标位置 
                        fwrite(scwad, sizeof(account), 100, newfile);//从1一开覆盖 
                        break; 
                } 
        } 
        printf("按1重新输入,按2回首页,其他键退出!"); 
        scanf_s("%d", &i, 1); 
        if (i == 1) 
        { 
                 
                continue; 
        } 
        else if (i == 2) 
        { 
                fclose(newfile); 
                return 1; 
        } 
        else 
        { 
                fclose(newfile); 
                return 0; 
        } 
} 
        fclose(newfile); 
     
} 
 
 
/* 
fread(&scwad[0].ID, sizeof(account), 1, newfile); 
fread(&scwad[0].Pass, sizeof(account), 1, newfile); 
printf("%s\n", scwad[0].Name); 
printf("%s\n", scwad[0].ID); 
printf("%s\n", scwad[0].Pass);*/ 
 
 
//密码保存 
#include<stdio.h> 
#include"SavePW.h" 
account cWhAD[100]; 
 
int SavePSW() 
{ 
         
                FILE* newFile; 
                int i,j=0; 
                char c[20]; 
                fopen_s(&newFile, "123.bin", "ab+"); 
                while (1) 
                { 
                        system("cls"); 
                        printf("请问你想保存哪里的账号(填写以后便于查找)?\n"); 
                        scanf_s("%s", &cWhAD[j].Name, 20); 
                        //fwrite(&cWhAD[j].Name,sizeof(account),1,newFile); 
                        printf("请填写账号:\n"); 
                        scanf_s("%s", &cWhAD[j].ID, 20); 
                        //fwrite(&cWhAD[j].ID, sizeof(account), 1, newFile); 
                        printf("请填写密码:\n"); 
                        scanf_s("%s", &cWhAD[j].Pass, 20); 
                        //对密码进行加密 
                        for (int K = 0;  K < sizeof(cWhAD[j].Pass);  K++) 
                        { 
                                cWhAD[j].Pass[K] = cWhAD[j].Pass[K] ^5; 
                        } 
                        ////S 
                        fwrite(&cWhAD[j], sizeof(account), 1, newFile); 
                        //fprintf(newFile, "%s,%s,%s\r\n", cWhAD[j].Name, cWhAD[j].ID, cWhAD[j].Pass); 
                        //fwrite(&cWhAD[j], sizeof(account), 100, newFile); 
                        printf("你已经输入完成,按1再次输入,按2返回首页,按其他键退出"); 
                        scanf_s("%d",&i,1); 
                                if (i==1) 
                        { 
                                j++; 
                                continue; 
                        } 
                                else if (i==2) 
                        { 
                                fclose(newFile); 
                                return 1; 
                        } 
                                else 
                        { 
                                fclose(newFile); 
                                return 0; 
                        } 
                 } 
                 
         
                fclose(newFile); 
         
} 
 
 
//账号搜索 
#include<stdio.h> 
#include<stdlib.h> 
#include"SavePW.h" 
 
extern account scwad[100]; 
int inqu(){ 
 
        FILE* newfile; 
        char a[20]; 
        int i = 0; 
        fopen_s(&newfile, "123.bin", "rb+"); 
 
        while (1) 
        { 
                system("cls"); 
                printf("你要查找的账号\n"); 
                //scanf_s("%s",&i,10); 
                scanf_s("%s", &a, 20); 
                //把信息导出来 
                fread(scwad, sizeof(account), 100, newfile); 
                for (int i = 0; i < 100; i++) 
                { 
                        //fread(&scwad[i].Name, sizeof(account), 1, newfile); 
                        if (strcmp(a, scwad[i].Name) == 0){ 
                                printf("找到了!\n"); 
                                //fread(&scwad[i].ID, sizeof(account), 1, newfile); 
                                printf("账号为:%s\n", scwad[i].ID); 
                                //fread(&scwad[i].Pass, sizeof(account), 1, newfile); 
                                printf("密码(此时为加密状态)为:%s\n", scwad[i].Pass); 
                                break; 
                        } 
 
                } 
                printf("按1重新输入,按2回首页,其他键退出!"); 
                scanf_s("%d", &i, 1); 
                if (i == 1) 
                { 
 
                        continue; 
                } 
                else if (i == 2) 
                { 
                        fclose(newfile); 
                        return 1; 
                } 
                else 
                { 
                        fclose(newfile); 
                        return 0; 
                } 
                fclose(newfile); 
        } 
 
} 
 
//账号删除 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include"SavePW.h" 
 
extern account cWhAD[100]; 
extern account scwad[100]; 
 
int delte(){ 
 
        FILE* newfile; 
        char a[20]; 
        int i = 0; 
        fopen_s(&newfile, "123.bin", "rb+"); 
        while (1) 
        { 
                system("cls"); 
                printf("请问你要删除哪个账号\n"); 
                scanf_s("%s", &a, 20); 
                fread(scwad, sizeof(account), 100, newfile); 
                for (int i = 0; i < 100; i++) 
                { 
                        fread(&scwad[i].Name, sizeof(account), 1, newfile); 
                        if (strcmp(a, scwad[i].Name) == 0){ 
                                printf("找到了!按三次0进行确认\n"); 
                                scanf_s("%s", &scwad[i].Pass, 20); 
                                scanf_s("%s", &scwad[i].Name, 20); 
                                scanf_s("%s", &scwad[i].ID, 20); 
                                printf("已经删除%s", scwad[i].Name); 
 
                                //// 
                                for (int K = 0; K < sizeof(scwad[i].Pass); K++) 
                                { 
                                        scwad[i].Pass[K] = NULL; 
                                        scwad[i].Name[K] = NULL; 
                                        scwad[i].ID[K] = NULL; 
                                } 
                                //// 
                                fseek(newfile, 0, SEEK_SET); 
                                fwrite(scwad, sizeof(account), 100, newfile); 
                                /*scanf_s("%s", &scwad[i].Pass, 20); 
                                fwrite(&scwad[i].Pass, sizeof(account), 1, newfile); 
                                printf("%s", scwad[i].Pass);*/ 
                                break; 
                        } 
 
                } 
                printf("按1重新输入,按2回首页,其他键退出!"); 
                scanf_s("%d", &i, 1); 
                if (i == 1) 
                { 
 
                        continue; 
                } 
                else if (i == 2) 
                { 
                        fclose(newfile); 
                        return 1; 
                } 
                else 
                { 
                        fclose(newfile); 
                        return 0; 
                } 
        } 
        fclose(newfile); 
} 
 
 
 |   
 
 
 
 |