我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c语言实现学生管理系统详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c语言实现学生管理系统详解


      该学生管理系统的实现是通过分文件的方式来写的,infor.h
  文件为头文件,源文件infor.c实现源文件test.c中封装函数,建议
  读者在做较大的系统是分文件来实现,可以提高代码的运行效率。
  (该学生管理系统由b站鹏哥c语言通讯录视频改进而来)

infor.h

//头文件 实现引用函数头文件,定义常量,以及源文件中封装函数的声明


#define  _CRT_SECURE_NO_WARNINGS   1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <windows.h>
#define MAX_NAME 20               //都用define定义 为了后期的可改性
#define MAX_SEX 10
#define MAX_TELE 15
#define MAX_ADDR 30   
#define begin 3					//初始开辟动态内存容量
#define add 2					//每次容满后增容数量
//#define MAX 1000
typedef struct Student           //定义学生信息结构体变量
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}Student;
//typedef struct student          //结构体套结构体
//{
//	Student data[MAX];			//存放添加进来的个人信息
//	int sz;						//记录当前系统中有效信息个数
//}student;
typedef struct student          //结构体嵌套结构体  
{
	Student*data;			//指向动态申请空间,用来存放个人信息
	int sz;					//记录当前系统中有效信息个数
	int capacity;			//记录当前通讯录最大容量
}student;
void Initstudent(student*pc);//初始化结构体
void ADDstudent(student* pc);//增加学生信息
void PRINTstudent(student* pc);//浏览学生信息
void SEARCHstudent(student* pc);//查找学生信息
void MODIFYstudent(student* pc);//修改学生信息
void DELETEstudent(student* pc);//删除学生信息
void DESETORYstudent(student* pc);//销毁学生信息

test.c

//主文件的测试 该文件为实现学生管理系统的核心


#define  _CRT_SECURE_NO_WARNINGS   1
#include"infor.h"                     //注意分文件写时  源文件中都需要引用头文件
void menu()
{
	system("color fc");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("		***********郑州轻工业大学学生信息管理系统************\n");
	printf("		*-------0.退出                 1.增加学生信息-------*\n");
	printf("		*-------2.浏览学生信息         3.查找学生信息-------*\n");
	printf("		*-------4.修改学生信息         5.删除学生信息-------*\n");
	printf("		*****************************************************\n");
	printf("\n");
	printf("\n");
	printf("\n");
}
enum option
{                         //通过枚举常量,使得主函数中的switch语句更明了的实现不同的功能
	EXIT,
	ADD,
	PRINT,
	SEARCH,
	MODIFY,
	Delete
};
int main()
{
	int input = 0;
	student stu;
	Initstudent(&stu);			//结构体数组的初始化
	do
	{
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		switch(input)					//封装多个函数实现多个功能
		{						//函数的声明位于头文件中,实现在infor.c中实现
		case EXIT:
			DESETORYstudent(&stu);
			printf("退出系统\n");
			break;
		case ADD:
			ADDstudent(&stu);
			break;
		case PRINT:
			PRINTstudent(&stu);
			break;
		case SEARCH:
			SEARCHstudent(&stu);
			break;
		case MODIFY:
			MODIFYstudent(&stu);
			break;
		case Delete:
			DELETEstudent(&stu);
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

infor.c

//该文件为test.c中封装函数的实现


#define  _CRT_SECURE_NO_WARNINGS   1
#include"infor.h"
//静态
//void Initstudent(student* pc)
//{
//	pc->sz = 0;
//	memset(pc->data, 0, sizeof(pc->data));//memset()内存设置 使整个结构体数组初始化
//}
//动态
void Initstudent(student* pc)
{
	//指针data维护开辟的动态内存空间 calloc初始化开辟空间
	pc->data = (Student*)calloc(begin,sizeof(Student));   
	pc->sz = 0;							//sz为有效信息个数			 
	pc->capacity = begin;				//定义目前容量为初始容量
}
void ADDstudent(student* pc)
{
	if (pc->sz == pc->capacity)  //容量满了完成增容
	{
		Student* ptr = (Student*)realloc(pc->data, (pc->capacity + add)*sizeof(Student));
		if (ptr != NULL)
		{
			pc->data = ptr;
			pc->capacity += add;
			printf("~~~增容成功~~~\n");
		}
		else
		{
			perror("ADDstudent");//失败报错
			printf("增加联系人失败\n");
			return;
		}
	}
	//增加一个人的信息
	printf("请输入姓名:\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("请输入性别:\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("请输入年龄:\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("请输入电话:\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("请输入地址:\n");
	scanf("%s", pc->data[pc->sz].addr);
	pc->sz++;
	printf("增加成功\n");
}
void DESETORYstudent(student* pc)   //销毁个人信息
{
	free(pc->data);					//释放内存
	pc->data = NULL;				//回归为0
	pc->capacity = 0;
	pc->sz = 0;
}
//void ADDstudent(student* pc)
//{
//	if (pc->sz == MAX)
//	{
//		printf("通讯录已满,无法添加\n");
//		return;
//	}
//	//增加一个人的信息
//	printf("请输入姓名:\n");
//	scanf("%s", pc->data[pc->sz].name);
//	printf("请输入性别:\n");
//	scanf("%s", pc->data[pc->sz].sex);
//	printf("请输入年龄:\n");
//	scanf("%d", &(pc->data[pc->sz].age));
//	printf("请输入电话:\n");
//	scanf("%s", pc->data[pc->sz].tele);
//	printf("请输入地址:\n");
//	scanf("%s", pc->data[pc->sz].addr);
//	pc->sz++;
//	printf("增加成功\n");
//}
void PRINTstudent(student* pc)
{
	int i = 0;
	printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s%-10s%-10d%-15s%-30s\n",
			pc->data[i].name,
			pc->data[i].sex,
			pc->data[i].age,
			pc->data[i].tele,
			pc->data[i].addr
		);
	}
}
static int Findbyname(student* pc, char name[])			//通过名字来查找学生   stadic静态局部变量  该函数只在本文件中应用  保护该函数
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)     //利用strcmp函数的返回值判断是否找到了该人
		{
			return i;								//找到了就返回学生信息的角标
		}
	}
	return -1;										//没找到
}
void SEARCHstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要查找学生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要查找的人不存在");
	}
	else
	{
		printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性别", "年龄", "电话", "地址");
		printf("%-10s%-10s%-10d%-15s%-30s\n",			//Findbuname函数如果找到对应学生,返回对应下标,输出对应下标学生信息
			pc->data[end].name,
			pc->data[end].sex,
			pc->data[end].age,
			pc->data[end].tele,
			pc->data[end].addr
		);
	}
}
void MODIFYstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要修改学生信息的学生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要修改学生信息的人不存在");
	}
	else
	{
		printf("请输入性别:\n");
		scanf("%s", pc->data[end].sex);
		printf("请输入年龄:\n");
		scanf("%d", &(pc->data[end].age));
		printf("请输入电话:\n");
		scanf("%s", pc->data[end].tele);
		printf("请输入地址:\n");
		scanf("%s", pc->data[end].addr);
		printf("修改成功\n");
	}
}
void DELETEstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要删除学生信息的学生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要删除学生信息的人不存在");
	}
	int i = 0;
	for (i = end; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("删除成功");
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c语言实现学生管理系统详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言实现学生消费管理系统

这篇文章主要为大家详细介绍了C语言实现学生消费管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

C语言如何实现简易学生管理系统

本篇内容主要讲解“C语言如何实现简易学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简易学生管理系统”吧!首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,
2023-07-02

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

这篇文章主要为大家详细介绍了C语言实现学生信息管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录