📌  相关文章
📜  生成学生成绩单的 C# 程序(1)

📅  最后修改于: 2023-12-03 14:56:16.505000             🧑  作者: Mango

生成学生成绩单的 C# 程序

在学校的教学管理系统中,我们经常需要生成学生成绩单来方便老师查看学生的成绩情况。针对这种需求,我们可以编写一个 C# 程序来实现自动生成成绩单。

实现思路

本程序实现的功能主要包括以下几个步骤:

  1. 读取已有的成绩表格数据文件,包括学生姓名、学号以及各科成绩等信息。
  2. 对读取的成绩数据进行简单的数据处理和统计,计算每个学生的平均分、总分以及排名等信息。
  3. 根据处理后的数据生成成绩单,包括学生姓名、学号、各科成绩、平均分、总分、排名等信息。
  4. 将生成的成绩单保存为 Excel 文件或者 PDF 文件等格式,方便后续使用。
代码实现
导入库和命名空间

本程序主要使用了以下 C# 库以及命名空间:

using System;
using System.Collections.Generic;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;

其中,System 是 C# 语言的基本库,System.Collections.Generic 主要用于表示和操作通用集合,System.IO 则是用于处理文件和输入/输出的库。此外,我们还需要引用一个名为 EPPlus 的第三方库,用于生成 Excel 文件。

读取成绩数据

在代码中,我们可以使用以下方式来读取已有的成绩数据,这里假设成绩数据保存在 Excel 文件中,文件名为 score.xlsx

FileInfo existingFile = new FileInfo("score.xlsx");
ExcelPackage package = new ExcelPackage(existingFile);
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
处理成绩数据

读取成绩数据后,我们需要对数据进行处理和统计。下面是一个简单的处理示例,用于计算学生的平均分、总分以及排序结果:

List<Student> students = new List<Student>();
for (int row = 2; row <= worksheet.Dimension.Rows; row++)
{
    Student student = new Student();
    student.Name = worksheet.Cells[row, 1].Value.ToString();
    student.Id = worksheet.Cells[row, 2].Value.ToString();
    student.Chinese = Convert.ToInt32(worksheet.Cells[row, 3].Value);
    student.Math = Convert.ToInt32(worksheet.Cells[row, 4].Value);
    student.English = Convert.ToInt32(worksheet.Cells[row, 5].Value);
    student.TotalScore = student.Chinese + student.Math + student.English;
    student.AverageScore = student.TotalScore / 3.0;
    students.Add(student);
}
students = students.OrderByDescending(s => s.TotalScore).ToList();
for (int i = 0; i < students.Count; i++)
{
    students[i].Rank = i + 1;
}

其中,List<Student> 是一个自定义的学生列表,用于保存所有学生的成绩信息。Student 类的定义如下:

public class Student
{
    public string Name { get; set; }
    public string Id { get; set; }
    public double Chinese { get; set; }
    public double Math { get; set; }
    public double English { get; set; }
    public double TotalScore { get; set; }
    public double AverageScore { get; set; }
    public int Rank { get; set; }
}
生成成绩单

根据处理后的数据生成成绩单是本程序的核心功能之一。我们可以使用以下代码片段生成 Excel 格式的成绩单:

ExcelPackage newPackage = new ExcelPackage();
ExcelWorksheet newWorksheet = newPackage.Workbook.Worksheets.Add("成绩单");
// 设置成绩表头
newWorksheet.Cells[1, 1].Value = "排名";
newWorksheet.Cells[1, 2].Value = "学号";
newWorksheet.Cells[1, 3].Value = "姓名";
newWorksheet.Cells[1, 4].Value = "语文";
newWorksheet.Cells[1, 5].Value = "数学";
newWorksheet.Cells[1, 6].Value = "英语";
newWorksheet.Cells[1, 7].Value = "总分";
newWorksheet.Cells[1, 8].Value = "平均分";
// 填充成绩表格
for (int row = 2; row <= students.Count + 1; row++)
{
    newWorksheet.Cells[row, 1].Value = students[row - 2].Rank;
    newWorksheet.Cells[row, 2].Value = students[row - 2].Id;
    newWorksheet.Cells[row, 3].Value = students[row - 2].Name;
    newWorksheet.Cells[row, 4].Value = students[row - 2].Chinese;
    newWorksheet.Cells[row, 5].Value = students[row - 2].Math;
    newWorksheet.Cells[row, 6].Value = students[row - 2].English;
    newWorksheet.Cells[row, 7].Value = students[row - 2].TotalScore;
    newWorksheet.Cells[row, 8].Value = students[row - 2].AverageScore;
}
// 设置成绩单单元格格式
newWorksheet.Cells[1, 1, students.Count + 1, 8].AutoFitColumns();
newWorksheet.Cells[1, 1, students.Count + 1, 8].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
newWorksheet.Cells[1, 1, 1, 8].Style.Font.Bold = true;
newWorksheet.Cells[1, 1, 1, 8].Style.Fill.PatternType = ExcelFillStyle.Solid;
newWorksheet.Cells[1, 1, 1, 8].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79, 129, 189));
newWorksheet.Cells[1, 1, students.Count + 1, 8].Style.Border.Top.Style = ExcelBorderStyle.Thin;
newWorksheet.Cells[1, 1, students.Count + 1, 8].Style.Border.Left.Style = ExcelBorderStyle.Thin;
newWorksheet.Cells[1, 1, students.Count + 1, 8].Style.Border.Right.Style = ExcelBorderStyle.Thin;
newWorksheet.Cells[1, 1, students.Count + 1, 8].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
// 保存成绩单
FileInfo newFile = new FileInfo("成绩单.xlsx");
newPackage.SaveAs(newFile);
输出成绩单

除了生成 Excel 格式的成绩单外,我们还可以使用以下代码片段生成 PDF 格式的成绩单:

using (ExcelPackage package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("成绩单");
    // 代码同上
    worksheet.PrinterSettings.FitToPage = true;
    worksheet.PrinterSettings.FitToWidth = 1;
    worksheet.PrinterSettings.FitToHeight = 0;
    worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
    worksheet.Cells[1, 1, students.Count + 1, 8].AutoFitColumns();
    Byte[] bin = package.GetAsByteArray();
    MemoryStream stream = new MemoryStream();
    stream.Write(bin, 0, bin.Length);
    stream.Position = 0;
    string outputFileName = "成绩单.pdf";
    using (var pdfPackage = new PdfPackage(stream))
    {
        pdfPackage.Save(outputFileName);
    }
}

需要注意的是,这里我们使用了一个名为 EPPlus.Extensions 的第三方库和一个名为 PdfSharp 的第三方库。其中,EPPlus.Extensions 用于将 Excel 文件转换为 PDF 格式,PdfSharp 则是用于生成 PDF 文件的库。

总结

通过以上代码片段的实现,我们可以较为方便地生成学生成绩单,并将成绩单保存为 Excel 或 PDF 格式。当然,这只是为大家提供了一个基本的思路和实现方法,实际情况下可能需要根据具体的需求进行相应的修改和优化。