评委打分系统.docx
《评委打分系统.docx》由会员分享,可在线阅读,更多相关《评委打分系统.docx(35页珍藏版)》请在冰豆网上搜索。
评委打分系统
一、设计目标与内容
1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;
2.基本掌握面向对象程序设计的基本思路和方法;
3.掌握用VC++开发应用程序的的一般步骤和方法;
4.能够利用所学的基本知识,设计一个简单的评委打分系统,具有以下功能:
①能够输入赛事与策略的信息
②根据赛事选择的不同选用不同的策略,并显示出最后结果
二、设计要求
2.1设计约束、限制
操作系统:
windows操作系统
数据库平台:
无
开发语言:
VC++
开发模式:
C/S模式
硬件约束:
CPU:
Pentium4
内存:
256M
硬盘:
10G
2.2基本要求
1.需要充分考虑到程序的可扩展性。
程序可能会增加非常多的种类的比赛以及打分策略。
2.第一步需要实现以下几种打分策略:
1)评委数量在6人以下的:
计算6个评委打分的平均分为选手最后得分。
2)评委数量在7-9人的:
除去一个最高分,一个最低分。
计算平均分为选手最后得分。
3)评委数量在10人以上的:
除去两个最高分,两个最低分。
计算平均分为选手最后得分。
4)实现现在各种选秀节目中常用的打分算法:
三个评委,各个评委有两种选择:
(Y/N)。
如果两个Y,则选手过关;否则不过关。
三、基本思路
3.1软件体系结构
3.1.1软件程序结构图
3.2模块描述
3.2.1打分策略录入
名称
打分策略录入
标识
STI
子系统名称
打分策略录入
系统
名称
评委打分系统
接 口
说 明
输入
策略编号,策略名称
输出
将记录保存到文件中
功 能
说 明
将系统所能提供的打分策略保存到文件中;
文件格式:
运行环
境说明
参见《评委打分系统需求规格说明书》
调用关
系说明
调用模块
被调用模块
3.2.2赛事录入
名称
赛事录入
标识
GI
子系统名称
赛事录入
系统
名称
评委打分系统
接 口
说 明
输入
赛事编号,赛事名称,打分策略编号
输出
将记录保存到文件中
功 能
说 明
将系统所能满足的赛事保存到文件中。
文件格式:
其中C1,C2对应于打分策略中的策略编号
运行环
境说明
参见《评委打分系统需求规格说明书》
调用关
系说明
调用模块
被调用模块
3.2.3比赛赛事选择
名称
比赛赛事选择
标识
GC
子系统名称
比赛赛事选择
系统
名称
评委打分系统
接 口
说 明
输入
比赛赛事名称,编号
输出
记录比赛赛事信息。
并打开打分界面
功 能
说 明
1、选择比赛赛事。
2、根据选择的赛事,从文件中获取该比赛适用的打分策略。
3、使用策略模式来选择不同的打分界面
运行环
境说明
参见《评委打分系统需求规格说明书》
调用关
系说明
调用模块
被调用模块
3.2.4评委打分
名称
评委打分
标识
子系统名称
评委打分
系统
名称
评委打分系统
接 口
说 明
输入
1、进入到打分界面
2、分数
输出
1、计算打分结果
2、将结果保存到文件中
功 能
说 明
根据系统要求来设计不同的评委打分界面。
每个界面对应于不同的打分策略。
评委打分完成后将结果保存到文件中。
运行环
境说明
参见《评委打分系统需求规格说明书》
调用关
系说明
调用模块
被调用模块
3.2.5得分结果展示
名称
得分结果展示
标识
子系统名称
得分结果展示
系统
名称
评委打分系统
接 口
说 明
输入
文件中保存的打分记录
输出
将文件中保存的记录显示在界面上
功 能
说 明
将比赛结果显示出来。
显示结果按照最后得分的降序进行排列。
运行环
境说明
参见《评委打分系统需求规格说明书》
调用关
系说明
调用模块
被调用模块
四、主要步骤
4.1设置主界面
4.2根据选择的不同进入不同的界面
1.打分策略输入
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedButton1()
{
SITsit;
sit.DoModal();
//TODO:
在此添加控件通知处理程序代码
}
2.赛事录入
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedButton2()
{
//TODO:
在此添加控件通知处理程序代码
GIgi;
gi.DoModal();
}
3.比赛赛事选择
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedButton3()
{
//TODO:
在此添加控件通知处理程序代码
GCFgcf;
gcf.DoModal();
}
4.比赛结果显示
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedButton4()
{
//TODO:
在此添加控件通知处理程序代码
FinalScoreShowfss;
fss.DoModal();
}
5.退出
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedCancel()
{
//TODO:
在此添加控件通知处理程序代码
CDialogEx:
:
OnCancel();
}
6.确定
voidCTheJudgesScoringSystemDlg:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
CDialogEx:
:
OnOK();
}
4.3输入赛事与策略的信息
1.打分策略输入
voidSIT:
:
OnBnClickedSave()
{
//TODO:
在此添加控件通知处理程序代码
Confirmationsure;
if(sure.DoModal()==1)
{
fstreamfsit;
fsit.open(_T("PolicyInformation.txt"),ios:
:
app);
try
{
if(!
fsit.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox(_T("'PolicyInformation.txt'打开失败"));
}
UpdateData(true);
fsit<PolicynName.ReleaseBuffer();
PolicyNumber.ReleaseBuffer();
PolicynName="";
PolicyNumber="";
UpdateData(false);
fsit.close();
MessageBox(_T("保存成功"));
}
}
2.赛事录入
voidGI:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
Confirmationsure=newConfirmation;
inti;//指定逗号所在位置
if(sure.DoModal()==1)
{
fstreamfsit;
fsit.open(_T("GameInformation.txt"),ios:
:
app);
try
{
if(!
fsit.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox(_T("'GameInformation.txt'打开失败"));
}
UpdateData(true);
i=ScoreType.Find(',');
fsit<GameName.ReleaseBuffer();
GameNumber.ReleaseBuffer();
GameName="";
GameNumber="";
UpdateData(false);
fsit.close();
MessageBox(_T("保存成功"));
}
}
4.4根据赛事选择的不同进入不同的打分界面
BOOLGCF:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
GCFCombo.ResetContent();
fstreamfgcf;
inti=0;
fgcf.open(_T("GameInformation.txt"),ios:
:
in);
try
{
if(!
fgcf.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox("'GameInformation.txt'打开失败");
returnfalse;
}
while(getline(fgcf,GMember.GameNumber[i],',')&&getline(fgcf,GMember.GameType[i],','))
{
GCFCombo.AddString(GMember.GameType[i].c_str());
getline(fgcf,GMember.PolicyNumber[i]);
i++;
}
GMember.length=i;
fgcf.close();
returntrue;
}
voidGCF:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
inti=0;
intj=0;
GCFComboText.GetBuffer();
UpdateData(true);
for(i=0;i{
if(GCFComboText.GetBuffer()==GMember.GameType[i])
{
GCFComboText.ReleaseBuffer();
break;
}
GCFComboText.ReleaseBuffer();
}
UpdateData(false);
if(GMember.PolicyNumber[i]=="G1")
{
JS1js1;
js1.DoModal();
}
if(GMember.PolicyNumber[i]=="G2")
{
JS2js2;
js2.DoModal();
}
if(GMember.PolicyNumber[i]=="G3")
{
JS3js3;
js3.DoModal();
}
if(GMember.PolicyNumber[i]=="G4")
{
JS4js4;
js4.DoModal();
}
CDialogEx:
:
OnOK();
}
4.5打分并显示结果
1.打分JS1
BOOLJS1:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
fjs.open(_T("PlayerScore.txt"),ios:
:
app);
try
{
if(!
fjs.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox(_T("'PlayerScore.txt'打开失败"));
}
fjs<<"#,,"<returntrue;
}
voidJS1:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
inti=0;
UpdateData(true);
if(score1!
=0)
{
i++;
}
if(score2!
=0)
{
i++;
}
if(score3!
=0)
{
i++;
}
if(score4!
=0)
{
i++;
}
if(score5!
=0)
{
i++;
}
if(score6!
=0)
{
i++;
}
Confirmationsure("G1",i);
if(sure.DoModal()==1)
{
FinalScore=(score1+score2+score3+score4+score5+score6)/i;
fjs<UpdateData(false);
}
}
voidJS1:
:
OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
score1=0;
score2=0;
score3=0;
score4=0;
score5=0;
score6=0;
FinalScore=0;
PlayerNumber++;
UpdateData(false);
}
voidJS1:
:
OnBnClickedCancel()
{
//TODO:
在此添加控件通知处理程序代码
fjs.close();
CDialogEx:
:
OnCancel();
2.打分JS2
BOOLJS2:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
fjs.open(_T("PlayerScore.txt"),ios:
:
app);
try
{
if(!
fjs.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox(_T("'PlayerScore.txt'打开失败"));
}
fjs<<"#,,"<returntrue;
}
voidJS2:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
inti=0;
doublemax=-1;
doublemin=23333;
UpdateData(true);
if(score1!
=0)
{
if(min>score1)
{
min=score1;
}
if(max{
max=score1;
}
i++;
}
if(score2!
=0)
{
if(min>score2)
{
min=score2;
}
if(max{
max=score2;
}
i++;
}
if(score3!
=0)
{
if(min>score3)
{
min=score3;
}
if(max{
max=score3;
}
i++;
}
if(score4!
=0)
{
if(min>score4)
{
min=score4;
}
if(max{
max=score4;
}
i++;
}
if(score5!
=0)
{
if(min>score5)
{
min=score5;
}
if(max{
max=score5;
}
i++;
}
if(score6!
=0)
{
if(min>score6)
{
min=score6;
}
if(max{
max=score6;
}
i++;
}
if(score7!
=0)
{
if(min>score7)
{
min=score7;
}
if(max{
max=score7;
}
i++;
}
if(score7!
=0)
{
if(min>score7)
{
min=score7;
}
if(max{
max=score7;
}
i++;
}
if(score8!
=0)
{
if(min>score8)
{
min=score8;
}
if(max{
max=score8;
}
i++;
}
if(score9!
=0)
{
if(min>score9)
{
min=score9;
}
if(max{
max=score9;
}
i++;
}
Confirmationsure("G2",i);
if(sure.DoModal()==1)
{
FinalScore=(score1+score2+score3+score4+score5+score6+score7+score8+score9-min-max)/
(i-2);
fjs<<<","<UpdateData(false);
}
}
voidJS2:
:
OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
score1=0;
score2=0;
score3=0;
score4=0;
score5=0;
score6=0;
score7=0;
score8=0;
score9=0;
FinalScore=0;
PlayerNumber++;
UpdateData(false);
}
voidJS2:
:
OnBnClickedCancel()
{
//TODO:
在此添加控件通知处理程序代码
CDialogEx:
:
OnCancel();
3.打分JS3
BOOLJS3:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
fjs.open(_T("PlayerScore.txt"),ios:
:
app);
try
{
if(!
fjs.is_open())
{
throwfalse;
}
}
catch(bool)
{
MessageBox(_T("'PlayerScore.txt'打开失败"));
}
fjs<<"#,,"<returntrue;
}
voidJS3:
:
OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
AllScore[length]=score;
CStringstr=ScoreShow;//临时存储
ScoreShow.Format("%s第%d位评委打分是%0.2lf\r\n",str,i+1,score);
ScoreShow.ReleaseBuffer();
i++;
length++;
if(score{
min2=min1;
min1=score;
}
elseif(score{
min2=score;
}
if(score>max1)
{
max2=max1;
max1=score;
}
elseif(score>max2)
{
max2=score;
}
score=0;
UpdateData(false);
}
voidJS3:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
Confirmationsure("G3",length);
doublesum=0;
inti=0;
if(sure.DoModal(