【C语言】学生宿舍信息管理系统

目录

 项目说明

1. 数据结构设计

2. 功能实现

3. 主菜单设计

4. 文件操作

5. 系统使用

项目展示

1.主菜单功能界面

​编辑 

2.添加信息

3.查询信息

4.修改信息

5.删除信息

6.退出程序

项目完整代码

结语 


在这篇博客中,我们将探讨如何使用C语言来开发一个简单的学生宿舍信息管理系统。这个系统能够让我们添加、删除、修改以及查询学生信息。此外,我们也将设计数据结构来管理宿舍、来访者和保修信息,虽然在提供的代码中我们只实现了与学生信息相关的功能。

 项目说明

1. 数据结构设计

首先,我们设计了几个结构体来存储不同类型的信息:

  • Student(学生): 存储学生ID、姓名、性别、年龄、院系和宿舍号。
  • Dormitory(宿舍): 存储宿舍号、容纳人数和当前人数。
  • Visitor(来访者): 存储来访者ID、姓名、来访时间和被访宿舍号。
  • Repair(保修): 存储保修ID、宿舍号、问题描述和当前状态。

2. 功能实现

接下来,我们实现了几个关键的函数来处理学生信息:

  • addStudent(添加学生): 通过接收用户输入,创建一个新的学生记录并将其追加到文件中。
  • deleteStudent(删除学生): 根据用户输入的ID,从文件中找到并删除相应的学生记录。
  • modifyStudent(修改学生): 允许用户根据ID修改学生的详细信息。
  • queryStudent(查询学生): 根据ID查询并显示学生的详细信息。

3. 主菜单设计

我们还设计了一个简单的文本菜单系统,通过它用户可以选择他们想要执行的操作(添加、删除、修改或查询学生信息)。这个系统会一直运行,直到用户选择退出。

4. 文件操作

所有的学生信息都存储在一个文本文件中。通过使用文件I/O操作,我们可以持久化这些信息,即使在程序关闭后也不会丢失。

5. 系统使用

用户可以通过简单的文本界面与系统互动。例如,如果想要添加一个学生信息,用户可以选择相应的菜单项然后输入学生的详细信息。系统会将这些信息追加到文件中,以便将来查询或修改。

项目展示

1.主菜单功能界面

 

2.添加信息

如:学生信息、宿舍信息,来访信息、保修信息的维护管理等信息

 

3.查询信息

4.修改信息

5.删除信息

6.退出程序

项目完整代码

完整代码拿走了,记得点赞,收藏,评论哈(●'◡'●)

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct {int id; // 学生IDchar name[50]; // 学生姓名char gender[10]; // 性别int age; // 年龄char department[50]; // 院系char dormitory[20]; // 宿舍号
} Student;typedef struct {char dormitory[20]; // 宿舍号int capacity; // 容纳人数int current; // 当前人数
} Dormitory;typedef struct {int visitorID; // 来访者IDchar name[50]; // 来访者姓名char time[20]; // 来访时间char dormitory[20]; // 被访宿舍号
} Visitor;typedef struct {int repairID; // 保修IDchar dormitory[20]; // 宿舍号char description[100]; // 问题描述char status[20]; // 当前状态
} Repair;// 函数声明
void addStudent();
void deleteStudent();
void modifyStudent();
void queryStudent();void addDormitory();
// 类似地,为宿舍、来访信息、保修信息实现增删改查功能void displayMenu();int main() {int choice;while (1) {displayMenu();printf("请输入您的选择:");scanf("%d", &choice);switch (choice) {case 1:addStudent();break;case 2:deleteStudent();break;case 3:modifyStudent();break;case 4:queryStudent();break;case 0:printf("感谢使用,再见!\n");exit(0);default:printf("无效的选择,请重新输入。\n");}}return 0;
}void displayMenu() {printf("\n====== 学生宿舍信息管理系统 ======\n");printf("1. 添加学生信息\n");printf("2. 删除学生信息\n");printf("3. 修改学生信息\n");printf("4. 查询学生信息\n");printf("0. 退出\n");printf("===================================\n");
}// 实现addStudent等函数
void addStudent() {Student s;FILE* fp = fopen("students.txt", "a"); // 以追加模式打开文件if (fp == NULL) {printf("无法打开文件\n");return;}printf("输入学生ID: ");scanf("%d", &s.id);printf("输入学生姓名: ");scanf("%s", s.name);printf("输入性别: ");scanf("%s", s.gender);printf("输入年龄: ");scanf("%d", &s.age);printf("输入院系: ");scanf("%s", s.department);printf("输入宿舍号: ");scanf("%s", s.dormitory);fprintf(fp, "%d %s %s %d %s %s\n", s.id, s.name, s.gender, s.age, s.department, s.dormitory);fclose(fp);printf("学生信息已添加。\n");
}void deleteStudent() {int id, found = 0;Student s;FILE* fp = fopen("students.txt", "r");FILE* fpTemp = fopen("temp.txt", "w"); // 创建临时文件用于存储未被删除的数据if (fp == NULL || fpTemp == NULL) {printf("文件操作失败。\n");return;}printf("输入要删除的学生ID: ");scanf("%d", &id);while (fscanf(fp, "%d %s %s %d %s %s\n", &s.id, s.name, s.gender, &s.age, s.department, s.dormitory) != EOF) {if (s.id != id) {fprintf(fpTemp, "%d %s %s %d %s %s\n", s.id, s.name, s.gender, s.age, s.department, s.dormitory);}else {found = 1;}}fclose(fp);fclose(fpTemp);remove("students.txt"); // 删除原文件rename("temp.txt", "students.txt"); // 重命名临时文件为原文件名if (found) {printf("学生信息已删除。\n");}else {printf("未找到该学生信息。\n");}
}void modifyStudent() {int id, found = 0;Student s;FILE* fp = fopen("students.txt", "r");FILE* fpTemp = fopen("temp.txt", "w");if (fp == NULL || fpTemp == NULL) {printf("文件操作失败。\n");return;}printf("输入要修改的学生ID: ");scanf("%d", &id);while (fscanf(fp, "%d %s %s %d %s %s\n", &s.id, s.name, s.gender, &s.age, s.department, s.dormitory) != EOF) {if (s.id == id) {printf("输入新的学生姓名: ");scanf("%s", s.name);printf("输入新的性别: ");scanf("%s", s.gender);printf("输入新的年龄: ");scanf("%d", &s.age);printf("输入新的院系: ");scanf("%s", s.department);printf("输入新的宿舍号: ");scanf("%s", s.dormitory);found = 1;}fprintf(fpTemp, "%d %s %s %d %s %s\n", s.id, s.name, s.gender, s.age, s.department, s.dormitory);}fclose(fp);fclose(fpTemp);remove("students.txt");rename("temp.txt", "students.txt");if (found) {printf("学生信息已修改。\n");}else {printf("未找到该学生信息。\n");}
}void queryStudent() {int id, found = 0;Student s;FILE* fp = fopen("students.txt", "r");if (fp == NULL) {printf("文件打开失败。\n");return;}printf("输入要查询的学生ID: ");scanf("%d", &id);while (fscanf(fp, "%d %s %s %d %s %s\n", &s.id, s.name, s.gender, &s.age, s.department, s.dormitory) != EOF) {if (s.id == id) {printf("学生ID: %d\n姓名: %s\n性别: %s\n年龄: %d\n院系: %s\n宿舍号: %s\n", s.id, s.name, s.gender, s.age, s.department, s.dormitory);found = 1;break;}}fclose(fp);if (!found) {printf("未找到该学生信息。\n");}
}

结语 

本文介绍了如何使用C语言开发一个基本的学生宿舍信息管理系统。通过这个项目,我们不仅能够练习C语言的基本语法,还能了解到结构体的使用、文件I/O操作以及简单的菜单系统设计。尽管这个系统还很基础,但它为进一步开发更复杂的管理系统奠定了基础。

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

React Switch用法及手写Switch实现

问&#xff1a;如果注册的路由特别多&#xff0c;找到一个匹配项以后还会一直往下找&#xff0c;我们想让react找到一个匹配项以后不再继续了&#xff0c;怎么处理&#xff1f;答&#xff1a;<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…

腾讯云服务器4核8G性能,和阿里云比怎么样?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

Adobe illustrator CEP插件调试

1.创建插件CEP面板&#xff0c;可以参考&#xff1a;http://blog.nullice.com/%E6%8A%80%E6%9C%AF/CEP-%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/%E6%8A%80%E6%9C%AF-CEP-%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B-Adobe-CEP-%E6%89%A9%E5%B1%95%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8…

C++ 补充之常用遍历算法

C遍历算法和原理 C标准库提供了丰富的遍历算法&#xff0c;涵盖了各种不同的功能。以下是一些常见的C遍历算法以及它们的概念和原理的简要讲解&#xff1a; for_each&#xff1a;对容器中的每个元素应用指定的函数。 概念&#xff1a;对于给定的容器和一个可调用对象&#xff…

4_怎么看原理图之协议类接口之SPI笔记

SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行通信协议&#xff0c;通常用于在芯片之间传输数据。SPI协议使用四根线进行通信&#xff1a;主设备发送数据&#xff08;MOSI&#xff09;&#xff0c;从设备发送数据&#xff08;MISO&#xff09;&#x…

Rust调用同级目录中的rs文件和调用下级目录中的rs文件

一、Rust调用同级目录中的rs文件 Rust新建工程demo02&#xff0c;src文件夹下面新建test.rs文件&#xff0c;这样main.rs文件与它属于同级目录中。 关键点&#xff1a;导入test文件和test文件中的Ellipse模块 mod test;//导入test模块&#xff08;文件&#xff09; use test…

LeetCode 刷题 [C++] 第141题.环形链表

题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

用这款APP,世界听你的!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

【力扣 - 买卖股票的最佳时机】

题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的…

css常用的选择器介绍

CSS&#xff08;层叠样式表&#xff09;选择器是CSS规则的一部分&#xff0c;它用于选择和定位网页上的元素&#xff0c;以便将样式应用到这些元素上。CSS选择器的种类繁多&#xff0c;每种选择器都有其特定的用途、特点和效率。在这篇文章中&#xff0c;我们将讨论一些常用的C…

nginx(三)实现反向代理客户端 IP透传

正常情况下&#xff0c;客户端去访问代理服务器&#xff0c;然后代理服务器再取访问真实服务器&#xff0c;在真实服务器上&#xff0c;只能显示代理服务器的ip地址&#xff0c;而不显示客户端的ip地址&#xff0c;如果想让客户端的ip地址也能在真实服务端看见&#xff0c;这一…

mac/windows git ssh 配置多平台账号(入门篇)

目录 引子多账号多平台配置git一、.ssh文件夹路径1.1 mac 系统1.2 windows 系统 二、生成new ssh2.1 mac系统2.2 windows 系统 三、配置 config四、验证五、用ssh方式拉取远程仓库代码 引子 push代码到github仓库时&#xff0c;提示报错。 Push failed Remote: Support for pa…

深入理解分库、分表、分库分表

前言 分库分表&#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案&#xff0c;所谓"分库分表"&#xff0c;根本就不是一件事儿&#xff0c;而是三件事儿&#xff0c;他们要解决的问题也都不一样&#xff0c;这三个事儿分别是"只…

docker下gitlab安装配置

一、安装及配置 1.gitlab镜像拉取 docker pull gitlab/gitlab-ce:latest2.运行gitlab镜像 docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always --privilegedtrue -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v …

DAY12_VUE基本用法详细版

目录 0 HBuilderX酷黑主题修改注释颜色1 VUE1.1 VUE介绍1.2 Vue优点1.3 VUE入门案例1.3.1 导入JS文件1.3.2 VUE入门案例 1.4 VUE基本用法1.4.1 v-cloak属性1.4.2 v-text指令1.4.3 v-html指令1.4.4 v-pre指令1.4.5 v-once指令1.4.6 v-model指令1.4.7 MVVM思想 1.5 事件绑定1.5.1…

Win UI3开发笔记(四)设置主题续

上文讲到过关于界面和标题栏以及普通文本的主题设置&#xff0c;这篇说一下关于对话框的主题设置。 我最终没找到办法&#xff0c;寻求办法的朋友可以不用接着看了&#xff0c;以下只是过程。 一个对话框包括标题部分、内容部分和按钮部分&#xff0c;其中&#xff0c;在Cont…

Maven编译报processing instruction can not have PITarget with reserveld xml name

在java项目中&#xff0c;平时我们会执行mvn clean package命令来编译我们的java项目&#xff0c;可是博主今天执行编译时突然报了 processing instruction can not have PITarget with reserveld xml name 这个错&#xff0c;网上也说法不一&#xff0c;但是绝大绝大部分是因…

JavaScript最新实现城市级联操作,json格式的数据

前置知识&#xff1a; <button onclick"doSelect()">操作下拉列表</button><hr>学历&#xff1a;<select id"degree"><option value"0">--请选择学历--</option><option value"1">专科<…

【推荐算法系列十六】:协同过滤

文章目录 参考原理基于邻域的协同过滤算法基于用户的协同过滤&#xff08;User-Based Collaborative Filtering&#xff09;基于内容的协同过滤 基于模型的协同过滤算法 扩展优缺点 参考 推荐系统之神经协同过滤 原理 基于邻域的协同过滤算法 基于邻域的协同过滤算法又包括…

react-组件进阶

1.目标 能够实用props接收数据 能够实现父子组件之间的通讯 能够实现兄弟组件之间的通讯 能够给组件添加props校验 能够说出生命周期常用的钩子函数 能够知道高阶组件的作用 2.目录 组件通讯介绍 组件的props 组件通讯的三种方式 Context props深入 组件的生命周期 Render-p…