1.已知一个顺序文件A,格式如下:
① REC-KEY 数字型8位 (前零补足)
② REC-SUBKEY数字型2位 (前零补足)
③ REC-NAME 文字型8位 (后空格补足)
其中①②为主键,已按升序排列,每条数据以回车换行符结束.请做以下操作并对所有分支进行测试.
从头至尾一行一行读文件,将①相同的每一组数据的第一条输出到文件B,并且将③为数字的数据输出到顺序文件C.在读之前,需要一个询问,读完之后,将A的输入数据行数,B、C的输出数据行数输出到顺序文件D.
例:顺序文件 A
0000000101AAAAAAAA
0000000102AAAAAAAB
0000000103AAAAAAAC
000000010412345678
顺序文件 B
0000000101AAAAAAAA
顺序文件 C
000000010412345678
顺序文件 D
A的输入行数=4,不但输出行数=1,C的输出行数=1
2.一个年级有N个班,一个班有M个学生,统计学生5科成绩的平均成绩,
A.打印每班平均成绩85分以上者的各科成绩和平均成绩,
B.打印每班的班总平均成绩和各科平均成绩.
10>N>2,60>M>5
输入文件格式 (用.txt不能用数据库文件)
排成升序的顺序文件(班单位中无顺序)中有每个学生的成绩5科.
学校CODE(10位数字)、学校名、年级(1,2,3)、班号(1,2,3,4...)、学号(6位数字)、姓名,语文、数学、物理、化学、生物
例:
5101030027 第二十七中 11103456 张云山 100100100100099
5101030027 第二十七中 11103457 王武卿 100100100072100
.......
5101040081 第八十一中 23103456 李斯林 088089077066099
.......
.......由于小弟是新手.完全摸不着头绪..
希望会做的高手简单的指点下该从哪里入手?.该怎样思考?.
① REC-KEY 数字型8位 (前零补足)
② REC-SUBKEY数字型2位 (前零补足)
③ REC-NAME 文字型8位 (后空格补足)
其中①②为主键,已按升序排列,每条数据以回车换行符结束.请做以下操作并对所有分支进行测试.
从头至尾一行一行读文件,将①相同的每一组数据的第一条输出到文件B,并且将③为数字的数据输出到顺序文件C.在读之前,需要一个询问,读完之后,将A的输入数据行数,B、C的输出数据行数输出到顺序文件D.
例:顺序文件 A
0000000101AAAAAAAA
0000000102AAAAAAAB
0000000103AAAAAAAC
000000010412345678
顺序文件 B
0000000101AAAAAAAA
顺序文件 C
000000010412345678
顺序文件 D
A的输入行数=4,不但输出行数=1,C的输出行数=1
2.一个年级有N个班,一个班有M个学生,统计学生5科成绩的平均成绩,
A.打印每班平均成绩85分以上者的各科成绩和平均成绩,
B.打印每班的班总平均成绩和各科平均成绩.
10>N>2,60>M>5
输入文件格式 (用.txt不能用数据库文件)
排成升序的顺序文件(班单位中无顺序)中有每个学生的成绩5科.
学校CODE(10位数字)、学校名、年级(1,2,3)、班号(1,2,3,4...)、学号(6位数字)、姓名,语文、数学、物理、化学、生物
例:
5101030027 第二十七中 11103456 张云山 100100100100099
5101030027 第二十七中 11103457 王武卿 100100100072100
.......
5101040081 第八十一中 23103456 李斯林 088089077066099
.......
.......由于小弟是新手.完全摸不着头绪..
希望会做的高手简单的指点下该从哪里入手?.该怎样思考?.
用String的IndexOf 和 Substring等方法
思路:
先用流读取一行字符串,再将字符串拆分,用IndexOf 和 Substring方法或用正则也可以,(建议最好先建一个类根据字符串的特征),将拆分的字符串依次存放集合,并进行实现要求的功能,在用流写入到文件(按要求的格式即可)
0000000102AAAAAAAB
0000000103AAAAAAAC
000000010412345678 不是很清楚你的题目的意思,但是,按照你的题目,应该是:B 取 A后面8位都相同的行 ,C取A后面全是数字的行将A的输入数据行数,B、C的输出数据行数输出到顺序文件D ,D为A,B,C的总数据D数据
0000000101AAAAAAAA
0000000101AAAAAAAA
0000000102AAAAAAAB
0000000103AAAAAAAC
000000010412345678
000000010412345678 不知道是不是这样
② REC-SUBKEY数字型2位 (前零补足)
③ REC-NAME 文字型8位 (后空格补足)
0000000101AAAAAAAA 该8位为REC-KEY
0000000101AAAAAAAA 该2位为REC-SUBKEY
0000000101AAAAAAAA 该8位为REC-NAME嘿嘿,乱搞!
读出来后,把字符串转化成需要的整数。(用string中的一些函数。如果不行就用正则表达式)
然后按照要求对这些整数进行处理。排序时可以用泛型的sort()函数。
A.打印每班平均成绩85分以上者的各科成绩和平均成绩,
B.打印每班的班总平均成绩和各科平均成绩.
10>N>2,60>M>5
输入文件格式 (用.txt不能用数据库文件)
排成升序的顺序文件(班单位中无顺序)中有每个学生的成绩5科.
学校CODE(10位数字)、学校名、年级(1,2,3)、班号(1,2,3,4...)、学号(6位数字)、姓名,语文、数学、物理、化学、生物
5101030027 第二十七中 11103456 张云山 100100100100099 99分 班号 3456 学号1001005101030027 第二十七中 11103457 王武卿 100100100072100 100分 班号 3457 学号 100072
private struct REC
{
public int KEY;
public int SUBKEY;
public string NAME;
public override string ToString()
{
return string.Format("{0:00000000}{1:00}{2,-8}", KEY, SUBKEY, NAME);
}
}private void recordToFile(List<REC> records, string filename)
{
StreamWriter vStreamWriter = new StreamWriter(filename,
false, Encoding.Default);
foreach(REC record in records)
vStreamWriter.WriteLine(record);
vStreamWriter.Close();
}private void button1_Click(object sender, EventArgs e)
{
#region 读取记录
List<REC> recordsA = new List<REC>();
List<REC> recordsB = new List<REC>();
List<REC> recordsC = new List<REC>();
StreamReader vStreamReader = new StreamReader(@"c:\a.txt", Encoding.Default);
int existsKey = -1;
string vLine = string.Empty;
while ((vLine = vStreamReader.ReadLine()) != null)
{
REC record = new REC();
if (vLine.Length >= 8)
int.TryParse(vLine.Substring(0, 8), out record.KEY);
if (vLine.Length >= 10)
int.TryParse(vLine.Substring(8, 2), out record.SUBKEY);
record.NAME = vLine.Substring(10, vLine.Length - 10).TrimEnd(); // 去掉后补空格
if (recordsA.Count > 0 && existsKey != record.KEY && // KEY没有记录过
record.KEY == recordsA[recordsA.Count - 1].KEY) // 添加的记录Key已经存在
{
recordsB.Add(recordsA[recordsA.Count - 1]);
existsKey = record.KEY;
}
int i;
if (int.TryParse(record.NAME, out i))
recordsC.Add(record); recordsA.Add(record);
//Console.WriteLine(record);// 调试用
}
vStreamReader.Close();
#endregion 读取记录
recordToFile(recordsB, @"c:\b.txt");
recordToFile(recordsC, @"c:\c.txt");
StreamWriter vStreamWriter = new StreamWriter(@"c:\d.txt",
false, Encoding.Default);
vStreamWriter.WriteLine(
string.Format("A的输入行数={0},B的输出行数={1},C的输出行数={2}",
recordsA.Count, recordsB.Count, recordsC.Count));
vStreamWriter.Close();
}第二天描述不清楚就不写了,基本可以和第一题的方法一样。