C语言版学生成绩管理系统

闲来无事,复习一下C语言

  • 程序实现了对学生的CRUD操作
  • 程序勉强可以就行扩展

需要的小伙伴可以拿走修改下即可使用

【注意】, 这不是纯C语言程序,本持续编译使用的是G++
在这里插入图片描述

代码如下:

/**
 * 【C语言版】 学生成绩管理系统
 *
 * 对学生的信息进行基本的CRUD操作
 *
 * 学生有如下信息:
 *  名字
 *  性别
 *  学号
 *  总分
 *  数学
 *  外语
 *  语文
 *  专业
 */

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

#define MAX_INFO_NUMBER 1000
#define True 1
#define False 0

struct Student
{
	char *name = NULL;
	char *sex = NULL;
	char *id = NULL;
	float mathematics = 0.0;
	float english = 0.0;
	float chinese = 0.0;
	float major = 0.0;
};

// 学生信息表
Student student[MAX_INFO_NUMBER];
// 当前信息数
int now_info_number = 0;
// 主菜单菜单
const char *menu =  ">>>> - 学生信息管理系统[C语言版] - <<<<"
					"\n------------------------------------\n"
					"[1] 添加学生信息\n"
					"[2] 修改学生信息\n"
					"[3] 查找学生信息\n"
					"[4] 删除学生信息\n"
					"[5] 展示所有学生信息\n"
					"[Q] 退出系统\n\n"
					"> 请选择 _\b";

// 将字符串拷贝到str, 通过该函数实现任意字符串长度
void strcopy(char *str, const char *string);
// 用户输入一个student
Student get_user_input_on_student();
// 将Student转为字符串
void stu_to_string(const Student stu);
// 计算总分
float stu_sum(const Student stu);


// 增加记录
void stu_info_add();
// 修改记录
void stu_info_update();
// 按学号查找记录
void stu_info_find_on_id();
// 按id删除记录
void stu_info_delete_on_id();
// 判断id是否在student中存在, 存在就返回他的索引
int is_existence(const char *id);


int is_existence(const char *id)
{
	// strcmp 对比两字符串是否相等,相等返回0, 否则返回-52
	for(int i = 0; i < now_info_number; i++)
		if(strcmp(id, student[i].id) == 0)
			return i;

	return -1;
}

float stu_sum(const Student stu)
{
	return stu.mathematics + stu.english + stu.chinese + stu.major;
}

void stu_to_string(const Student stu, int index, float sum)
{
	printf("[%d] \t学号: %s\t", index, stu.id);
	printf(" 姓名: %s\t", stu.name);
	printf(" 姓别: %s\t", stu.sex);
	printf(" 数学: %.1f\t", stu.mathematics);
	printf(" 外语: %.1f\t", stu.english);
	printf(" 语文: %.1f\t", stu.chinese);
	printf(" 专业: %.1f\t", stu.major);
	printf(" 总分: %.1f\t", sum);
}

void strcopy(char **str, const char *string)
{
	if(*str == NULL)
		*str = (char*)malloc(strlen(string) * sizeof(char));
	else
		*str = (char*)realloc(*str, (strlen(string) * sizeof(char)));

	strcpy(*str, string);
}

Student get_user_input_on_student()
{
	Student stu;
	char str[125];
	printf("--- 请输入 ---:\n> 姓名(string) _\b");
	scanf("%s", str);
	strcopy(&stu.name, str);

	printf("> 学号(string) _\b");
	scanf("%s", str);
	strcopy(&stu.id, str);

	printf("> 性别(string) _\b");
	scanf("%s", str);
	strcopy(&stu.sex, str);

	printf("> 数学(float) _\b");
	scanf("%f", &stu.mathematics);

	printf("> 外语(float) _\b");
	scanf("%f", &stu.english);

	printf("> 语文(float) _\b");
	scanf("%f", &stu.chinese);

	printf("> 专业(float) _\b");
	scanf("%f", &stu.major);

	printf("一条数据录入成功\n");
	return stu;
}

void stu_info_add()
{
	printf("- 添加记录\n\n");
	Student stu = get_user_input_on_student();
	while(True)
	{
		if(is_existence(stu.id) == -1)
		{
			student[now_info_number++] = stu;
			break;
		}
		else
		{
			printf("- 该学生学号存在重复,请修改, 输入 quit 放弃添加\n 学号 _\b");
			char str[125];
			scanf("%s", str);
			if(is_existence(str) == -1)
			{
				strcopy(&stu.id, str);
				student[now_info_number++] = stu;
				printf("添加成功");

				break;
			}
			else if(!strcmp(str, "quit"))
			{
				printf("tips -> 用户放弃了添加\n");
				break;
			}
		}
	}
}

void stu_info_update()
{
	char str[125];
	int index;
	Student stu;
	printf("> 请输入要修改的学生学号\n > 学号 _\b");
	
	while(True)
	{
		scanf("%s", str);
		index = is_existence(str);

		if(index == -1)
		{
			printf("tips -> 这个学生不存在,重新输入, 输入 quit 放弃修改\n> 学号 _\b");
			continue;
		}
		stu = get_user_input_on_student();

		while(True)
		{
			int input_index = is_existence(stu.id);
			if(input_index != index && input_index != -1)
			{
				printf("tips -> 输入的学生学号和其他学生学号重复,请重新输入学号\n> 学号 _\b");
				scanf("%s", str);
				strcopy(&stu.id, str);
			}
			else
				break;
		}
		break;
	}
	student[index] = stu;
	printf("成功添加修改该学生的记录\n");
}

void stu_info_find_on_id()
{
	char str[125];
	printf("> 请输入要查询的学号\n> 学号 _\b");
	while(True)
	{
		scanf("%s", str);
		int index = is_existence(str);
		if(index == -1)
		{
			printf("没有这个学生\n");
			break;
		}
		stu_to_string(student[index], 0, stu_sum(student[index]));
		printf("\n");
		break;
	}
}

void stu_info_delete_on_id()
{
	char str[125];
	printf("> 请输入要删除的学生学号\n> 学号 _\b");
	while(True)
	{
		scanf("%s", str);
		int index = is_existence(str);
		if(index == -1)
		{
			printf("没有这个学生\n");
			break;
		}
		printf("该学生信息如下:\n----------------------------------");
		stu_to_string(student[index], 0, stu_sum(student[index]));
		printf("\n");
		student[index] = student[now_info_number--];
		free(student[now_info_number + 1].name);
		free(student[now_info_number + 1].id);
		free(student[now_info_number + 1].sex);
		printf("tips -> 该生信息已删除\n");
		break;
	}
}

int main()
{

	char str[125];

	while(True)
	{

		printf("%s\n", menu);

		scanf("%s", str);

		if(strcmp(str, "1") == 0)
		{
			stu_info_add();
		}
		else if(strcmp(str, "2") == 0)
		{
			stu_info_update();
		}
		else if(strcmp(str, "3") == 0)
		{
			stu_info_find_on_id();
		}
		else if(strcmp(str, "4") == 0)
		{
			stu_info_delete_on_id();
		}
		else if(strcmp(str, "5") == 0)
		{
			printf("----------------------------------学生信息------------------------------------\n");
			for (int i = 0; i < now_info_number; ++i)
			{
				stu_to_string(student[i], i+1, stu_sum(student[i]));
				printf("\n");
			}
			printf("----------------------------------- END- ------------------------------------\n");
		}
		else if(strcmp(str, "Q") == 0)
		{
			break;
		}

	}


	return 0;	
}

END

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值