- #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;
- }
复制代码
以上代码执行时无法创建文件,求大神帮忙解答
|