返回列表 发帖

【练习-038】批处理随机生成工资流水帐目并汇总

出题目的:
    掌握随机取值及其应用
    了解excel函数与批处理的灵活运用
加分规则:
    满分30分,每题15分,视情形加分,能将excel函数联合运用的再加5分
解题限制:
    管理层和技术层请暂做观看,但可跟贴做解题提示
题目如下:
    1、假设有甲、乙、丙、丁、戊、己、庚、辛、壬、癸十个人,他们的日工资为-100到100元之间(工资均为整
数,负数表示扣罚),请大家编写批处理随机生成1000笔此十人的日工资流水帐a.xls如示例一,请注意是每天随机
出现一人,但同一人不可在同一天出现两次(即同一人不能一天领两次工资),并且工资出现正负数的比例为9:
1,同时每笔中的日期是随机和合理的。
    2、根据生成的a.xls,按月对十人的工资进行计算汇总生成汇总表b.xls如示例二。
示例一:
姓名        工资        日期               
辛        26        2009-1-1
戊        77        2009-1-2
丁        32        2009-11-29
壬        15        2009-3-6
戊        44        2009-1-9
壬        100        2009-5-30
庚        -62        2009-3-25
戊        50        2009-3-18
丁        33        2009-7-25COPY
示例二:
***共同提高***

大家是不是又觉得难了点啊,其实我看这题也就是中等难度,大家拿出点信心来啊。。。
***共同提高***

TOP

下面是第一题的参考答案(请将echo 后的长空格换为tab):
@echo off&setlocal enabledelayedexpansion
echo 姓名        工资        日期>a.xls
for %%a in (甲 乙 丙 丁 戊 己 庚 辛 壬 癸) do (
    for %%b in (1-31 2-28 3-31 4-30 5-31 6-30 7-31 8-31 9-30 10-31 11-30 12-31) do (
        for /f "tokens=1,2 delims=-" %%c in ("%%b") do (
            for /l %%e in (1,1,%%d) do set "_!random!!random!!random!=%%a-%%c-%%e"
        )
    )
)
for /f "tokens=2,3,4 delims=-=" %%a in ('set _') do (
    set "+="
    set /a n+=1,a=!random!%%10,b=!random!%%101
    if !a! equ 0 set "+=-"
    if !b! equ 0 set "+="
    echo %%a !+!!b! 2009-%%b-%%c>>a.xls
    if !n! equ 1000 start a.xls&goto :eof
)     COPY


[ 本帖最后由 batman 于 2009-3-8 13:44 编辑 ]
***共同提高***

TOP

随风兄对本题的理解确实是有点出入,看来是本人没有将题意充分讲清楚,真的是不好意思了,现将题意整理如下:
第一题:
1、所有的日期格式都是2009-*-*,不用考虑闰年的情况;
2、每天中随机出现一人有误,应是每笔记录中随机出现一人,同时同一个人在同一天内不能领两次工资,也就是要
考虑随机生成的数中“表示人的随机数+表示日期的随机数”不能有重复;
3、正负数比例为9:1有误,准确描述应是概率之比为9:1(不一定要求是9:1);
4、随机生成的日期为合理日期,如2009-2-29就不是合理日期,因为2009年2月只有28天。
第二题:
1、最后的汇总结果并不是要和我附件中所示的一样,上面只是为了示例b.xls的格式;
2、并不一定要求结合excel的公式来汇总计算,这只是让大家了解批处理可以和excel函数结合来使用(主要用来对
cmd下生成的xls文件进行操作);
3、如普通会员们感觉此题很有难度,管理层和技术层可以贴出自己的代码(但请用白色字体)。

[ 本帖最后由 batman 于 2009-3-6 20:10 编辑 ]
***共同提高***

TOP

是在改代码时将%%e错写成%%d了,已改正,谢谢指出。
***共同提高***

TOP

返回列表