C语言文件的存储和处理实验报告,c语言文件处理实验报告(6页)-原创力文档...

精选文档

PAGE

PAGE 1

文件处理

创建时间:2016-5-27

实验题目

文件处理

实验时间

201

实验地点

DS1408

实验成绩

实验性质

□验证性 □设计性 √综合性

教师评价:

□算法/实验过程正确; □源程序/实验内容提交 □程序结构/实验步骤合理;

□实验结果正确; □语法、语义正确; □报告规范;

其他:

评价教师签名:

一、实验目的

1、掌握字符如何在文件中读取和存储。

2、掌握字符的的简单加密和解密。

3、掌握字符串的复制、查询、比较、连接、长度等基本C语言库函数。

二、实验项目内容(实验题目)

1)如果file1.dat不存在,就建立file1.dat。并在文件file1.dat中存入两个字符串,第1行是帐号,第2行是密码。

2)如果file2.dat不存在,就建立file2.dat。加密规则是将文件file1.dat中的密码的每一字与0x6a异或变成另一个字符送屏幕显示,同时存入文件file2.dat中。

3)如果file2.dat存在,则执行登陆程序,要求输入帐号和密码,并和file2.dat中解密(解密和加密采用同样的算法)得到的帐号和密码进行比较,如果一致则显示登录成功,否则显示登录失败。

加密和解密的方法可以设计得复杂一些。

三、源程序(实验过程或算法)

1、算法如下

一、执行注册程序:以只读方式打开file1.dat,若不成功,则建立file1.dat。分别用字符数组a,b存放注册时录入的账号密码,并fputs入file1.dat.

二、开始加密:以只读方式打开file2.dat,若不成功,则建立file2.dat。将数组b(即密码)每个元素与0x6a异或后送屏幕显示,并fputc入文件file2.dat中。

三、加密后解密:以只读方式打开file2.dat,若成功,则开始解密和登录程序。从file2.dat中读出的加密后的密码并与0x6a再次异或后用数组p存放。

四、执行登录程序:分别用字符数组c,d存放登录时录入的账号密码,并用strcmp函数分别与数组a,p比较,如果一致则显示登录成功,否则显示登录失败。

2、源程序如下

#include

#include

#include

#define N 0x6a

int main()

{

FILE *fp1,*fp2;

fp1=fopen("file1.dat","r");

if(fp1==NULL)

{

fp1=fopen("file1.dat","w+");

printf("开始注册\n");

char a[10],b[10];

printf("请输入账号:\n");

gets(a);

fputs(a,fp1);

fputc('\n',fp1);

printf("请输入密码:\n");

gets(b);

fputs(b,fp1);

fclose(fp1);

}

else

{

char a[10],b[10],ch,x,y,z;

int m=0,n=0;

fseek(fp1,0,SEEK_SET);

while((x=fgetc(fp1))!='\n')

{

a[m]=x;

m++;

}

a[m]='\0';

while((z=fgetc(fp1))!=EOF)

{

b[n]=z;

n++;

}

b[n]='\0';

fclose(fp1);

fp2=fopen("file2.dat","r");

if(fp2==NULL)

{

fp2=fopen("file2.dat","w+");

for(int i=0;i<10;i++)

{

ch=b[i]^N;

putchar(ch);

fputc(ch,fp2);

}

printf("\n");

fclose(fp2);

}

else

{

printf("开始登录\n");

char c[10],d[10],p[10];int j=0;

printf("请输入账号:\n");

gets(c);

printf("请输入密码:\n");

gets(d);

fseek(fp2,0,SEEK_SET);

while((ch=fgetc(fp2))!=EOF)

{

char a=ch^N;

p[j]=a;

j++;

}

p[j]='\0';

if((strcmp(a,c)==0)&&(strcmp(p,d)==0))

printf("登录成功");

else

printf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值