基于C#的源代码类型作业检查软件设计
2018-05-08李从宏
摘要 在软件设计相关的课程教学中,学生一般是以源代码且压缩文件的方式提交作业,若是教师逐个解压、阅读文件,则是一件很繁重的工作。本文根据这一需求,使用C#編程语言实现该软件功能,采用递归调用技术实现学生提交作业情况查询功能,使用.NET下开源的压缩文件操作组件SharpCompress实现解压文件功能,使用StreamReader类的相关方法实现查阅源文件功能。
【关键词】软件设计 SharpCompress 作业查询 C#语言 StreamReader 递归调用
在如C语言程序设计、单片机与嵌入式应用等与软件设计相关的课程教学中,由于实现每个项目的代码量比较大,学生一般是以源代码且压缩包的形式提交作业,若教师将所有学生的压缩包文件解压并查阅具体内容,这是一件非常工作量很大的工作。
C#是一种简单、先进、面向对象和类型安全的编程语言,在NET平台下的一种重要的编程语言,在每多方面都有着广泛的应用,本文从项目需求出发,使用C#编程语言设计一个作业检查软件实现相关功能。
1 功能实现原理
本软件需要实现的主要功能有:
(1)统计学生提交作业的情况;
(2)可以在一个目录及所有子目录中解压所有压缩文件。
(3)查看指定的源代码文件。
1.1 统计学生提交作业情况
实现该功能的原理是:使用StreamReader类的ReadLine0方法将指定的学生名单文本中的学生姓名提取出来,使用Directory类的GetFiles0的方法列出指定目录下的所有压缩文件,按姓名顺序在文件列表中逐个查找文件名中是否包含该学生的姓名,若存在,则统计提交作业次数,否则显示没有提交作业。
统计学生提交作业情况的软件流程图如图1所示。
1.2 解压解压包文件
目前用得比较多的压缩格式有rar、zip和7z,对于不同的格式压缩包有不同的解压方法。
(1)对于针对rar格式的压缩包文件,当计算机上安装了wmrar后,程序中可以在C#程序中调用rar.的命令行程序实现解压缩功能,因为wmrar软件提供基于命令行的解压缩方式。
(2) zip是一种免费开源的压缩格式,可以使用C#库SharpZipLib解压缩zip、gzip和tar格式的文件。在使用这种方法时,先下载SharpZipLib包解压后,在项目中引用ICSharpCode. SharpZLib.dll程序集并调用相关方法即可实现zip和7z格式的文件解压功能。
(3)使用一个名为SharpCompress的c#框架集在的相关类,实现文件压缩解压功能,SharpCompress支持有:rar, 7zip,zip,tar,tzip和bzip2格式的压缩和解压。
本文使用SharpCompress中在相关类实现解压文件功能。
2 软件具体实现
2.1 统计学生提交作业情况
使用Directory类的静态方法GetFiles0得到指定目录下的所有文件,使用StreamReader类的实例方法ReadLine0从学生名单文本文件中读取学生姓名,并在压缩包文件数组中逐个查找该学生的名字是否存在,若存在,则累计提交次数,所有文件对比结束后,再统计下一个学生,以此类推,直到最后一个学生,具体代码如下:
Private void CheckHomeWork(stringstuFile,filesPath){
string studentName, str;
string[] files - Directory.GetFiles(filesPath);
StreamReader sr - new StreamReader(_stuFile,System.Text
Encoding.Default);studentName -sr.ReadLine0;
while (studentName !_null){int count -O:
foreach (string file in files){
if (file.lndexOf(studentName)!=-1){str+=file+”YrYn”;count++;))}
str - studentName+”提 交了:+count+次作业\r\n+ str;
txtContent.AppendText(str+”\r\n\r\n”);
studentName - sr.ReadLineO;str -…;}sr.Close0;}
若作业提交在多个目录或多个子目录中,则使用递归调用技术遍历指定目录及所有子目录下的文件。具体源代码如下:
void CheckAIIFiles(string stuFile, stringfilesPath){
CheckHomeWork(stLlFile,filesPafh);
string[]subDi r s=Dire cto ryGetDirectories(fi1esPatll);
fo reach(string str ln subDir s){CheckA11Files(stLlFile,str);})
2.2 解压文件
SharpCompress是NET下开源的压缩文件操作组件,可以支持的格式如RAR,ZIP,Tar,Zip等等,通过不同的类对不同类型的压缩文件进行解压操作。
2.2.1 对RAR类型的压缩包进行解压操作
SharpCompress组件使用ArchiveFactory类的静态方法Open()得到一个RAR压缩包里的所有资源,再使用IArchive类型的实例对象的WmeToDircctory()进行解压。
2.2.2 对ZIP类型的压缩包进行解压操作
SharpCompress组件使用ReaderFactory
类的静态方法Open0打开压缩包里的资源,并使用IReader类型的实例的WriteEntryToDirectory0对压缩文件进行解压。
2.2.3 对7z类型的压缩包进行解压操作
SharpCompress组件使用SevenZipArchive类open0方法获取压缩包中的资源,并使用SevenZipArchiveEntry类的实例方法WriteToDirectory0方法对压缩文件进行解压。
解压文件的程序流程图如图2所示。
2.3 阅读源代码文件
在与软件设计相关的课程教学中,主要的文件格式有由.c文件、h文件、java、.cpp、.cs文件等,这些文件属于文本文件的范畴,C#语言使用StreamReader类的实例方法ReadLine0或ReadToEnd0方法读取内容,将内容放在文本框中进行显示。具体源码如下:
Private void ReadSourceFileContent(void){
ofdOpenFile.Filter -ava filesl*j ava”;
if (ofdOpenFile.ShowDialog()==DialogResult. OK){
string fileName - ofdOpenFile.FileName;
StreamReader sr - newStreamReader(filename,System.Text
Encoding.Default);
txtContent.Text-sr.ReadToEnd();sr.Close0;}}
3 測试与总结
将文件拷贝到测试目录下,分别做统计学生交作业情况、解压文件及阅读源代码文件这三个方面的测试。
3.1 统计学生提交作业情况测试
统计学生提交作业情况测试模块主要是根据压缩包文件名中是否包含学生姓名,软件运行结果如图3所示。
3.2 解压文件功能测试
解压文件功能测试模块主要使用SharpCompress压缩文件操作组件中的相关类对不同类型文件进行解压操作,可以实现单个文件解压、多个文件解压及全部文件解压三种操作,测试结果如图4所示。
3.3 阅读源代码文件功能测试
阅读源代码文件功能测试模块使用StreamReader类的相关方法读文件中的内容,本模块可以查看.c文件、h文件、j ava、cpp、.cs文件等与文本文件相关的源代码文件,测试结果如图5所示。
从整体测试结果来看,本软件可以将教师从繁重的作业批阅工作中解脱出来,提高了办公效率。
参考文献
[1]谭浩强.C程序设计第五版[M].清华大学出版社,2017 (08).
[2] SharpCompres s-a fully na tiveC# library for RAR, 72ip, Zip,Tar, GZip, B2ip2.
Avaliableat https: //archive. codeplex.com/?p-sharpcompres s.
[3]李从宏.C#程序设计及应用教程[M].北京:机械工业出版社,2017.
[4]庞燕芳,基于C#.NET的学校车辆门禁系统的设计[J].电子技术与软件工程,2008 (33):125-126.
[5]杨利娟,朱杉杉,基于C#的高校排课系统[J].电子技术与软件工程,电脑编程技术与维,2018,10: 23-27.
[6]郭博,舒娟,史晓凤等,基于C#的学生成绩管理系统的设计与实现[J].陇东学院学报,2018,29(05);13-15.