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

目录
  • infor.h
  • test.c
  • infor.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("删除成功");
}
(0)

相关推荐

  • C语言实现简单学生管理系统

    花了一个月的时间,学习了链表,文件,多文件编程,然后就开始写学生管理系统,比较简单的那种,实现了增,添,改,查,多种排序,输入的时候的限定,成绩分析的功能.遇到的问题很多,也尝试解决了,下面写点写学生管理系统的要注意的地方,希望对别人有帮助. 1.一定要先写好主函数的框架,然后再往上面加东西,这样说有点笼统,我把我的主函数在下面,可以借鉴下哈.我的主函数是一个while(1)的无限循环,里面一个switch选择,利用一个菜单函数,让其返回值当成switch选择的值,然后进入不同的功能主函数,其他

  • C语言实现班级学生管理系统

    本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下 下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺序录入,其中主要用到了 结构体数组,文件处理,循环语句,选择语句等方面的知识 在设计中遇到一个问题就是:不知道怎样修改已经保存在文件中的某一个指定学生的信息,后来在询问学长之后才了解到 ,可以: 先把文件中的数据全部读入结构体数组中,再修改指定序号的数组元素,然后再用"wt"的方式写进原文件,这样就可以删除文件里的

  • C语言不用链表完成学生管理系统(完整代码)

    目录 1.课程设计目的 2.基本要求 3.任务完成情况 4.设计报告 4.1需求分析 4.3详细设计 4.4详细代码 4.5使用说明 4.6测试结果与分析 4.7参考文献 1.课程设计目的 1.更好的理解c语言的相关实现内容,对于c语言的理解得到更好的帮助. 2.实现更方便快捷的应用. 2.基本要求 (1).1.每组完成1个题目的设计:每人独立完成该题目的一个功能模块的实现,并将课程设计报告打印.装订提交. (2).使用标准C语言编制程序,源代码必须采用锯齿型书写格式,必须上机调试通过.运行界面

  • C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<ctype.h> #include<fstream> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; typedef struct ndoe{ char id[10]; char name[1

  • C语言实现学生管理系统

    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct student{ long number;//学号 char name[10];//姓名 char sex[3];//性别 int age;//年龄 float Chinese;//语文 float Math;//数学 float English;//

  • C语言单链表实现学生管理系统

    本文实例为大家分享了C语言单链表实现学生管理系统的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h> #include <string.h> #include <malloc.h> struct Student { int num;//学号 char name[20];//名字 char sex[2]; int age; struct Student *next; }; void insert

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

    目录 infor.h test.c infor.c 该学生管理系统的实现是通过分文件的方式来写的,infor.h 文件为头文件,源文件infor.c实现源文件test.c中封装函数,建议 读者在做较大的系统是分文件来实现,可以提高代码的运行效率. (该学生管理系统由b站鹏哥c语言通讯录视频改进而来) infor.h //头文件 实现引用函数头文件,定义常量,以及源文件中封装函数的声明 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #in

  • C#利用ASP.NET Core开发学生管理系统详解

    目录 涉及知识点 创建项目 登录模块 1. 创建控制器--LoginController 2. 创建登录视图 3. 创建用户模型 4. 创建数据库操作DataContext 5. 创建数据库和表并构造数据 6. 添加数据库连接配置 7. 添加注入信息 8. 运行测试 随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生.本文主要利用ASP.NET Core开发一个学生管理系统为例,简述ASP.NET Core开发的常见知识点,仅供学习分享使用,如有不足之处,

  • Java实现学生管理系统详解流程

    目录 学生管理系统 项目介绍 JavaSwing 功能展示 使用说明 遇到的问题 JavaWeb 功能展示 使用说明 遇到的问题 最后 学生管理系统 前言:这个是大二做的课设(还是学生管理系统…),理论上虽然是4个人一组一起做的,但是,注意这个“但是”,还是我一个人承担了所有…代码和文档基本都是我一个人写的,当初直接肝得吐血,这也是为啥后面的 Web 版部分功能没有完成的原因. 项目介绍 项目分为一个JavaSwing写的GUI桌面应用和一个半成品的Web应用,下图是项目的整体功能结构展示 Ja

  • Java实现学生管理系统详解

    目录 总结 学生管理系统(Java版) 前言:这个是大二做的课设(还是学生管理系统-),理论上虽然是4个人一组一起做的,但是,注意这个"但是",还是我一个人承担了所有-代码和文档基本都是我一个人写的,当初直接肝得吐血,这也是为啥后面的 Web 版部分功能没有完成的原因. 项目介绍 项目分为一个JavaSwing写的GUI桌面应用和一个半成品的Web应用,下图是项目的整体功能结构展示 JavaSwing JavaSwing这里使用的是 MyBatis + Spring 的框架组合,后面发

  • JVM内存管理之JAVA语言的内存管理详解

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题. 可怕的事情还不只如此,有些使用其它语言开发的程序员,给JAVA程序员扣上了一个"不懂内存"的帽子,这着实有点让人难以接受.毕竟JAVA当中没有malloc和delete.没有析构函数.没有指针,刚开始接触JAVA的程序员们又怎么可能接触内存这一部分呢,更何况有不

  • C语言结构体struct详解

    目录 结构体的概念 结构体类型的声明 结构体变量的创建 typedef关键字 结构体的嵌套 结构体变量的初始化 结构体成员的访问 结构体的传参 总结 结构体的概念 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.组成结构型数据的每个数据称为结构型数据的“成员”.结构体通常用来表示类型不同但是又相关的若干数据. 结构体类型的声明 结构体类型的声明要使用 s t r u c t \color{#0000FF}{ struct} struct关键字,举个例子,比如我要定义一个学生的结构体类

  • 基于JS脚本语言的基础语法详解

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法: 1.所有的字符全都是英文半角的: 2.大部分情况下每条语句结束后要加分号: 3.每一块代码结束后加换行:4.程序前呼

  • Linux 下C语言连接mysql实例详解

    Linux 下C语言连接mysql实例详解 第一步: 安装mysql, 参考:http://www.jb51.net/article/39190.htm 第二步: 安装mysql.h函数库 sudo apt-get install libmysqlclient-dev 执行之后就可以看到/usr/include/MySQL目录了 然后开始我们的链接. 首先看我的数据库 mysql> show databases; +--------------------+ | Database | +----

  • C语言文件复制实例详解

    C语言文件复制实例详解 文件复制,在Linux中,将生成的read.o 重新文件拷贝一份复制到ReadCopy.o中,并且更改ReadCopy.o文件的操作权限.使其能够正常运行. 实例代码: #include <stdio.h> int main(){ FILE *r_file = fopen ("read.o","rb"); FILE *w_file = fopen ("ReadCopy.o","w"); ch

  • C++语言实现hash表详解及实例代码

    C++语言实现hash表详解 概要: hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便. 打个比方来说,所有的数据就好像许许多多的书本.如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显得非常的无序和凌乱,在你找到自己需要的书之前,你要经历许多的查询过程:而如果

随机推荐