标签:
1)用户可选择获取入学以来所有已修课程的相关信息:课程代号、课程名、课程属性、学分、成绩等信息。
2)用户可选择获取特定已修课程的相关信息:课程代号、课程名、课程属性、学分、成绩等信息。
3)用户可获得特定时间段内的加权平均分(1学期、1学年、全部)。
13070003 张 帆
13070046 孙宇辰
13070004 崔 巍
13070006 王 奈
13070002 张雨帆
13070045 汪天米
我在团队项目中负责的部分是数据的处理。具体而言就是介于脚本和图形界面中间层面的处理,即脚本将数据从教务中抓取并保存在本地excel中,我负责将其读入主程序,并解析;然后,根据图形界面端传入的请求筛选数据并返回供图形界面显示,同时还要计算筛选后的数据的加权平均分并返回给图形界面显示。
在最初的构想中,我认为实现过程中的难点是对数据的存储与管理,所以我在最初的实现版本中定义了一个结构体来存储成绩,结构体如下:
1 /// <summary> 2 /// <成绩>结构体,存有爬下来的成绩数据,分别包括<学年>、<学期>、<课程名称>、<课程种类>、<学分>、<绩点>、<成绩>属性 3 /// </summary> 4 public struct Grades 5 { 6 public string academicYear; //学年 7 public int semester; //学期 8 public string courseName; //课程名称 9 public CourseType courseType; //课程种类 10 public double credit; //学分 11 public double GPA; //绩点 12 public string grade; //成绩,种类有:百分制成绩和“通过”,所以定义为string 13 14 /// <summary> 15 /// 带参构造方法 16 /// </summary> 17 /// <param name="academicYear">学年</param> 18 /// <param name="semester">学期</param> 19 /// <param name="courseName">课程名称</param> 20 /// <param name="courseType">课程性质</param> 21 /// <param name="credit">学分</param> 22 /// <param name="GPA">绩点</param> 23 /// <param name="grade">成绩</param> 24 public Grades(string academicYear, int semester, string courseName, CourseType courseType, double credit, double GPA, string grade) 25 { 26 this.academicYear = academicYear; 27 this.semester = semester; 28 this.courseName = courseName; 29 this.courseType = courseType; 30 this.credit = credit; 31 this.GPA = GPA; 32 this.grade = grade; 33 } 34 }
但在后续学习从excel中读取数据的过程中发现了一个非常有用的类就是DataTable,他可以很轻松的实现表格类数据的管理与操作,甚至还能实现查询等功能。所以在团队项目的第一篇博客里先总结一下DataTable的用法吧。
DataTable我觉得可以将其看作是一个excel中的一个sheet,DataTable包含属性Columns和Rows分别表示列与行,可以认为是一个sheet中的列与行。
1)构造函数
DataTable() 不带参数初始化DataTable 类的新实例。
DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。
DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable类的新实例。
2)常用属性
CaseSensitive 指示表中的字符串比较是否区分大小写。
ChildRelations 获取此DataTable 的子关系的集合。
Columns 获取属于该表的列的集合。
Constraints 获取由该表维护的约束的集合。
DataSet 获取此表所属的DataSet。
DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图。
HasErrors 获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。
MinimumCapacity 获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。
Rows 获取属于该表的行的集合。
TableName 获取或设置DataTable 的名称。
3)常用方法
AcceptChanges() 提交自上次调用AcceptChanges() 以来对该表进行的所有更改。
BeginInit() 开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。
Clone() 克隆DataTable 的结构,包括所有DataTable 架构和约束。
select() 传入一个类SQL的语句,对DataTable中的数据进行查询,返回查询结果为一个DataRow的数组
ImportRow(DataRow row) 将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。
Merge(DataTable table) 将指定的DataTable 与当前的DataTable 合并。
NewRow() 创建与该表具有相同架构的新DataRow。
然后附上我在C#中对DataTable的使用代码:
1 //初始化DataTable 2 queryResult = new DataTable(); 3 queryResult.Columns.Add("学年", typeof(string)); 4 queryResult.Columns.Add("学期", typeof(string)); 5 queryResult.Columns.Add("课程名称", typeof(string)); 6 queryResult.Columns.Add("课程性质", typeof(string)); 7 queryResult.Columns.Add("学分", typeof(string)); 8 queryResult.Columns.Add("绩点", typeof(string)); 9 queryResult.Columns.Add("成绩", typeof(string)); 10 11 //获取查询结果 12 DataRow []tmpQureResult = gradesTable.Select(queryString);
13 foreach (DataRow dr in tmpQureResult)
14 queryResult.Rows.Add(dr.ItemArray);
在本例中主要对DataTable的使用就是查询操作,在函数中传入queryString,然后根据queryString查询并将结果返回到一个DataRow的数组,然后将其添加到返回结果。
标签:
原文地址:http://www.cnblogs.com/fanfan-blogs/p/5601627.html