本人新手,正在寫一個軟體,被一個評分的演算法卡住了,希望各位高手能幫我解決。
資料樣本:

要求:根據跳繩次數在上表中查出對應得分。
以一年級成績為例:2~4次-10分,5~7次-20分,8~10次30分依次類推。
uj5u.com熱心網友回復:
建立一個評分等級表,欄位:年級,次數,得分,ID一年級 1 0
一年級 2 10
一年級 3 10
一年級 4 10
......
一年級 120 100
......
二年級 1 0
......
這樣,由年級,次數,對應該表,就能查出得分了。
uj5u.com熱心網友回復:
實際次數大于表中次數過濾出資料集,倒序排列,取第一條。uj5u.com熱心網友回復:
很感謝您的回復。
這種情況我已經考慮過了,需要對每個學生進行評分;我是想找一種比較快捷的方法,最好是能夠統一評分,比如對全年級的女
生跳繩成績,只用一條Update陳述句完成評分操作。不止我這個想法行得通嗎?
uj5u.com熱心網友回復:
按一樓方式建立一個評分表,然后寫update陳述句 update 用戶表 set 分數 = (select 得分 from 評分等級表 where 次數= 用戶表.次數 and 年級= 用戶表.年級) 就可以一次將所有年級的成績一次更新完成uj5u.com熱心網友回復:
1、評分等級對應表 ,欄位:年級,分類,系數,得分,ID (系數=距離,次數,時間,高度)2、資料要求細化到,系數量化到0-2000(最高次數),這樣只要通過SQL
3、select * form 評分等級對應表 where 年級=''五年級'' and 分類=''跳繩'' and 系數=''120''
就可以得到分數了。
4、通過回圈 比賽成績表,欄位:年級,班級,姓名,分類,系數,得分,ID (系數=距離,次數,時間,高度)
while Not Table.Eof do
begin
// select 。。。
// Undata 。。。
next;
end;
已經很明確了。自己細化吧。
uj5u.com熱心網友回復:
查表法:const
MIN_CLASS = 1;
MAX_CLASS = 6;
MIN_FREQ = 1;
MAX_FREQ = 166;
var
ScoreLookupTable = array[1..MAX_CLASS, 1..MAX_FREQ] of byte =
((0, 0, 10, 10, 10, ...), (...), (...), (...), (...), (...));
function GetScore(Class, Frequency: integer): integer;
begin
if Class < MIN_CLASS then Class := MIN_CLASS;
if Class > MAX_CLASS then Class := MAX_CLASS;
if Frequency < MIN_FREQ then Frequency := MIN_FREQ;
if Frequency > MAX_FREQ then Frequency := MAX_FREQ;
Result := ScoreLookupTable[Class][Frequency];
end;
查找表可以硬編碼到程式中,也可以寫到檔案,或者資料庫(使用binary或者BLOB型別一句資料庫的不同),使用之前讀取到ScoreLookupTable。
uj5u.com熱心網友回復:
如果是自己寫軟體,可用程式記憶體查詢實作更靈活轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/61632.html
標籤:VCL組件開發及應用
上一篇:驗證碼接收平臺試用版是什么?
