需要写一个程序将表格进行一个统计和排序,输出到一个文本文件中。

来源:百度知道 编辑:UC知道 时间:2024/06/21 20:12:44
附件Access数据库(test.mdb)中的“来访者登记表”是SARS期间某城市的火车站的登记表的电子录入表格,
(大约有1万条记录,这里只是一段个样本数据)。

需要写一个程序将表格进行一个统计和排序,输出到一个文本文件中。

要求:
数据输出文件后缀名为".csv",数据项之间用半角的逗号分隔,每条数据回车换行分隔。格式说明如下:

第一行数据是固定的标题项,固定文本:
"身份证号,来自城市,最近一次来访时间,来访次数"
第二行开始是数据项,按照第一行的顺序输出。
《SARS期前来访人员统计输出样例.csv》是一个给出的样本数据的格式例子供参考

数据排序,按照来自城市排序,5个城市按照下面的列表顺序固定排序放在数据输出的最前面,其他城市按照字符串的比较顺序排序
5个固定的城市顺序为:
北京
上海
广州
深圳
成都

“最近一次来访时间”是指某个人员最近一次到访这个城市的时间,输出请按照 "yyyy-MM-dd"的格式填写。
"来访次数" 是指这个人来访这个城市的次数,不是指火车的车次

请用C#或者Java写一个处理程序
要求代码清晰,易维护,可读性好,执行效率高,如果算法比较复杂请给出适当的算法说明

注意:
由于是手工录入数据,所以“进入日期”这个字段可能被填写成多种多样的格式
95%的格式如下几种形式:
"2003/3/14"
"2003-3-14"
"2003.3.14"
"2003.03.14"
"20030304"
"2003年3月14日"
当然5%还有个别其他的写法,程序里面需要做相应的处理操作,请给出你

由于我不会C#和java,所以我就用其他的程序写了一个。

第一个问题,一句SQL语句执行即可成功获得。
'select 身份证号,max(来自城市) as 来自城市,max(进入时间) as 最近来访时间,count(车次) as 来访次数 from 来访者登记表 group by 身份证号';

第二个问题,关于时间:
由于数据库存在的是text,
设定数据库存在的是date,取出说有的数字然后存为tmpdate,
A,判断数字个数,如果是8,
insert('/', tmpdate, 5);
insert('/', tmpdate, 8);
date:=tmpdate;
B,判断数字个数,如果是6,并且第一个数字是0或则9,不是1和2的情况。
即时间格式
{091025=09/10/25(包括)
031025=03/10/25(包括)
199121=1991/2/1(不包括)date转C
200325=2003/2/5(不包括) date转C
}
insert('/', tmpdate, 3);
insert('/', tmpdate, 6);
date:=tmpdate;

C,如果不是8和6,哪么把date中的所有非数字进行替换'/',
最后再对'//'进行替换,得到最终的date。

这样所有的95%和5%都包括进去了。

所有的需要两个,一个是if判断,一个是case choice of 选择。
if count(tmpdate) =8 then
choice =8 else
if (((length(tmp) = 6) and (tmp[1] <> '1') and (tmp[1] <> '2')) then choice