当前位置: 首页 > news >正文

IO: 作业:Day1

思维导图

main.c

#include"student.h"
int main(int argc, const char *argv[])
{
    stuPtr h=creat();
    int n=0;
    
    add_node(h);
    add_node(h);
    add_node(h);
    
    show(h);
    
    save(h,"student.txt");
    
    stuPtr ptr=creat();
    
    load(ptr,"student.txt",n);
    
    stuPtr ptr1=creat();
    
    change(ptr1,"student.txt",n);
    
    return 0;
}

student.c

#include"student.h"
 
 
stuPtr creat()
{
    stuPtr h=(stuPtr)malloc(sizeof(stu));
    if(NULL==h)
    {
        printf("创建失败\n");
        return NULL;
    }
    h->len=0;
    h->next=NULL;
    return h;
}

stuPtr creatNode()
{
    stuPtr newnode=(stuPtr)malloc(sizeof(stu));
    if(NULL==newnode)
    {
        printf("节点申请失败\n");
        return NULL;
    }
    newnode->next=NULL;
    
    printf("姓名:");
    fscanf(stdin,"%s",newnode->Data.name);
    printf("数学:");
    fscanf(stdin,"%d",&newnode->Data.math);
    printf("语文:");
    fscanf(stdin,"%d",&newnode->Data.chinese);
    printf("英语:");
    fscanf(stdin,"%d",&newnode->Data.english);
    printf("物理:");
    fscanf(stdin,"%d",&newnode->Data.physical);
    printf("化学:");
    fscanf(stdin,"%d",&newnode->Data.chemical);
    printf("生物:");
    fscanf(stdin,"%d",&newnode->Data.biological);
}
int empt(stuPtr h)
{
    if(NULL==h)
    {
        printf("判空失败\n");
        return -1;
    }
    return h->next==NULL;
}
 
int add_node(stuPtr h)
{
    if(NULL==h)
    {
        printf("添加数据失败\n");
        return -1;
    }
    stuPtr newnode=creatNode();
    
    stuPtr temp=h;
    while(temp->next!=NULL)
    {
        temp=temp->next;
    }
    temp->next=newnode;
 
    h->len++;
    return 1;
}
 
void show(stuPtr h)
{
    if(NULL==h)
    {
        printf("遍历失败\n");
        return;
    }
    stuPtr p=h->next;
    for(int i=0;i<h->len;i++)
    {
        fprintf(stdout,"%s %d %d %d %d %d %d\n",p->Data.name,p->Data.math,p->Data.chinese,p->Data.english,p->Data.physical,p->Data.chemical,p->Data.biological);
        p=p->next;
    }
    return;
}
 
void save(stuPtr h,const char* filename)
{
    FILE* p=fopen(filename,"w");
    stuPtr p1=h->next;
    for(int i=0;i<h->len;i++)
    {
        fprintf(p,"%s %d %d %d %d %d %d\n",p1->Data.name,p1->Data.math,p1->Data.chinese,p1->Data.english,p1->Data.physical,p1->Data.chemical,p1->Data.biological);
        p1=p1->next;
    }
    fclose(p);
}
void load(stuPtr ptr,const char* filename,int n)
{
    if(NULL==ptr)
    {
        printf("失败\n");
        return;
    }
    FILE* p=fopen(filename,"r");
    for(int i=0;i<n;i++)
    {
        stuPtr p1=creat();
        fscanf(p,"%s %d %d %d %d %d %d\n",p1->Data.name,&p1->Data.math,&p1->Data.chinese,&p1->Data.english,&p1->Data.physical,&p1->Data.chemical,&p1->Data.biological);
        stuPtr p2=ptr;
        while(p2->next!=ptr)
        {
            p2=p2->next;
        }
        p2->next=p1;
        p1->next=ptr;
        ptr->len++;
 
    }
    return;
}
 
void change(stuPtr h,const char* filename,int n)
{
    load(h,filename,n);
    stuPtr p1=h->next;
    for(int i=0;i<n;i++)
    {
        printf("请输入修改后%s的数学成绩",p1->Data.name);
        scanf("%d",&p1->Data.math);
        p1=p1->next;
    }
    save(h,filename);
}

student.h

#ifndef __STUDENT__
#define __STUDENT__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
    char name[20];
    int  math;
    int chinese;
    int english;
    int  physical;
    int chemical;
    int biological;    
}data,*dataPtr;
 
typedef struct student
{
    union
    {
        data Data;
        int len;
    };
    struct student *next;
}stu,*stuPtr;
 
stuPtr creat();
stuPtr creatNode();

int empt(stuPtr h);
int add(stuPtr h);
int add_node(stuPtr h);
void show(stuPtr h);
void save(stuPtr h,const char* filename);
void load(stuPtr h,const char* filename,int n);
void change(stuPtr h,const char* filename,int n);
#endif

结果

http://www.lryc.cn/news/516961.html

相关文章:

  • ue5 替换角色的骨骼网格体和动画蓝图
  • el-cascader 树状选择-点击父级禁用子级
  • AWS re:Invent 的创新技术
  • PHP7和PHP8的最佳实践
  • Debian、Ubuntu 22.04和ubuntu 24.04国内镜像源(包括 docker 源)
  • 点亮一个esp32 的led
  • C++ shared_ptr进一步认知,为什么引用计数>2退出作用域都可以调用析构
  • JavaScript代码片段二
  • 【计算机视觉】单目深度估计模型-Depth Anything-V2
  • Servlet 和 Spring MVC:区别与联系
  • 【期末复习】三、内存管理
  • Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务
  • 【Docker】安装registry本地镜像库,开启Https功能
  • JUC--线程池
  • 后端Java开发:第十一天
  • 基于 GEE 的长时间序列 Landsat 5 影像下载
  • Unity-Mirror网络框架从入门到精通之Attributes属性介绍
  • 软考证书邮寄步骤
  • 计算机网络 (29)网络地址转换NAT
  • nlp培训重点-2
  • 设计模式(1)——面向对象和面向过程,封装、继承和多态
  • 培训机构Day24
  • 1/7 C++
  • C语言初阶习题【23】输出数组的前5项之和
  • Android audio(1)-音频模块概述
  • 园林与消防工程:选择正确工程项目管理软件的重要性
  • 分布式环境下定时任务扫描时间段模板创建可预订时间段
  • SQL刷题笔记——高级条件语句
  • 与 Oracle Dataguard 相关的进程及作用分析
  • 游戏语音趋势解析,社交互动有助于营造沉浸式体验