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

ops/2024/11/19 2:24:00/

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/ops/134839.html

相关文章

基于BERT的情感分析

基于BERT的情感分析 1. 项目背景 情感分析&#xff08;Sentiment Analysis&#xff09;是自然语言处理的重要应用之一&#xff0c;用于判断文本的情感倾向&#xff0c;如正面、负面或中性。随着深度学习的发展&#xff0c;预训练语言模型如BERT在各种自然语言处理任务中取得了…

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction&#xff0c;新版本的Source更具灵活性&#xff0c;原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类&#xff0c;会创建以下两…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

配置LVGL的WIN下vscode的仿真demo

首先 我是从炸鸡佬那里推荐的文章进去&#xff0c;按照流程发现实现不了 然后搜了几个首先的错误就是找不到 lvgl/lvgl.h&#xff0c;我简直蒙蔽了&#xff0c;这个文件就在lvgl的目录下&#xff0c;即便我去手动引用也还是会出错。 然后我去别的csdn找解决方案&#xff0c;依…

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞&#xff0c;实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…

决策树基本 CART Python手写实现

参考资料&#xff1a; https://blog.csdn.net/weixin_45666566/article/details/107954454 https://blog.csdn.net/Elenstone/article/details/105328111 代码如下&#xff1a; #-*- coding:utf-8 -*- import numpy as np import pandas as pd import operatordef loadDataSe…

数据结构-布隆过滤器和可逆布隆过滤器

布隆过滤器家族 普通布隆过滤器基本原理代码实现 计数布隆过滤器基本原理代码实现 可逆布隆过滤器基本原理代码实现 参考 在解决缓存穿透问题时&#xff0c;往往会用到一种高效的数据结构-布隆过滤器&#xff0c;其能够快速过滤掉不存在的非法请求&#xff0c;但其也存在一定的…

【网络】HTTP 协议

目录 基本概念基于 HTTP 的系统组成HTTP 的基本性质 HTTP 请求头 & 响应头HTTP 的请求方法HTTP 的返回码HTTP 的 CookieHTTP 缓存 Cache-Control会话HTTP/1.x 的连接管理 基本概念 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一…