学做的网站基础蛋糕/中国十大电商平台

学做的网站基础蛋糕,中国十大电商平台,重庆做网站建设的公司,南通做网站企业1.首先是头文件: //student.h //头文件//防止头文件被重复包含#pragma once//宏定义符号常量,方便维护和修改 #define ID_MAX 20 #define NAME_MAX 20 #define AGE_MAX 5 #define SEX_MAX 5 #define CLA_MAX 20 //定义初始最大容量 #define MAX 1//定义结…
 1.首先是头文件:
//student.h
//头文件//防止头文件被重复包含#pragma once//宏定义符号常量,方便维护和修改
#define ID_MAX 20
#define NAME_MAX 20
#define AGE_MAX 5
#define SEX_MAX 5
#define CLA_MAX 20
//定义初始最大容量
#define MAX 1//定义结构体学生
struct Student
{//定义学生信息char id[ID_MAX];char name[NAME_MAX];char age[AGE_MAX];char sex[SEX_MAX];char cla[CLA_MAX];
};//定义结构体学生信息本
struct Book
{//数据struct Student* data;//当前学生个数int sz;//当前容量int capacity;
};//项目函数声明
void menu();
void InitBook(struct Book* stu);
void ReadBook(struct Book* stu);
void WriteBook(struct Book* stu);
void CheckBook(struct Book* stu);
void clear_screen();
void AddBook(struct Book* stu);
void ShowBook(struct Book* stu);
void CheckCapacity(struct Book* stu);
void ExitBook(struct Book* stu);
void ClearBook(struct Book* stu);
2. 然后是功能函数student.c文件
//student.c
//函数体文件//调用头文件
#include "student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//定义函数体//定义清屏函数
//清屏操作
void clear_screen() {//判断是否为Windows系统
#ifdef _WIN32system("cls");//其他系统
#elsesystem("clear");
#endif
}//菜单函数
void menu()
{printf("*********************************************\n");printf("******** 1.添加        2.删除  **************\n");printf("******** 3.查询        4.修改  **************\n");printf("******** 5.查看        6.排序  **************\n");printf("******** 7.清空        0.退出  **************\n");printf("*********************************************\n");
}//检查容量是否溢出
void CheckCapacity(struct Book* stu) {if (stu->sz == 0) {printf("当前学生信息本为空!\n");}printf("当前容量为:%d\n", stu->capacity);printf("当前学生为:%d\n", stu->sz);
}//检查容量函数
void CheckBook(struct Book* stu) {//检查是否溢出if (stu->sz == stu->capacity) {printf("容量已满!开始扩容!\n");int newcapacity = (stu->capacity == 0) ? MAX : stu->capacity * 2;struct Student* cap = (struct Student*)realloc(stu->data, newcapacity * sizeof(struct Student));if (cap == NULL) {printf("扩容失败!\n");return;}stu->data = cap;stu->capacity = newcapacity;printf("扩容成功!\n");}
}//初始化学生信息函数
void InitBook(struct Book* stu) {//初始化为0或空stu->sz = 0;stu->data = NULL;stu->capacity = 0;//读取文件信息ReadBook(stu);//如果文件没有数据,初始化空间内存if (stu->sz == 0) {stu->data = (struct Student*)calloc(MAX, sizeof(struct Student));if (stu->data == NULL) {printf("初始化空间内存失败!\n");return;}stu->capacity = MAX;}
}
//读取文件函数
void ReadBook(struct Book* stu) {//打开文件FILE* fp = fopen("Studentbook.txt", "rb");if (fp == NULL) {return;}//定义一个临时结构体struct Student tmp;while (fread(&tmp,sizeof(struct Student),1,fp)) {//检查容量是否溢出CheckBook(stu);stu->data[stu->sz] = tmp;stu->sz++;CheckCapacity(stu);}fclose(fp);fp = NULL;
}//写入文件
void WriteBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "wb");if (fp == NULL) {printf("读取文件失败!\n");return;}for (int i = 0; i < stu->sz; i++) {fwrite((stu->data + i), sizeof(struct Student), 1, fp);}fclose(fp);fp = NULL;
}//添加学生信息
void AddBook(struct Book* stu) {CheckBook(stu);printf("请输入学号:");scanf("%s", stu->data[stu->sz].id);printf("请输入姓名:");scanf("%s", stu->data[stu->sz].name);printf("请输入年龄:");scanf("%s", stu->data[stu->sz].age);printf("请输入性别:");scanf("%s", stu->data[stu->sz].sex);printf("请输入班级:");scanf("%s", stu->data[stu->sz].cla);printf("添加成功!\n");(stu->sz)++;CheckCapacity(stu);
}//查询学生信息本
void ShowBook(struct Book* stu) {CheckCapacity(stu);printf("%-19s\t%-15s\t%-5s\t%-8s\t%-30s\n", "学号","姓名", "年龄", "性别", "班级");for (int i = 0; i < stu->sz; i++) {printf("%-19s\t%-15s\t%-5s\t%-8s\t%-30s\n", stu->data[i].id,stu->data[i].name,stu->data[i].age, stu->data[i].sex, stu->data[i].cla);}
}//退出学生信息本函数
void ExitBook(struct Book* stu) {WriteBook(stu);printf("退出成功!欢迎下次使用!\n");
}//释放空间函数
void ClearBook(struct Book* stu) {free(stu->data);stu->data = NULL;stu->sz = 0;stu->capacity = 0;
}
3.最后是主程序test.c文件:
//test.c
//测试文件//调用头文件
#include "student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>enum Option
{EXIT,//0,对应退出通讯录ADD,//1,对应添加联系人DEL,//2,对应删除联系人SEARCH,//3,对应查询联系人MODIFY,//4,对应修改联系人SHOW,//5,对应查看通讯录SORT,//6,对应排序通讯录CLEAR,//7,对应清空通讯录
};//程序主函数
int main() {//定义结构体变量struct Book stu;//初始化学生信息InitBook(&stu);int input = 0;int menu_0 = 0;do {//打印菜单while (1) {printf("************按1继续************\n");if (scanf("%d", &menu_0) != 1 && menu_0 != 1) {printf("输入不合法,请按1继续\n");return 1;}clear_screen();if (menu_0 == 1){menu();break;}}printf("请选择对应模式(0-7):\n");if (scanf("%d", &input) != 1 || input < 0 || input > 7) {printf("输入不合法,请输入整数0-7\n");return 1;}switch (input){case ADD: {clear_screen();AddBook(&stu);break;}case SHOW: {clear_screen();ShowBook(&stu);break;}case EXIT: {clear_screen();ExitBook(&stu);break;}default:break;}} while (input);ClearBook(&stu);return 0;
}

整个项目只有三个文件,头文件和两个源代码

下面是部分重要代码解析:

代码结构与核心知识点

1. 头文件 student.h
  • 知识点:头文件保护、宏定义、结构体声明、函数原型。

    #pragma once  // 防止重复包含
    #define ID_MAX 20  // 宏定义常量,便于维护struct Student {  // 学生信息结构体char id[ID_MAX];  // 字符串存储,避免溢出// ...其他字段
    };struct Book {     // 学生信息管理结构体struct Student* data;  // 动态数组指针int sz;       // 当前学生数量int capacity; // 当前容量
    };void InitBook(struct Book* stu);  // 函数原型声明
    // ...其他函数声明
2. 核心功能文件 student.c
(1) 动态内存管理
  • 知识点realloc 扩容、calloc 初始化。

    void CheckBook(struct Book* stu) {if (stu->sz == stu->capacity) {int newcapacity = (stu->capacity == 0) ? MAX : stu->capacity * 2;  // 初始容量为 MAX=1struct Student* cap = realloc(stu->data, newcapacity * sizeof(struct Student));  // 动态扩容// ...错误处理}
    }
(2) 文件读写
  • 知识点:二进制文件操作(fread/fwrite)。

    void ReadBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "rb");  // 二进制读模式while (fread(&tmp, sizeof(struct Student), 1, fp) {  // 逐条读取数据CheckBook(stu);  // 确保内存足够stu->data[stu->sz] = tmp;  // 存储到动态数组stu->sz++;}// ...关闭文件
    }void WriteBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "wb");  // 二进制写模式for (int i = 0; i < stu->sz; i++) {fwrite(&stu->data[i], sizeof(struct Student), 1, fp);  // 逐条写入}// ...关闭文件
    }
(3) 用户交互
  • 知识点:控制台输入、格式化输出。

    void AddBook(struct Book* stu) {CheckBook(stu);  // 检查容量scanf("%s", stu->data[stu->sz].id);  // 输入学号(未限制长度,有溢出风险!)// ...其他输入stu->sz++;  // 更新学生数量
    }void ShowBook(struct Book* stu) {printf("%-19s\t...\n", "学号");  // 格式化对齐输出for (int i = 0; i < stu->sz; i++) {printf("%-19s\t...\n", stu->data[i].id, ...);  // 显示所有学生}
    }
3. 主程序 test.c
  • 知识点:枚举类型、菜单驱动、循环控制。

    enum Option { EXIT, ADD, DEL, ... };  // 用枚举提高可读性int main() {struct Book stu;InitBook(&stu);  // 初始化do {menu();      // 打印菜单scanf("%d", &input);  // 读取用户选项switch(input) {case ADD: AddBook(&stu); break;  // 调用对应功能// ...其他选项}} while (input != EXIT);ClearBook(&stu);  // 释放内存return 0;
    }

 现在只做了3个功能,添加,查看,退出

后续将会继续完善和更新,代码部分运行结果如下:

容量已满!开始扩容!
扩容成功!
请输入学号:232
请输入姓名:李四
请输入年龄:13
请输入性别:女
请输入班级:C语言3班
添加成功!
当前容量为:4
当前学生为:3
************按1继续************
当前容量为:4
当前学生为:3
学号                    姓名            年龄    性别            班级
1                       1               1       1               1
231                     张三            12      男              C语言2班
232                     李四            13      女              C语言3班
************按1继续************
退出成功!欢迎下次使用!E:\Study\VS\VS Project\XIANGMU\1\StudentBook\x64\Debug\StudentBook.exe (进程 24368)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

源代码如下: 

双叶/学生信息表

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Problem D: 抽象类

1.题目问题 2.输入 3.输出 4.代码实现 补充&#xff1a; 没错&#xff0c;你没看错&#xff0c;没有 abstract class Vehicle &#xff0c;才能过。 恶心人 答案&#xff1a; {abstract void NoOfWheels(); }class Car extends Vehicle {Overridepublic void NoOfWheels()…

25大唐杯赛道一本科B组大纲总结(上)

25大唐杯省赛马上要开始&#xff0c;还没开始准备的要抓紧了 可看我之前发的备赛攻略&#xff0c;理论的准备要先将大纲整理成思维导图框架 然后根据重点&#xff0c;在资料中寻找&#xff0c;记忆 这里帮大家整理好了&#xff0c;后续其他组别会相继更新 基于竞赛大纲做的思…

4月手机新品前瞻,影像,性能与设计卷得起飞

在智能手机市场中,4月向来是新品频发的黄金时段。各大手机厂商纷纷摩拳擦掌,准备推出自家的重磅机型,在影像、性能与设计等核心领域展开激烈角逐,一场没有硝烟的“科技大战”即将拉开帷幕。接下来,让我们一同深入了解那些备受瞩目的新品,提前感受科技进步带来的魅力。 一…

设计审查效率革命|CAD原生数据直通自动公差验证

“为何 90% 的 GD&T 问题在设计评审时未被发现&#xff1f;怎样避免因 GD&T 考虑不周导致的批量返工&#xff1f;” 这正是 CETOL 自动辅助审查设计系统要解决的核心问题&#xff1a;通过200结构化审查规则拦截潜在设计疏漏。 功能一&#xff1a;装配约束健康诊断&…

近场探头的选型

近场探头包括磁场探头和电场探头。 下图中画圈的是电场探头&#xff1a; 左侧3只是磁场探头&#xff0c;最右侧一只是电场探头。不同孔径的磁场探头的有效测量距离和分辨率不同 电场探头和磁场探头分别在什么情况下使用&#xff1a; 一般近场测试&#xff0c;使用的都是磁场探…

Pycharm运行时报“Empty suite”,可能是忽略了这个问题

问题&#xff1a;使用Pycharm运行testcases目录下的.py文件&#xff0c;报“Empty suite”&#xff0c;没有找到测试项。 排查过python解释器、pytest框架安装等等&#xff0c;依然报这个错&#xff0c;依然没找到&#xff0c;最后终端运行&#xff1a; pytest test_demo.py&a…

鸿蒙北向应用开发:deveco 5.0 kit化文件相关2

鸿蒙北向应用开发:deveco 5.0 kit化文件相关 在kit化时,有时候会出现这样一种场景即你想把已有的d.ts导出换个名字,这样从名字上更贴合你的kit聚合 什么意思呢?比如现在有 ohos.hilog.d.ts 导出了hilog,现在你想kit化hilog,使得hilog导出名字为usrhilog,这样用户在使用你的k…

Linux 搭建dns主域解析,和反向解析

#!/bin/bash # DNS主域名服务 # user li 20250325# 检查当前用户是否为root用户 # 因为配置DNS服务通常需要较高的权限&#xff0c;只有root用户才能进行一些关键操作 if [ "$USER" ! "root" ]; then# 如果不是root用户&#xff0c;输出错误信息echo "…

OmniPlan Pro for Mac 项目管理流程

OmniPlan Pro for Mac 项目管理流程 文章目录 OmniPlan Pro for Mac 项目管理流程一、介绍二、效果三、下载 一、介绍 OmniPlan Pro mac是一款项目管理流程软件。能被用来优化资源、精简预算快速共享或添加任务&#xff0c;旨在能够帮助您可视化维护和简化项目&#xff0c;包含…

人工智能之数学基础:矩阵的相似变换

本文重点 矩阵的相似变换是线性代数中一个至关重要的概念,它揭示了矩阵之间的一种特殊关系,并通过可逆矩阵将一个矩阵转化为另一个相似矩阵,同时保持矩阵的某些本质特征不变。在机器学习领域,矩阵的相似变换发挥着不可或缺的作用,广泛应用于数据降维、聚类分析、分类推荐…

【SpringCloud】Eureka的使用

3. Eureka 3.1 Eureka 介绍 Eureka主要分为两个部分&#xff1a; EurekaServer: 作为注册中心Server端&#xff0c;向微服务应用程序提供服务注册&#xff0c;发现&#xff0c;健康检查等能力。 EurekaClient: 服务提供者&#xff0c;服务启动时&#xff0c;会向 EurekaS…

OpenCV图像拼接(3)图像拼接类cv::detail::MultiBandBlender

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::MultiBandBlender 是 OpenCV 中用于图像拼接&#xff08;stitching&#xff09;模块的一个类&#xff0c;主要用于将多张重叠的图像…

王者荣耀服务器突然崩了

就在刚刚王者荣耀服务器突然崩了 #王者荣耀崩了#的话题毫无预兆地冲上热搜&#xff0c;许多玩家发现游戏登录界面反复弹出异常提示&#xff0c;匹配成功后卡在加载界面&#xff0c;甚至出现对局数据丢失的情况。根据官方公告&#xff0c;目前技术团队已在全力抢修服务器 #王者…

【JavaScript】JavaScript Promises实践指南

【JavaScript】JavaScript Promises实践指南 你了解JavaScript中的Promises吗&#xff1f;这是一个很多人一开始就放弃的主题&#xff0c;但我会尽量让它变得尽可能简单。 1. “Promise”到底是什么&#xff1f; “Promise”是异步编程中的一个基本概念&#xff0c;特别是在J…

算法分析与设计 专题三

目录 一、实验目的 二、实验内容 三、问题分析与求解 四、AC源代码、截图 五、实验小结 一、实验目的 1、了解贪心算法的分析过程&#xff0c;学会用贪心算法解决一些具体的问题。 2、了解广度优先算法和深度优先算法。 二、实验内容 1992 当然&#xff0c;我们的收藏中…

每日算法-250328

记录今天学习和解决的LeetCode算法题。 92. 反转链表 II 题目 思路 本题要求反转链表中从 left 到 right 位置的节点。我们可以采用 头插法 的思路来反转指定区间的链表。 具体来说&#xff0c;我们首先定位到 left 位置节点的前一个节点 prev。然后&#xff0c;从 left 位置…

【AI编程学习之Python】第一天:Python的介绍

Python介绍 简介 Python是一种解释型、面向对象的语言。由吉多范罗苏姆(Guido van Rossum)于1989年发明,1991年正式公布。官网:www.python.org Python单词是"大蟒蛇”的意思。但是龟叔不是喜欢蟒蛇才起这个名字,而是正在追剧:英国电视喜剧片《蒙提派森的飞行马戏团》(Mo…

保姆级教程:Vue3 + Django + MySQL 前后端联调(PyCharm+VSCode版)

一、环境准备与验证 这里为减少篇幅&#xff0c;默认大家都安装好了这些软件。不会下载安装的&#xff0c;教程也很多&#xff0c;这里不再做赘述。话不多说&#xff0c;咱们开始&#xff1a; 1. 安装验证 确保已安装以下软件并验证版本&#xff1a; # 验证Node.js node -v…

Spring Data审计利器:@LastModifiedDate详解!!!

&#x1f552; Spring Data审计利器&#xff1a;LastModifiedDate详解&#x1f525; &#x1f31f; 简介 在数据驱动的应用中&#xff0c;记录数据的最后修改时间是常见需求。Spring Data的LastModifiedDate注解让这一过程自动化成为可能&#xff01;本篇带你掌握它的核心用法…

Uniapp自定义TabBar组件全封装实践与疑难问题解决方案

前言 在当前公司小程序项目中&#xff0c;我们遇到了一个具有挑战性的需求&#xff1a;根据不同用户身份动态展示差异化的底部导航栏&#xff08;TabBar&#xff09; 。这种多角色场景下的UI适配需求&#xff0c;在提升用户体验和实现精细化运营方面具有重要意义。 在技术调研…