啊哈磊_编程从这里起步
标题:
关于代码无法创建文件的问题
[打印本页]
作者:
星の殇
时间:
2019-4-13 18:48
标题:
关于代码无法创建文件的问题
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<direct.h>
#include<string.h>
#define LEN sizeof(struct password)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf"
#define DATA stu[i].num,stu[i].name,stu[i].password
struct password
//*定义密码结构体
{
int num;
//*编号
char name[50];
//*名称
char password[50];
//*密码
};
struct password stu[50];
//*定义结构体数组
void in();
//*录入密码信息
void show();
//*显示密码信息
void del();
//*删除密码信息
void modify();
//*修改密码信息
void menu();
//*主菜单
void total();
//*计算总密码数
void search();
//*查找密码信息
void welcome();
//*欢迎界面
void welcome()
//*欢迎界面
{
printf("┌──────────────╕");
printf("│欢迎使用密码本│");
printf("└──────────────┘");
system("pause");
}
void menu()
//*主菜单
{
system("cls");
printf(" ");
printf("|-------------------------------------------|");
printf("|-------------------菜单--------------------|");
printf("|-------------------------------------------|");
printf("| 0:退出 |");
printf("| 1:存储密码 |");
printf("| 2:查看密码 |");
printf("| 3:删除密码 |");
printf("| 4:修改密码 |");
printf("| 5:密码总数 |");
printf("|-------------------------------------------|");
printf("| 输入数字并回车实现操作(1~5) |");
printf("|-------------------------------------------|");
printf("| 注意!本程序所能存储的最大字符串长度为50 |");
printf("|-------------------------------------------|");
printf("| 请确认程序所在目录不为只读目录 |");
printf("|-------------------------------------------|");
//*菜单界面
}
int main()
//*主函数
{
int n;
welcome();
menu();
scanf("%d",&n);
while(n)
//*输入选择功能的编号
{
switch(n)
//*判断输入的编号,执行对应的操作
{
case 1:
in();
break;
case 2:
search();
break;
case 3:
del();
break;
case 4:
modify();
break;
case 5:
total();
break;
default:break;
}
getchar();
menu();
scanf("%d",&n);
}
}
void show()
//*显示原有信息
{
FILE *fp;
int i,m=0;
fp=fopen("data","ab+");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("编号 用户名 密码 ");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA);
//*将信息按指定格式显示
}
}
void in()
//*录入函数啊哈C/C++ 3.0
{
int i,m=0;
//*m为记录数据的条数
char ch[2];
FILE *fp;
//*定义文件指针并打开指定文件
if((fp=fopen("data","ab+"))==NULL);
{
printf("无法打开密码存储文件!");
system("pause");
return;
}
while(!feof(fp));
{
if(fread(&stu[m],LEN,1,fp)==1);
m++;
//*统计当前记录条数
}
fclose(fp);
if(m==0)
{
printf("无记录!");
system("pause");
}
else
{
system("cls");
show();
}
if((fp=fopen("data","wb"))==NULL)
{
printf("无法打开密码存储文件!");
system("pause");
}
for(i=0;i<m;m++)
fwrite(&stu[i],LEN,1,fp);
//*向指定的文件写入信息
printf("请输入(Y/N):");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0);
printf("按数字键1并回车确定");
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0);
//*判断是否要录入新信息
{
printf("请输入密码编号:");
scanf("%d",&stu[m].num);
for(i=0;i<m;i++)
if(stu[i].num==stu[m].num)
{
printf("该编号已存在,按任意键继续");
fclose(fp);
getchar();
return;
}
printf("请输入用户名");
scanf("%s",stu[m].name);
printf("请输入密码");
scanf("%s",&stu[m].password);
//*输入用户名和密码
if(fwrite(&stu[m],LEN,1,fp)!=1)
//*将新录入的信息写入指定的文件
{
printf("无法保存");
getchar();
}
else
{
printf("保存中……");
printf("%s 保存成功",stu[m].name);
m++;
system("pause");
}
printf("是否继续(y/n):");
//*询问是否继续
scanf("%s",ch);
}
fclose(fp);
printf("完成");
system("pause");
}
void search()
//*搜索函数
{
FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen("data","ab+"))==NULL)
{
printf("无法打开密码存储文件");
system("pause");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("无记录");
system("pause");
return;
}
printf("请输入要查询的密码编号:");
system("pause");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
//*查找输入的编号是否在记录中
{
printf("显示找到的密码吗?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("编号 用户名 密码 ");
printf(FORMAT,DATA);
//*将查找出的结果按指定格式输出
system("pause");
break;
}
else
return;
}
if(i==m)
printf("未找到密码");
system("pause");
//*未找到要查找的信息
return;
}
void del()
//*删除函数
{
FILE *fp;
int snum,i,j,m=0;
char ch[2];
if((fp=fopen("data","ab+"))==NULL)
{
printf("无法打开密码存储文件");
system("pause");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("无记录");
system("pause");
return;
}
printf("请输入要删除的密码编号:");
system("pause");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
break;
if(i==m)
{
printf("找不到密码");
getchar();
return;
}
printf("找到该密码,删除?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
//*判断是否要进行删除
{
for(j=i;j<m;j++)
stu[j]=stu[j+1];
//*将后一个记录移到前一个记录的位置
m--;
//*记录的总个数减1
printf("删除中……");
printf("删除成功!");
system("pause");
}
if((fp=fopen("data","wb"))==NULL)
{
printf("无法打开密码存储文件");
system("pause");
return;
}
for(j=0;j<m;j++)
//*将更改后的记录重新写入指定的文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("无法保存!");
system("pause");
getchar();
}
fclose(fp);
}
void modify()
//*自定义修改函数
{
FILE *fp;
int i,j,m=0,snum;
if((fp=fopen("data","ab+"))==NULL)
{
printf("无法打开密码存储文件!");
system("pause");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("无记录!");
system("pause");
fclose(fp);
return;
}
printf("请输入要修改的密码编号");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
//*检索记录中是否有要修改的信息
break;
if(i<m)
{
printf("找到该密码,可以修改!");
printf("用户名:");
scanf("%s",stu[i].name);
//*输入名字
printf("密码:");
scanf("%lf",&stu[i].password);
//*输入密码
printf("保存中……");
printf("保存成功");
system("pause");
return;
}
else
{
printf("密码未找到!");
getchar();
return;
}
if((fp=fopen("data","wb"))==NULL)
{
printf("无法打开密码存储文件");
system("pause");
return;
}
for(j=0;j<m;j++)
//*将新修改的信息写入指定的文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("无法保存!");
getchar();
}
fclose(fp);
}
void total()
//*计算总数
{
FILE *fp;
int m=0;
if((fp=fopen("data","ab+"))==NULL)
{
printf("无法打开密码存储文件");
system("pause");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
//*统计记录个数
if(m==0)
{
printf("无记录!");
system("pause");
fclose(fp);
return;
}
printf("共存储 %d 个密码!",m);
//*将统计的个数输出
fclose(fp);
system("pause");
return;
}
复制代码
以上代码执行时无法创建文件,求大神帮忙解答
欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/)
Powered by Discuz! X3.2