信管1121,20121167117,聂双燕
第一部分:作业要求(完整要求见作业要求)
目标3:“随机图片显示器”开发,并记录自程序运行后每张图片已经显示的次数,把次数保存到文本文件中(100分)。
第二部分:程序说明及代码
随机图片显示器PictureShow
1.功能:
1.1程序包含6张图片(picture0~picture5),窗体有3个控件(PictureBox,按钮,label);
1.2当按下”随机显示“按钮,则随机显示一张图片,并给出该图片显示的次数在右边的label中;
1.3在”关闭“窗体时,把每张图片目前已经显示的次数写入到指定文件(D:\numInfo.txt)中,方便下次程序运行时使用;
1.4程序第一次执行时候会随机显示一张图片,并自动创建文件(D:\numInfo.txt);
1.5当再次启动程序时候,程序默认显示picture0,并对从文件里读取的图片次数加一操作。
2.实现代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace pictureShow
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int[] picture=new int[6];
String strNum;
//System.Resources.ResourceManager rm = new System.Resources.ResourceManager(typeof(Form1));
ResourceManager rm = new ResourceManager("pictureShow.Properties.Resources",
Assembly.GetExecutingAssembly());
private void btnRandow_Click(object sender, EventArgs e)
{
show();
}
//实现了关闭窗体后把最新的计数写入文件并保存
public void fileSava()
{
StreamWriter sr;
//如果文件存在,则创建File.AppendText对象
if (File.Exists("D:\\numInfo.txt"))
{
sr = File.AppendText("D:\\numInfo.txt");
}
//如果文件不存在,则创建File.CreateText对象
else
{
sr = File.CreateText("D:\\numInfo.txt");
}
sr.Close();
//创建一个文件流,用以写入或者创建一个StreamWriter
FileStream fs = new FileStream("D:\\numInfo.txt",
FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs, Encoding.Default);
m_streamWriter.Flush();
// 使用StreamWriter来往文件中写入内容
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
for (int i = 0; i < picture.Length; i++)
{
m_streamWriter.WriteLine("picture{0}的点击次数为:{1}\n",i,picture[i]);
}
//关闭此文件
m_streamWriter.Flush();
m_streamWriter.Close();
}
//打开文件并读取文件里面各照片的显示次数
public void fileOpen()
{
String fileContent = "";
try{
StreamReader read = new StreamReader("D:\\numInfo.txt", Encoding.Default);
fileContent = read.ReadToEnd();
read.Close();
}
catch (FileNotFoundException){
for (int j = 0; j < picture.Length; j++)
{
picture[j] = 0;
}
}
//读取显示次数及把次数的String类型转化为int类型
String[] fileArray = fileContent.Split('\n');
String[] fileArrayTwo;
for (int i = 0,n=0; i < picture.Length; i++,n+=2)
{
fileArrayTwo = fileArray[n].Split(':');
String numString = fileArrayTwo[fileArrayTwo.Length - 1];
try
{
picture[i] = int.Parse(numString);
// nameLbl.Text = "";
}
catch (Exception e)
{
}
}
}
//清理文件以前的内容,以便记入新内容更新照片显示次数
public void fileClear()
{
FileStream fs = new FileStream("D:\\numInfo.txt",
FileMode.Open, FileAccess.Write);
fs.SetLength(0);
fs.Close();
}
private void show()
{
String pictureName = "picture";
Random rd = new Random();
int num = rd.Next(0, 6);
picture[num] = picture[num] + 1;
pictureName = pictureName + Convert.ToString(num);
//根据资源名称获取资源,并转型
//Image imageResource = (Image)rm.GetObject("pictureName");
//picShow.Image = imageResource;
//获取资源名为juhua的图片
var img = rm.GetObject(pictureName);
//将图片显示在图片控件中
picShow.Image = img as Bitmap;
strNum = Convert.ToString(picture[num]);
lblNum.Text = strNum;
}
private void Form1_Load(object sender, EventArgs e)
{
fileOpen();
picture[0] += 1;
lblNum.Text = Convert.ToString(picture[0]);
fileClear();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
fileSava();
}
}
}
3.参考资料链接:
3.1C#文件读写操作
3.2C#获取资源方法
第三部分:运行结果(以程序再次运行为例)
1.图片资源:
2.在上次程序运行结束时候numInfo.txt文件保存的数据:
3.再次运行程序时候的界面(显示图片picture0,计数增加1):
4.此次程序运行过程结束前一刻窗体显示图片picture4:
5.程序结束后,更新numInfo.txt文件内容,效果如下:
第四部分:收获体会
这次程序设计,自己查询了大量的网络资料,从目标二向目标三过度,当初只是怀着试试的想法完成目标三,最终也成功了。收获很多,最重要是明白程序设计没有突破不了的难题,只要自己坚定解决某个问题,你会随着不断的失败而更接近它的解决方法。总之是要不断的实践,才会有更多的收获和快速的提高。