C#实现简单学生成绩管理系统

C#实现简单学生成绩管理系统

一、需求分析

本系统是一个简单的学生成绩管理系统,包括学生信息录入,成绩录入,成绩查询和统计等功能。
软件运行需求:.Net Framework 4.0以上

二、技术选型

  1. 编程语言:C#
  2. 数据库:MS SQL Server
  3. 开发环境:Visual Studio 2017以上版本

三、数据库设计

本系统需要一个用于存储学生信息和成绩的数据库。学生信息表和成绩表需要建立主外键关系,并设置级联删除和更新。

学生信息表设计如下:

CREATE TABLE [dbo].[Students](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [Gender] [nvarchar](2) NOT NULL,
    [Grade] [nvarchar](50) NOT NULL,
    [Major] [nvarchar](50) NOT NULL,
    [Class] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

成绩表设计如下:

CREATE TABLE [dbo].[Grades](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [StudentId] [int] NOT NULL,
    [Math] [decimal](18, 2) NULL,
    [English] [decimal](18, 2) NULL,
    [Physics] [decimal](18, 2) NULL,
 CONSTRAINT [PK_Grades] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[Grades]  WITH CHECK ADD  CONSTRAINT [FK_Grades_Students] FOREIGN KEY([StudentId])
REFERENCES [dbo].[Students] ([Id])
ON DELETE CASCADE
ON UPDATE CASCADE

四、界面设计

本系统主要包括四个页面,学生信息录入、成绩录入、成绩查询和成绩统计。

学生信息录入页面

学生信息录入页面需要输入学生的基本信息,包括姓名、性别、年级、专业和班级等。

成绩录入页面

成绩录入页面需要在录入学生信息后,录入学生的成绩信息,包括数学、英语、物理等科目的成绩。

成绩查询页面

成绩查询页面需要按照学生的学号或姓名查询学生的成绩信息。

成绩统计页面

成绩统计页面需要统计学生的平均分、最高分和最低分等数据。

五、程序设计

本系统需要实现以下功能:
1. 学生信息录入
2. 成绩录入
3. 成绩查询
4. 成绩统计

实现学生信息录入功能

public int AddStudent(string name, string gender, string grade, string major, string @class)
{
    int result = 0;
    string sql = "insert into Students (Name, Gender, Grade, Major, Class) values (@Name, @Gender, @Grade, @Major, @Class)";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@Name", name);
            cmd.Parameters.AddWithValue("@Gender", gender);
            cmd.Parameters.AddWithValue("@Grade", grade);
            cmd.Parameters.AddWithValue("@Major", major);
            cmd.Parameters.AddWithValue("@Class", @class);
            conn.Open();
            result = cmd.ExecuteNonQuery();
        }
    }
    return result;
}

实现成绩录入功能

public int AddGrade(int studentId, decimal math, decimal english, decimal physics)
{
    int result = 0;
    string sql = "insert into Grades (StudentId, Math, English, Physics) values (@StudentId, @Math, @English, @Physics)";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@StudentId", studentId);
            cmd.Parameters.AddWithValue("@Math", math);
            cmd.Parameters.AddWithValue("@English", english);
            cmd.Parameters.AddWithValue("@Physics", physics);
            conn.Open();
            result = cmd.ExecuteNonQuery();
        }
    }
    return result;
}

实现成绩查询功能

public DataTable GetGrades(int studentId, string name)
{
    DataTable dt = new DataTable();
    string sql = "select Students.Id as 学号, Students.Name as 姓名, Math as 数学, English as 英语, Physics as 物理 " +
                 "from Grades join Students on Grades.StudentId = Students.Id where 1 = 1";
    if (studentId > 0)
    {
        sql += " and Students.Id = " + studentId;
    }
    if (!string.IsNullOrEmpty(name))
    {
        sql += " and Students.Name like '%" + name + "%'";
    }
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
    }
    return dt;
}

实现成绩统计功能

public DataTable GetGradeStats()
{
    DataTable dt = new DataTable();
    string sql = "select avg(Math) as 数学平均分, avg(English) as 英语平均分, avg(Physics) as 物理平均分, max(Math) as 数学最高分, max(English) as 英语最高分, max(Physics) as 物理最高分, min(Math) as 数学最低分, min(English) as 英语最低分, min(Physics) as 物理最低分 from Grades";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
    }
    return dt;
}

六、总结

本系统实现了学生信息录入、成绩录入、成绩查询和成绩统计功能。本系统还有一些不足之处,比如没有加入用户权限控制,没有处理数据库连接异常,后续可以对这些进行完善。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简单学生成绩管理系统 - Python技术站

(1)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#队列的简单使用

    C#队列的简单使用 队列是计算机科学中经典的数据结构,它具有先进先出的特点,即先被放入队列的数据将会先被取出。在C#语言中,可以通过使用Queue类来操作队列。在本文中,我们将讲述如何使用C#队列,包括创建队列,添加元素,获取元素,以及判断队列是否为空等操作。 创建队列 在C#中,可以通过以下方式来声明和初始化一个队列: Queue<int> m…

    C# 2023年6月6日
    00
  • 在Unity中实现简单的伪时间同步

    下面我将详细讲解在Unity中实现简单的伪时间同步的完整攻略。 什么是伪时间同步? 伪时间同步(Pseudo-Synchronization)是指在网络环境下,通过一些技巧来实现多个客户端之间的游戏同步。它并不是真正的时间同步,而是一种近似的同步方式。 实现伪时间同步的思路 伪时间同步的核心思路是将客户端的游戏时间同步,而不是同步真实世界中的时间。 在实现伪…

    C# 2023年6月1日
    00
  • c#线程同步使用详解示例

    C#线程同步使用详解 什么是线程同步? 当多个线程同时访问共享资源时,可能会导致数据的不一致或错误。线程同步就是为了协调多个线程对共享资源的访问,以保证数据的准确性和一致性。 C#中的线程同步方式 C#中有以下几种线程同步方式: 互斥量(Mutex) 在任意时刻,只有一个线程能占用互斥量所代表的共享资源。其他线程则需要等待,直到当前线程释放互斥量。 信号量(…

    C# 2023年5月15日
    00
  • c#哈希算法的实现方法及思路

    C#哈希算法的实现方法及思路攻略 什么是哈希算法? 哈希算法是一种将任意长度的数据映射为固定长度值的算法,这种映射关系称为哈希值或散列值。哈希值通常用一个十六进制字符串表示,其长度与算法常量有关。哈希算法被广泛应用于数据完整性校验、密码存储等场景中。 哈希算法的实现思路 哈希算法的实现思路可以被概括为以下几步: 选择合适的哈希函数:哈希函数是哈希算法的核心,…

    C# 2023年6月6日
    00
  • C#实现的序列化通用类实例

    C#实现的序列化通用类实例 介绍 在C#中,序列化是将对象转换为流的过程,以便将其存储在磁盘或通过网络传输。反序列化则是将对象流转换回对象的过程。序列化通用类是一个可以将对象序列化为数据流或从数据流中反序列化的类,它可用于序列化不同类型的对象。 实现过程 创建配置文件(可选) 在整个应用程序中,配置文件非常重要,它包含着我们程序的基本配置信息。序列化通用类也…

    C# 2023年6月6日
    00
  • C#事件管理器如何清空所有监听详解

    C#事件管理器可以管理某一个事件的全部监听器,通过事件管理器,我们可以实现对事件监听器的添加、删除、清空等操作。本文介绍如何清空事件管理器中某个事件的全部监听器。 1. 获取事件对象 在清空事件监听器之前,我们需要首先获取对应的事件对象。事件对象是使用 event 关键字定义的。我们可以通过该对象来管理事件的监听器。 比如,我们有一个事件 MyEvent: …

    C# 2023年6月3日
    00
  • Asp.NetCore3.1开源项目升级为.Net6.0的方法实现

    升级Asp.NetCore3.1开源项目为.Net6.0的方法实现 在本攻略中,我们将详细讲解如何将Asp.NetCore3.1开源项目升级为.Net6.0,并提供两个示例说明。 升级.Net SDK:首先,我们需要升级.Net SDK版本。我们可以在项目文件(.csproj)中修改TargetFramework属性为net6.0,并在全局.json文件中指…

    C# 2023年5月16日
    00
  • 使用java实现“钉钉微应用免登进入某H5系统首页“功能”

    下面是使用Java实现“钉钉微应用免登进入某H5系统首页”功能的完整攻略。 确定应用类型 首先,需要确定钉钉上申请的应用类型,是H5微应用还是自建应用,这将决定后续开发的方式和技术选型。 获取AccessToken 获取AccessToken是访问钉钉开放平台的前提,我们可以通过开放平台提供的免费工具“开发助手”来获取AccessToken。 获取当前用户信…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部