搜索
查看: 197|回复: 0
打印 上一主题 下一主题

关于代码无法创建文件的问题

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2019-4-13 18:48:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<direct.h>
  5. #include<string.h>
  6. #define LEN sizeof(struct password)
  7. #define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf"
  8. #define DATA stu[i].num,stu[i].name,stu[i].password
  9. struct password
  10. //*定义密码结构体
  11. {
  12.   int num;
  13.   //*编号
  14.   char name[50];
  15.   //*名称
  16.   char password[50];
  17.   //*密码
  18. };

  19. struct password stu[50];
  20. //*定义结构体数组
  21. void in();
  22. //*录入密码信息
  23. void show();
  24. //*显示密码信息
  25. void del();
  26. //*删除密码信息
  27. void modify();
  28. //*修改密码信息
  29. void menu();
  30. //*主菜单
  31. void total();
  32. //*计算总密码数
  33. void search();
  34. //*查找密码信息
  35. void welcome();
  36. //*欢迎界面

  37. void welcome()
  38. //*欢迎界面
  39. {
  40.     printf("┌──────────────╕");
  41.     printf("│欢迎使用密码本│");
  42.     printf("└──────────────┘");
  43.     system("pause");
  44. }

  45. void menu()
  46. //*主菜单
  47. {
  48.   system("cls");
  49.   printf(" ");
  50.   printf("|-------------------------------------------|");
  51.   printf("|-------------------菜单--------------------|");
  52.   printf("|-------------------------------------------|");
  53.   printf("|                  0:退出                   |");
  54.   printf("|                1:存储密码                 |");
  55.   printf("|                2:查看密码                 |");
  56.   printf("|                3:删除密码                 |");
  57.   printf("|                4:修改密码                 |");
  58.   printf("|                5:密码总数                 |");
  59.   printf("|-------------------------------------------|");
  60.   printf("|        输入数字并回车实现操作(1~5)        |");
  61.   printf("|-------------------------------------------|");
  62.   printf("|  注意!本程序所能存储的最大字符串长度为50  |");
  63.   printf("|-------------------------------------------|");
  64.   printf("|      请确认程序所在目录不为只读目录       |");
  65.   printf("|-------------------------------------------|");
  66.   //*菜单界面
  67. }

  68. int main()
  69. //*主函数
  70. {
  71.     int n;
  72.     welcome();
  73.     menu();
  74.     scanf("%d",&n);
  75.     while(n)
  76.     //*输入选择功能的编号
  77.     {
  78.         switch(n)
  79.         //*判断输入的编号,执行对应的操作
  80.         {
  81.             case 1:
  82.                 in();
  83.                 break;
  84.             case 2:
  85.                 search();
  86.                 break;
  87.             case 3:
  88.                 del();
  89.                 break;
  90.             case 4:
  91.                 modify();
  92.                 break;
  93.             case 5:
  94.                 total();
  95.                 break;
  96.             default:break;
  97.         }
  98.         getchar();
  99.         menu();
  100.         scanf("%d",&n);
  101.     }
  102. }

  103. void show()
  104. //*显示原有信息
  105. {
  106.   FILE *fp;
  107.   int i,m=0;
  108.   fp=fopen("data","ab+");
  109.   while(!feof(fp))
  110.   {
  111.     if(fread(&stu[m] ,LEN,1,fp)==1)
  112.       m++;
  113.   }  
  114.   fclose(fp);
  115.   printf("编号         用户名         密码        ");
  116.   for(i=0;i<m;i++)
  117.   {
  118.     printf(FORMAT,DATA);
  119.     //*将信息按指定格式显示
  120.   }
  121. }

  122. void in()
  123. //*录入函数啊哈C/C++ 3.0

  124. {
  125.     int i,m=0;
  126.     //*m为记录数据的条数
  127.     char ch[2];
  128.     FILE *fp;
  129.     //*定义文件指针并打开指定文件
  130.     if((fp=fopen("data","ab+"))==NULL);
  131.     {
  132.         printf("无法打开密码存储文件!");
  133.         system("pause");
  134.         return;
  135.     }
  136.     while(!feof(fp));
  137.     {
  138.         if(fread(&stu[m],LEN,1,fp)==1);
  139.         m++;
  140.         //*统计当前记录条数
  141.     }
  142.     fclose(fp);
  143.     if(m==0)
  144.     {
  145.         printf("无记录!");
  146.         system("pause");
  147.     }
  148.     else
  149.     {
  150.         system("cls");
  151.         show();
  152.     }
  153.     if((fp=fopen("data","wb"))==NULL)
  154.     {
  155.         printf("无法打开密码存储文件!");
  156.         system("pause");
  157.     }
  158.     for(i=0;i<m;m++)
  159.     fwrite(&stu[i],LEN,1,fp);
  160.     //*向指定的文件写入信息
  161.     printf("请输入(Y/N):");
  162.     scanf("%s",ch);
  163.     if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0);
  164.     printf("按数字键1并回车确定");
  165.     while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0);
  166.     //*判断是否要录入新信息
  167.     {
  168.         printf("请输入密码编号:");
  169.         scanf("%d",&stu[m].num);
  170.         for(i=0;i<m;i++)
  171.             if(stu[i].num==stu[m].num)
  172.             {
  173.                 printf("该编号已存在,按任意键继续");
  174.                 fclose(fp);
  175.                 getchar();
  176.                 return;
  177.             }
  178.         printf("请输入用户名");
  179.         scanf("%s",stu[m].name);
  180.         printf("请输入密码");
  181.         scanf("%s",&stu[m].password);
  182.         //*输入用户名和密码
  183.         if(fwrite(&stu[m],LEN,1,fp)!=1)
  184.         //*将新录入的信息写入指定的文件
  185.       {
  186.         printf("无法保存");
  187.         getchar();
  188.       }
  189.       else
  190.       {
  191.           printf("保存中……");
  192.         printf("%s 保存成功",stu[m].name);
  193.         m++;
  194.         system("pause");
  195.       }
  196.       printf("是否继续(y/n):");
  197.       //*询问是否继续
  198.       scanf("%s",ch);
  199.         
  200.     }
  201.     fclose(fp);
  202.   printf("完成");
  203.   system("pause");
  204. }

  205. void search()
  206. //*搜索函数
  207. {
  208.    FILE *fp;
  209.   int snum,i,m=0;
  210.   char ch[2];
  211.   if((fp=fopen("data","ab+"))==NULL)
  212.   {
  213.     printf("无法打开密码存储文件");
  214.     system("pause");
  215.     return;
  216.   }
  217.   while(!feof(fp))
  218.     if(fread(&stu[m],LEN,1,fp)==1)
  219.       m++;
  220.     fclose(fp);
  221.     if(m==0)
  222.     {
  223.       printf("无记录");
  224.       system("pause");
  225.       return;
  226.     }
  227.     printf("请输入要查询的密码编号:");
  228.     system("pause");
  229.     scanf("%d",&snum);
  230.     for(i=0;i<m;i++)
  231.       if(snum==stu[i].num)
  232.       //*查找输入的编号是否在记录中
  233.       {
  234.         printf("显示找到的密码吗?(y/n)");
  235.         scanf("%s",ch);
  236.         if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
  237.         {
  238.           printf("编号         用户名         密码        ");
  239.           printf(FORMAT,DATA);
  240.           //*将查找出的结果按指定格式输出
  241.           system("pause");
  242.           break;
  243.         }
  244.         else
  245.           return;
  246.       }   
  247.       if(i==m)
  248.         printf("未找到密码");
  249.         system("pause");
  250.         //*未找到要查找的信息
  251.         return;
  252. }
  253. void del()
  254. //*删除函数
  255. {
  256.   FILE *fp;
  257.   int snum,i,j,m=0;
  258.   char ch[2];
  259.   if((fp=fopen("data","ab+"))==NULL)
  260.   {
  261.     printf("无法打开密码存储文件");
  262.     system("pause");
  263.     return;
  264.   }
  265.   while(!feof(fp))  
  266.     if(fread(&stu[m],LEN,1,fp)==1)
  267.       m++;
  268.     fclose(fp);
  269.     if(m==0)
  270.     {
  271.       printf("无记录");
  272.       system("pause");
  273.       return;
  274.     }
  275.     printf("请输入要删除的密码编号:");
  276.     system("pause");
  277.     scanf("%d",&snum);
  278.     for(i=0;i<m;i++)
  279.       if(snum==stu[i].num)
  280.         break;
  281.      if(i==m)
  282.       {
  283.       printf("找不到密码");
  284.       getchar();
  285.       return;
  286.       }
  287.       printf("找到该密码,删除?(y/n)");
  288.       scanf("%s",ch);
  289.       if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
  290.       //*判断是否要进行删除
  291.       {
  292.         for(j=i;j<m;j++)
  293.           stu[j]=stu[j+1];
  294.           //*将后一个记录移到前一个记录的位置
  295.           m--;
  296.           //*记录的总个数减1
  297.           printf("删除中……");
  298.           printf("删除成功!");
  299.           system("pause");
  300.         }
  301.         if((fp=fopen("data","wb"))==NULL)
  302.         {
  303.           printf("无法打开密码存储文件");
  304.           system("pause");
  305.           return;
  306.         }
  307.         for(j=0;j<m;j++)
  308.         //*将更改后的记录重新写入指定的文件中
  309.           if(fwrite(&stu[j] ,LEN,1,fp)!=1)
  310.           {
  311.             printf("无法保存!");
  312.             system("pause");
  313.             getchar();
  314.           }
  315.           fclose(fp);
  316.         
  317. }

  318. void modify()
  319. //*自定义修改函数
  320. {
  321.   FILE *fp;
  322.   int i,j,m=0,snum;
  323.   if((fp=fopen("data","ab+"))==NULL)
  324.   {
  325.     printf("无法打开密码存储文件!");
  326.     system("pause");
  327.     return;
  328.   }
  329.   while(!feof(fp))  
  330.     if(fread(&stu[m],LEN,1,fp)==1)
  331.       m++;
  332.     if(m==0)
  333.     {
  334.       printf("无记录!");
  335.       system("pause");
  336.       fclose(fp);
  337.       return;
  338.     }
  339.     printf("请输入要修改的密码编号");
  340.     scanf("%d",&snum);
  341.     for(i=0;i<m;i++)
  342.       if(snum==stu[i].num)
  343.       //*检索记录中是否有要修改的信息
  344.         break;
  345.       if(i<m)
  346.       {  
  347.         printf("找到该密码,可以修改!");
  348.         printf("用户名:");
  349.         scanf("%s",stu[i].name);
  350.         //*输入名字
  351.         printf("密码:");
  352.         scanf("%lf",&stu[i].password);
  353.         //*输入密码
  354.         printf("保存中……");
  355.         printf("保存成功");
  356.         system("pause");
  357.         return;
  358.       }
  359.       else
  360.       {
  361.         printf("密码未找到!");
  362.         getchar();
  363.         return;
  364.       }
  365.       if((fp=fopen("data","wb"))==NULL)
  366.       {
  367.         printf("无法打开密码存储文件");
  368.         system("pause");
  369.         return;
  370.       }
  371.       for(j=0;j<m;j++)
  372.       //*将新修改的信息写入指定的文件中
  373.         if(fwrite(&stu[j] ,LEN,1,fp)!=1)
  374.         {
  375.           printf("无法保存!");
  376.           getchar();
  377.         }
  378.         fclose(fp);
  379. }
  380. void total()
  381. //*计算总数
  382. {
  383.   FILE *fp;
  384.   int m=0;
  385.   if((fp=fopen("data","ab+"))==NULL)
  386.   {         
  387.     printf("无法打开密码存储文件");
  388.     system("pause");
  389.     return;
  390.   }
  391.   while(!feof(fp))  
  392.     if(fread(&stu[m],LEN,1,fp)==1)
  393.       m++;
  394.       //*统计记录个数
  395.     if(m==0)
  396.     {
  397.       printf("无记录!");
  398.       system("pause");
  399.       fclose(fp);
  400.       return;
  401.     }
  402.     printf("共存储 %d 个密码!",m);
  403.     //*将统计的个数输出
  404.     fclose(fp);
  405.     system("pause");
  406.     return;
  407. }
复制代码

以上代码执行时无法创建文件,求大神帮忙解答

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表