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#通过委托调用Button单击事件的方法

    当我们需要在C#程序中动态地调用方法时,可以使用委托。而将委托与Button单击事件结合,可以实现点击Button时执行特定的方法。下面将详细讲解C#如何通过委托调用Button单击事件的方法。 步骤1:声明委托 在C#中,需要先声明一个委托类型,用来存储单击事件的方法。例如,我们可以声明一个名为ButtonClickHandler的委托类型: public…

    C# 2023年6月7日
    00
  • winform开发使用通用多线程基类分享(以队列形式)

    在WinForm开发中,多线程是一个非常重要的话题。为了方便开发者使用多线程,我们可以使用通用多线程基类来实现多线程操作。本文将介绍如何使用通用多线程基类来实现多线程操作,并提供两个示例程序。 通用多线程基类 通用多线程基类是一个抽象类,它提供了一个通用的多线程框架,可以方便地实现多线程操作。通用多线程基类的主要特点如下: 支持队列形式的多线程操作。 支持多…

    C# 2023年5月15日
    00
  • 微信 getAccessToken方法详解及实例

    “微信 getAccessToken方法详解及实例”攻略 1. 什么是微信getAccessToken方法 在开发微信公众号或小程序等相关应用程序时,我们需要通过微信开放平台提供的API接口来获取许多微信相关资源。其中,getAccessToken方法是必不可少的一步,它可以用来获取access_token,即访问令牌,在访问一些微信资源时需要用到。 2. …

    C# 2023年5月31日
    00
  • Python调用.NET库的方法步骤

    当我们使用Python编程时,有时需要从.NET库里调用一些方法。那么,下面是我总结的Python调用.NET库的方法步骤: 安装pythonnet库 要使用Python调用.NET库,首先需要安装一个名叫pythonnet的Python库。你可以使用pip安装该库,命令如下: pip install pythonnet 导入.NET dll并创建实例 在P…

    C# 2023年6月3日
    00
  • C# Linq的Distinct()方法 – 返回序列中不同的元素

    当我们需要在C#中从一个集合中筛选出不同的元素,Linq的Distinct()方法就非常适用了。在这里,我将为您提供C#Linq的Distinct()方法的完整攻略,包括定义、返回值、语法、使用方法和示例。 定义 Distinct()方法是Linq用于从集合中返回不同元素的方法之一。该方法基于对象的值,比较并取消重复出现的元素。不同于其他返回元素的方法,Di…

    C# 2023年4月19日
    00
  • Unity使用LineRender实现签名效果

    Unity使用LineRender实现签名效果的完整攻略如下: 1. 简介 签名功能是很多应用的必用功能,比如签署合同、签到等。Unity中可以使用LineRender组件来实现签名效果,其实现方式类似于鼠标绘画线条效果。本篇攻略将介绍使用LineRender实现签名功能的具体步骤。 2. 准备 在Unity中创建一个新的3D项目,例如“SignatureD…

    C# 2023年6月3日
    00
  • c# 字符串操作总结

    C#字符串操作总结 在C#中,字符串是一种常用的数据类型。C#提供了许多内置方法和库函数来操作和处理字符串。本篇攻略将介绍C#的常见字符串操作和用法总结。 字符串的定义 在C#中,字符串是用引号(单引号或双引号)括起来的一系列字符。例如: string str1 = "hello"; string str2 = "world&q…

    C# 2023年5月15日
    00
  • C#使用iCSharpcode进行文件压缩实现方法

    下面是“C#使用iCSharpcode进行文件压缩实现方法”的完整攻略。 1. 引入iCSharpcode.SharpZipLib库 在C#中使用iCSharpcode进行文件压缩需要引入其提供的SharpZipLib库。可以通过NuGet来引入,也可以直接下载安装至本地项目中。 2. 使用ZipOutputStream进行文件压缩 压缩一个文件可以使用如下…

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