• 操作系统实验四:文件管理(2学时)


    一、实验目的

    通过本次实验对一个班级学生成绩的管理,使学生了解文件的主要操作。详细的目标如下:

    1. 通过实验中文件的创建、复制和删除等操作完成对文件管理。
    2. 了解文件、文件目录的结构。
    3. 掌握文件的读写、文件指针移动基本操作,并了解文件控制的作用。

    二、实验内容

    1. 学生了解实验目的,创建文件、输入班级成绩、保存文件等功能需要画出流程框图。
    2. 利用磁盘文件对学生成绩进行管理:查询成绩、修改成绩、显示所有的学生成绩。
    3. 编写一个班级成绩复制到另一个文件的功能。
    4. 学习使用文件控制,实现指定班级成绩文件的删除操作【选做】。
    5. 实现目录的管理,创建与删除子目录、搜索指定的文件等【选做】。

    三、实验步骤

    1. 复习文件操作部分内容。
    2. 按照要求编出复制文件和利用磁盘文件管理学生情况的程序。
    3. 预习Java相关的IDE或Visual C++ 6.0、GCC++编程工具的文件控制。
    4. 上机调试程序。
    5. 完成实验报告。
    1. 利用磁盘文件对学生成绩进行管理:
    1. #include
    2. #include
    3. #include
    4. struct Score {
    5. char name[20];
    6. int math_score;
    7. int english_score;
    8. };
    9. int main() {
    10. FILE* fp;
    11. struct Score score;
    12. char query_name[20];
    13. int found = 0;
    14. // 打开文件
    15. fp = fopen("score.dat", "rb");
    16. if (fp == NULL) {
    17. printf("Failed to open file\n");
    18. exit(1);
    19. }
    20. // 读取数据
    21. while (fread(&score, sizeof(struct Score), 1, fp) > 0) {
    22. if (strcmp(score.name, query_name) == 0) {
    23. printf("%s's scores: Math: %d, English: %d\n",
    24. score.name, score.math_score, score.english_score);
    25. found = 1;
    26. break;
    27. }
    28. }
    29. // 关闭文件
    30. fclose(fp);
    31. if (!found) {
    32. printf("Score not found.\n");
    33. }
    34. return 0;
    35. }

     2.修改成绩:

    1. #include
    2. #include
    3. #include
    4. struct Score {
    5. char name[20];
    6. int math_score;
    7. int english_score;
    8. };
    9. int main() {
    10. FILE* fp;
    11. struct Score score;
    12. char modify_name[20];
    13. int found = 0, modify_math_score, modify_english_score;
    14. // 打开文件
    15. fp = fopen("score.dat", "r+b");
    16. if (fp == NULL) {
    17. printf("Failed to open file\n");
    18. exit(1);
    19. }
    20. // 修改数据
    21. while (fread(&score, sizeof(struct Score), 1, fp) > 0) {
    22. if (strcmp(score.name, modify_name) == 0) {
    23. found = 1;
    24. printf("%s's scores: Math: %d, English: %d\n",
    25. score.name, score.math_score, score.english_score);
    26. printf("Enter new math score:");
    27. scanf("%d", &modify_math_score);
    28. printf("Enter new english score:");
    29. scanf("%d", &modify_english_score);
    30. score.math_score = modify_math_score;
    31. score.english_score = modify_english_score;
    32. fseek(fp, -sizeof(struct Score), SEEK_CUR);
    33. fwrite(&score, sizeof(struct Score), 1, fp);
    34. break;
    35. }
    36. }
    37. // 关闭文件
    38. fclose(fp);
    39. if (!found) {
    40. printf("Score not found.\n");
    41. } else {
    42. printf("Score modified.\n");
    43. }
    44. return 0;
    45. }

    3.显示所有学生成绩

    1. #include
    2. #include
    3. #include
    4. struct Score {
  • 相关阅读:
    多维时序 | MATLAB实现TCN时间卷积神经网络多变量时间序列预测
    jar包应用的简单启停脚本
    AR人体姿态识别,实现无边界的人机交互
    纵享丝滑!Cesium + ffmpegserver 生成高质量动态视频【逐帧生成】
    MyBatis之xml配置的解析
    03-系统篇-内存碎片
    Bootstrap Blazor 使用模板创建项目
    近期的感想与2024年的计划
    【Centos安装mysql】
    spring DisposableBean作用,在spring Bean销毁时的钩子 以及@PreDestroy
  • 原文地址:https://blog.csdn.net/weixin_60530224/article/details/130755782