C语言实现学生信息管理系统

作者:心事付流年 时间:2023-05-24 12:08:50 

本文实例为大家分享了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.录入信息

C语言实现学生信息管理系统

2.浏览信息

C语言实现学生信息管理系统

3.修改信息

C语言实现学生信息管理系统

4.查找信息

C语言实现学生信息管理系统

5.删除信息

C语言实现学生信息管理系统

C语言实现学生信息管理系统

6.退出系统

C语言实现学生信息管理系统

来源:https://blog.csdn.net/a13572259715/article/details/117325873

标签:C语言,信息,管理系统
0
投稿

猜你喜欢

  • DialogFragment运行原理及使用方法详解

    2023-10-27 04:00:26
  • MyBatis实践之DAO与Mapper

    2022-09-28 23:19:32
  • Flutter快速制作一个水印组件实例详解

    2023-05-16 23:32:20
  • Java Servlet线程中AsyncContext异步处理Http请求

    2023-10-02 23:17:39
  • SpringMVC 参数绑定之视图传参到控制器的实现代码

    2021-12-29 11:54:17
  • C#多线程学习之Thread、ThreadPool、Task、Parallel四者区别

    2023-08-27 05:32:14
  • java加载properties文件的六种方法总结

    2023-09-20 05:24:54
  • Android开发实现判断通知栏是否打开及前往设置页面的方法

    2022-10-21 10:43:45
  • Flutter app页面路由以及路由拦截的实现

    2023-06-23 14:21:18
  • Java正则多字符串匹配替换

    2021-12-16 02:24:48
  • Android Service详解及示例代码

    2021-12-24 05:44:17
  • Android解决viewpager嵌套滑动冲突并保留侧滑菜单功能

    2023-09-05 11:36:33
  • Intellij IDEA中如何查看maven项目中所有jar包的依赖关系图

    2023-02-01 23:34:03
  • Java异常简介和架构_动力节点Java学院整理

    2022-09-03 07:07:52
  • springmvc+shiro自定义过滤器的实现代码

    2021-08-11 21:23:11
  • Spring Boot JPA Repository之existsBy查询方法失效的解决

    2023-01-27 18:36:10
  • android实现歌词自动滚动效果

    2022-03-16 17:09:10
  • 实例详解用户输入 i. 检测常用手势

    2022-04-10 19:22:55
  • C语言实现哈夫曼编码

    2022-07-25 07:35:04
  • Unity3D实现人物转向与移动

    2022-10-28 08:42:13
  • asp之家 软件编程 m.aspxhome.com