C语言实现学生信息管理系统
作者:心事付流年 发布时间:2023-05-24 12:08:50
标签:C语言,信息,管理系统
本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//数据的设计------->学生信息抽象出
struct student
{
?? ?char name[20];
?? ?int age;
?? ?char sex[5];
?? ?char tel[20];
};
//结构分结构去写
//某一种数据结构去实现什么东西的时候,单独去写一种数据结构
//先把数据结构写对了再说
struct Node
{
?? ?//int data;
?? ?struct student data;
?? ?struct Node* next;
};
//创建表
struct Node* createList()
{
?? ?//用结构体变量表示表头
?? ?//指针-->变量 ? 动态内存申请
?? ?struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
?? ?//表头:做差异化处理 数据data不做初始化
?? ?headNode->next = NULL;
?? ?return headNode;
}
struct Node* createNode(struct student data)
{
?? ?struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
?? ?newNode->data = data;
?? ?newNode->next = NULL;
?? ?return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
?? ?struct Node* newNode = createNode(data);
?? ?//表头法
?? ?newNode->next = headNode->next;
?? ?headNode->next = newNode;
}
//指定位置删除
//data为struct student型,结构体,不能直接比较
void deleteAPPoinNode(struct Node* headNode, char* name)//指定姓名进行删除
{
?? ?struct Node* posNode = headNode->next;
?? ?struct Node* posFrontNode = headNode;
?? ?if (posNode == NULL)
?? ?{
?? ??? ?printf("数据为空,无法删除!\n");
?? ??? ?return;
?? ?}
?? ?//姓名为字符串,不能直接比较,字符串的比较为strcmp
?? ?while (strcmp(posNode->data.name,name))
?? ?{
?? ??? ?posFrontNode = posNode;
?? ??? ?posNode = posFrontNode->next;
?? ??? ?if (posNode == NULL)
?? ??? ?{
?? ??? ??? ?printf("未找到指定位置,无法删除!\n");
?? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?//找到了
?? ?posFrontNode->next = posNode->next;
?? ?free(posNode);
}
//查找功能
struct Node* searchInfoByData(struct Node* headNode,char* name)//指定姓名查找
{
?? ?struct Node* pMove = headNode->next;
?? ?while (pMove != NULL && strcmp(pMove->data.name, name))
?? ?{
?? ??? ?pMove = pMove->next;
?? ?}
?? ?return pMove;
}
//文件读操作(链表的存储)
void readInfoFromFile(struct Node* headNode,const char *fileName)
{
?? ?//1.打开
?? ?FILE *fp;//文件指针
?? ?struct student data;
?? ?fp = fopen(fileName, "r");//以读取方式打开
?? ?if (fp == NULL)
?? ?{
?? ??? ?fopen(fileName, "w+");//以创建方式打开
?? ?}
?? ?//2.读文件
?? ?while (fscanf(fp, "%s\t%d\t%s\t%s\n"/*格式化形式*/, data.name, &data.age, data.sex, data.tel) != EOF/*文件结束符*/)//将文件作为输入设备,格式化读到data中
?? ?{
?? ??? ?insertNodeByHead(headNode, data);//读过程中存放到链表
?? ?}
?? ?//3.关闭文件
?? ?fclose(fp);
}
//文件写操作(链表的读取)
void writeInfoToFile(struct Node* headNode,const char *fileName)
{
?? ?FILE *fp;
?? ?fp = fopen(fileName, "w");//以追加方式打开
?? ?if (fp == NULL)
?? ?{
?? ??? ?printf("文件打开失败!");
?? ??? ?return;
?? ?}
?? ?struct Node* pMove = headNode->next;
?? ?while (pMove)
?? ?{
?? ??? ?fprintf(fp, "%s\t%d\t%s\t%s\n"/*格式化形式*/, pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
?? ??? ?pMove = pMove->next;
?? ?}
?? ?fclose(fp);
}
//打印链表
void printfList(struct Node* headNode)
{
?? ?struct Node* pMove = headNode->next;
?? ?//涉及到数据的处理
?? ?printf("姓名\t年龄\t性别\t电话\n");
?? ?while (pMove)
?? ?{
?? ??? ?printf("%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
?? ??? ?pMove = pMove->next;
?? ?}
?? ?printf("\n");
}
/*
?? ?1.界面
?? ?2.数据结构的设计
?? ??? ?//需要和数据结构设计糅合在一起
?? ?3.交互
*/
#include "myList.h"
//菜单设计
void menu()
{
?? ?//所有操作都同步到文件
?? ?printf("-----------【学生信息管理系统】-----------\n");
?? ?printf("\t\t0.退出系统\n");
?? ?printf("\t\t1.录入信息\n");
?? ?printf("\t\t2.浏览信息\n");
?? ?printf("\t\t3.修改信息\n");
?? ?printf("\t\t4.删除信息\n");
?? ?printf("\t\t5.查找信息\n");
?? ?printf("------------------------------------------\n");
}?
struct Node* list = createList();
//用户的交互
//根据所选菜单项,做相应的事情
void keyDown()
{
?? ?int choice = 0;
?? ?struct student data;
?? ?struct Node* pMove = NULL;
?? ?scanf("%d", &choice);
?? ?switch (choice)
?? ?{
?? ?case 0:
?? ??? ?printf("正常退出!\n");
?? ??? ?system("pause");
?? ??? ?exit(0);
?? ??? ?break;
?? ?case 1:
?? ??? ?printf("---------------【录入信息】---------------\n");//插入链表
?? ??? ?printf("请输入学生姓名年龄性别电话:");
?? ??? ??? ?fflush(stdin);//清空缓冲区
?? ??? ??? ?scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
?? ??? ?insertNodeByHead(list, data);
?? ??? ?break;
?? ?case 2:
?? ??? ?printf("---------------【浏览信息】--------------\n");//打印链表
?? ??? ?printfList(list);
?? ??? ?break;
?? ?case 3:
?? ??? ?printf("---------------【修改信息】---------------\n");
?? ??? ?printf("需要修改信息的学生姓名:");
?? ??? ?scanf("%s", data.name);
?? ??? ?deleteAPPoinNode(list, data.name);
?? ??? ?printf("请重新输入学生信息:");
?? ??? ?fflush(stdin);
?? ??? ?scanf("%s%d%s%s", data.name, &data.age, data.sex, data.tel);
?? ??? ?insertNodeByHead(list, data);
?? ??? ?break;
?? ?case 4:
?? ??? ?printf("---------------【删除信息】---------------\n");
?? ??? ?printf("请输入删除的学生姓名:");
?? ??? ?scanf("%s", data.name);
?? ??? ?deleteAPPoinNode(list,data.name);
?? ??? ?break;
?? ?case 5:
?? ??? ?printf("---------------【查找信息】---------------\n");
?? ??? ?printf("请输入要查找学生姓名:");
?? ??? ?scanf("%s", data.name);
?? ??? ?pMove = searchInfoByData(list, data.name);
?? ??? ?if (pMove == NULL)
?? ??? ?{
?? ??? ??? ?printf("未找到相关信息,无法删除!\n");
?? ??? ??? ?system("pause");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("姓名\t年龄\t性别\t电话\n");
?? ??? ??? ?printf("%s\t%d\t%s\t%s\n", pMove->data.name, pMove->data.age, pMove->data.sex, pMove->data.tel);
?? ??? ?}
?? ??? ?break;
?? ?default:
?? ??? ?printf("选择错误,重新输入\n");
?? ??? ?system("pause");
?? ??? ?break;
?? ?}
?? ?writeInfoToFile(list, "1.txt");//保存,调用文件写函数
}
int main()
{
?? ?readInfoFromFile(list, "1.txt");//程序运行前,调用文件读函数
?? ?while (1)
?? ?{
?? ??? ?menu();
?? ??? ?keyDown();
?? ??? ?system("pause");
?? ??? ?system("cls");
?? ?}
?? ?/*测试链表代码
?? ?struct Node* list = createList();
?? ?insertNodeByHead(list, 1);
?? ?insertNodeByHead(list, 3);
?? ?insertNodeByHead(list, 2);
?? ?insertNodeByHead(list, 5);
?? ?printfList(list);
?? ?printf("删除指定位置!\n");
?? ?deleteAPPoinNode(list, 3);
?? ?printfList(list);
?? ?printf("链表的查找:\n");
?? ?printf("%d\n",searchInfoByData(list, 5)->data);*/
?? ?system("pause");
?? ?return 0;
}
运行截图
1.录入信息
2.浏览信息
3.修改信息
4.查找信息
5.删除信息
6.退出系统
来源:https://blog.csdn.net/a13572259715/article/details/117325873


猜你喜欢
- 下面通过图文并茂的方式给大家讲解下Java开发环境配置,具体内容如下:对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA
- 思路首先编写程序时,或多或少会存在几个固定的Filter,那么第一步就是为确定的那几个Filter指定好顺序。(通常情况下的使用场景是:你要
- 1、前言随着技术的发展,微信的一系列服务渗透进了我们的生活,但是我们应该怎样进行微信方面的开发呢。相信很多的小伙伴们都很渴望知道吧。这篇文章
- 什么是死锁我们先看看这样一个生活中的例子:在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和B分别由
- Spring 中 Bean 的生命周期是当今最流行的 Java 开发框架之一,其强大的 Bean容器机制是其中的核心之一。Bean 是指在
- 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入 主题,在多线程开发的应用中,线程同步是不可避免的。在
- 旧的设计方案开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义.@RestC
- Java事件处理机制java中的事件机制的参与者有3种角色:1.event object:事件状态对象,用于listener的相应的方法之中
- 为什么使用JUnit5JUnit4被广泛使用,但是许多场景下使用起来语法较为繁琐,JUnit5中支持lambda表达式,语法简单且代码不冗余
- 简介redis 多数据源主要的运用场景是在需要使用多个redis服务器或者使用多个redis库,本文采用的是fastdep依赖集成框架,快速
- 源码:class T {int m = 8;}T t = new T();汇编码:0 new #2 <T>3 dup4 invo
- 公司的研发管理平台实现了Gitlab+Kubernetes的Devops,在ToB和ToC场景中,由于用户量大,且预发布环境和生产环境或多或
- //十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Consol
- 本文实例为大家分享了RecycleView实现各种尺寸图片展示的具体代码,供大家参考,具体内容如下今天才发现,在一个RecycleView里
- 修改readme.txt文件如下:Git is a distributed version control system.Git is fr
- 当你在使用Mybatis 时进行配置的时候有这样几个坑一定要注意下。mybatisplus中逻辑删除通俗说为了在数据库中保留数据,但是又不想
- 1.JWT定义JWT(Json Web Token)是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的
- 上一章说明了DataBinding生存的类之间关系,现在这里来看看布局是如何加载的以及view是如何映射的。一、布局加载这里把之前的代码重新
- 使用idea进行JavaWeb开发时,在前端与后台交互常常出现乱码问题,包括日志/控制台输出乱码,参数乱码等问题,归根结底是编码格式不对,解
- 前言最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面的知识比较薄弱,所以想