admin 管理员组

文章数量: 1184232


2024年3月8日发(作者:如何查看cpu使用率)

教学点名神器——随机点名器3.0

随机点名器功能又一大提升,而且之前若干bug均已修复。

修复内容:

1.当默认开启的txt文本文件被删除或的文件名被更改或由于某种未知的原因不能访问时,程序不会报错,而是将一些提示信息以学生名导入。

例如:

程序默认访问“电科一班.txt”:

如果在可执行文件的路径下有 “电科一班.txt”文件,则运行正常。

如果在可执行文件的路径下没有找到 “电科一班.txt”文件,则运行提示信息。

在这种非正常情况下,如果仍然点击正式记录,则弹出提示帮助信息窗口。

这样,用户在看到提示信息后,会自行修复该问题。

修复2:

若读取的文件中存在空行,则程序在读取文件内容的时候会自动删除空行。

现在,我把先前文件名“电科一班”修改为“电科一班.txt”,然后在文件内容中加两个空行,如下图所示:

程序在运行的时候再也不会出现空姓名。

程序运行一圈后,会给出提示信息。

功能提升:

1.可以选择班级,班级内容自定义。

现在,我又新建了一个班级文件“1班.txt”,文件内容如下:

现在可以选择班级,我就把“1班.txt”选进来。

一般,“选择班级...”,在程序打开后只会用一次,点击“打开”后,“选择班级...”按钮被隐藏。

2.增加出勤记录,答问记录功能。

若没有点击“正式记录”按钮,抽取信息不会被记录,也没有弹出出勤相关的选择按钮。功能与旧版一样。

一旦点击正式记录,由于这个记录涉及到学生的平时成绩,因此非常重要,所以弹出是否确定选择对话框。

点击确定后,”正式记录“按钮被隐藏。

再次抽取后,会弹出“缺勤”和“差评”两个选择按钮,并自动在该班级目录下新建一个“班级名+点名记录清单”文本文件。

文本内容自动记录第一次被点到的学生,并创建时间,原创者,班级信息相关信息。如下所示:

若点击差评或缺勤,记录会自动加一,而且,一旦选择之后,该两个按钮即被隐藏,防止误操作。

当然你也可以不行,直接抽下一个人,但选择按钮照样被隐藏,同样该学生的点名信息也会被记录。

重复抽取后所有记录都会自动保存到该文件。

如果点击确定,或关闭程序再次打开程序选择该班级,同样执行上述步骤,则记录会在原来的基础上累加。

经过一系列操作后得到的记录表如下:

当然,如果你选择其他班级,照样会执行相应的操作。

现在,举个典型的例子,我在桌面上新建一个文本文件,内容如下:

选择该文件,执行同样的操作,立即生成“2班点名记录清单.txt”文件。

重复点名后,实时记录的点名内容:

C#部分源程序:(本软件完全由个人编写,未经本人允许,请勿用于商业目的)using System;

using c;

using entModel;

using ;

using g;

using ;

using ;

using ;

using ;

using ;

using g2D;

namespace 随机抽样

{

public partial class Form1 : Form

{

static int step = 0;

static bool Startload = false;

static string[] pathstudent =

{ationBase+"//","电科一班.txt"};

static string[] name = getName();

static int[] ppp = GetRandomArray();

public Form1()

{

InitializeComponent();

Timer t = new Timer();

al =2000;

+= new EventHandler(changeBackground);

();

Timer t2 = new Timer();

al = 100;

+= new EventHandler(changestudent);

();

}

static int iiii = 0;

void changestudent(object sender, EventArgs e)

{

if (name == null)

{

return;

}

if (=="停 止 抽 取")

{

iiii++;

=name[ppp[(step+iiii)%]];

int[] q = GetRandomArray(3);

int[] colorval = { 0, 100, new Random().Next(100) };

lor = gb(255, colorval[q[0]],

colorval[q[2]]);

}

}

void changeBackground(object sender, EventArgs e)

{

//int i = /15;

switch (GetRandomArray(18)[0])

{

case 0: BackgroundImage =[0]; break;

case 1: BackgroundImage = [1]; break;

case 2: BackgroundImage = [2]; break;

case 3: BackgroundImage = [3]; break;

case 4: BackgroundImage = [4]; break;

case 5: BackgroundImage = [5]; break;

case 6: BackgroundImage = [6]; break;

case 7: BackgroundImage = [7]; break;

case 8: BackgroundImage = [8]; break;

case 9: BackgroundImage = [9]; break;

case 10: BackgroundImage = [10]; break;

case 11: BackgroundImage = [11]; break;

case 12: BackgroundImage = [12]; break;

case 13: BackgroundImage = [13]; break;

case 14: BackgroundImage = [14]; break;

colorval[q[1]],

case 15: BackgroundImage = [15]; break;

case 16: BackgroundImage = [16]; break;

case 17: BackgroundImage = [17]; break;

default: break;

}

}

private void startrand_Click(object sender, EventArgs e)//开始暂停按钮

{

e = false;

e = false;

//获取对比度大的随机深彩色

int[] q = GetRandomArray(3);

int[] colorval = { 170, 255, new Random().Next(80)+170 };

verBackColor = gb(255, colorval[q[0]],

colorval[q[1]], colorval[q[2]]);//随机设置鼠标悬停在按钮上的颜色

ownBackColor = gb(255, colorval[q[0]] - 50,

colorval[q[1]] - 50, colorval[q[2]] - 50);//随机设置鼠标按下按钮后的颜色

try

{

if (=="开 始 抽 取")//判断字符串检测鼠标是否按下

{

= "停 止 抽 取";//如果按下,将字符串的颜色修改

}

else

{

String[] abcd={""};

StreamWriter sw;

step=step+1;

= "开 始 抽 取";

= name[ppp[step - 1]];

if (Startload==true)

{

try

{

abcd = lLines(pathstudent[0] + pathstudent[1].Replace(".txt",

"点名记录清单.txt"));//编码格式

}

catch

{

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

(pathstudent[1].Replace(".txt", "") + "点名记录清单" + "创建日期:" + ng("yyyy" + "年" + "MM" + "月" + "dd" + "日") + " 随机点名器原创者:陈鹏" + "rn");

("学生姓名(学号)".PadRight(30 - 8, ' ') + "被点次数".PadRight(20 - 4, ' ') +

"缺勤次数".PadRight(20 - 4, ' ') + "老师不满意次数r");

();

}

abcd = l(abcd, line => !OrEmpty(line)); // 去除是null或是""的string

string n;

n = findn(abcd, );

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

if (n == "1")

{

("n" + ht(30, ' ') + ht(20, ' ')

+ "0".PadRight(20, ' ') + "0".PadRight(5, ' ') + "r");//t(100," ")这句话的意思是如果string1的长度不够100位,则在前面加空格,知道补够100位。

}

else

{

("n" + ht(30, ' ') + n + "r");

}

();

//();

e = true;

e = true;

}

}

}

catch

{

= "木有了咦(;′⌒`)";

("人已经抽完了,重新开始吧?");

ppp = GetRandomArray();//重新排序

step = 0;

iiii = 0;

return;

}

}

string findn(string[] f,string w)

{

int n = 1;

string a;

for (int i = 0; i < ; i++)//查找文件夹中是否存在该学生的信息

{

try

{

a=f[i].Substring(0,);//从第m个位置,截取n个长度

if (a == w)//如果找到了学生的信息,刷新学生的得分

{

a = f[i].Substring(25, 10).Replace(" ", "");

n=32(a);

StreamWriter sw = new StreamWriter(pathstudent[0] +

pathstudent[1].Replace(".txt", "点名记录清单.txt"), false);

for (int j = 0; j < ; j++)

{

if (i != j)

{

ine(f[j]);

}

}

//();

();

//e();

return (n + 1).ToString() .PadRight(20,' ')+ f[i].Substring(50,25);

}

}

catch

{

continue;

}

}

return ng();

}

static int[] GetRandomArray(int length)//获取一个随机数组,元素长度为1~length,值包含1~length

{

double[] rnds = new double[length];

int[] num = new int[length];

int[] newNum = new int[];

for (int i = 0; i < length; i++)

{

num[i] = i;

}

List numCopy = new List();

foreach (int i in num)

{

(i);

}

Random random = new Random();

for (int i = 0; i < ; i++)

{

int selectedIndex = ( - i);

newNum[i] = numCopy[selectedIndex];

At(selectedIndex);

}

return newNum;

}

static string[] getName()//程序打开后,获取姓名列表

{

//string str = pPath;

try

{

String[] lines = lLines(pathstudent[0] + pathstudent[1],

t);//读取可执行文件路径下的txt文件

lines = l(lines, line => !OrEmpty(line)); // 去除是null或是""的string

return lines;

}

catch//如果路径文件搜索失败,则赋值如下语句。

{

string[] lines = { "貌似没找到你想要的文件哦!","2015年5月", "湖北工业大学", "随机点名器", "陈鹏", "▽D=ρ", "▽×D=0", "π=3.979323846264338328","电气学院","电科一班"};

pathstudent=null;

return lines;

}

}

private void disinf_TextChanged(object sender, EventArgs e)

{

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void btnchooseclass_Click(object sender, EventArgs e)// 如果点击了选择班级按钮

{

e = false;

e = false;

OpenFileDialog dlg = new OpenFileDialog();//就打开一个对话框,让你选择班级文件

if (alog() == )//如果选好了文件,并点击了确定按钮

{

if (lLines(@me, t).Length!=0)//如果文件内容不为空

{

name = lLines(@me, t);//逐行读入所有的内容,更新变量name;

name= l( name, line => !OrEmpty(line)); // 去除是null或是""的string

ppp = GetRandomArray();//重新排序

step = 0;//初始化点名次数

e = false;//一般该按钮只会用一次,故使用后将其隐藏,避免占用空间。

pathstudent[1] = leName;

pathstudent[0] = (-pathstudent[1].Length);

return;

}

}

else

{

e = true;

e = true;

}

}

private void button1_Click(object sender, EventArgs e)

{

if (Startload==true)

{

String[] abcd = { "" };

StreamWriter sw;

e = false;

e = false;

try

{

abcd = lLines(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));//编码格式

}

catch

{

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

(pathstudent[1].Replace(".txt", "") + "点名记录清单" + "创建日期:" +

ng("yyyy" + "年" + "MM" + "月" + "dd" + "日") + " 随机点名器原创者:陈鹏" + "rn");

("学生姓名(学号)".PadRight(30 - 8, ' ') + "被点次数".PadRight(20 - 4, ' ') + "缺勤次数".PadRight(20 - 4, ' ') + "老师不满意次数r");

();

}

abcd = l(abcd, line => !OrEmpty(line)); // 去除是null或是""的string

string n;

n = findqueqing(abcd, );

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

if (n == "1")

{

("n" + ht(30, ' ') + ht(20, ' ') +

"1".PadRight(20, ' ') + "0".PadRight(5, ' ') + "r");//t(100," ")这句话的意思是如果string1的长度不够100位,则在前面加空格,知道补够100位。

}

else

{

("n" + n + "r");

}

();

}

}

string findqueqing(string[] f, string w)

{

int n = 1;

string a;

for (int i = 0; i < ; i++)//查找文件夹中是否存在该学生的信息

{

try

{

a = f[i].Substring(0, );//从第m个位置,截取n个长度

if (a == w)//如果找到了学生的信息,刷新学生的得分

{

a = f[i].Substring(45, 10).Replace(" ", "");

n = 32(a);

StreamWriter sw = new StreamWriter(pathstudent[0]

pathstudent[1].Replace(".txt", "点名记录清单.txt"), false);

for (int j = 0; j < ; j++)

{

if (i != j)

{

ine(f[j]);

}

}

//();

();

//e();

return f[i].Substring(0,50)+(n + 1).ToString().PadRight(20, ' ')

f[i].Substring(70, 5);

+

+

}

}

catch

{

continue;

}

}

return ng();

}

private void button2_Click(object sender, EventArgs e)

{

if (Startload==true)

{

String[] abcd = { "" };

StreamWriter sw;

e = false;

e = false;

try

{

abcd = lLines(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));//编码格式

}

catch

{

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

(pathstudent[1].Replace(".txt", "") + "点名记录清单" + "创建日期:" +

ng("yyyy" + "年" + "MM" + "月" + "dd" + "日") + " 随机点名器原创者:陈鹏" + "rn");

("学生姓名(学号)".PadRight(30 - 8, ' ') + "被点次数".PadRight(20 - 4, ' ') + "缺勤次数".PadRight(20 - 4, ' ') + "老师不满意次数r");

();

}

abcd = l(abcd, line => !OrEmpty(line)); // 去除是null或是""的string

string n;

n = nchaping(abcd, );

sw = Text(pathstudent[0] + pathstudent[1].Replace(".txt", "点名记录清单.txt"));

if (n == "1")

{

("n" + ht(30, ' ') + ht(20, ' ') +

"0".PadRight(20, ' ') + "1".PadRight(5, ' ') + "r");//t(100," ")这句话的意思是如果string1的长度不够100位,则在前面加空格,知道补够100位。

}

else

{

("n" + n + "r");

}

();

}

}

string nchaping(string[] f, string w)

{

int n = 1;

string a;

for (int i = 0; i < ; i++)//查找文件夹中是否存在该学生的信息

{

try

{

a = f[i].Substring(0, );//从第m个位置,截取n个长度

if (a == w)//如果找到了学生的信息,刷新学生的得分

{

a = f[i].Substring(65, 10).Replace(" ", "");

n = 32(a);

StreamWriter sw = new StreamWriter(pathstudent[0]

pathstudent[1].Replace(".txt", "点名记录清单.txt"), false);

for (int j = 0; j < ; j++)

{

if (i != j)

{

ine(f[j]);

}

}

//();

();

//e();

return f[i].Substring(0, 70) + (n + 1).ToString().PadRight(5, ' ');

}

}

catch

{

continue;

}

}

return ng();

}

private void START_Click(object sender, EventArgs e)

+

{

DialogResult fan = ("确定开始记录学生的点名信息吗?确定之后,将重新开始正式点名!否则,所有的点名信息都不会被记录!", "温馨提示", , sk);

if (fan==)

{

if(pathstudent !=null)

{

Startload = true;

e = false;

ppp = GetRandomArray();//重新排序

step = 0;//初始化点名次数

}

else

{

("对不起!默认打开的文件不知神马原因已经找不到了,请您重新选择班级,或者在可执行文件目录下新建一个"电科一班.txt"文件!");

}

}

else

{

Startload = false;

}

}

}

}

可执行文件下载链接以及下载密码

链接:/s/1gdH6QL9 密码:f1p2


本文标签: 记录 学生 文件 信息 点名