第二次作业:WinForm程序设计-随机图片显示器

信管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文件内容,效果如下:
这里写图片描述

第四部分:收获体会
这次程序设计,自己查询了大量的网络资料,从目标二向目标三过度,当初只是怀着试试的想法完成目标三,最终也成功了。收获很多,最重要是明白程序设计没有突破不了的难题,只要自己坚定解决某个问题,你会随着不断的失败而更接近它的解决方法。总之是要不断的实践,才会有更多的收获和快速的提高。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值