知识问答

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 CASCADEON 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;}

六、总结

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