C#编程:优化【性别和成绩名次】均衡分班

devtools/2024/11/19 2:52:52/

5c3c6a1d8d5141a294d411938a5152c4.png

==标题==

C#编程,实现(男女和成绩)均衡分班

==正文==

上一篇用ExceVBA完成的分班,请看文章

ExcelVBA代码实现按性别和成绩名次均衡分班

网友提出问题
用VbA对班级学生随机分组,考虑男女人数和考试成绩均衡

一、需求分析

用户需要将工作表Sheet1中的数据进行科学分班,分为6个班,考虑男女人数和考试成绩均衡,并将结果输出到工作表Sheet2。

二、实现思路

  1. 读取数据:从Sheet1中读取所有数据。

  2. 数据处理:根据性别和名次进行排序,确保男女比例和成绩均衡。

  3. 分班算法:设计一个算法将学生分为6个班。

    分班规则,这是重点
    男:123456、654321,S形(蛇形)
    女:654321、123456,S形(蛇形)
  4. 输出结果:将分班结果写入Sheet2。

三、实现代码(C#)

因为VBA,在排序,分配时不方便写代码,所以这次用C#写

public int PorNfenban(int n, int total, string pn){
//此处省略n行代码,留着白嫖一族思考,哈哈哈!!!
//这是一个自定义函数,用于返回分班的}public void StudentAssignClasses(int inNumber){Excel.Application xlsApp = Globals.ThisAddIn.Application;Excel.Workbook wbk = xlsApp.ActiveWorkbook;Excel.Worksheet sht = xlsApp.ActiveSheet;int lastRow = sht.Cells.Find("*", System.Type.Missing, System.Type.Missing, System.Type.Missing, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, System.Type.Missing, System.Type.Missing).Row;List<Student> students = new List<Student>();for (int i = 2; i <= lastRow; i++){String id = sht.Cells[i, 1].Value?.ToString() ?? string.Empty;String name = sht.Cells[i, 2].Value?.ToString() ?? string.Empty;String gender = sht.Cells[i, 3].Value?.ToString() ?? string.Empty;double score ;if (!double.TryParse(sht.Cells[i, 4].Value.ToString(),out score)){score = 0;}students.Add(new Student(){ID = id,Name = name,Gender = gender,Score = score,});}//提出分类一惟一值var uniqueGenders = students.Select(s => s.Gender).Distinct();// 按成绩排序students.Sort((x, y) => y.Score.CompareTo(x.Score));// 分配班级List<Student>[] Classes = new List<Student>[inNumber];for (int i = 0; i < inNumber; i++){Classes[i] = new List<Student>();}// 分配男生123456、654321int maleIndex = 0;foreach (var student in students.Where(s => s.Gender == "男")){int res = PorNfenban(maleIndex + 1, inNumber, "p");Classes[res-1].Add(student);maleIndex +=1;}// 分配女生654321、123456int femaleIndex = 0;foreach (var student in students.Where(s => s.Gender == "女")){int res = PorNfenban(femaleIndex + 1, inNumber, "n");Classes[res-1].Add(student);femaleIndex += 1;}//输出数据// 创建新工作表Excel.Worksheet newSheet = wbk.Sheets.Add(After: wbk.Sheets[wbk.Sheets.Count]);newSheet.Name = "ClassDistribution";// 输出班级数据string[] array = { "序号", "姓名", "性别", "成绩", "班别" };int rowIndex = 1;for (int i = 0; i < inNumber; i++){newSheet.Cells[rowIndex, 1].resize(1,5).Value = array;rowIndex++;foreach (var student in Classes[i]){newSheet.Cells[rowIndex, 1].Value = student.ID;newSheet.Cells[rowIndex, 2].Value = student.Name;newSheet.Cells[rowIndex, 3].Value = student.Gender;newSheet.Cells[rowIndex, 4].Value = student.Score;newSheet.Cells[rowIndex, 5].Value = $"Class{i + 1}";rowIndex++;}}}public class Student{public string ID { get; set; }public string Name { get; set; }public string Gender { get; set; }public double Score { get; set; }}

四、完成效果

1.原数据

59c38bb75736c549e671a66a41330eb3.png

2.输出效果

5c5a10b39be32059034e637e55074c42.png

4.数据分析

8be2aea1cbb8d991ea9ad314a7f3e8fa.png

完成

==The end==

fda4e4f667ed173d073fa7329e928aa8.png

==合集==

====若有用,请转发免费学习====

关注看更多文章

4d974bf5454c439a6b46e2fb32ea78df.jpeg


http://www.ppmy.cn/devtools/135095.html

相关文章

拆解测试显示Mac Mini (2024)固态硬盘并未锁定 互换硬盘后仍可使用

此前已经有维修达人尝试将 Mac Mini (2024) 固态硬盘上的 NAND 闪存拆下并替换实现扩容&#xff0c;例如可以从 256GB 扩容到 2TB。虽然接口类似于 NVMe M.2 SSD 但直接安装普通硬盘是无效的&#xff0c;苹果仍然通过某种机制检测硬盘是否能够兼容。 不过知名拆解网站 iFixit 的…

K8S 查看pod节点的磁盘和内存使用情况

查看某个节点的磁盘使用率&#xff1a; kubectl exec -it pod名称 -n 命名空间 – df -h 查询所有节点的已使用内存&#xff1a; kubectl top pods --all-namespaces | grep itsm 查询某个节点的总内存&#xff0c; kubectl describe pod itsr-domain-59f4ff5854-hzb68 --nam…

Python 小高考篇(6)常见错误及排查

目录 TypeError拼接字符串和数字错误示范正确示范 数字、字符串当成函数错误示范 给函数传入未被定义过的参数错误示范 传入的参数个数不正确错误示范 字符串相乘错误示范正确示范 量取整数的长度错误示范正确示范 格式化字符串时占位符个数不正确错误示范 给复数比较大小错误示…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 实践 我们需要先选这一个模板&#xff0c;具体流程参考…

macOS系统下使用SQLark连接达梦数据库

目录 下载 SQLark 客户端 安装 SQLark 客户端 SQLark用户界面 使用SQLark连接达梦数据库 1. 选择达梦数据库 2. 输入连接信息 3. 测试连接 4. 创建连接 5. 验证连接成功 作为一名数据库开发者&#xff0c;在macOS系统上找到一款支持达梦数据库的数据库开发和管理工具&…

力扣第 55 题 跳跃游戏

力扣第 55 题 跳跃游戏&#xff08;Jump Game&#xff09;。题目要求判断一个非负整数数组中&#xff0c;是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…

使用 Go 实现将任何网页转化为 PDF

在许多应用场景中&#xff0c;可能需要将网页内容转化为 PDF 格式&#xff0c;比如保存网页内容、生成报告、或者创建网站截图。使用 Go 编程语言&#xff0c;结合一些现有的库&#xff0c;可以非常方便地实现这一功能。本文将带你一步一步地介绍如何使用 Go 语言将任何网页转换…

⚙️ 如何调整重试策略以适应不同的业务需求?

调整 Kafka 生产者和消费者的重试策略以适应不同的业务需求&#xff0c;需要根据业务的特性和容错要求来进行细致的配置。以下是一些关键的调整策略&#xff1a; 业务重要性&#xff1a; 对于关键业务消息&#xff0c;可以增加重试次数&#xff0c;并设置较长的重试间隔&#x…