按格式读写文件存取学生信息

简介: 按格式读写文件存取学生信息

本关要求编写函数ReadStudInfo和SaveResult。


相关知识(略)


编程要求


本关的编程任务是补全step2/fileTxt.c文件中ReadStudInfo函数和SaveResult函数,以实现按格式使用FILE结构存取学生信息的功能。具体要求如下: 1.ReadStudInfo函数功能:实现从文本文件中读取学生的基本信息。函数ReadStudInfo函数原型为:


void ReadStudInfo(const char *fileName, STUDENT stud[]);


其中:


参数fileName是一个文本文件,位于当前目录,即与源程序文件在同一文件夹下。文件中首先是以字符形式写入的学生人数(整数n,不超过30)和课程数量(整数n,不超过5),然后是n个学生的信息,学生信息在结构STUDENT中定义:

struct student
{
long studentID;
char studentName[20];
char sex[4];
struct{
int year;
int month;
int day;
}birthday;
float score[COURSE_MAXNUM];
float total;
float average;
int rank;
};
typedef struct student STUDENT;

文件中没有存储 total,average,rank 三项信息。

函数ReadStudInfo的第二个参数stud存放读取出来的学生信息。

2.SaveResult函数功能:实现从文本文件中读取学生的基本信息。函数SaveResult函数原型为:


void SaveResult(const char *fileName, STUDENT stud[],int n,int m);


其中:


参数fileName是一个文本文件,位于当前目录,即与源程序文件在同一文件夹下。

文件中首先要求以字符形式写入学生人数(整数n,不超过30)和课程数量(整数n,不超过5),然后是n个学生的信息。n个学生的信息存放在第二个参数stud开始的n个结构体数据单元中。

每个学生的信息包括学号、姓名、性别、出生日期,若干门课程的成绩、总分、平均分、名次。

测试说明


本关的测试文件是step2/main.c,其中将会调用你在step2/fileTxt.c文件中完成的ReadStudInfo函数和SaveResult函数。除此之后,step2/main.c中还对学生信息进行了处理:包括计算总分、平均分和名次。其次还实现了输入测试数据、输出测试结果、写入测试文件(student.txt)、读取测试文件(result.txt):


1.调用函数Input()将标准输入的数据读入内存,然后调用SaveStudInfo()函数将数据再写入到student.txt文本文件,以便为**ReadStudInfo()**函数从文本文件读取学生信息准备测试数据。


2.调用函数ReadResult()将SaveResult()函数保存的result.txt中的学生信息读入内存,并调用Print()函数进行输出。**SaveResult()**函数需要将计算出总分、平均分和名次信息的学生信息存入result.txt。


3.student.txt的示例如下:


4.result.txt的示例如下:

5.step2/main.c主要代码如下:


#include <stdio.h>
#include <stdlib.h>
#define COURSE_MAXNUM 5
//声明结构STUDENT
struct student
{
long studentID;
char studentName[20];
char sex[4];
struct{
int year;
int month;
int day;
}birthday;
float score[COURSE_MAXNUM];
float total;
float average;
int rank;
};
typedef struct student STUDENT;
//声明外部函数,函数在其它源文件中实现
extern void ReadStudInfo(const char *fileName, STUDENT stud[]);
extern void SaveResult(const char *fileName, STUDENT stud[],int n,int m);
//声明本文件中的其它函数
void Input(STUDENT *stud, int n,int m);
void Print(STUDENT *stud, int n,int m);
void TotalAndAverage(STUDENT *stud, int n,int m);
void RankByTotal(STUDENT *stud, int n,int m);
void SaveStudInfo(const char *fileName,STUDENT *stud,int n,int m);
void ReadResult(const char *fileName,STUDENT *stud);
int main()
{
int n,m; //n用于存放学生人数,m用于存放课程门数。
STUDENT *stud; //指向存放学生信息的存储块的首地址
scanf("%d%d",&n,&m); //输入学生总人数
// 动态分配存储
stud = (STUDENT *)malloc(n*sizeof(STUDENT));
Input(stud,n,m);//输入学生信息
//将测试输入信息写入文件
SaveStudInfo("student.txt",stud,n,m);
free(stud);
//打开文件student.txt,以文本文件方式打开用于读
//从文件中读取学生信息到数组stud中
stud = (STUDENT *)malloc(n*sizeof(STUDENT));
ReadStudInfo("student.txt",stud);
// 计算总分
TotalAndAverage(stud,n,m);
// 计算排名
RankByTotal(stud,n,m);
//打开文件result.txt,以文本文件方式打开用于写
//将计算出了总分和平均分以及名次的学生信息写入文件
SaveResult("result.txt",stud,n,m);
free(stud);
//打开文件result.txt,以文本文件方式打开用于读
//从文件中读取学生信息到数组stud中,用于测试是否与预期输出一致
stud = (STUDENT *)malloc(n*sizeof(STUDENT));
ReadResult("result.txt",stud);
//输出学生信息
Print(stud,n,m);
free(stud);
return 0;
}

相关文章
|
5月前
|
Ubuntu Linux Windows
Rufus中文版U盘启动盘制作工具使用全攻略(图文版)
Rufus是一款免费开源、体积仅约2MB的便携式U盘启动盘制作工具,免安装、自带简体中文,支持UEFI+BIOS双模式,写入快、校验准,轻松将Windows/Linux等ISO镜像写入U盘。(239字)
|
6月前
|
机器学习/深度学习 人工智能 物联网
刷屏背后的 AI画图:80% 可以被替代,剩下 20% 才是核心价值
刷屏背后的 AI画图:80% 可以被替代,剩下 20% 才是核心价值
|
6月前
|
Prometheus 监控 Cloud Native
MySQL性能拉胯、故障难排查?Prometheus+Grafana+Zabbix搭建全流程监控体系,秒定位问题!
本文详解如何用Prometheus(采集)、Grafana(可视化)、Zabbix(告警)三工具联动,构建MySQL性能监控与故障排查闭环体系,覆盖实时监控、智能预警、精准定位、优化治理,助运维/DBA告别被动救火,提升系统稳定性与响应效率。(239字)
|
7月前
|
人工智能 前端开发 Linux
阿里云/本地部署OpenClaw与人格定制终极指南:186位专家即插即用+千问/Coding Plan配置教程
OpenClaw(社区昵称“小龙虾”)的核心能力,由`workspace`目录下三大配置文件共同定义:`SOUL.md`人格内核、`IDENTITY.md`身份名片、`AGENTS.md`能力边界。这三份文件决定了AI的专业方向、沟通风格、工作流与行为准则。手动编写不仅耗时,且难以达到专业水准。
1297 8
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
908 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
10月前
|
存储 数据采集 搜索推荐
状态检索:如何快速判断一个用户是否存在?
本文探讨如何高效判断用户是否存在,对比有序数组、二分查找树和哈希表后,引出更优方案:位图与布隆过滤器。位图以bit为单位存储,大幅节省空间;布隆过滤器通过多哈希函数降低冲突概率,虽有一定误判率,但查询效率达O(1),适用于注册去重、爬虫去重等场景,是提升系统性能的关键技术。
|
存储 人工智能 自然语言处理
DeepSeek R1+Ollama+Cherry Studio实现本地知识库的搭建
本文介绍了如何使用Ollama和CherryStudio搭建本地知识库,涵盖核心组件介绍、硬件与软件准备、模型部署流程及知识库构建方法。通过配置DeepSeek R1模型、嵌入模型和Cherry Studio平台,实现本地化自然语言处理与知识检索功能。
4025 0
|
机器学习/深度学习 数据采集
深度学习之物理仿真
基于深度学习的物理仿真是一种利用深度学习技术来模拟和预测物理系统行为的方法。这种方法不仅提高了物理仿真的效率,还扩大了其在复杂系统和不可预知领域中的适用性。
577 5
|
机器学习/深度学习 人工智能 Serverless
20行代码,Serverless架构下用Python轻松搞定图像分类和预测
本文将AI项目与Serverless架构进行结合,在Serverless架构下用20行Python代码搞定图像分类和预测。
112844 127
|
存储 缓存 NoSQL
【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
1180 0