1.最终成果
1.1课程设计的目的
把软件工程中规范的软件开发方法应用到本次教师认识学生软件“猜猜看”的开发过程中,以经济地开发出高质量的软件并有效的维护它。
1.2课程设计的任务
根据软件开发工程的过程,分析设计一个教师认识学生软件,即“猜猜看”。
1.3课程设计采取的基本原理和主要技术方法
本系统专门针对教师如何快速认识学生而开发的一个功能齐全、操作简单的猜猜看软件,适合教学人员使用。本系统实现以下基本功能;教师可以将自己学生的照片放入到该软件连接的指定路径的文件夹中,便于教师通过该软件迅速认识学生。
1.4软件展示
猜猜看运行界面,如下图所示:
2.猜猜看游戏开发过程介绍
2.1问题定义
2.1.1开发该工程的原因
由于现今大学学生纵多,而相对老师较少,每个老师教的学生数目多。一学期下来老师不能够认识所有学生,这样不便于师生之间互动,以及教师因材施教。从而设计了这样一个软件,便于教师迅速认识学生姓名,为教学过程中师生之间良好的互动提供了便利。
2.2.2该工程的基本目标
开发猜猜看软件,以供教学人员迅速识别学生,方便根据不同的学生因材施教,而且也便于课堂师生互动。大大提高了老师的教学效率,从根本上讲是有利于老师教学和学生学习的。
2.1.3开发过程
开发时遇到了好多问题,首先第一步要做一个什么样的界面出来比较合适。到后来,如何实现随机显示图片等等。以及怎样计算每张学生识别正确的概率,然后如何根据概率控制图片出现的次数。
1>、界面设计
starGame—游戏按钮,主要功能:开始游戏
pictureBox1—随机显示一张图片。
radioButton1、radioButton2、radioButton3,显示学生姓名,并供选择使用,单选框。
label1—显示所选择答案是否正确。
correctResult—显示正确答案按钮
continueGame—继续游戏按钮
exitGame—退出游戏按钮
label2—该同学已显示次数
label4—该同学认对的概率
label3—显示该同学照片显示的次数
label5—显示该同学被认对的概率
2>、代码编写
在核心代码解读里详细介绍。
3>、猜猜看 运行
如图为软件运行的截图,
可以点击游戏按钮开始游戏;
然后选择人名,通过单选框radioButton来选择学生姓名,只能选择一个学生姓名;
如果选择错误,label1显示错误,可点击查看答案来查看正确答案,也可点击继续按钮继续游戏,若猜对,则继续游戏,无论对错,都可退出游戏。
3.开发时的学习与收获
通过这次编写软件,我意识到一个软件的开发,是要从计划->分析->设计->实现,等
这些阶段的。
首先,我们要计划开发一个什么样的软件,该软件具有哪些功能,根据他的功能来设
计一些模块,然后让这些模块发挥出其应具有的功能。
根据功能编写代码。调试代码,根据软件最后实现后表现的功能,调试代码,使其功
能得到完善。
收获:软件的编写是一个缜密的过程,代码只是实现功能的部分,而整个软件的开发过程
中:分析、设计等阶段是必不可少的,只有这些过程准确无误的设计了,开发过程才不会
误入歧途,是软件的开发更加高效,质量更好。
4.核心代码的解读
以下代码功能是描述了“游戏”按钮如何得到随机图片,并进行下一步操作:选择。
private void starGame_Click(object sender, EventArgs e)
{
randomStudent(); // 得到随机照片
cleanRadio123(); // 清空radiobutton选项
getThreeChecked(); // 得到三个选项的值
continueGame.Visible = false; // 隐藏继续游戏按钮
correctResult.Visible = false; // 隐藏查看正确答案按钮
this.label1.Text = "请选择答案";
re_elect = false; // 默认没有重选
label5.Text = "选择答案查看";
}
以下代码块描述了软件是如何随机显示学生照片的,其原则如下:
1、随机显示 一张相片 与 若干个名字(如3个),选择正确的名字。
2、记录老师对每个学生的认识概率P,并根据认识概率,确定“猜猜看”游戏中学生出现的频率。
认识概率P =识别的准确次数/(识别的准确次数+识别的错误次数)
原则1:认识概率 高的学生,在猜猜看游戏中出现的频率相对低一些。
原则2:认识概率 低的学生,在猜猜看游戏中出现的频率相对高一些。
原则3:认识概率 100%的学生,也有出现的可能性。
原则4:认识概率 0%的学生,也不必每次都出现。
// 随机显示照片
void randomStudent()
{
bool boo = new bool();
boo = true;
Random ran = new Random();
t = ran.Next(56);
while (t == m || t == n)
{
t = ran.Next(56);
}
//imageList1.ImageSize = new Size(120, 120);
// 判断学生认识率是否大于 60%
while (boo)
{
if (percent[t] >= 0.6)
{
// 学生认识率高于99%时,出现的概率为原来的1/10
if (percent[t] >= 0.99)
{
m5++;
if (tp[t] == 9)
{
pictureBox1.Image = imageList1.Images[t];
sumStudentPhoto[t]++;
this.label3.Text = sumStudentPhoto[t].ToString();
tp[t] = 0;
boo = false;
}
else
{
tp[t]++;
t = ran.Next(56);
}
}
// 学生认识率在90%到99%之间,出现的概率为原来的1/5
if (percent[t] >= 0.9 && percent[t] < 0.99)
{
m4++;
if (tp[t] == 4)
{
pictureBox1.Image = imageList1.Images[t];
sumStudentPhoto[t]++;
this.label3.Text = sumStudentPhoto[t].ToString();
tp[t] = 0;
boo = false;
}
else
{
tp[t]++;
t = ran.Next(56);
}
}
void getStudentName()
{
StreamReader reader = new StreamReader(@"E:\caicaikan\student_name\name.txt", Encoding.GetEncoding("gb2312"));
String line = reader.ReadLine();
int i = 0;
while (line != null)
{
sumStudentNames[i] = line;
i++;
line = reader.ReadLine();
}
reader.Close();
}
int randomStudentName1()
{
Random ran = new Random();
m = ran.Next(56);
while (m == n || m == t)
{
m = ran.Next(56);
}
return m;
}
通过这次对软件开发全过程报告的总结,我清楚的认识到了软件开发所要做的具体工作,例如:软件开发前的概要设计,可用性分析,如何实现以及需求分析。开发过程中要考虑当初的设计思路,按照设计要求做相应的功能。开发结束后要对整个开发过程做详细总结,小到每个功能模块,大到整个软件的设计思路等等。
从这一个小软件中,让我看到了.net开发出来的软件如此漂亮、应勇性功能如此之强,也许这就是我们一直选择微软.net开发平台的原因。确实,开发软件的时候注意软件的细节将会使软件给用户更好的体验,我们学习微软的技术,更要学习微软的细心以及全面为用户考虑的精神,而不是满足于“软件可以使用”或“功能能够实现”的情况,多关注一些细节,将会使你的软件更完美。
当然,还有许多需要注意的技术和非技术的细节问题,往往我们技术人员觉得不重要的东西偏偏是用户觉得最重要的。我相信,在软件开发的过程中,多关注开发过程中的细节,将会使我们的软件更加完美,当然付出得越多,得到的越多。
继续加油!!!