C#||设计一个学生的成绩管理系统

简介: C#||设计一个学生的成绩管理系统

题目:

设计一个学生的成绩管理系统(学生类、课程类、成绩类)包含以下功能:①登记学生②登记课程③选课④登记成绩⑤排名⑥输出信息

思路:

首先定义是三个类:学生类、课程类、成绩类,再定义一个成绩管理系统类,用来管理上述三个类,然后编写各个选项的具体功能。在定义学生类中,因为后续会对学生进行成绩排名,因此将学生的选课和其成绩存放在了字典里;在选课设计和登记成绩的过程中,通过多次使用if-else语句判断该生是否选过此课程和该课程是否存在的问题;在排名功能中就是简单的排序通过students.OrderBy(s => s.Grades.Values.Average())对学生列表进行排序,计算其成绩字典(Grades)中所有成绩的平均值,然后按照平均值进行排序。再将学生按照排名输出即可;输出功能则使用for-each函数,输出各个学生的各个相关信息。最后主函数中布局页面内容,用Switch函数来选择将要执行的功能,每个分支语句调用该功能具体函数即可。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace StudentScoreManageSystem
{
    // 学生类
    class Student
    {
        public string Name { get; set; }
        public string ID { get; set; }
        public Dictionary<string, int> Grades { get; set; }  
// key为课程名称,value为成绩
        public Student(string name, string id)
        {
            Name = name;
            ID = id;
            Grades = new Dictionary<string, int>();
        }
    }
    // 课程类
    class Course
    {
        public string CourseName { get; set; }
        public Course(string courseName)
        {
            CourseName = courseName;
        }
    }
    // 成绩类
    class Grade
    {
        public Student Student { get; set; }
        public Course Course { get; set; }
        public int Score { get; set; }
 
        public Grade(Student student, Course course, int score)
        {
            Student = student;
            Course = course;
            Score = score;
        }
    }
    // 成绩管理系统类
    class GradeManagementSystem
    {
        private List<Student> students;
        private List<Course> courses;
        private List<Grade> grades;
 
        public GradeManagementSystem()
        {
            students = new List<Student>();
            courses = new List<Course>();
            grades = new List<Grade>();
        }
        // 登记学生
        public void RegisterStudent(string name, string id)
        {
            students.Add(new Student(name, id));
            Console.WriteLine("学生登记成功!");
        }
        // 登记课程
        public void RegisterCourse(string courseName)
        {
            courses.Add(new Course(courseName));
            Console.WriteLine("课程登记成功!");
        }
        // 选课
        public void SelectCourse(string studentID, string courseName)
        {
            Student student = students.Find(s => s.ID == studentID);
            Course course = courses.Find(c => c.CourseName == courseName);
 
            if (student != null && course != null)
            {
                // 判断学生是否已选过该课程
                if (student.Grades.ContainsKey(courseName))
                {
                    Console.WriteLine("学生已经选过该课程!");
                }
                else
                {
                    student.Grades.Add(courseName, 0);
                    Console.WriteLine("选课成功!");
                }
            }
            else
            {
                Console.WriteLine("学生或课程不存在!");
            }
        }
        // 登记成绩
        public void EnterGrade(string studentID, string courseName, int score)
        {
            Student student = students.Find(s => s.ID == studentID);
            Course course = courses.Find(c => c.CourseName == courseName);
 
            if (student != null && course != null)
            {
                // 判断学生是否已选过该课程
                if (student.Grades.ContainsKey(courseName))
                {
                    student.Grades[courseName] = score;
                    grades.Add(new Grade(student, course, score));
                    Console.WriteLine("成绩登记成功!");
                }
                else
                {
                    Console.WriteLine("该课程不在学生选择的课程中!");
                }
            }
            else
            {
                Console.WriteLine("学生或课程不存在!");
            }
        }
        // 排名
        public void PrintRanking()
        {
            List<Student> rankedStudents = students.OrderBy(s => s.Grades.Values.Average()).ToList();
            for (int i = rankedStudents.Count - 1; i >= 0; i--)
            {
                Student student = rankedStudents[i];
                Console.WriteLine($"排名第{i}的学生:{student.Name},平均成绩:{student.Grades.Values.Average()}");
            }
        }
        // 输出信息
        public void PrintInformation()
        {
            Console.WriteLine("学生信息:");
            foreach (Student student in students)
            {
                Console.WriteLine($"姓名:{student.Name},学号:{student.ID}");
                Console.WriteLine("已选课程:");
                foreach (string course in student.Grades.Keys)
                {
                    Console.WriteLine(course);
                }
                Console.WriteLine();
            }
            Console.WriteLine("课程信息:");
            foreach (Course course in courses)
            {
                Console.WriteLine($"课程名称:{course.CourseName}");
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
                GradeManagementSystem system = new GradeManagementSystem();
 
                while (true)
                {
                    Console.WriteLine("请选择功能:");
                    Console.WriteLine("1. 登记学生");
                    Console.WriteLine("2. 登记课程");
                    Console.WriteLine("3. 选课");
                    Console.WriteLine("4. 登记成绩");
                    Console.WriteLine("5. 排名");
                    Console.WriteLine("6. 输出信息");
                    Console.WriteLine("0. 退出");
 
                    string choice = Console.ReadLine();
 
                    switch (choice)
                    {
                        case "1":
                            Console.WriteLine("请输入学生姓名:");
                            string name = Console.ReadLine();
                            Console.WriteLine("请输入学生学号:");
                            string id = Console.ReadLine();
                            system.RegisterStudent(name, id);
                            break;
                        case "2":
                            Console.WriteLine("请输入课程名称:");
                            string courseName = Console.ReadLine();
                            system.RegisterCourse(courseName);
                            break;
                        case "3":
                            Console.WriteLine("请输入学生学号:");
                            string studentID = Console.ReadLine();
                            Console.WriteLine("请输入课程名称:");
                            string selectedCourseName = Console.ReadLine();
                            system.SelectCourse(studentID, selectedCourseName);
                            break;
                        case "4":
                            Console.WriteLine("请输入学生学号:");
                            string gradeStudentID = Console.ReadLine();
                            Console.WriteLine("请输入课程名称:");
                            string gradeCourseName = Console.ReadLine();
                            Console.WriteLine("请输入成绩:");
                            int score = int.Parse(Console.ReadLine());
                            system.EnterGrade(gradeStudentID, gradeCourseName, score);
                            break;
                        case "5":
                            system.PrintRanking();
                            break;
                        case "6":
                            system.PrintInformation();
                            break;
                        case "0":
                            Environment.Exit(0);
                            break;
                        default:
                            Console.WriteLine("无效的选择,请重新输入!");
                            break;
                    }
                    Console.WriteLine();
                }
            }
        }
    }


测试:

相关文章
|
6月前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
169 1
|
6月前
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
108 2
|
1月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
66 2
|
1月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
31 0
|
4月前
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
PACS源码,C#语言数字医学影像系统成品源码
|
5月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
81 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
4月前
|
数据采集 监控 BI
C#实验室检验LIS信息系统源码 微生物检验、质控维护
LIS系统的主要目标是为检验室开展检验工作提供更加有效的系统支持。该系统将尽量减少以人工操作的方式来实现信息转移,减少在接收检验项目、报告结果和保存记录等工作中可能会出现的人为误差,为检验结果查询提供更有效的方法,节省了管理信息所需的琐碎时间和精力。为实验室技术人员提供智能化的运行模式,使处理诸如按照规程审核检验结果、取消检验项目、分析、处理存在重大疑问的检验结果、执行特殊的命令和处理质量控制等问题更轻松自如,这将使检验人员更快地获得准确清晰的检验结果。为临床医护人员提供在线设施,使他们可以及时准确地获得相关实验室信息。确保检验结果的可靠性和准确性,利用实验室管理信息系统的仪器监控和质量控制,
43 0
|
4月前
|
C#
C#中使用IntPtr.Size属性来判断当前系统是32位还是64位
这段代码首先检查 `IntPtr.Size`的值,如果是4,则输出"当前系统是32位";如果是8,则输出"当前系统是64位";如果都不是,就输出"未知系统位数"。
54 0
|
6月前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
77 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
6月前
|
安全 API C#
C#.Net筑基-类型系统②常见类型--枚举Enum
枚举(enum)是C#中的一种值类型,用于创建一组命名的整数常量。它们基于整数类型(如int、byte等),默认为int。枚举成员可指定值,未指定则从0开始自动递增。默认值为0。枚举可以与整数类型互相转换,并可通过`[Flags]`特性表示位域,支持位操作,用于多选场景。`System.Enum`类提供了如`HasFlag`、`GetName`等方法进行枚举操作。