写出学生健康管理系统的设计与实现 的代码,要求主要实现学生健康情况管理的几个操作功能:新建、插入、删除、写入文件和查询、屏幕输出功能。健康表中学生的信息由学号、姓名、出生日期、性别、身体状况。 利用二叉树来实现,系统的菜单功能如下: 1、新建学生健康表 2、向学生健康表插入学生信息 3、从文件中读取健康表信息 4、向文件写入学生健康表信息 5、在建康表中查询学生信息(按学号进行查询) 6、在屏幕中输出全部学生信息 7、退出 实验设计 以排序二叉树为储存机制,可以方便的实现插入或删除学生信息。每个学生的信息储存在一个结构体 Student中,并且这个结构体帯有输出学生信息的函数output()。然后以这个结构体作为二叉树节点的数据类 型,这样就实现了学生信息的存储。在创建二叉树对象时将已存储在文件中的学生信息写入二叉树,在析构函数里实现将学生信息写入文件。 使用C语言,充分使用数据结构中的二叉树知识 语言简明,模块清晰。

时间: 2024-03-30 11:38:22 浏览: 16
下面是一个简单的C语言实现,实现学生健康管理系统的设计与实现,要求主要实现学生健康情况管理的几个操作功能:新建、插入、删除、写入文件和查询、屏幕输出功能。健康表中学生的信息由学号、姓名、出生日期、性别、身体状况。利用二叉树来实现,系统的菜单功能如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student { char id[10]; char name[20]; char birth[20]; char sex[10]; char health[20]; } Student; typedef struct node { Student data; struct node *left; struct node *right; } Node; Node *create_tree() { return NULL; } void insert_node(Node **tree, Student data) { if (*tree == NULL) { *tree = (Node *)malloc(sizeof(Node)); (*tree)->data = data; (*tree)->left = NULL; (*tree)->right = NULL; } else if (strcmp(data.id, (*tree)->data.id) < 0) { insert_node(&(*tree)->left, data); } else { insert_node(&(*tree)->right, data); } } void delete_node(Node **tree, char *id) { if (*tree == NULL) { return; } if (strcmp(id, (*tree)->data.id) < 0) { delete_node(&(*tree)->left, id); } else if (strcmp(id, (*tree)->data.id) > 0) { delete_node(&(*tree)->right, id); } else { if ((*tree)->left == NULL) { Node *temp = (*tree)->right; free(*tree); *tree = temp; } else if ((*tree)->right == NULL) { Node *temp = (*tree)->left; free(*tree); *tree = temp; } else { Node *temp = (*tree)->right; while (temp->left != NULL) { temp = temp->left; } (*tree)->data = temp->data; delete_node(&(*tree)->right, temp->data.id); } } } void write_to_file(Node *tree) { FILE *fp = fopen("students.txt", "w"); if (tree == NULL) { return; } write_to_file(tree->left); fprintf(fp, "%s,%s,%s,%s,%s\n", tree->data.id, tree->data.name, tree->data.birth, tree->data.sex, tree->data.health); write_to_file(tree->right); fclose(fp); } void read_from_file(Node **tree) { FILE *fp = fopen("students.txt", "r"); if (fp == NULL) { return; } char buffer[100]; while (fgets(buffer, 100, fp) != NULL) { Student data; sscanf(buffer, "%[^,],%[^,],%[^,],%[^,],%[^\n]", data.id, data.name, data.birth, data.sex, data.health); insert_node(tree, data); } fclose(fp); } void find_node(Node *tree, char *id) { if (tree == NULL) { printf("Student not found.\n"); return; } if (strcmp(id, tree->data.id) < 0) { find_node(tree->left, id); } else if (strcmp(id, tree->data.id) > 0) { find_node(tree->right, id); } else { printf("Student id: %s\n", tree->data.id); printf("Student name: %s\n", tree->data.name); printf("Student birth: %s\n", tree->data.birth); printf("Student sex: %s\n", tree->data.sex); printf("Student health: %s\n", tree->data.health); } } void print_tree(Node *tree) { if (tree == NULL) { return; } print_tree(tree->left); printf("Student id: %s\n", tree->data.id); printf("Student name: %s\n", tree->data.name); printf("Student birth: %s\n", tree->data.birth); printf("Student sex: %s\n", tree->data.sex); printf("Student health: %s\n", tree->data.health); printf("\n"); print_tree(tree->right); } void menu() { printf("1. Create new student health table\n"); printf("2. Insert student information\n"); printf("3. Read student information from file\n"); printf("4. Write student information to file\n"); printf("5. Find student information\n"); printf("6. Print all student information\n"); printf("7. Quit\n"); } int main() { Node *tree = create_tree(); int choice; do { menu(); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: { tree = create_tree(); printf("Student health table created.\n"); break; } case 2: { Student data; printf("Enter student id: "); scanf("%s", data.id); printf("Enter student name: "); scanf("%s", data.name); printf("Enter student birth: "); scanf("%s", data.birth); printf("Enter student sex: "); scanf("%s", data.sex); printf("Enter student health: "); scanf("%s", data.health); insert_node(&tree, data); printf("Student information inserted.\n"); break; } case 3: { read_from_file(&tree); printf("Student information read from file.\n"); break; } case 4: { write_to_file(tree); printf("Student information written to file.\n"); break; } case 5: { char id[10]; printf("Enter student id: "); scanf("%s", id); find_node(tree, id); break; } case 6: { print_tree(tree); break; } case 7: { printf("Exiting program.\n"); break; } default: { printf("Invalid choice.\n"); break; } } } while (choice != 7); return 0; } ``` 注意:上述代码只是一个简单的实现,还有很多问题需要考虑,比如如何处理异常情况、如何保证程序的安全性和稳定性等。在实际使用中需要根据具体的需求进行修改和完善。

相关推荐

最新推荐

recommend-type

微信小程序 新建登录页并实现tabBar隐藏

主要介绍了微信小程序 新建登录页并实现tabBar隐藏的相关资料,需要的朋友可以参考下
recommend-type

模拟通讯录-数据结构(顺序表实现基本功能).doc

模拟通讯录,设计相关数据结构,用菜单选择方式实现:通讯录的建立、通讯联系人的插入、删除、修改、查找等功能。
recommend-type

简单学生信息管理系统(Swing版)

(1) 利用文件来存储用户名、密码,实现一个...(4) 在“浏览学生信息”窗口中,用前一个、后一个浏览所有学生信息。 (5) (选做)增加修改按钮,修改学生信息,并保存在文件中;增加删除按钮,删除当前学生信息。
recommend-type

基于SpringBoot框架的中小企业完全开源的ERP.zip

基于springboot的java毕业&课程设计
recommend-type

基于Springboot的健身信息系统.zip

基于springboot的java毕业&课程设计
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。