C#基础(16)实践:学生成绩管理系统

简介

通过基础部分的学习,我们已经能进行一些实际应用的开发,学生成绩系统我相信是大家基本在大学期间上程序课必定会经历的一个小项目。

这个小项目看上去简单,但是思考量却不少。

这里就不带着大家一步一步讲解了,因为里面涉及到一些博主没有讲到过的库的使用。

博主尽量写了多的注释来帮助你理解。

如果你有所不懂,建议多查多思考多问。

你也可以自己尝试去实现一下这样的系统:

  1. 能记录学生姓名和各科成绩(集合属性,使用结构体),并且不能重复录入(姓名检重)
  2. 查看平均成绩排名(排序算法)
  3. 开始界面功能选择(Switch)
  4. 删除相关信息(检索)
  5. 记录和写入(文件操作——格外内容,需要自己动手搜寻资料学习)

你可以先自己尝试,然后再来看博主给出的代码学习思路。当然可能有些地方博主用了其他的处理,你可以在博主的基础上,用自己的想法去实现。

请务必多敲代码,这样才能让你在代码路上走得更远。

// 引用所需的命名空间  
using System;
using System.IO; // 用于文件操作,如读取和写入文件  
using System.Linq; // 提供LINQ功能,用于查询和操作集合  
using System.Collections.Generic; // 用于使用泛型集合类,如 List  class Program
{private const string FilePath = "grades.txt"; // 定义存储成绩数据的文件路径  static void Main(string[] args){while (true) // 无限循环,直到用户选择退出  {Console.WriteLine("请选择操作: 1. 录入成绩 2. 查看成绩 3. 删除成绩 4. 退出");string choice = Console.ReadLine();switch (choice){case "1":InputGrades(); // 调用输入成绩的方法  break;case "2":DisplayGrades(); // 调用显示成绩的方法  break;case "3":DeleteGrades(); // 调用删除成绩的方法  break;case "4":return; // 退出程序  default:Console.WriteLine("无效的选择,请重新输入。");break;}}}// 方法: 输入学生成绩  private static void InputGrades(){Console.Write("请输入学生姓名: ");string name = Console.ReadLine();// 检查学生是否存在  if (IsStudentExists(name)){Console.WriteLine("该学生已存在,请重新输入。");return;}// 提示用户输入成绩  Console.Write("请输入数学成绩: ");decimal math = decimal.Parse(Console.ReadLine());Console.Write("请输入语文成绩: ");decimal chinese = decimal.Parse(Console.ReadLine());Console.Write("请输入英语成绩: ");decimal english = decimal.Parse(Console.ReadLine());// 组织录入的成绩字符串  string record = $"{name},{math},{chinese},{english}";// 将成绩追加到文件中  File.AppendAllText(FilePath, record + Environment.NewLine);Console.WriteLine("成绩录入成功!");}// 方法: 检查学生是否已存在  private static bool IsStudentExists(string name){// 检查文件是否存在  if (!File.Exists(FilePath)) return false;// 读取文件中的所有记录,并使用LINQ检查学生是否存在  string[] records = File.ReadAllLines(FilePath);return records.Any(record => record.StartsWith(name + ",")); // 返回是否找到匹配的学生  }// 方法: 显示所有录入的成绩  private static void DisplayGrades(){// 检查文件是否存在  if (!File.Exists(FilePath)){Console.WriteLine("没有成绩记录。");return;}// 读取所有记录  string[] records = File.ReadAllLines(FilePath);List<Student> students = new List<Student>(); // 创建学生列表  // 遍历每一条记录并解析为学生对象  foreach (string record in records){string[] parts = record.Split(','); // 按逗号分隔记录  if (parts.Length == 4) // 预期为四个部分  {// 尝试解析成绩,如果失败则报告错误  if (decimal.TryParse(parts[1], out decimal math) &&decimal.TryParse(parts[2], out decimal chinese) &&decimal.TryParse(parts[3], out decimal english)){students.Add(new Student{Name = parts[0],MathScore = math,ChineseScore = chinese,EnglishScore = english});}else{Console.WriteLine($"解析记录失败: {record}");}}}// 按照平均成绩降序排序学生  var sortedStudents = students.OrderByDescending(s => s.AverageScore()).ToList();Console.WriteLine("已录入的成绩(按平均成绩排序):");// 显示所有学生的成绩信息  foreach (var student in sortedStudents){Console.WriteLine($"姓名: {student.Name}, 数学: {student.MathScore}, 语文: {student.ChineseScore}, 英语: {student.EnglishScore}, 平均成绩: {student.AverageScore()}");}}// 方法: 删除学生成绩  private static void DeleteGrades(){Console.Write("请输入要删除的学生姓名: ");string name = Console.ReadLine();// 检查学生是否存在  if (!IsStudentExists(name)){Console.WriteLine("未找到该学生的记录。");return;}try{// 读取所有记录并过滤掉要删除的记录  string[] records = File.ReadAllLines(FilePath);var updatedRecords = records.Where(record => !record.StartsWith(name + ",")).ToList();// 将更新后的记录写回文件  File.WriteAllLines(FilePath, updatedRecords);Console.WriteLine("成绩删除成功!");}catch (Exception ex){// 捕获写入文件时的异常并提示用户  Console.WriteLine("删除失败: " + ex.Message);}}
}// 定义学生类  
class Student
{public string Name { get; set; } // 学生姓名  public decimal MathScore { get; set; } // 数学成绩  public decimal ChineseScore { get; set; } // 语文成绩  public decimal EnglishScore { get; set; } // 英语成绩  // 方法: 计算平均成绩  public decimal AverageScore(){return (MathScore + ChineseScore + EnglishScore) / 3; // 计算平均成绩  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳

有女朋友后&#xff0c;怎么养成贤内助&#xff1f;为自己找个好伴侣&#xff0c;为孩子找个好妈妈&#xff0c;为母亲找个好儿媳 时代背景女生有点作怎么办&#xff1f;大商家族的爱情观 时代背景 一块钱的东西&#xff0c;赋予俩块钱的意义&#xff0c;三块钱卖出去。 用商…

企业急于采用人工智能,忽视了安全强化

对主要云提供商基础设施上托管的资产的安全分析显示&#xff0c;许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…

Python爬虫使用实例-umei

优美图库 www.umei.cc BV1Ag41137re 1/获取资源 查看网站资源结构 多页&#xff0c;每个item只有一张图 多页&#xff0c;每个item都是一个图集 最大页码 内外层图集均有若干page。 通过尾页按钮确定pageNum&#xff1a; 2/发送请求 response requests.get(urlurl, header…

蓝桥杯【物联网】零基础到国奖之路:十. OLED

蓝桥杯【物联网】零基础到国奖之路:十.OLED 第一节 硬件解读第二节 MDK配置 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fa7660b81be9407aa19c603561553db0.png)第三节 代码 第一节 硬件解读 OLED硬件知识: 第二节 MDK配置 第三节 代码 include头文件。 编…

Vue3 中组件传递 + css 变量的组合

文章目录 需求效果如下图所示代码逻辑代码参考 需求 开发一个箭头组件&#xff0c;根据父组件传递的 props 来修改 css 的颜色 效果如下图所示 代码逻辑 代码 父组件&#xff1a; <Arrow color"red" />子组件&#xff1a; <template><div class&…

VM-Ubantu中使用vscode头文件报错——解决办法

问题 系统中头文件明明存在但是却报错 解决方法 在报错的文件中点击&#xff0c;shift ctrl p选择Edit Configurations(JSON) 修改文件内容 原文件内容 修改之后的内容 {"configurations": [{"name": "Linux","includePath":…

https加密原理

以为http的数据都是以明文传送&#xff0c;会有很大的安全问题&#xff0c;所以出现的https协议。https就是在http协议的基础上增加了一个安全层&#xff0c;可以对数据进行加密和解密(例如SSL、TLS等)。 https加密解密的原理&#xff1a;证书非对称加密对称加密 在讲解原理前…

你了解system V的ipc底层如何设计的吗?消息队列互相通信的原理是什么呢?是否经常将信号量和信号混淆呢?——问题详解

前言&#xff1a;本节主要讲解消息队列&#xff0c; 信号量的相关知识。 ——博主主要是以能够理解为目的进行讲解&#xff0c; 所以对于接口的使用或者底层原理很少涉及。 主要的讲解思路就是先讨论消息队列的原理&#xff0c; 提一下接口。 然后讲解ipc的设计——这个设计一些…

QT打包--windeployqt执行,运行程序提示缺少库

执行windeployqt.exe D:\Data\code\QtCode\Release\RegularExp\RegularExp.exe 生成相应的dll动态库 执行RegularExp.exe&#xff0c;出错&#xff1a;“由于找不到libgcc_s_seh-1.dll…” 找到安装的qt对应的libgcc_s_seh-1.dll拷贝到RegularExp.exe同级目录下&#xff0c; 执…

Qt 窗口事件机制

在 Qt 开发中&#xff0c;窗口的关闭、隐藏、显示等事件是常见且重要的功能。不同的事件触发条件、处理方式不同&#xff0c;了解和掌握这些事件有助于我们更好地控制窗口行为。本文将详细讲解这些事件的使用方法&#xff0c;并通过代码实例来展示其应用。 1. done(int r) — 关…

嵌入式C语言自我修养:GNU C编译器扩展语法精讲

在Linux内核的源码中&#xff0c;你会发现许多这样的“奇特”代码。它们看起来可能有点陌生&#xff0c;但它们实际上是C语言的一种扩展形式&#xff0c;这种扩展在C语言的标准教材中往往不会提及。这就是为什么你在阅读Linux驱动代码或内核源码时&#xff0c;可能会感到既熟悉…

写一下线性表

如果你是c语言, "不会"c, 那么... 把iostream当成stdio.h 把cout当成printf, 不用管啥类型, 变量名字一给输出完事 把cin>>当成scanf, 变量名字一给输入完事 把endl当成\n, 换行. 哦对了, malloc已经不建议使用了, 现在使用new, 把new当作malloc, 把delete当…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;https://…

【JVM】概述

前言 Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架&#xff08;如Spring、MyBatis等&#xff09;构成。在国内&#xff0c;有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富&…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示&#xff1a; 图4-1 系统结构 登录系统结构图&#xff0c;如图4-2所示&#xff1a; 图4-2 登录结构图 蜗牛兼职网结构图&#xff0c;如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

抖音短视频矩阵系统OEM源码开发注意事项,功能开发细节流程全揭秘

抖音短视频矩阵系统OEM源码开发注意事项,功能开发细节流程全揭秘 在当今数字化时代背景下&#xff0c;短视频产业正经历前所未有的快速发展。其中&#xff0c;抖音凭借其创新的算法及多元内容生态获得巨大成功&#xff0c;吸引了众多用户。对于意欲进入短视频领域的创业者而言&…

移动技术开发:ListView水果列表

1 实验名称 ListView水果列表 2 实验目的 掌握自定义ListView控件的实现方法 3 实验源代码 布局文件代码&#xff1a; activity_main.xml: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.androi…

springboot注册和注入组件方式概览

IoC&#xff1a;Inversion of Control&#xff08;控制反转&#xff09; 控制&#xff1a;资源的控制权&#xff08;资源的创建、获取、销毁等&#xff09; 反转&#xff1a;和传统的方式不一样了 DI &#xff1a;Dependency Injection&#xff08;依赖注入&#xff09; 依赖&…

国人卖家可折叠无线充电器发起TRO专利维权,功能相同可能侵权

案件基本情况&#xff1a;起诉时间&#xff1a;2024-8-5案件号&#xff1a;2024-cv-22971原告&#xff1a;SHANGXING TECHNOLOG (SHENZHEN) CO., LTD原告律所&#xff1a;Rubio & Associates, P.A.起诉地&#xff1a;佛罗里达州南部法院涉案商标/版权&#xff1a;原告品牌简…

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念&#xff0c;用于描述两个数在除以某个数时所得的余数相同的情况。具体地&#xff0c;设m是一个正整数&#xff0c;a和b是两个整数&#xff0c;如果a和b除以m的余数相同&#xff0c;则称a和b模m同余&#xff0c;记作a≡b(mod m)。反…