1、文件处理创建时间:2016-5-27实验题目 文件处理实验时间 2016-5-16 实验地点 DS1408实验成绩 实验性质 验证性 设计性 综合性教师评价:算法/实验过程正确; 源程序/实验内容提交 程序结构/实验步骤合理;实验结果正确; 语法、语义正确; 报告规范; 其他:评价教师签名:一、实验目的1、掌握字符如何在文件中读取和存储。2、掌握字符的的简单加密和解密。3、掌握字符串的复制、查询、比较、连接、长度等基本 C 语言库函数。二、实验项目内容(实验题目) 1)如果 file1.dat 不存在,就建立 file1.dat。并在文件 file1.dat 中存入两个字符串,第 1 行是帐号
2、,第 2 行是密码。2)如果 file2.dat 不存在,就建立 file2.dat。加密规则是将文件 file1.dat中的密码的每一字与 0x6a 异或变成另一个字符送屏幕显示,同时存入文件file2.dat 中。3)如果 file2.dat 存在,则执行登陆程序,要求输入帐号和密码,并和file2.dat 中解密(解密和加密采用同样的算法)得到的帐号和密码进行比较,如果一致则显示登录成功,否则显示登录失败。加密和解密的方法可以设计得复杂一些。三、源程序(实验过程或算法)1、算法如下一、执行注册程序:以只读方式打开 file1.dat,若不成功,则建立 file1.dat。分别用字符数组
3、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、
4、源程序如下#include#include#include#define N 0x6aint main()FILE *fp1,*fp2;fp1=fopen(“file1.dat“,“r“);if(fp1=NULL)fp1=fopen(“file1.dat“,“w+“);printf(“开始注册n“);char a10,b10;printf(“请输入账号:n“);gets(a);fputs(a,fp1);fputc(n,fp1);printf(“请输入密码:n“);gets(b);fputs(b,fp1);fclose(fp1);elsechar a10,b10,ch,x,y,z;int m=0
5、,n=0;fseek(fp1,0,SEEK_SET);while(x=fgetc(fp1)!=n)am=x;m+;am=0;while(z=fgetc(fp1)!=EOF)bn=z;n+;bn=0;fclose(fp1);fp2=fopen(“file2.dat“,“r“);if(fp2=NULL)fp2=fopen(“file2.dat“,“w+“);for(int i=0;i10;i+)ch=biN;putchar(ch);fputc(ch,fp2);printf(“n“);fclose(fp2);elseprintf(“开始登录n“);char c10,d10,p10;int j=0;p
6、rintf(“请输入账号:n“);gets(c);printf(“请输入密码:n“);gets(d);fseek(fp2,0,SEEK_SET);while(ch=fgetc(fp2)!=EOF)char a=chN;pj=a;j+;pj=0;if(strcmp(a,c)=0)elseprintf(“登录失败“);fclose(fp2);return 0;四、源程序调试过程和(或)实验分析1、一组测试数据及数据分析编译后如下图:编译结果为 0error(s),0warning(s),编译成功。组建后如下图:组建结果为 0error(s),0warning(s),组建成功。一组测试数据调试如下:
7、注册过程如下:加密后的密码显示如下:登录过程如下:调试程序过程均为 0error(s),0warning(s),程序没有问题。根据这组测试数据,登录时输入账号密码与注册时相同则显示登录成功,故本程序编写正确。2、遇到什么问题、学到什么、体会到什么本次实验作为第一次涉及文件处理的实验,使我受益良多。许多关于文件操作的知识的不足在这次实验也暴露了出来,比如关于文件内部读写指针的一些操作。编程序过程中 error 还是很多的,也改了好久。特别是加密后的乱码那里,弄错了一些些就很头疼。所以一开始都是输入对的账号密码也显示登录失败。还有关于算法的一些问题,因为一开始对文件的只读、读写打开方式不是很熟悉,最初调试成功的程序其实是不符合老师要求的逻辑的,只是单纯的一次的注册、显示加密的密码、登录,后来终于理清了这其中的 ifelse逻辑关系,圆满完成了这个实验。其实这次实验最重要的还是让我熟悉了文件处理的一系列操作,至少下次做再做关于文件的程序,问题会少一点。