C语言实现一个学生管理系统

一、需求分析

通过c语言设计一套学生管理系统,要求:可以对学生信息进行增、删、查、改和打印学生信息的功能,学生基本信息包括姓名、性别、年龄和学号。

细节1:对学生信息进行添加时,学生的学号不能重复,需要确保学号的唯一性。

细节2:对学生信息进行删除时,需要判断该学生的学号,根据学号进行删除该学生,如果该学号不存在则删除失败。

二、基本框架

1.首先c语言是一种面向过程的语言,是没有类和对象的,所以需要定义结构体来作为操作学生信息的工具:

(1)结构体1 :用于存储学生基本信息,包括姓名、性别、年龄、学号;

         结构体2:用于存储学生人数,方便管理以及后续对学生信息的操作。

//定义结构体记录学生基本信息
typedef struct student{
	char name[MAX];//姓名
	char gender[MAX];//性别
	int age;//年龄
	long stu_id;//学号
}student;
//定义结果体管理学生
typedef struct class_room {
	student person[MAX];//每个学生
	int count;//学生人数
}class_room;

2.初始化

//初始化学生人数为0
void init_class_room(class_room* cr) {
	cr->count = 0;
}

3.定义主菜单

//定义主菜单
void menu() {
	printf("\t\t\t\t\t=============**===============\n");
	printf("\t\t\t\t\t========****欢迎****==========\n");
	printf("\t\t\t\t\t=====****学生管理系统****=====\n");
	printf("\t\t\t\t\t============****==============\n");
	printf("\t请输入选项进行操作:\n");
	printf("\t1.添加学生信息\t2.删除学生信息\t3.查找学生信息\t4.修改学生信息\t5.展示学生信息\t6.退出\n");
}

4.主函数

//主函数
int main(void) {
	//初始化
	struct class_room cr;
	init_class_room(&cr);
	while (true) {
		menu();
		int choice;
		scanf_s("%d", &choice);
		switch (choice)
		{
		case 1: {//添加学生
			printf("请输入学生姓名:\n");
			char name[MAX];
			scanf("%s",name);
			printf("请输入学生性别:\n");
			char gender[MAX];
			scanf("%s",gender);
			printf("请输入学生年龄:\n");
			int age;
			scanf("%d",&age);
			printf("请输入学生学号:\n");
			long stu_id;
			scanf("%d",&stu_id);
			bool result = add_student(&cr,name,gender,age,stu_id);
			if (result) {
				printf("添加学生信息成功!!\n");
			}else{
				printf("添加学生信息失败,该学生学号已存在!!\n");
			}
		}break;
		case 2: {//删除学生
			printf("请输入需要删除学生信息的学生学号:\n");
			long id;
			scanf("%d",&id);
			bool result = delete_student(&cr,id);
			if (!result) {
				printf("删除学生信息失败,请确认学生学号后再次尝试!!\n");
			}else {
				printf("删除学生信息成功!!\n");
			}
		}break;
		case 3: {//查找学生
			printf("请输入学生学号来查询学生信息:\n");
			long stu_id;
			scanf("%d",&stu_id);
			bool result = find_student(&cr, stu_id);
			if (!result) {
				printf("无该学生信息,请确认学号后再次输入!!\n");
			}
		}break;
		case 4: {//修改学生
			printf("请输入要修改学生的学号:\n");
			long id;
			scanf("%d",&id);
			printf("修改后学生姓名:\n");
			char name[MAX];
			scanf("%s",name);
			printf("修改后学生性别:\n");
			char gender[MAX];
			scanf("%s",gender);
			printf("修改后学生年龄:\n");
			int age;
			scanf("%d",&age);
			bool result = update_student(&cr,id,name,gender,age);
			if (!result)  {
				printf("修改学生信息失败!!请确认学生学号后修改!!\n");
			}
		}break;
		case 5: {//打印学生
			int result = show_student(&cr);
			if (result == -1) {
				printf("暂无学生信息,请输入学生信息后查询!!\n");
			}
		}break;
		case 6: {//退出
			printf("谢谢使用!!\n");
			exit(-1);
		}break;
		default:
			printf("");
			break;
		}
	}
	system("pause");
	return 0;
}

三、定义函数实现功能

(1)添加学生信息

//添加学生信息
bool add_student(class_room* cr,char name[MAX],char gender[MAX],int age,long stu_id) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		long id = cr->person[i].stu_id;
		if (id == stu_id) {
			return false;
		}
	}
	snprintf(cr->person[cr->count].name,sizeof(name)+1,name);
	snprintf(cr->person[cr->count].gender,sizeof(gender)+1,gender);
	cr->person[cr->count].age = age;
	cr->person[cr->count].stu_id = stu_id;
	cr->count++;
	return true;
}

(2)删除学生信息

//删除学生信息
bool delete_student(class_room* cr,long stu_id) {
	int count = cr->count;
	if (count == 1 && cr->person[cr->count - 1].stu_id == stu_id) {
		cr->count--;
		return true;
	}
	if (cr->person[cr->count - 1].stu_id == stu_id) {
		cr->count--;
		return true;
	}
	for (int i = 0; i < count - 1 ; i++) {
		if (stu_id == cr->person[i].stu_id) {
			cr->person[i] = cr->person[i + 1];
			cr->count--;
			return true;
		}
	}
	return false;
}

(3)查找学生信息

//查找学生信息
bool find_student(class_room* cr,long stu_id) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		if (stu_id == cr->person[i].stu_id) {
			printf("学生 %d  姓名:%s\n", i + 1, cr->person[i].name);
			printf("        性别:%s\n", cr->person[i].gender);
			printf("        年龄:%d\n", cr->person[i].age);
			printf("        学号:%d\n", cr->person[i].stu_id);
			return true;
		}
	}
	return false;
}

(4)修改学生信息

//修改学生信息
bool update_student(class_room* cr,long stu_id, char name[MAX], char gender[MAX], int age) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		if (stu_id == cr->person[i].stu_id) {
			snprintf(cr->person[i].name, sizeof(name) + 1, name);
			snprintf(cr->person[i].gender, sizeof(gender) + 1, gender);
			cr->person[i].age = age;
			return true;
		}
	}
	return false;
}

四、完整代码实现

#include<stdio.h>
#include<string>
#define MAX 120
//定义结构体记录学生基本信息
typedef struct student{
	char name[MAX];//姓名
	char gender[MAX];//性别
	int age;//年龄
	long stu_id;//学号
}student;
//定义结果体管理学生
typedef struct class_room {
	student person[MAX];//每个学生
	int count;//学生人数
}class_room;
//初始化学生人数为0
void init_class_room(class_room* cr) {
	cr->count = 0;
}
//添加学生信息
bool add_student(class_room* cr,char name[MAX],char gender[MAX],int age,long stu_id) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		long id = cr->person[i].stu_id;
		if (id == stu_id) {
			return false;
		}
	}
	snprintf(cr->person[cr->count].name,sizeof(name)+1,name);
	snprintf(cr->person[cr->count].gender,sizeof(gender)+1,gender);
	cr->person[cr->count].age = age;
	cr->person[cr->count].stu_id = stu_id;
	cr->count++;
	return true;
}
//修改学生信息
bool update_student(class_room* cr,long stu_id, char name[MAX], char gender[MAX], int age) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		if (stu_id == cr->person[i].stu_id) {
			snprintf(cr->person[i].name, sizeof(name) + 1, name);
			snprintf(cr->person[i].gender, sizeof(gender) + 1, gender);
			cr->person[i].age = age;
			return true;
		}
	}
	return false;
}
//删除学生信息
bool delete_student(class_room* cr,long stu_id) {
	int count = cr->count;
	if (count == 1 && cr->person[cr->count - 1].stu_id == stu_id) {
		cr->count--;
		return true;
	}
	if (cr->person[cr->count - 1].stu_id == stu_id) {
		cr->count--;
		return true;
	}
	for (int i = 0; i < count - 1 ; i++) {
		if (stu_id == cr->person[i].stu_id) {
			cr->person[i] = cr->person[i + 1];
			cr->count--;
			return true;
		}
	}
	return false;
}
//打印学生信息
int show_student(class_room* cr) {
	int count = cr->count;
	if (count == 0) {
		return -1;
	}
	for (int i = 0; i < count; i++) {
		printf("学生 %d  姓名:%s\n",i + 1,cr->person[i].name);
		printf("        性别:%s\n",cr->person[i].gender);
		printf("        年龄:%d\n",cr->person[i].age);
		printf("        学号:%d\n",cr->person[i].stu_id);
		printf("\n");
	}
}
//查找学生信息
bool find_student(class_room* cr,long stu_id) {
	int count = cr->count;
	for (int i = 0; i < count; i++) {
		if (stu_id == cr->person[i].stu_id) {
			printf("学生 %d  姓名:%s\n", i + 1, cr->person[i].name);
			printf("        性别:%s\n", cr->person[i].gender);
			printf("        年龄:%d\n", cr->person[i].age);
			printf("        学号:%d\n", cr->person[i].stu_id);
			return true;
		}
	}
	return false;
}
//定义主菜单
void menu() {
	printf("\t\t\t\t\t=============**===============\n");
	printf("\t\t\t\t\t========****欢迎****==========\n");
	printf("\t\t\t\t\t=====****学生管理系统****=====\n");
	printf("\t\t\t\t\t============****==============\n");
	printf("\t请输入选项进行操作:\n");
	printf("\t1.添加学生信息\t2.删除学生信息\t3.查找学生信息\t4.修改学生信息\t5.展示学生信息\t6.退出\n");
}
//主函数
int main(void) {
	//初始化
	struct class_room cr;
	init_class_room(&cr);
	while (true) {
		menu();
		int choice;
		scanf_s("%d", &choice);
		switch (choice)
		{
		case 1: {//添加学生
			printf("请输入学生姓名:\n");
			char name[MAX];
			scanf("%s",name);
			printf("请输入学生性别:\n");
			char gender[MAX];
			scanf("%s",gender);
			printf("请输入学生年龄:\n");
			int age;
			scanf("%d",&age);
			printf("请输入学生学号:\n");
			long stu_id;
			scanf("%d",&stu_id);
			bool result = add_student(&cr,name,gender,age,stu_id);
			if (result) {
				printf("添加学生信息成功!!\n");
			}else{
				printf("添加学生信息失败,该学生学号已存在!!\n");
			}
		}break;
		case 2: {//删除学生
			printf("请输入需要删除学生信息的学生学号:\n");
			long id;
			scanf("%d",&id);
			bool result = delete_student(&cr,id);
			if (!result) {
				printf("删除学生信息失败,请确认学生学号后再次尝试!!\n");
			}else {
				printf("删除学生信息成功!!\n");
			}
		}break;
		case 3: {//查找学生
			printf("请输入学生学号来查询学生信息:\n");
			long stu_id;
			scanf("%d",&stu_id);
			bool result = find_student(&cr, stu_id);
			if (!result) {
				printf("无该学生信息,请确认学号后再次输入!!\n");
			}
		}break;
		case 4: {//修改学生
			printf("请输入要修改学生的学号:\n");
			long id;
			scanf("%d",&id);
			printf("修改后学生姓名:\n");
			char name[MAX];
			scanf("%s",name);
			printf("修改后学生性别:\n");
			char gender[MAX];
			scanf("%s",gender);
			printf("修改后学生年龄:\n");
			int age;
			scanf("%d",&age);
			bool result = update_student(&cr,id,name,gender,age);
			if (!result)  {
				printf("修改学生信息失败!!请确认学生学号后修改!!\n");
			}
		}break;
		case 5: {//打印学生
			int result = show_student(&cr);
			if (result == -1) {
				printf("暂无学生信息,请输入学生信息后查询!!\n");
			}
		}break;
		case 6: {//退出
			printf("谢谢使用!!\n");
			exit(-1);
		}break;
		default:
			printf("");
			break;
		}
	}
	system("pause");
	return 0;
}

五、实现结果

  • 21
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值