C#语言开发一个《学生点名》客户端应用程序

我朋友的朋友是个老师,昨天我朋友让我帮做一个《学生点名》程序给他,于是今天就抽个空把这个小应用给写了,现在分享下给大家。

首先我们需要明确这个程序需要具备什么功能,我给他设定的功能如下

1.可以维护学生信息(目前只能维护姓名,用于点名而已没必要做成HR系统一样)。

2.在学生信息中随机点名。

针对第一个需求,我们需要把学生信息保存下来,由于只是个小应用,我们可以做成单机版的不需要连数据库,你让一个教语文的老师电脑装个数据库也不现实把?

所以保存数据我采用的是保存到XML文件里面。

数据维护操作需要简洁所以我们做成如下图操作

1536017692(1).png

注:添加多名学生请以英文输入法条件下“,”分隔,例:学生甲,学生乙

image

保存操作XML 代码如下

public static class XMLHelper

{

///

/// 写入XML

///

/// 学生姓名

public static void saveToXml(string username)

{

string path = Application.StartupPath + "\StudentName.xml";

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(path);

XmlNode node;

node = xmlDoc.SelectSingleNode("/config/username");

if (node != null)

{

XmlElement n = xmlDoc.CreateElement("username");

n.InnerText = username;

xmlDoc.SelectSingleNode("config").AppendChild(n);

}

else

{

node.InnerText = username;

}

xmlDoc.Save(path);

}

public static List ReadXml()

{

//list

List stlist = new List();

string path = Application.StartupPath + "\StudentName.xml";

//使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.

XmlDocument doc = new XmlDocument();

XmlReaderSettings settings = new XmlReaderSettings();

settings.IgnoreComments = true;//忽略文档里面的注释

using (XmlReader reader = XmlReader.Create(path, settings))

{

doc.Load(reader);

XmlNode xn = doc.SelectSingleNode("config");

// 得到根节点的所有子节点

XmlNodeList xnl = xn.ChildNodes;

foreach (XmlNode xn1 in xnl)

{

Student st1 = new Student();

// 将节点转换为元素,便于得到节点的属性值

XmlElement xe = (XmlElement)xn1;

// 得到st节点的所有子节点

XmlNodeList xnl0 = xe.ChildNodes;

if (xnl0.Count!=0)

{

st1.StudentName = xnl0.Item(0).InnerText;

stlist.Add(st1);

}

}

}

return stlist;

}

}

在学生信息中随机点名功能实现:

image

点击开始,名字跳到再次点击随机一个名字

代码实现如下:

private void button1_Click(object sender, EventArgs e)

{

try

{

if (button1.Text == "暂停")

{

flag = false;

button1.Text = "开始";

}

else

{

flag = true;

button1.Text = "暂停";

}

// int i = 0;

List person = XMLHelper.ReadXml();

string[] strName = new string[person.Count];

foreach (var s in person)

{

string ss = s.StudentName;

}

for (int i = 0; i < person.Count; i++)

{

strName[i] = person[i].StudentName;

}

AsyncMethod(strName);

}

catch (Exception ex)

{

MessageBox.Show("点名出错:"+ex.ToString());

}

}

public string GetRandomNumber(string[] a)

{

Random rnd = new Random();

int index = rnd.Next(a.Length);

return a[index];

}

public async void AsyncMethod(string[] strName)

{

Console.WriteLine("start async");

var result = await MyMethod(strName);

Console.WriteLine("end async");

}

public async Task MyMethod(string[] strName)

{

while (flag)

{

label1.Text = GetRandomNumber(strName);

await Task.Delay(10); //模拟耗时操作

}

return 0;

}

这里用到了多线程操作,这样就可以实现数据循环和按钮可以重用。

到此,一个小应用就完成了,后续我们可以追加的功能如下

1.界面添加几个勾选框,做个随机规则制定

1.1 选择性别,比如我只想让男同学回答问题

1.2 点过名的是否再次点名,就是再次随机的时候是否排除已点过名的同学

如果大家有需要上述完整代码可以关注我然后私信发信息给我,看到后我会把完整代码发给大家

你可能感兴趣的:(C#语言开发一个《学生点名》客户端应用程序)