C#探索之路(10):实现一个简单应用的功能——志愿填报

news2024/12/25 9:28:25

C#探索之路(10):实现一个简单应用的功能——志愿填报

文章目录

  • C#探索之路(10):实现一个简单应用的功能——志愿填报
    • 1、前景:
    • 2、需求分析
    • 3、功能实现
      • 3.1、界面交互-输入
      • 3.2、界面交互-输出
    • 3、代码示例:
    • 4、效果图:
    • 5、总结

1、前景:

前段时间,妹妹高考结束了,高考分数出来后,我妹妹亲自来问我志愿填报的事情,我父母也希望我来帮她出出注意,想到了现在的志愿填报和我们当时的志愿填报不一样了,我也是绞尽了脑汁,我实在是低估了现在志愿填报的复杂性。

首先需要提及的有这么几个要素,院校专业志愿组对应专业组最高分最低分投档线

让我觉得最为困惑的是各个学校招录的专业、人数,让我对这个环节产生了极大的困惑。我查了整整一个小时,实在是觉得这种重复性的工作是在太多了。

然后想到了,作为一个IT专业的人,我觉得最不怕的就是这些重复性的工作了,正好感觉自己很少把C#编程这个能力应用到生活中去,我觉得这是一个机会,所以我打算尝试做一个自动根据分数推荐志愿院校的这么个一个功能。

2、需求分析

①可输入自己的分数、排名、选科

②可以收录对应院校的相关信息数据

③需要有一个期望值/概率来计算其中的录取概率

④根据第三点要求可以输出对应的推荐院校,对对应的院校来进行排名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9WTJxQuZ-1689266156753)(C:\Users\JackiieWang\AppData\Roaming\Typora\typora-user-images\image-20230713235851442.png)]

由于时间紧迫的关系,我只根据自己的需求录入了一些投档线比较接近的学校(大概92所意向志愿专业),因为录入信息的流程是一个比较漫长和繁琐的一个过程:

数据含义:学校,投档线,志愿组,志愿编号,最高分,最低分,平均分,最高排名,最低排名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MAH9ImOJ-1689266156754)(C:\Users\JackiieWang\AppData\Roaming\Typora\typora-user-images\image-20230714000150884.png)]

3、功能实现

3.1、界面交互-输入

3.2、界面交互-输出

其实功能很简单,一个输入自己的相关信息,

另一个就是输出推荐院校的相关信息

3、代码示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OG83xcnm-1689266156754)(C:\Users\JackiieWang\AppData\Roaming\Typora\typora-user-images\image-20230714001146077.png)]

一个简单的数据结构:

using System.Collections.Generic;

namespace Script
{
    // 定义学校的数据结构
    public struct SchoolInfo
    {
        public string Name;
        public string Describe;
        public VolunteerGroup VolunteerGroups;
    }

    public class VolunteerGroup
    {
        public int FilingScore; //投档线
        public int ProNumOne; //专业编号1
        public int ProNumTwo; //专业编号2
        public int HighestScore; //最高分
        public int LowestScore; //最低分
        public int AvgScore; //平均分
        public int HighestTag;//最高排名
        public int LowestTag;//最低排名
        public int Probability; //概率
    }

    public class MyScore
    {
        public int TotalScoce;
        public int RankingNum;
        public int AndScoreRankingNum;
    }
}

筛选条件:自己制定,如果是要做一个非常严谨的条件筛选,一定要有足够多的数据分析。

我仅仅就自己大概制定了一个简单的筛选规则:这个规则不够严谨,抛砖引玉,只要你想要做一个足够好的,那一定可以做的更好

private void Start()
{
    //初始化自己数据
    MyScore Info = new MyScore();
    Info.TotalScoce = XXX;
    Info.RankingNum = XXXXX;
    Info.AndScoreRankingNum = XXXXX;

    //初始化学校数据
    List<SchoolInfo> schools = InitializeSchoolData();

    //过滤后得到符合条件的学校
    var filterSchools = FilterSchools(schools, Info);
    var sortEnumerable = filterSchools.OrderBy(x => x.VolunteerGroups.LowestTag)
        .ThenBy(x => x.VolunteerGroups.FilingScore);
        // .ThenBy(x => x.VolunteerGroups.LowestScore).ThenBy(x => x.VolunteerGroups.AvgScore) as List<SchoolInfo>;

    //输出所有符合信息的数据
    string filePath = "Assets/Resources/SchoolInfoList.txt";
    List<SchoolInfo> sortList = new List<SchoolInfo>();
    foreach (var schoolInfo in sortEnumerable)
    {
        sortList.Add(schoolInfo);
    }
    var data = sortList;
    SaveSchoolInfoList(sortList, filePath);
}
        public static List<SchoolInfo> ReadSchoolInfoFromFile(string filePath)
        {
            string[] lines = File.ReadAllLines(filePath);
            // SchoolInfo[] schoolInfos = new SchoolInfo[lines.Length];
            List<SchoolInfo> schoolInfoList = new List<SchoolInfo>();
            for (int i = 0; i < lines.Length; i++)
            {
                SchoolInfo schoolInfoItem = new SchoolInfo();
                VolunteerGroup volunteerGroups = new VolunteerGroup();
                string[] data = lines[i].Split(',');
                // schoolInfos[i].Name = data[0];
                schoolInfoItem.Name = data[0];
                volunteerGroups.FilingScore = int.Parse(data[1]);
                volunteerGroups.ProNumOne = int.Parse(data[2]);
                volunteerGroups.ProNumTwo = int.Parse(data[3]);
                volunteerGroups.HighestScore = int.Parse(data[4]);
                volunteerGroups.LowestScore = int.Parse(data[5]);
                volunteerGroups.AvgScore = int.Parse(data[6]);
                volunteerGroups.HighestTag = int.Parse(data[7]);
                volunteerGroups.LowestTag = int.Parse(data[8]);
                // schoolInfos[i].VolunteerGroups = volunteerGroups;
                schoolInfoItem.VolunteerGroups = volunteerGroups;
                schoolInfoList.Add(schoolInfoItem);
            }

            // return schoolInfos;
            return schoolInfoList;
        }
// 初始化学校数据
        private List<SchoolInfo> InitializeSchoolData()
        {
            var filePath = "Assets/Resources/schoolInfo.txt"; // 替换为你的文件路径
            var schoolInfos = ReadSchoolInfoFromFile(filePath);
            return schoolInfos;
        }
// 筛选符合条件的学校
        private List<SchoolInfo> FilterSchools(List<SchoolInfo> schools, MyScore myScore)
        {
            // List<SchoolInfo> schools = InitializeSchoolData();
            List<SchoolInfo> filteredSchools = new List<SchoolInfo>();

            foreach (SchoolInfo school in schools)
            {
                SchoolInfo filteredSchool = new SchoolInfo();
                filteredSchool.Name = school.Name;
                filteredSchool.VolunteerGroups = new VolunteerGroup();

                if (筛选条件1)
                {
                    filteredSchool.Describe = "符合冲刺条件";
                    filteredSchool.VolunteerGroups.Probability =
                        (int) ((int) Mathf.Abs(school.VolunteerGroups.FilingScore - myScore.TotalScoce) /
                            (float) 20.0f * 100);
                    filteredSchool.VolunteerGroups = school.VolunteerGroups;
                    filteredSchools.Add(filteredSchool);
                }
                else if (筛选条件2)
                {
                    filteredSchool.Describe = "符合稳妥条件";
                    filteredSchool.VolunteerGroups.Probability =
                        (int) ((myScore.TotalScoce / (float)school.VolunteerGroups.HighestScore) * 100);
                    filteredSchool.VolunteerGroups = school.VolunteerGroups;
                    filteredSchool.VolunteerGroups = school.VolunteerGroups;
                    filteredSchools.Add(filteredSchool);
                }
                else if (筛选条件3)
                {
                    filteredSchool.Describe = "符合保底条件";
                    filteredSchool.VolunteerGroups.Probability = 90;
                    filteredSchool.VolunteerGroups = school.VolunteerGroups;
                    filteredSchools.Add(filteredSchool);
                }

                // 如果符合条件的志愿组数量大于0,则将学校加入到筛选结果中
                if (filteredSchools.Count > 0)
                {
                    Debug.Log("找到了符合条件的学校");
                }
            }

            return filteredSchools;
        }
 // 以文件的形式输出
        public void SaveSchoolInfoList(List<SchoolInfo> schoolInfoList, string filePath)
        {
            StringBuilder stringBuilder = new StringBuilder();

            // 拼接每个SchoolInfo对象的字段,使用逗号分隔
            foreach (SchoolInfo schoolInfo in schoolInfoList)
            {
                stringBuilder.Append(schoolInfo.Name).Append(",");
                stringBuilder.Append(schoolInfo.Describe).Append(",");
                stringBuilder.Append(schoolInfo.VolunteerGroups.FilingScore).Append(",");
                stringBuilder.Append("第").Append(schoolInfo.VolunteerGroups.ProNumOne).Append("组").Append(",");
                stringBuilder.Append("编号【").Append(schoolInfo.VolunteerGroups.ProNumTwo).Append("】").Append(",");
                stringBuilder.Append("最高分:").Append(schoolInfo.VolunteerGroups.HighestScore).Append(",");
                stringBuilder.Append("最低分:").Append(schoolInfo.VolunteerGroups.LowestScore).Append(",");
                stringBuilder.Append("平均分:").Append(schoolInfo.VolunteerGroups.AvgScore).Append(",");
                stringBuilder.Append("最高排名:").Append(schoolInfo.VolunteerGroups.HighestTag).Append(",");
                stringBuilder.Append("最低排名:").Append(schoolInfo.VolunteerGroups.LowestTag).Append(",");
                stringBuilder.Append("概率:").Append(schoolInfo.VolunteerGroups.Probability).Append("\n");
            }

            // 将拼接好的内容保存到txt文件
            File.WriteAllText(filePath, stringBuilder.ToString());
        }

4、效果图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djwJvbnx-1689266156754)(C:\Users\JackiieWang\AppData\Roaming\Typora\typora-user-images\image-20230714002408102.png)]

5、总结

说明:

虽然提及到的概念其实很浅显易懂,期望,权重,

这是我一个短期内去实现的一个简要的功能Demo,hhh 大家可以发现一个很明显的bug-》概率怎么可能都为0.

由于我的筛选条件比较简单,而且逻辑上其实是有问题的。我之所以会把这个内容展示出来主要的原因,是因为这是一个功能的实现外壳。

旨在的目的是梳理写一个功能的逻辑:

要确定的几个大步骤:

1、数据准备以及数据读取

2、筛选条件

3、输出形式

这三个步骤是最基础且最主要的。至于实现细节不过是在外壳里面去完善实现细节。比如说界面、功能、数据结构、

我们也可以发现这上面充满了if else 那我们是不是可以尝试去别的方式去过滤、去排序

总结:

1、市面上的各大志愿填报App(还要充会员)其实逻辑并不复杂

2、市面上的app的普遍优势在于拥有更多的数据分析,处于大大数据的时代,其实我们会发现数据才是最重要的。

3、功能上逻辑其实并不复杂,不过关于app的sdk相关流程而言整个开发流程才会显得比较复杂。

4、(狗头)那我们是不是可以尝试的有机会做一款自己的app。哈哈开个玩笑,有机会的话说不定真的有可能

算是一个比较简单的案例实现Demo用到生活当中去吧,学习的过程中可以尝试多做一些这种类似的练习。

总而言之,代码优化永无止尽哈哈哈…总有更好的方式…

在这里插入图片描述

公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/131714461

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用缓存模拟进度条(c实现)

代码如下&#xff1a; #include <stdio.h> #include <Windows.h>int main() {int total 100;int progress 0;char progressBar[101] {};while (progress < total) {progressBar[progress] #;printf("[%-100s] %d%%", progressBar, progress);ffl…

音视频开发实战03-FFmpeg命令行工具移植

一&#xff0c;背景 作为一个音视频开发者&#xff0c;在日常工作中经常会使用ffmpeg 命令来做很多事比如转码ffmpeg -y -i test.mov -g 150 -s 1280x720 -codec libx265 -r 25 test_h265.mp4 &#xff0c;水平翻转视频&#xff1a;ffmpeg -i src.mp4 -vf hflip -acodec copy …

爬虫相关知识与面试题目

常见的反爬虫和应对方法 参考:https://www.cnblogs.com/bsdr/p/5151891.html 0x01 常见的反爬虫 这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的…

判断 Mac显卡 mps 是否可以正常运行

文章目录 Mac MPS介绍判断 Mac mps 是否可以正常运行Mac 指定 mps 进行推理示例Mac M1 GPU 训练 相比 CPU 速度提升对比&#x1f4d9; 开心搬砖每一天 Mac MPS介绍 使用 Apple 的 Metal Performance Shaders (MPS) 作为 PyTorch 的后端来启用加速 GPU 训练。 MPS 后端扩展了 P…

SpringBoot源码分析(5)--createApplicationContext创建应用上下文

文章目录 一、前言二、ApplicationContext简述2.1、Spring IOC容器实现方式 三、createApplicationContext/创建应用上下文3.1、DefaultResourceLoader3.2、AbstractApplicationContext3.3、GenericApplicationContext3.3.1、SimpleAliasRegistry3.3.2、DefaultSingletonBeanRe…

ARM中栈的种类与运用

1. 栈的概念 栈&#xff0c;本身是一段内存&#xff0c;程序运行时用于保存一些临时数据&#xff0c;如局部变量、参数、返回地址等等。 学习了数据结构&#xff0c;对栈的概念相信大家都不陌生&#xff0c;后进先出的数据结构&#xff0c;即最后进栈的元素最先出栈。但是在C语…

用html+javascript打造公文一键排版系统5:二级标题排版

公文中二级标题的一般以&#xff08;X&#xff09;标注&#xff08;其中X为由"一二三四五六七八九十"中的字符组成的字符串&#xff09;&#xff0c;用楷体字加粗。 首先我们要判断一段文字是否包含二级标题&#xff0c;最简单的方法 就是判断文字中的头一个字符是否…

springBoot整合二维码

一、引入坐标 <!-- 二维码 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing</group…

Unhandled error during execution of component event handler at

Unhandled error during execution of component event handler at 执行组件事件处理程序期间出现未处理的错误 在 意思就是有些地方的值用早了,在没有数据之前就使用了 我这次报错是子组件的表单校验 调用事件就报错了 解决方法 setTimeout(() > { //调用方法 }, 0); 就是…

chapter10:SpringBoot与缓存

尚硅谷SpringBoot整合教程 1. JSR107 缓存开发规范&#xff0c;Java Caching 定义了5个核心接口&#xff0c; 分别是CachingProvider&#xff0c;CacheManager&#xff0c;Cache&#xff0c;Entry和Expiry。 CachingProvider&#xff1a;定义了创建&#xff0c;配置&#xff…

【bug】flameshot在ubuntu上的4K屏幕,双屏幕上用不了截图

问题 直接在4K屏幕上运行flameshot截图&#xff0c;直接黑屏 主屏 &#xff1a;4K 副屏&#xff1a;2k 解决 2.1长按1-2秒开机键&#xff0c;先回到桌面。 2.2 设置主屏缩放为125% 2.3 设置键盘快捷键命令为env QT_AUTO_SCREEN_SCALE_FACTOR1 flameshot gui 替代flameshot的…

第51步 深度学习图像识别:Convolutional Vision Transformer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Convolutional Vision Transformers Convolutional Vision Transformer&#xff08;ConViT&#xff09;是一种结合了卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09…

飞机【频闪灯、导航灯】效果的设置——灯和灯的光晕

一、飞机外部灯光系统——频闪灯和防撞灯——闪烁效果 二、实现的原理 如下图所示&#xff0c;灯效果的组成包含两部分&#xff0c;一是灯本身&#xff0c;二是灯光产生的光晕 灯—— 就是一个球&#xff08;Sphere&#xff09;,给它一个Emission(自发光)材质光晕——光晕的…

云苍穹各类参数使用说明

目录 公共参数 云参数 应用参数 单据参数 单据类型参数 用户选项参数 列表选项参数 公共参数 不推荐使用 参数值获取&#xff1a; // 获取整体公共参数 Map<String,Object> publicParamWhole SystemParamServiceHelper.loadPublicParametersFromCache();// 获取某…

vscode安装文件下载缓慢

官网下载vscode安装文件太慢大部分是因为vscode官网服务器跟我们国内的链接速度有关&#xff0c;当我们去官网下载&#xff08;Download Visual Studio Code - Mac, Linux, Windows&#xff09;一般都会出现下面的情况 下载速度几乎为0。 解决办法&#xff0c;鼠标右键复制下载…

C语言a---b

C语言的编译遵循贪心读法&#xff0c;也就是说&#xff0c;对于有歧义的符号&#xff0c;编译器会一直读取&#xff0c;直到它的意思完结&#xff1b; a---b&#xff0c;是a-- -b还是a- --b&#xff0c;根据贪心法则&#xff0c;读到第二个减号&#xff0c;意思完结&#xff0c…

今日分享——语音同声翻译软件

安娜和卡洛是一对在旅行时偶遇的年轻男女&#xff0c;他们互有好感&#xff0c;但他们来自不同的国家&#xff0c;说着不同的语言。每次面对彼此的时候&#xff0c;他们总是陷入语言的困扰&#xff0c;无法用自己熟悉的语言表达内心的情感。因此他俩都十分需要一款翻译语音的软…

【从零开始进行高精度手眼标定 eye in hand(小白向)3 非线性高精度标定法编程实现】

从零开始进行高精度手眼标定 eye in hand&#xff08;小白向&#xff09;1 原理推导 前言原理推导算法框图 MATLAB编程计算相关优化工具箱的安装&#xff08;不安装会报错&#xff09;数据读取目标函数计算完整代码实验验证 传送门&#xff1a; 1.【从零开始进行高精度手眼标定…

2023.7.13-【if】与【for】的配合使用:键入一个整数,输出结果用1234567890循环填充,填充的位数等于键入的整数

功能描述&#xff1a; 例如我们输入一个整数&#xff1a;25。输出的结果为1234567890123456789012345&#xff0c;共计25个数填充了这个输出结果。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a;int b; int c;int i;prin…

fiddler抓包工具使用大全

目录 Fiddler基础知识 HTTP协议 Fiddler的使用 HTTPS抓包 Fiddler过滤会话 对request设置断点 对response设置断点 Fiddler的编码和解码 Fiddler基础知识 Fiddler是强大的抓包工具&#xff0c;它的原理是以web代理服务器的形式进行工作的&#xff0c;使用的代理地址是&…