数据与对象

news/2024/9/17 17:32:09

最近做大实验,他要求输入学生的信息保存到文件中,再对学生进行操作。

操作数据

按照他的实验指导书来写,在存储学生信息时,他是以/r/n为分隔符,再将每个文本以" "分隔存储到.txt文件中.

clipboard.png

string newrecord = this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text + " " + this.textBox4.Text + " " + this.textBox5.Text + "\r\n";File.AppendAllText("G:\\scoremanagenment.txt",newrecord,UTF8Encoding.Default);

读取时也是相同的操作,把信息都读取出来然后显示在界面上

string file = File.ReadAllText("G:\\scoremanagenment.txt",  UTF8Encoding.Default);
//把txt文件中按行存储的信息利用regex.Split按行存入string数组中string[] records = Regex.Split(file, "\r\n");//开始更新视图
this.listView1.BeginUpdate();//清空原有视图this.listView1.Items.Clear();// records.Length为数组的元素个数for ( int index = 0; index < records.Length; index++){   //分割每行记录的各个字段string[] components = Regex.Split(records[index], " ");//生成listview的一行ListViewItem lvi = new ListViewItem(components);
//添加背景色lvi.SubItems[0].BackColor = Color.Red;//把新生成的行加入到listview中this.listView1.Items.Add(lvi);}
//视图更新结束this.listView1.EndUpdate();

按照他的方法来写,确实是可以很快完成,但是写到后边,慢慢发现许多问题:
1.使用频繁,因为要对学生进行查找,删除,计算总分等操作,所以会经常用到读写的功能,造成代码冗乱,不易修改weihu
2.在计算总分时,要对获取学生的各科成绩,用一个字符数组表示一个学生,里边的字符窜表示学生的属性实在是太抽象了,很容易出错.

解决:

先建立一个学生Student类,把从文件中获取的信息全部存储到学生之中,从操作字符串改为操作对象,将获取和写入全都改为对学生的操作.
学生类:

/*** 学生*/public class Student{public String number;           //学号public String name;             //名字public double mathScore;        //数学成绩public double englishScore;     //英语成绩public double entityScore;      //政治成绩public String totalScore;       //总分public String avgScore;         //平均分public String ranking;          //排名}

获取文件数据改为获取学生(将数据封装成学生的属性):

/*** @return List<Student> 返回文件中的学生* 从文件中获取学生*/public List<Student> getStudents(){List<Student> students = new List<Student>();String file = File.ReadAllText("C:\\Users\\htx\\Desktop\\scoremanagenment.txt", UTF8Encoding.Default);String[] records = Regex.Split(file, "\r\n");for (int i = 0; i < records.Length - 1; i++){String[] components = Regex.Split(records[i], " ");Student student = new Student();for (int j = 0; j < components.Length; j ++){switch (j){case 0: student.number = components[0];break;case 1: student.name = components[1]; break;case 2: student.mathScore = double.Parse(components[2]==""? "0" : components[2]); break;case 3: student.englishScore = double.Parse(components[3] == "" ? "0" : components[3]); break;case 4: student.entityScore = double.Parse(components[4] == "" ? "0" : components[4]); break;case 5: student.totalScore = components[5]; break;case 6: student.avgScore = components[6]; break;case 7: student.ranking = components[7]; break;}}students.Add(student);}return students;}

将写入数据文件改为保存学生:

/*** @param List<Student> students 学生集合* 将学生保存到文件中(覆盖)*/public void saveStudent(List<Student> students){String record = "";foreach (Student student in students){record += student.number + " " + student.name + " " + student.mathScore + " " + student.englishScore + " " + student.entityScore  + (student.totalScore==null?"":" " + student.totalScore) + (student.avgScore==null?"":" " + student.avgScore) + (student.ranking==null?"":" " + student.ranking) + "\r\n";}File.WriteAllText("C:\\Users\\htx\\Desktop\\scoremanagenment.txt", record, UTF8Encoding.Default);}

这样一来,基本实现功能的方法并没有什么变化,但是经过封装之后,从操作文件数据改为操作学生对象,方便理解和编程多了.

总结:

文件的存储和数据库很像,把操作数据改为操作学生,有了面向对象的思想编程好写多了,也明白了些为什么要面向对象了.


http://lihuaxi.xjx100.cn/news/270126.html

相关文章

当Docker遇到Intellij IDEA,再次解放了生产力~

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;转自&#xff1a;陶章好链接&#xff1a;https://juejin.im/post/5d026212f265da1b8608828bIdea是Java开发利器&#xff0c;SpringBoot是Java生态中最流行的微服务框架&#…

windows加载符号小计

1、如果当前并没有设置符号路径和符号服务器&#xff0c;且当前正在调试&#xff0c; 则需要设置符号服务器和路径后&#xff0c;重新调试生效 2、如果当前有些pdb没有加载&#xff0c;因为这些pdb放在其他路径了&#xff0c;未加载&#xff0c;当把pdb拷到程序启动目录时&…

推荐5款实用的jQuery时间轴插件

1、使用CSS3和jQuery制作的水平时间轴 这是一个可以在PC和移动端表现非常棒的水平时间轴&#xff0c;它由上部水平滑块和下部时间点对应的内容区块&#xff0c;点击时间轴上的时间点&#xff0c;下部内容会滑动到对应的内容区块。使用CSS3和jQuery技术使得时间轴滑块可以左右滑…

What?! Python一行代码,能玩这么多童年的游戏?

来源 | 早起 Python责编 | Carol封图 | CSDN 下载自视觉中国儿童节就要来了&#xff0c;虽然秃头程序员没有头发&#xff0c;但是童心还是一直都在的&#xff0c;今天就分享一个私藏的GitHub项目——free-python-games&#xff0c;一行代码就能进入使用Python开发的小游戏快乐…

Python 3.10来了!!!

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达来源丨机器之心编辑丨极市平台导读 不用再自己琢磨如何实现 switch 功能了。 对于从事数据科学和人工智能领域的人们来说&#xff0c;Python 是大家的首选编程语言。根据最近…

干货|简单理解逻辑回归基础

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达一、分类问题分类问题其实和回归问题很相似&#xff0c;但是它的输出值y值&#xff08;也即是说我们打算预测的值&#xff09;只是少量的一些离散值&#xff0c;像是如果我…

Guava 中的 Stopwatch 是个什么鬼?

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;Stopwatch 解释为计时器&#xff0c;又称秒表、停表&#xff0c;很明显它是记录时间的。# 如何使用Stopwatch stopwatch Stopwatch.createStarted();doSomething();stopwatc…

设计模式(35)-----设计模式阶段性总结(一句话概括一个模式)

假如你现在还在为自己的技术担忧&#xff0c;假如你现在想提升自己的工资&#xff0c;假如你想在职场上获得更多的话语权&#xff0c;假如你想顺利的度过35岁这个魔咒&#xff0c;假如你想体验BAT的工作环境&#xff0c;那么现在请我们一起开启提升技术之旅吧&#xff0c;详情请…