这是一个早以前的想法了 大概在几个月之前 只是一直没有时间来实现。

我喜欢古玩 说白了就是古董 每次看中央二套的《鉴宝》栏目 
每次当主持人说“有请下一位持宝人上场” 的时候 大屏幕上会随机的滚动所有在场的持宝人有中宝物的照片
主持人喊“停” 大屏幕停止滚动 所显示的宝物就是下面要上场的宝物了 最后专家团来为这件宝物鉴定真伪
当时看到这个功能的时候 我的第一反应是利用了随机函数 于是就想抽时间来模拟实现这个功能 但是一直犹豫种种原因
没有来实现 今天下午突然想起了这件事 说做就做。。。

我第一开始的想法是这样的
1.把要显示的宝物图片放在一个指定的文件夹中
2.然后利用 Directory.GetFileSystemEntries(); 方法 遍历 将文件夹中的图片存在数据库中
3.每次程序开始的时候 先获得数据的总条数 然后在这个总条数的范围内 获得随机数作为ID
4.再利用随机数ID 查到对应的数据 显示出来

照着这个步骤做下来 我发现了好几个问题 其中的问题有
1.如果id是不连续的 这下就悲剧了
2.程序在一开始的时候一个操作是 先清空数据表中所有的数据 然后再遍历文件夹 重新添加图片信息 这样是为了对图片操作了以后
得到最新的图片数据  如果这样每次获得ID的最大值和最小值访问数据库次数太多 程序运行太慢
3.每次要获得数据的总个数 也要访问数据库 这样也会造成程序运行过慢

根据以上几个方面的问题 我对程序做了一下修改
1.把要显示的宝物图片放在一个指定的文件夹中
2.然后利用 Directory.GetFileSystemEntries(); 方法 遍历 将文件夹中的图片存在数据库中
3.每次程序开始的时候 只访问一次数据库 将数据库中的内容放在实体对象中 再将对象放在List中 返回List
4.获得List的长度 作为数据的总个数 然后在这个范围内取随机数 
5.最后 根据产生的随机数作为List的下标 来访问对应的数据

改进以后 运行的速度明显提高了不少 用户体验提升了不说 内存也优化了不少 真是一举两得呀!!

下面我来说一下我的数据表是怎么设计的吧
ID:我觉得这个字段我就不用说的太多了 说多了也是废话 identity(1,1) primary key
PicPath:这个字段用来保存宝物图片的相对路径(说的是exe程序的相对路径)
PicName:这个字段用来保存宝物的名称 比如说“元代青花瓷花瓶”等
GetBabyPersonName:这个字段用来保存这个宝物的所有者 也就是“持宝人”的称呼

(ps:我见过不少用拼音首字母来命名的字段名   DLXX你知道是什么意思么? 是登陆信息! 天呐 鬼知道原作者是什么意思)

说了思路 说了设计表的设计 现在就该上源代码了吧

别急 我还想补充语句  这个系统我是利用三层模式实现的 听不少人说小程序就不要使用“三层”了 直接访问数据库就得了
我觉得 各有各的好处 在不同的业务中 使用不同的方法 只不过用了“三层” 程序的层次感会强一些

好了 不说了 上源码(只上传UI层的代码和SQL脚本)

public partialclass Form1 : Form

{

BLLbll = new BLL();

PicTabletable = new PicTable();

// 存放数据的总个数

intcount = 0;

// 保存点击了"开始"还是"结束"的状态

intflag = 0;

List<PicTable> lis =newList<PicTable>();

///<summary>

///程序初始化

///</summary>

publicForm1()

{

InitializeComponent();

// 先清空表中所有的数据

bll.DeleteALL();

// 将图片添加到数据库中

AddDataBase();

// 获得所有的数据将数据放在list集合中

lis = bll.GetAllData();

// 获得数据的总条数

count = lis.Count;

}

///<summary>

///点击开始或者结束

///</summary>

///<paramname="sender"></param>

///<paramname="e"></param>

privatevoid btnBigin_Click(objectsender,EventArgs e)

{

if(flag==0)

{

timer.Start();

btnBigin.Text = "停止";

flag = 1;

}

else

{

timer.Stop();

btnBigin.Text = "开始";

flag = 0;

}

}

///<summary>

///计数器不停调用

///</summary>

public void GetRandNumber()

{

// 产生一个在总数据范围内的随机数

Randomr = new Random();

intrandomNum = r.Next(0, count );

// 宝物名称

labBabyName.Text =lis[randomNum].PicName;

// 宝物图片展示

picRes.ImageLocation =lis[randomNum].PicPath;

// 持宝人姓名

labGetBabyName.Text =lis[randomNum].GetBabyPersonName;

}

///<summary>

///计数器调用

///</summary>

///<paramname="sender"></param>

///<paramname="e"></param>

privatevoid timer_Tick(objectsender,EventArgs e)

{

GetRandNumber();

}

///<summary>

///将图片保存到数据库

///</summary>

public void AddDataBase()

{

// 得到pic中的文件读取pic中的所有数据

string[]pics = Directory.GetFileSystemEntries(@"pic");

// 遍历路径取出各个数据并保存在数据库中

for(int i =0;i < pics.Length; i++)

{

string[]tempPath = pics[i].Split('\\','_','.',' ');

// 图片的相对路径

table.PicPath = pics[i];

// 将路径中的宝物名称提取出来

table.PicName = tempPath[1];

// 将路径中的持宝人姓名提取出来

table.GetBabyPersonName =tempPath[2];

// 保存在数据库中

bll.Add(table);

}

}

}

SQL脚本

createtable PicTable

(

id intidentity(1,1)primary key,

PicPath nvarchar(100),

PicName nvarchar(50),

GetBabyPersonName nvarchar(10)

)

界面截图

抽取前初始化

抽取宝物中。。。

抽取宝物后

突发奇想 之 古玩中的代码相关推荐

  1. 突发奇想:flash+.Net+数据库的一种构思

    大家好!我是冯波!一个刚刚学了点编程的小伙子,爱好比较广泛.除了像其它男生那样喜欢踢足球,打篮球以外,自己也非常喜欢军事.什么<孙子兵法与三十六计>啊,<三国演义>啊总是百看不 ...

  2. shell学习之突发奇想 ^_^ 打印9*9乘法表

    国庆放假到今天,<linux命令行和高级shell编程>初步学习到了第十章.基本上一些简单的流程控制脚本我可以编写出来.今天偶然突发奇想,想把 9*9的乘法表打出来.思考了半天,终于有了结 ...

  3. 需求分析挑战之旅(疯狂的订餐系统)(5)——领导“突发奇想”

    摘要: 说教性质的需求分析理论,各位看了也白看,所以咱们就来一个真实个案--"订餐系统"体验一下."订餐系统"貌似简单,但陷阱重重,各种需求分析的经典场景将会一 ...

  4. 突发奇想把云服务器刷成了黑群晖 ...

    大家好,我是鸟哥.一个半路出家的程序员. 前两天准备把自己10年前买的戴尔电脑刷成黑群晖改造成一台家庭存储服务器,折腾了几天后结果把电脑刷成了蓝屏,彻底报废了.后来又突发奇想,准备把手头上的服务器刷成 ...

  5. 南邮NOJ2063 突发奇想的茂凯

    题目描述 扭曲树精茂凯,英勇无畏的他每次战斗之后都会散落一些树枝,怀旧的他都将其收藏了起来,看做是自己胜利的勋章,已知总共收藏了n根树枝,且第i根树枝长为ai. 有一天,茂凯突发奇想--要是从中选出3 ...

  6. python如何调用文件_如何调用另一个python文件中的代码

    原博文 2017-07-10 15:56 − 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另 ...

  7. 统计java文件中的代码行数

    统计Java代码行数工具类  --  CodeCounterUtil.java 统计指定目录下的java文件中代码行数  --  public static int  getCodeNumFromFo ...

  8. 【经验分享】如何优雅的在 Microsoft word中插入代码

    目录 一.借助工具 二.使用步骤 三.另辟蹊径 一.借助工具 打开这个网页PlanetB; 就是这个:http://www.planetb.ca/syntax-highlight-word 二.使用步 ...

  9. 使用webpack打包后,vscode中vue代码变白色的解决办法

    使用webpack打包后,vscode中vue代码变白色的解决办法 卸载vetur,重装vetur

最新文章

  1. 这个40M的小工具助你在windows下处理数据如虎添翼!!
  2. 谷歌宣布对外开放聊天机器人数据分析平台Chatbase
  3. ID vs Class 老生常谈的选择器问题
  4. Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
  5. handler 消息处理机制
  6. Python 打开文件注意事项
  7. 计算机网络信息安全保密制度,档案馆计算机网络系统和信息安全保密制度
  8. 7、Lctech Pi(F1C200S)开启RNDIS,通过USB与电脑联网(CherryPi,Mangopi,F1C100S)
  9. 题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】
  10. 普渡大学科技学院计算机信息技术,普渡大学-学院介绍
  11. sklearn.metrics.multilabel_confusion_matrix
  12. Obi - Advanced Rope Simulation 绳索插件学习文档
  13. airtest获取当前设备序列号,并连接
  14. 电脑上的计算机里的音乐播放器怎么更改,win10系统电脑中默认的音乐播放器如何修改...
  15. Adobe Illustrator(ai)导出emf/wmf渐变图片失真色块
  16. 【无标题】前端电子签名的canvas画板
  17. vs编译错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?
  18. 今日份安利:epub格式转换成mobi方法哪个好?
  19. ChatGPT在企业中的应用
  20. ArcMap或ArcScene恢复初始化界面设置---彻底解决各种窗口隐藏问题

热门文章

  1. “左手画圆,右手画方”
  2. Xilinx 7系列FPGA收发器架构之接收器(RX)(十一)
  3. 为什存在_tmain以及Unicode和ANSI
  4. 归一化方法(Normalization Method)
  5. 小白的25天CTF征程
  6. mysql-5.7.16安装教程_mysql installer community 5.7.16安装详细教程
  7. 从控制台输入用户名和密码, 然后 判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败. 提示:
  8. windows本地git关联远程gitlab仓库
  9. [Unity Shader] 水纹着色器 Water Shader
  10. 如何让业务实现三周内实现点击率翻倍?我们是这么做到的...