西北农林科技大学数据结构实习报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院
数据结构与C语言综合训练报告(2013~2014学年第二学期)
报告题目:文件目录管理系统
____________ _______
●姓名:
●专业:信息管理与信息系统
●年级班级:__ 13级3班_____
●指导教师:__ 任国霞_
●完成日期:__2014-7-18______
一、综合训练目的和要求
本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务:
1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言、数据结构解决实际问题的能力
二、综合训练任务内容
文件是管理用户信息和应用程序的一种工具。
每个文件有唯一的文件名,可以通过文件名访问文件,同时可对文件进行生成、删除及文件名修改等操作。
文件系统对若干文件进行管理时将所有的文件目录组合在一起构成一个目录文件。
通过对目录文件的管理达到“按名存取”的目的,目录文件常采用的组织结构是树型目录结构。
基本要求:
函数功能要划分好,程序要有必要的注释。
用户通过界面菜单选择以下操作:
(1)生成文件,选择路径和文件名,实现对文件的生成。
(2)删除文件,对指定文件进行删除操作。
(3)修改文件,对指定文件进行内容修改或者文件名修改。
(4)输出该目录结构。
三、总体设计
四、详细设计说明
4.1 函数设计
(1)主要的函数设计
struct MasterFile*MoveMFDToLast()//寻找主目录空闲区struct MasterFile*SearchMFD(char str[])//查找用户struct UserFile *MoveUFDToLast()//寻找用户目录空闲区struct UserFile *SearchUFD(int num)//查找用户文件void LeftMoveUFD(int num)//删除用户文件目录、
void Login()//用户登陆
void menu()//菜单
void Dir()//列文件目录
void Create()//生成文件
void Delete()//删除文件
void judge()//修改文件
void Save()//保存
(2)主函数的实现
int main()
{
FILE *fpm,*fpu; //文件指针
int sel;
char ch;
char jian;
printf("\t\t\t\t文件目录管理系统\n\t\t\t\t\n");
fpm=fopen("F:\\MasterFile.txt","rb"); //打开主文件目录信息文件
if(fpm==NULL)
{
printf("\n提示:主文件目录信息文件还不存在,是否创建?(y/n)\n");
scanf("%s",&jian);
if(jian=='y'||jian=='Y')
fpm=fopen("F:\\MasterFile.txt","wb"); //创建主文件目录的文件 else exit(0);
}
fpu=fopen("F:\\UserFile.txt","rb"); //打开用户文件目录信息文件
if(fpu==NULL)
{
printf("\n提示:用户文件目录信息文件还不存在,是否创建?(y/n)\n");
scanf("%s",&jian);
if(jian=='y'||jian=='Y')
fpu=fopen("F:\\UserFile.txt","wb"); //创建用户文件目录的文件 else exit(0);
}
printf("文件正在打开,请稍等...");
printf("\n文件已导入完毕!\n");
Login(); //用户登录
while(1)
{
//菜单操作
menu();
printf("请你选择操作:");
scanf("%d",&sel);
if(sel==0)
{
//保存文件信息
if(shoudsave==1)
{
getchar();
printf("\n资料已经改动,是否将改动保存到文件中(y/n)?\n"); scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save();
}
printf("\n你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:
Dir();
break; //列文件目录
case 2:
Create();
break; //创建文件
case 3:
Delete();
break; //删除文件
case 4:
judge();
break; //修改文件
default:
printf("你输的选项有误,请重新输入!\n");
break;
}
}
}
}2.2结构体
struct MasterFile
{
char username[20]; //用户名
char password[20]; //用户名密码
char flag; //标志
struct MasterFile *next;
};
//用户文件结构体
struct UserFile
{
int fnum; //文件编号
char fname[20]; //文件名
char flag; //标志
char fpw[20]; //文件保护码
struct UserFile *link;
};
五、软件使用说明
5.1创建文件
5.2删除文件
5.3修改文件
5.4列文件目录
5.5结束程序
六、调试与测试
运行后观察,发现出现了程序错误!经过多次调试,发现把
“scanf("%s",&jian);
if(jian=='y'||jian=='Y')
fpu=fopen("F:\\UserFile.txt","wb"); //创建用户文件目录的文件
else exit(0);
}
printf("文件正在打开,请稍等...");
for(int i=0; i<20; i++) //读取主文件目录信息
fread(&MFD[i],sizeof(struct MasterFile),1,fpm); //将文件的内容放入接点中
fclose(fpm); // 关闭文件
while(!feof(fpu)) //读取用户目录文件信息
{
for(int i=0; i<20; i++)
{
if(fread(&UFD[i][0],sizeof(struct UserFile),20,fpu)) //将文件的内容放入接点中
MFD[i].next=(struct MasterFile*)&UFD[i][0];
}
}
fclose(fpu); //关闭文件
printf("\n文件已导入完毕!\n");
Login(); //用户登录”
删除后错误就消除了。
文件刚开始还存在一些小错误,经过慢慢的调试,错误一点点的被改了过来。
还有,刚开始的文件不能修改,经过添加了一些编程,就能修改了。
可后来我发现,每次修改的不是上一次的编号的话那就会发生下列情况:
就是每次修改完都会多一个文件,想复制的一样。
后来,经过多次试验、调节,发现把“ f=MoveUFDToLast(); //寻找用户目录空闲区”
语句删掉就可以了。
本来自己想独立完成一个代码,但是在五天写程序当中遇到了很多问题,虽然解决了很多的问题,但是程序最终还是和要求差了好多,无奈搜索了出来了一个代码,很相似就把它拿来修改了一下,不过此系统完成后还是没有达到我预想的结果存在缺陷:在修改文件操中,只能是把原文件名称和内容覆盖掉,不能在文件内容基础上进行修改
七、工作日志
第一天:选择综合训练题目,分析课题的要求,查阅有关资料,复习相关知
第二天:编写详细设计说明;
第三天:交详细设计说明电子稿,编程;
第四天:编写程序,查资料;
第五天:继续编写程序;
第六天:修改程序;
第七天:对程序进行调试;
第八天:对程序进行最后的修改;
第九天:编写实验报告:
第十天:编写实验报告,上交;
八、综合训练心得与体会
经过这次实习,让我懂得了许多,每件事都不是轻而易举就能做到的,都要经过不懈的努力。
良好的编程习惯是很重要的。
首先,在编程前要从整体上把握,组织;分析。
然后,在编程中尽量不使用怪癖的语句算法,注意代码排版。
接下来,一定要会使用、经常使用注释!最后,调试要有耐心,要细心。
说些其他的,就是一定要谦虚,不要一心认为自己总是对的,学会交流。
其实每个人都有自己独特的风格,自己怎么舒服就怎么来,但前提是要保证别人可以看懂你的程序。
有时,做不出来不要心急,那只是暂时的。
任何事情都有其解决的办法,只是你还没有发现而已。
每一道题,都有它有用的地方,如果你学会了,对你会有很多帮助的。
刚开始,我的程序一点都不会,我的心里很着急。
可是,却一点用都没有,我只有静下心来,仔细的观看我的题,加上上网查找资料,刚开始我是打算靠自己编一个程序歘来的,可是连续几天过去快要结束时虽然实现了一大部分功能,但是,还是没有完全实现。
我敢拒绝时间已经不够用了,只能再去网上搜索,找到了一个很相似的,然后在把我原来写的一部分和搜索到的综合了一下,又找了一些热的帮忙,最终实现了所要求的功能,虽然还有很多漏洞,但我一定会加油的!
九、意见和建议
意见:以后可以每个月有一次这样的实训,持续两天。
然后写报告什么的就不要了,只要求写代码,然后完成后由老师指导,相信同学们的编程能力会有很大提升。
建议:希望以后的实训还是尽量不要放到假期吧,比如我想着去社会上打工历练一下,也能早点适应社会。
目前看来时间就有点不允许了。