c#课程设计图片管理系统.doc
如有侵权,请联系网站删除,仅供学习与交流c#课程设计图片管理系统【精品文档】第 22 页信息与电气工程学院课程设计说明书(200 /200 学年第 学期)课程名称 : 软件程序设计课程设计 题 目 : 图片管理器 专业班级 : 物联网工程1201班 学生姓名 : 刘 铭 学 号: 120730123 指导教师 : 赵 辉 设计周数 : 第十九周 设计成绩 : 2015年 1月 9日1.需求分析由于对于现在使用电脑的大部份用户来说,在进行图片查看浏览的时候都会用到图片管理器,而对于图片的处理大部份也都是一些具有专业图片处理知识的人才会做的。对于一些特别的观看效果来说,我们用一些专业的看图软件是高射炮打蚊子,仅仅为了看图而用这样一些软件是不合算的,我们必须花费一些时间去学习这些软件,因为越是功能强大的软件,往往使用起来越复杂。这是一个很现实的规律。对于一般的用户来说,他们说不定连这个软件都不知道。我们需要一个简单实用的图片管理器来进行浏览、管理。本软件为一个简单而且很实用的图片查看工具,不但可以进行图片的一些简单查看,浏览操作,而且还可以进行用户登录、分类、增删等功能,是一款比较适合广大普通用户和非计算机专业的用户的图片查看软件,本软件不但界面简洁,功能齐全,而且操作简单。是款比较容易操作,实用的图片管理软件。我们从用户角度,把软件功能的实现变得简单,易于操作。2.开发与运行环境开发环境:Windows XP、Windows 7开发工具:Microsoft Visual studio2010 C#、SQL2008运行环境:Windows XP/72. 系统设计初始化3.1.系统流程 用户登录输入用户名输入密码N用户名和密码是否正确继续输入退出完成所选功能用户选择功能Y3.2.功能模块主界面添加目录删除目录导入图片删除图片退出浏览文件修改名称导入到目录图片浏览界面返回目录上一张下一张自动播放时间间隔实际大小合适大小删除图片3. 详细设计4.1.登陆界面本系统采用“用户账号数据库”一体模式,做到用户登录以后能够浏览与管理的图片及相册都为私人所有,以确保隐私安全。4.2.主界面菜单栏按钮除了有图标及名称以外,鼠标悬停一秒自动显示提示,主体部分左侧目录列表与缩略图显示区域之间边框位置可调。单击选中列表名称背景自动变蓝,并且在右侧缩略图显示区域显示该目录下的图片缩略图及图片名称,单击选中缩略图会有蓝色边框且支持多选。4.2.1.目录操作 新增目录时会有窗口提示填写新目录名称,后在目录列表里生成项,并且在系统文件夹下生成相应文件夹。未选定目录情况下删除目录会提示选择一个目录,选定目录情况下删除目录时会有窗口提示操作不可逆是否确认,点击确认后完成删除操作。4.2.2.图片操作未选定目录情况下导入图片下拉列表自动显示首个目录名称,选定目录情况下导入图片下拉列表显示所选定目录名称,也可即时选定。支持bmp,jpg,gif,jpeg,ico格式图片。用户可以选定某图片进行改名,若有图片重名将自动改名。状态栏显示所选图片信息。缩略图按比例缩小并在各框中居中显示。导入图片时下方进度条显示进度鼠标形状为漏斗。4.3.图片浏览界面 本界面与主界面为同一窗口,开始下方工具栏隐藏,双击缩略图进入图片浏览时上方工具栏隐藏显示下方工具栏。鼠标悬停按钮一秒则显示提示。播放幻灯片时可自行选择时间间隔,窗口小于图片大小时可拖动也可选择合适窗口大小显示。5.调试分析主界面打不开出错原因及改正:把lstFolder的SelectedIndexChanged事件的代码没注意写在了lvView的SelectedIndexChanged中了使得删除路径不对导致操作时出现异常将两部分代码交换每次运行时原先保存在lstFolder的文件不显示了错误原因及改正:要使得上次运行时保存在图片目录文件下的文件在下次运行时也直接显示在lstFolder中需要在MainForm_Load方法里加上如下代码6.课程设计总结通过这次课程设计,实现了一个简单的图片管理系统,而我也对C#软件开发有了更深一步的认识,不论从开始分析到后来编程再到最后调试,也学到了很多在课堂上没有学到的东西。对于VisualStudio2010和SQL2008的使用也更加熟练。系统中存在的一些不足和系统设计上存在的缺憾,说明自己在这些方面还有很多不足之处有待自己进一步学习、提高。 在本次课程设计中,赵师赵辉和同组同学给了我很大的指导帮助,从他们哪里我学到了很多,在此表示感谢!7.参考文献1邱锦伦 Visual C#.NET程序设计教程 清华大学出版社 2006年4月2刘金岭 数据库系统及应用教程SQL Server2008 清华大学出版社 2013年9月3陈 广 C#程序设计基础教程与实训 北京大学出版社 2013年7月8.附录using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace 图片管理器 static class Program STAThread static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmLogin();using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;using System.Collections;namespace 图片管理器 public partial class MainForm : Form public MainForm() InitializeComponent(); private string path = Application.StartupPath + "图片目录?" private Pen boundPen = new Pen(Color.Gainsboro); private Pen selPen = new Pen(Color.Blue, 3); private SolidBrush textBrush = new SolidBrush(Color.Black); private SolidBrush bgBrush; private StringFormat format = new StringFormat(); private Bitmap bmpInPb; private Point mousePoint = new Point(); private Point pbPoint = new Point(); private bool canDrag; private bool isDraging; private int bmpIndex; private void MainForm_Load(object sender, EventArgs e) lvView.Dock = DockStyle.Fill; tscbInterval.SelectedIndex = 1; ShowView(); bgBrush = new SolidBrush(lvView.BackColor); statusStrip1.Items0.Visible = false; format.Alignment = StringAlignment.Center; try if (!Directory.Exists(path) Directory.CreateDirectory(path); catch (Exception ex) MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; DirectoryInfo dir = new DirectoryInfo(path); foreach (DirectoryInfo d in dir.GetDirectories() Folder folder = new Folder(Application.StartupPath, d.Name); lstFolder.Items.Add(folder); /lstFolder.Items.Add(folder.Name); private void Form1_Load(object sender, EventArgs e) lvView.Dock = DockStyle.Fill; bgBrush = new SolidBrush(lvView.BackColor); statusStrip1.Items0.Visible = false; format.Alignment = StringAlignment.Center; try if (!Directory.Exists(path) Directory.CreateDirectory(path); catch (Exception ex) MessageBox.Show(ex.Message, "错䨪误¨®", MessageBoxButtons.OK, MessageBoxIcon.Error); return; DirectoryInfo dir = new DirectoryInfo(path); foreach (DirectoryInfo d in dir.GetDirectories()/获?取¨?dir中D的Ì?目?录? Folder folder = new Folder(Application.StartupPath, d.Name); lstFolder.Items.Add(folder); /lstFolder.Items.Add(folder.Name); private void toolStripButton1_Click(object sender, EventArgs e) FrmCreateFolder frmCreateFolder = new FrmCreateFolder(this.lstFolder); try frmCreateFolder.ShowDialog(this); finally frmCreateFolder.Dispose(); private void tsbtnLoad_Click(object sender, EventArgs e) FrmLoadPic frmLoadPic = new FrmLoadPic(this.lstFolder, this.statusStrip1); try if (frmLoadPic.ShowDialog(this) = DialogResult.OK) LoadToListView(); finally frmLoadPic.Dispose();/销毁窗体? private void lvView_DrawItem(object sender, DrawListViewItemEventArgs e) if (lvView.Items.Count = 0) return; Graphics g = e.Graphics; Folder folder = (Folder)lstFolder.SelectedItem; Bitmap bmp = folder.GetThubnail(e.Item.Text); Rectangle bmpRect = Folder.GetRectFromBounds(bmp, e.Bounds); bmpRect.Offset(0, 1); Rectangle boundRect = Folder.GetRectFromBounds(101, 101, e.Bounds); Rectangle textRect = new Rectangle(e.Bounds.X + 4, e.Bounds.Y + 109, e.Bounds.Width - 8, 16); g.DrawRectangle(boundPen, boundRect); if (e.State & ListViewItemStates.Selected) != 0) g.DrawImage(bmp, bmpRect); boundRect.Inflate(1, 1); g.DrawRectangle(selPen, boundRect); else g.DrawImage(bmp, bmpRect); g.FillRectangle(bgBrush, textRect); g.DrawString(e.Item.Text, lvView.Font, textBrush, textRect, format); private void LoadToListView() Folder folder = (Folder)lstFolder.SelectedItem; lvView.BeginUpdate(); lvView.Items.Clear(); if (!folder.IsLoaded) folder.LoadImage(); foreach (DictionaryEntry de in folder.bmps) lvView.Items.Add(string)de.Key); lvView.EndUpdate(); private void lstFolder_SelectedIndexChanged(object sender, EventArgs e) if (lstFolder.SelectedItems.Count = 0) return; LoadToListView(); /浏览 private void ShowView() tsMain.Visible = true; lstFolder.Visible = true; splitter1.Visible = true; lvView.Visible = true; pbPic.Visible = false; tsViewPic.Visible = false; private void ShowImage() tsMain.Visible = false; lstFolder.Visible = false; splitter1.Visible = false; lvView.Visible = false; pbPic.Visible = true; tsViewPic.Visible = true; private void lvView_DoubleClick(object sender, EventArgs e) Point p = Control.MousePosition; p = lvView.PointToClient(p); ListViewHitTestInfo info = lvView.HitTest(p); ShowImage(); PaintImageInPb(info.Item.Text); bmpIndex = info.Item.Index; private void PaintImageInPb(string bmpName) Folder folder = (Folder)lstFolder.SelectedItem; if (bmpInPb != null) bmpInPb.Dispose(); bmpInPb = folder.GetImage(bmpName); statusStrip1.Items1.Text = "名?称?:êo" + bmpName + "尺?寸ä?:êo" + bmpInPb.Width.ToString() + "x" + bmpInPb.Height.ToString(); pbPic.Image = bmpInPb; MatchImage(); private void MatchImage() if (tsbtnNormal.Checked) /正常显示模式? pbPic.Dock = DockStyle.None; pbPic.SizeMode = PictureBoxSizeMode.AutoSize; pbPic.Left = (panel1.Width - pbPic.Width) / 2; pbPic.Top = (panel1.Height - pbPic.Height) / 2; if (pbPic.Width > panel1.Width | pbPic.Height > panel1.Height) /图像的长或宽大于显示边框时 canDrag = true; pbPic.Cursor = Cursors.Hand;/改变鼠标指针样式 else /图像小于显示边框则不允许拖ª动 canDrag = false; pbPic.Cursor = Cursors.Default; else canDrag = false; pbPic.Cursor = Cursors.Default; if (bmpInPb.Width > panel1.Width | bmpInPb.Height > panel1.Height) pbPic.Dock = DockStyle.Fill; pbPic.SizeMode = PictureBoxSizeMode.Zoom; else pbPic.Dock = DockStyle.None; pbPic.SizeMode = PictureBoxSizeMode.AutoSize; pbPic.Left = (panel1.Width - pbPic.Width) / 2; pbPic.Top = (panel1.Height - pbPic.Height) / 2; private void tsbtnMatch_Click(object sender, EventArgs e) ToolStripButton btn = (ToolStripButton)sender; if (btn.Checked) return; tsbtnNormal.Checked = false; tsbtnMatch.Checked = false; btn.Checked = true; MatchImage(); private void pbPic_MouseDown(object sender, MouseEventArgs e) if (e.Button != MouseButtons.Left) return; isDraging = true; mousePoint.X = e.X; mousePoint.Y = e.Y; pbPoint.X = pbPic.Left; pbPoint.Y = pbPic.Top; private void pbPic_MouseMove(object sender, MouseEventArgs e) if (!isDraging | !canDrag) return; int x = pbPic.Left; if (pbPic.Width > panel1.Width) x += e.X - mousePoint.X; if (x > 0) x = 0; else if (x + pbPic.Width < panel1.Width) x = panel1.Width - pbPic.Width; int y = pbPic.Top; if (pbPic.Height > panel1.Height) y += e.Y - mousePoint.Y; if (y > 0) y = 0; else if (y + pbPic.Height < panel1.Height) y = panel1.Height - pbPic.Height; pbPic.Left = x; pbPic.Top = y; private void pbPic_MouseUp(object sender, MouseEventArgs e) if (e.Button != MouseButtons.Left) return; isDraging = false; private void tsbtnReturn_Click(object sender, EventArgs e) timer1.Stop(); pbPic.Image = null; if (bmpInPb != null) bmpInPb.Dispose(); ShowView(); private void tsbtnPeriod_Click(object sender, EventArgs e) if (bmpIndex = 0) bmpIndex = lvView.Items.Count - 1; else bmpIndex-; ListViewItem item = lvView.ItemsbmpIndex; PaintImageInPb(item.Text); private void tsbtnNext_Click(object sender, EventArgs e) if (bmpIndex = lvView.Items.Count - 1) bmpIndex = 0; else bmpIndex+; ListViewItem item = lvView.ItemsbmpIndex; PaintImageInPb(item.Text); private void sbtnAntoPlay_Click(object sender, EventArgs e) timer1.Enabled = !timer1.Enabled; tsbtnAutoPlay.Checked = timer1.Enabled; private void tscbInterval_SelectedIndexChanged(object sender, EventArgs e) timer1.Interval = (int)(Math.Pow(2, tscbInterval.SelectedIndex) * 1000); private void timer1_Tick(object sender, EventArgs e) tsbtnNext_Click(null, null); private void toolStripButton5_Click(object sender, EventArgs e) Close(); private void tsbtnDelFolder_Click(object sender, EventArgs e) if (lstFolder.SelectedItems.Count = 0) MessageBox.Show("请选择一个目录再进行删除", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; DialogResult dr = MessageBox.Show("删除目录将导致该目录下的图片丢失并且该操作不可恢复”是否真的要删除" + lstFolder.Text +"确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question); string delFolderName = "" if (dr = DialogResult.Yes) lvView.Clear(); delFolderName = lstFolder.Text; (Folder)lstFolder.SelectedItem).RemoveAll(); lstFolder.Items.Remove(lstFolder.SelectedItem); statusStrip1.Items1.Text = "目录" + delFolderName + "已经被删除" private void tsbtnDel_Click(object sender, EventArgs e) if (lstFolder.SelectedItems.Count = 0 | lvView.Visible = false) MessageBox.Show("请选择一张图片再进行删除!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information); return; Folder folder = (Folder)lstFolder.SelectedItem; try lvView.BeginUpdate(); while (lvView.SelectedItems.Count > 0) ListViewItem item = lvView.SelectedItems0; lvView.Items.Remove(item); folder.Remove(item.Text); catch (Exception ex) MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; finally lvView.EndUpdate(); private void 添¬¨ª加