📅  最后修改于: 2023-12-03 14:56:16.505000             🧑  作者: Mango
在学校的教学管理系统中,我们经常需要生成学生成绩单来方便老师查看学生的成绩情况。针对这种需求,我们可以编写一个 C# 程序来实现自动生成成绩单。
本程序实现的功能主要包括以下几个步骤:
本程序主要使用了以下 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 格式。当然,这只是为大家提供了一个基本的思路和实现方法,实际情况下可能需要根据具体的需求进行相应的修改和优化。