教学点名神器随机点名器.docx
《教学点名神器随机点名器.docx》由会员分享,可在线阅读,更多相关《教学点名神器随机点名器.docx(28页珍藏版)》请在冰豆网上搜索。
![教学点名神器随机点名器.docx](https://file1.bdocx.com/fileroot1/2023-1/14/0542527e-8ebc-4732-9444-eb901d4ef92d/0542527e-8ebc-4732-9444-eb901d4ef92d1.gif)
教学点名神器随机点名器
教学点名神器——随机点名器3.0
随机点名器功能又一大提升,而且之前若干bug均已修复。
修复内容:
1.当默认开启的txt文本文件被删除或的文件名被更改或由于某种未知的原因不能访问时,程序不会报错,而是将一些提示信息以学生名导入。
例如:
程序默认访问“电科一班.txt”:
如果在可执行文件的路径下有“电科一班.txt”文件,则运行正常。
如果在可执行文件的路径下没有找到“电科一班.txt”文件,则运行提示信息。
在这种非正常情况下,如果仍然点击正式记录,则弹出提示帮助信息窗口。
这样,用户在看到提示信息后,会自行修复该问题。
修复2:
若读取的文件中存在空行,则程序在读取文件内容的时候会自动删除空行。
现在,我把先前文件名“电科一班121314.txt”修改为“电科一班.txt”,然后在文件内容中加两个空行,如下图所示:
程序在运行的时候再也不会出现空姓名。
程序运行一圈后,会给出提示信息。
功能提升:
1.可以选择班级,班级内容自定义。
现在,我又新建了一个班级文件“1班.txt”,文件内容如下:
现在可以选择班级,我就把“1班.txt”选进来。
一般,“选择班级...”,在程序打开后只会用一次,点击“打开”后,“选择班级...”按钮被隐藏。
2.增加出勤记录,答问记录功能。
若没有点击“正式记录”按钮,抽取信息不会被记录,也没有弹出出勤相关的选择按钮。
功能与旧版一样。
一旦点击正式记录,由于这个记录涉及到学生的平时成绩,因此非常重要,所以弹出是否确定选择对话框。
点击确定后,”正式记录“按钮被隐藏。
再次抽取后,会弹出“缺勤”和“差评”两个选择按钮,并自动在该班级目录下新建一个“班级名+点名记录清单”文本文件。
文本内容自动记录第一次被点到的学生,并创建时间,原创者,班级信息相关信息。
如下所示:
若点击差评或缺勤,记录会自动加一,而且,一旦选择之后,该两个按钮即被隐藏,防止误操作。
当然你也可以不行,直接抽下一个人,但选择按钮照样被隐藏,同样该学生的点名信息也会被记录。
重复抽取后所有记录都会自动保存到该文件。
如果点击确定,或关闭程序再次打开程序选择该班级,同样执行上述步骤,则记录会在原来的基础上累加。
经过一系列操作后得到的记录表如下:
当然,如果你选择其他班级,照样会执行相应的操作。
现在,举个典型的例子,我在桌面上新建一个文本文件,内容如下:
选择该文件,执行同样的操作,立即生成“2班点名记录清单.txt”文件。
重复点名后,实时记录的点名内容:
C#部分源程序:
(本软件完全由个人编写,未经本人允许,请勿用于商业目的)usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.Drawing.Drawing2D;
namespace随机抽样
{
publicpartialclassForm1:
Form
{
staticintstep=0;
staticboolStartload=false;
staticstring[]pathstudent={System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase+"//","电科一班.txt"};
staticstring[]name=getName();
staticint[]ppp=GetRandomArray(name.Length);
publicForm1()
{
InitializeComponent();
Timert=newTimer();
t.Interval=2000;
t.Tick+=newEventHandler(changeBackground);
t.Start();
Timert2=newTimer();
t2.Interval=100;
t2.Tick+=newEventHandler(changestudent);
t2.Start();
}
staticintiiii=0;
voidchangestudent(objectsender,EventArgse)
{
if(name==null)
{
return;
}
if(this.startrand.Text=="停止抽取")
{
iiii++;
this.disinf.Text=name[ppp[(step+iiii)%name.Length]];
int[]q=GetRandomArray(3);
int[]colorval={0,100,newRandom().Next(100)};
this.disinf.ForeColor=Color.FromArgb(255,colorval[q[0]],colorval[q[1]],colorval[q[2]]);
}
}
voidchangeBackground(objectsender,EventArgse)
{
//inti=DateTime.Now.Second/15;
switch(GetRandomArray(18)[0])
{
case0:
BackgroundImage=imageList1.Images[0];break;
case1:
BackgroundImage=imageList1.Images[1];break;
case2:
BackgroundImage=imageList1.Images[2];break;
case3:
BackgroundImage=imageList1.Images[3];break;
case4:
BackgroundImage=imageList1.Images[4];break;
case5:
BackgroundImage=imageList1.Images[5];break;
case6:
BackgroundImage=imageList1.Images[6];break;
case7:
BackgroundImage=imageList1.Images[7];break;
case8:
BackgroundImage=imageList1.Images[8];break;
case9:
BackgroundImage=imageList1.Images[9];break;
case10:
BackgroundImage=imageList1.Images[10];break;
case11:
BackgroundImage=imageList1.Images[11];break;
case12:
BackgroundImage=imageList1.Images[12];break;
case13:
BackgroundImage=imageList1.Images[13];break;
case14:
BackgroundImage=imageList1.Images[14];break;
case15:
BackgroundImage=imageList1.Images[15];break;
case16:
BackgroundImage=imageList1.Images[16];break;
case17:
BackgroundImage=imageList1.Images[17];break;
default:
break;
}
}
privatevoidstartrand_Click(objectsender,EventArgse)//开始暂停按钮
{
this.button1.Visible=false;
this.button2.Visible=false;
//获取对比度大的随机深彩色
int[]q=GetRandomArray(3);
int[]colorval={170,255,newRandom().Next(80)+170};
startrand.FlatAppearance.MouseOverBackColor=Color.FromArgb(255,colorval[q[0]],colorval[q[1]],colorval[q[2]]);//随机设置鼠标悬停在按钮上的颜色
startrand.FlatAppearance.MouseDownBackColor=Color.FromArgb(255,colorval[q[0]]-50,colorval[q[1]]-50,colorval[q[2]]-50);//随机设置鼠标按下按钮后的颜色
try
{
if(this.startrand.Text=="开始抽取")//判断字符串检测鼠标是否按下
{
this.startrand.Text="停止抽取";//如果按下,将字符串的颜色修改
}
else
{
String[]abcd={""};
StreamWritersw;
step=step+1;
this.startrand.Text="开始抽取";
this.disinf.Text=name[ppp[step-1]];
if(Startload==true)
{
try
{
abcd=File.ReadAllLines(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));//编码格式
}
catch
{
sw=File.AppendText(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));
sw.Write(pathstudent[1].Replace(".txt","")+"点名记录清单"+"创建日期:
"+DateTime.Today.ToString("yyyy"+"年"+"MM"+"月"+"dd"+"日")+"随机点名器原创者:
陈鹏"+"\r\n");
sw.Write("学生姓名(学号)".PadRight(30-8,'')+"被点次数".PadRight(20-4,'')+"缺勤次数".PadRight(20-4,'')+"老师不满意次数\r");
sw.Close();
}
abcd=Array.FindAll(abcd,line=>!
string.IsNullOrEmpty(line)); //去除是null或是""的string
stringn;
n=findn(abcd,this.disinf.Text);
sw=File.AppendText(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));
if(n=="1")
{
sw.Write("\n"+this.disinf.Text.PadRight(30,'')+n.PadRight(20,'')+"0".PadRight(20,'')+"0".PadRight(5,'')+"\r");//string1.PadLeft(100,"")这句话的意思是如果string1的长度不够100位,则在前面加空格,知道补够100位。
}
else
{
sw.Write("\n"+this.disinf.Text.PadRight(30,'')+n+"\r");
}
sw.Close();
//sw.Flush();
this.button1.Visible=true;
this.button2.Visible=true;
}
}
}
catch
{
this.disinf.Text="木有了咦(;′⌒`)";
MessageBox.Show("人已经抽完了,重新开始吧?
");
ppp=GetRandomArray(name.Length);//重新排序
step=0;
iiii=0;
return;
}
}
stringfindn(string[]f,stringw)
{
intn=1;
stringa;
for(inti=0;i{
try
{
a=f[i].Substring(0,w.Length);//从第m个位置,截取n个长度
if(a==w)//如果找到了学生的信息,刷新学生的得分
{
a=f[i].Substring(25,10).Replace("","");
n=Convert.ToInt32(a);
StreamWritersw=newStreamWriter(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"),false);
for(intj=0;j{
if(i!
=j)
{
sw.WriteLine(f[j]);
}
}
//sw.Flush();
sw.Close();
//sw.Dispose();
return(n+1).ToString().PadRight(20,'')+f[i].Substring(50,25);
}
}
catch
{
continue;
}
}
returnn.ToString();
}
staticint[]GetRandomArray(intlength)//获取一个随机数组,元素长度为1~length,值包含1~length
{
double[]rnds=newdouble[length];
int[]num=newint[length];
int[]newNum=newint[num.Length];
for(inti=0;i{
num[i]=i;
}
ListnumCopy=newList();
foreach(intiinnum)
{
numCopy.Add(i);
}
Randomrandom=newRandom();
for(inti=0;i{
intselectedIndex=random.Next(num.Length-i);
newNum[i]=numCopy[selectedIndex];
numCopy.RemoveAt(selectedIndex);
}
returnnewNum;
}
staticstring[]getName()//程序打开后,获取姓名列表
{
//stringstr=System.Windows.Forms.Application.StartupPath;
try
{
String[]lines=File.ReadAllLines(pathstudent[0]+pathstudent[1],Encoding.Default);//读取可执行文件路径下的txt文件
lines=Array.FindAll(lines,line=>!
string.IsNullOrEmpty(line)); //去除是null或是""的string
returnlines;
}
catch//如果路径文件搜索失败,则赋值如下语句。
{
string[]lines={"貌似没找到你想要的文件哦!
","2015年5月","湖北工业大学","随机点名器","陈鹏","▽D=ρ","▽×D=0","π=3.14159265358979323846264338328","电气学院","电科一班"};
pathstudent=null;
returnlines;
}
}
privatevoiddisinf_TextChanged(objectsender,EventArgse)
{
}
privatevoidForm1_Load(objectsender,EventArgse)
{
}
privatevoidbtnchooseclass_Click(objectsender,EventArgse)//如果点击了选择班级按钮
{
this.button1.Visible=false;
this.button2.Visible=false;
OpenFileDialogdlg=newOpenFileDialog();//就打开一个对话框,让你选择班级文件
if(dlg.ShowDialog()==System.Windows.Forms.DialogResult.OK)//如果选好了文件,并点击了确定按钮
{
if(File.ReadAllLines(@dlg.FileName,Encoding.Default).Length!
=0)//如果文件内容不为空
{
name=File.ReadAllLines(@dlg.FileName,Encoding.Default);//逐行读入所有的内容,更新变量name;
name=Array.FindAll(name,line=>!
string.IsNullOrEmpty(line)); //去除是null或是""的string
ppp=GetRandomArray(name.Length);//重新排序
step=0;//初始化点名次数
btnchooseclass.Visible=false;//一般该按钮只会用一次,故使用后将其隐藏,避免占用空间。
pathstudent[1]=dlg.SafeFileName;
pathstudent[0]=dlg.FileName.Remove(dlg.FileName.Length-pathstudent[1].Length);
return;
}
}
else
{
this.button1.Visible=true;
this.button2.Visible=true;
}
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(Startload==true)
{
String[]abcd={""};
StreamWritersw;
this.button1.Visible=false;
this.button2.Visible=false;
try
{
abcd=File.ReadAllLines(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));//编码格式
}
catch
{
sw=File.AppendText(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));
sw.Write(pathstudent[1].Replace(".txt","")+"点名记录清单"+"创建日期:
"+DateTime.Today.ToString("yyyy"+"年"+"MM"+"月"+"dd"+"日")+"随机点名器原创者:
陈鹏"+"\r\n");
sw.Write("学生姓名(学号)".PadRight(30-8,'')+"被点次数".PadRight(20-4,'')+"缺勤次数".PadRight(20-4,'')+"老师不满意次数\r");
sw.Close();
}
abcd=Array.FindAll(abcd,line=>!
string.IsNullOrEmpty(line)); //去除是null或是""的string
stringn;
n=findqueqing(abcd,this.disinf.Text);
sw=File.AppendText(pathstudent[0]+pathstudent[1].Replace(".txt","点名记录清单.txt"));
if(n=="1")
{
sw.Write("\n"+this.disinf.Text.PadRight(30,'')+n.PadRight(20,'')+"1".PadRight(20,'')+"0".PadRight(5,'')+"\r");//string1.PadLeft(100,"")这句话的意思是如果string1的长度不够100位,则在前面加空格,知道补够100位。
}
else
{
sw.Write("\n"+n+"\r");
}
sw.Close();
}
}
stringfindqueqing(string[]f,stringw)
{
intn=1;
stringa;
for(inti=0;i