`
1320438999
  • 浏览: 127491 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C入门之简单的学生管理系统

 
阅读更多

练练手,一个简单得不能再简单的学生管理系统。望高手们勿喷。尴尬

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM 20 //总人数
#define ADD 1	//添加的标签
#define DEL 2	//删除的标签
#define UPD 3//更新的标签
#define SER 4//单个搜索的标签
#define ALL 5//全部搜索的标签
#define EXIT 6//退出的标签

#define YES 1//操作成功
#define NO 0//操作失败
//学生成绩结构体
struct info{
	float chinese;
	float math;
	float english;
};
//学生基本信息结构体,嵌套学生成绩结构体
struct stu{
	int id;
	char *name;
	char sex;
	struct info *in;
};
typedef struct stu stu_s;
typedef struct info info_i;

//学生信息库用全局变量
stu_s *lib[NUM]; 
int len = sizeof(lib) /sizeof(lib[0]);

int add(stu_s *t)//添加学生函数,我用(id - 1)来表示在学生信息库中的位置,省去遍历的麻烦
{
		if( lib[(t->id)-1] == NULL)//如果信息库为空的时候,直接添加,返回YES

		{
			lib[t->id - 1] = (stu_s *)malloc(sizeof(struct stu) * 1);
			lib[t->id - 1]->name = (char *) malloc(sizeof(char) * 10);
			lib[t->id - 1]->in = (info_i *) malloc(sizeof(struct info) * 1);
			lib[t->id - 1]->id = t->id;
			lib[t->id - 1]->name = t->name;
			lib[t->id - 1]->sex = t->sex;
			lib[t->id - 1]->in->chinese = t->in->chinese;
			lib[t->id - 1]->in->math = t->in->math;
			lib[t->id - 1]->in->english = t->in->english;
			return YES;
		}
		//如果信息库不为空,说明该学生已经存在,直接返回NO
	printf("                   **添加失败**          \n");
	printf("         ^^^^^对不起!该学生已存在!^^^^^\n");
	return NO;
}

int delete(int id)//删除学生,通过传入的id
{
		if(lib[id - 1] != NULL)//如果该学生信息不为空,直接删除,返回YES
		{
			free (lib[id - 1]);
			lib[id - 1] = NULL;
		//	memmove(lib + j, lib + j + 1,len - j);
			return YES;
		}
		//否则说明该学生不存在,返回NO
	printf("                   **删除失败**          \n");
	printf("         ^^^^^对不起,该学生不存在!^^^^^\n");
	return NO;
}

int beforeupd(int id)//更新学生信息之前,先确定一下该学生是否存在,再进行下一步操作,存在返回YES
{
	if(lib[id - 1] == NULL)
	{
		printf("                   **更新失败**          \n");
		printf("         ^^^^^对不起!该学生不存在!^^^^^\n");
		return NO;
	}
	return YES;
}

int update(int id,stu_s *t)//前面已经确定学生存在,就直接更新学生信息,返回YES
{
	lib[id - 1]->id = t->id;
	lib[id - 1]->name = t->name;
	lib[id - 1]->sex = t->sex;
	lib[id - 1]->in->chinese = t->in->chinese;
	lib[id - 1]->in->math = t->in->math;
	lib[id - 1]->in->english = t->in->english;
	return YES;
}

int search(int id)//单个学生信息搜索
{

	if(lib[id - 1] != NULL)//如果该学生信息不为空,直接打印,返回YES
	{
		printf("id = %d的学生信息如下:\n",id);
		printf("学号:%d, 姓名:%s, 性别:%c, 语文:%.2f, 数学:%.2f, 英语:%.2f\n",lib[id - 1]->id,lib[id - 1]->name,lib[id - 1]->sex,lib[id - 1]->in->chinese,lib[id - 1]->in->math,lib[id - 1]->in->english);
		return YES;
	}
//否则说明该学生不存在,返回NO
	printf("                   **查询失败**          \n");
	printf("         ^^^^^对不起!该学生不存在!^^^^^\n");
	return NO;
} 

void printall()//全部学生信息查询
{
	int j;
	for(j = 0; j < len; ++j) //这里需要遍历一下
	{
		if(lib[j] != NULL)//把不为空的所有信息直接打印出来
		{
			printf("学号:%d, 姓名:%s, 性别:%c, 语文:%.2f, 数学:%.2f, 英语:%.2f\n",lib[j]->id,lib[j]->name,lib[j]->sex,lib[j]->in->chinese,lib[j]->in->math,lib[j]->in->english);
		}
	}
}

int menu()//菜单函数,
{
	printf("@请选择一个菜单标签:\n");
	printf("1:添加学生信息。\n");
	printf("2:删除学生信息。\n");
	printf("3:更新学生信息。\n");
	printf("4:查询单个学生信息。\n");
	printf("5:查询全部学生信息。\n");
	printf("6:退出系统。\n");
	printf("=======================================================\n");
	int num;
	scanf("%d",&num);
	getchar();
	return num;
}


int main(void)
{
	//声明一个学生信息构造体,并分配动态内存
	stu_s *s;
	s = (stu_s *)malloc(sizeof(struct stu) * 1);
	s->name = (char *) malloc(sizeof(char) * 10);
	s->in = (info_i *) malloc(sizeof(struct info) * 1);
	printf("===================*学生管理系统*======================\n");
	int num;
	//设置一个菜单标签,以便循环操作
	Label:
		num = menu();
	
	switch(num)//捕获用户输入的菜单标签
	{
		case ADD://添加标签
			printf("请输入学号:");
			scanf("%d",&s->id);
			getchar();
			printf("请输入姓名:");
			s->name = (char *) malloc(sizeof(char) * 10);
			scanf("%s",s->name);
			getchar();
			printf("请输入性别:");
			scanf("%c",&s->sex);
			getchar();
			printf("请输入语文成绩:");
			scanf("%f",&s->in->chinese);
			getchar();
			printf("请输入数学成绩:");
			scanf("%f",&s->in->math);
			getchar();
			printf("请输入英语成绩:");
			scanf("%f",&s->in->english);
			getchar();
			if(s->id > 0 && s-> id <= NUM)
			{
				int isadd = add(s);
				if(isadd == YES)
					printf("       *****恭喜您,添加学生信息成功!******\n");
			}else{
					printf("      *****对不起,您输入的id超出范围!*****\n");
			}
			printf("=======================================================\n");
			goto Label;
		case DEL://删除标签
			printf("请输入要删除的学生的id:");
			int idD;
			scanf("%d",&idD);
			getchar();
		
			if(idD > 0 && idD <= NUM)
			{
				int isdel = delete(idD);
				if(isdel == YES)
				{
					printf("        *****恭喜您,删除学生信息成功!*****\n");
				}
			}else{
					printf("      *****对不起,您输入的id超出范围!*****\n");
			}
			printf("=======================================================\n");
			goto Label;
		case UPD://更新标签
			printf("请输入要更新的学生id:");
			int idU;
			scanf("%d",&idU);
			getchar();
			if(idU > 0 && idU <= NUM)
			{
				int isok = beforeupd(idU);
				if(isok == YES)
				{
					s->id = idU;
					printf("请输入姓名:");
					s->name = (char *) malloc(sizeof(char) * 10);
					scanf("%s",s->name);
					getchar();
					printf("请输入性别:");
					scanf("%c",&s->sex);
					getchar();
					printf("请输入语文成绩:");
					scanf("%f",&s->in->chinese);
					getchar();
					printf("请输入数学成绩:");
					scanf("%f",&s->in->math);
					getchar();
					printf("请输入英语成绩:");
					scanf("%f",&s->in->english);
					getchar();
					int isupd = update(idU,s);
					if(isupd == YES)
						printf("      *****恭喜您,更新学生信息成功!******\n");
				}
			}else{
					printf("      *****对不起,您输入的id超出范围!*****\n");
			}
			printf("=======================================================\n");
			goto Label;

		case SER:
			printf("请输入要查询的学生id:");
			int idS;
			scanf("%d",&idS);
			if(idS > 0 && idS < NUM)
			{
				int isser = search(idS);
			}
			else
			{
				 printf("      *****对不起,您输入的id超出范围!*****\n");
			}
			printf("=======================================================\n");

			goto Label;
		case ALL:
			printf("所有学生信息如下:\n");
			printall();
			printf("=======================================================\n");
			goto Label;
		goto Label;
		case EXIT:
			break;
	}
	return 0;
}


分享到:
评论

相关推荐

    C语言入门级别学生个人管理系统

    在学生管理系统中,字符串用于存储学生姓名等文本信息。C语言提供了标准库函数如`strcpy`、`strcat`、`strlen`等用于字符串的复制、连接和长度获取。 3. **通用的循环语句**: 循环语句是程序设计的基础,它们用于...

    针对在校大学生的C语言入门学习——学生管理系统源码

    "针对在校大学生的C语言入门学习——学生管理系统源码"这个标题指出,这是一个专为大学初学者设计的C语言教学资源。它提供了一个实际的学生管理系统的源代码,让学生通过阅读和理解代码来学习C语言的基础知识以及...

    学生管理系统(C语言)简单的!

    【标题】:“学生管理系统(C语言)简单的!” 在编程领域,C语言是一种基础且强大的编程语言,尤其适合实现底层系统级别的程序。本项目“学生管理系统”是使用C语言编写的,面向初学者,旨在帮助学习者理解C语言的...

    C语言课程大作业-基于C语言实现的班级学生管理系统源码+超详细注释.zip

    C语言课程大作业-基于C语言实现的班级学生管理系统源码+超详细注释.zip 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2...

    初学者用链表实现学生管理系统

    在IT领域,初学者经常会通过实现简单的数据结构和算法来提升编程技能,而"初学者用链表实现学生管理系统"就是一个很好的实践项目。这个项目利用了C语言和链表数据结构,在Linux环境下构建了一个学生管理系统。下面将...

    C语言课程设计学生证管理系统.zip

    通过这样的实践,学生不仅可以巩固C语言基础知识,还能了解到如何设计和实现一个简单的数据库管理系统。这不仅锻炼了编程能力,也为将来学习更复杂的编程概念和技术打下了坚实的基础。在实际项目中,这样的系统可能...

    C语言入门实战项目-学生成绩管理系统

    一个C语言的入门实战项目,简易学生成绩管理系统。分为学生用户和管理员用户分别登录;学生端可查看自身成绩,实现成绩简易分析,并包含成绩PK的趣味功能、个人称号的趣味功能;管理员端可查看学生成绩列表,并可...

    课设新项目-基于C语言实现的学生信息管理系统源码(老师、学生、管理员三个操作端).zip

    基于C语言实现的学生信息管理系统源码(老师、学生、管理员三个操作端).zip课设新项目-基于C语言实现的学生信息管理系统源码(老师、学生、管理员三个操作端).zip课设新项目-基于C语言实现的学生信息管理系统源码(老师...

    学生选课系统 源代码 C语言

    通过这个系统,学生可以方便地进行选课操作,而管理员则可以管理课程信息和学生选课情况。 在"学生选课系统例子.cpp"文件中,我们可以预期找到以下关键知识点: 1. 数据结构:为了存储学生信息和课程信息,开发者...

    基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip

    基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化学生成绩管理系统源码带详细注释.zip基于EasyX和C语言的可视化...

    C语言学生信息管理系统.txt

    使用人群:学生、C语言入门 使用场景及目标:本人编写,仅供参考 2.需求功能 (1)VS程序 (2)c语言编写 (3)具体内容: 1)利用结构体存储学生的基本信息,包括学号,姓名,年龄,住址,成绩1,成绩2。 2)提供...

    C语言入门程序基于C语言结构体,指针实现的学生管理系统源码

    C语言入门程序,用来管理学生管理系统,主要用到C语言的结构体,指针,熟悉一个C语言项目的开发流程。 更新说明 增加了班级管理系统,能够根据班级的最大容量来添加学生,添加了删除功能,排序功能。增加了大小排序...

    个人优秀课设-基于C语言实现得学生成绩管理系统源码+详细注释.zip

    个人优秀课设-基于C语言实现得学生成绩管理系统源码+详细注释.zip个人优秀课设-基于C语言实现得学生成绩管理系统源码+详细注释.zip个人优秀课设-基于C语言实现得学生成绩管理系统源码+详细注释.zip个人优秀课设-基于...

    用c编写的学生成绩管理系统

    本文将详细讲解一款使用C语言编写的学生成绩管理系统,它具备了基础的数据管理功能,如增、删、改、查以及成绩导出等,非常适合C语言初学者作为入门项目。 首先,我们要理解C语言的基本特性。C语言是一种强大的、低...

    C语言学生管理系统

    学生管理系统,C语言课题设计,C语言入门级代码

    学生成绩管理系统.rar(C语言)

    学生成绩管理系统是一款基于C语言开发的简单应用,主要用于高校学生的成绩管理。这款系统虽然不完全完善,但对于初学者来说,是一个很好的学习实践项目。它能在Visual Studio 2017及以上版本中运行,涵盖了文件的...

    c语言 计算机实习 学生基本信息管理系统 c语言入门

    第22题学生基本信息管理(难度系数:5级)——C语言编程模拟实现一个学生基本信息管理系统。 本来想淘宝买,要价400还不如自己写一个。还没看着免费发布的,可能是别人写的质量比较高。我的这个系统里边还有些问题,...

    基于C语言的简单的学生管理系统(入门级控制台实例).cpp

    C语言的大作业,写的很简单,课程设计顺利通过,黑框控制台程序

    中学生C语言入门演练100例.pdf

    标题《中学生C语言入门演练100例》和描述“例程详实,丰富,学习C语言的必备,能提高C编程能力”表明,这份文档是一本面向中学生的C语言编程教材,其中包含了一百个编程练习案例。C语言是一种广泛使用的计算机编程...

    C语言编写的学生管理系统

    《C语言实现的学生管理系统》 在编程领域,C语言以其高效、简洁的特性深受程序员喜爱,尤其适合初学者入门。本项目是一个基于C语言编写的“学生管理系统”,它旨在帮助新手学习如何用C语言实现一个实用的软件系统,...

Global site tag (gtag.js) - Google Analytics