广西网站运营最好的公司,网络平台是什么意思,网站建设项目设计书,如何免费做网站网页基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView #xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高… 基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高德地图天气API的使用 数据库设计部分完整代码资源 说明 今天也是刚刚答完辩终于可以将自己写的代码放到CSDN上啦这个是开学之前就做好的一个项目然后就是简单的使用winform做了一个CS结构的课设实现了基础的crud以及扩展的导入导出Excel和图表控件及高德地图天气API接口的使用。使用了一些基本的控件和特殊一点的控件就是ImageList 和 listView (因为我们课上没有学过所以觉得比较特殊) 项目结构
然后下面的话是整体项目的一个结构简单分了一下包DataAccess就是数据接入层dao,Entity就是对应的一些实体类Resources是项目的一些静态资源Utils下的话是我自己做的一些工具类Views的是winform一些不同功能的窗体区分 项目运行截图及实现的功能 登录和注册 账号的密码使用md5进行加密 登录首页 这里的话实现了一个侧边栏的封装和自定义最小化和最大化按钮然后中间主体是一个高德地图的天气API具体使用我会在后面的文章列出然后还有个底部的计时器实现时间刷新功能。 用户的个人信息修改头像上传及重置功能 游戏商城列表查看用户端 这里主要使用的两个控件就是listView和imageList以及Panel布局组件当我点选左侧的游戏时右侧的游戏详情会进行显示当然多条件查询也是可以的哈 个人游戏仓库查看 这里的话和上面那个也差不多就是自己买的游戏用到的控件也是imageList和那个listView 管理员账号的登录游戏管理 管理员账号登录右侧显示的侧边栏内容是不一样的实现了数据的导入导出可以将Excel中的内容导入到数据库中然后就是一些crud操作。 用户信息管理 和上面的游戏管理功能基本差不多就不一一赘述啦。 数据分析 这个的话是使用了一些livecharts的图表控件来做的算是一点点创新把。
部分代码一些说明(个人觉得一些难点的说明)
一、ListView ImageList 的综合使用 在C#中ListView是一个常用的控件用于在Windows窗体应用程序中显示数据。它可以以多种方式呈现数据包括大图标、小图标、列表和详细信息。 在C#中ImageList是一个用于存储图像集合的类。它提供了一种方便的方式来管理和使用一组图像通常用于在用户界面控件中显示图像列表。 private void DrawLvGame(DataSet ds)
{// 先清空防止计时器一直添加this.listViewGames.Items.Clear();this.imageList1.Images.Clear(); //清空图片数组// 渲染到listView中if (ds ! null ds.Tables.Count 0 ds.Tables[0].Rows.Count 0){listViewGames.View View.LargeIcon; //设置listview为大图标模式listViewGames.LargeImageList imageList1;// 设置listview的图片数组listViewGames.Visible true;// 开始绘制控件暂时挂起lvlistViewGames.BeginUpdate();for (int i 0; i ds.Tables[0].Rows.Count; i){ListViewItem lv new ListViewItem();lv.ImageIndex i;lv.Text ds.Tables[0].Rows[i][0].ToString();// 设置图标this.imageList1.Images.Add(Image.FromFile(baseImageUrl ds.Tables[0].Rows[i][1].ToString()));listViewGames.Items.Add(lv);}// 结束绘制listViewGames.EndUpdate();}
}说明
通过 listview对象.view 的方式可以设置ListView的显示方式其中View对象是一个枚举类列举了可供listview选择的5种方式我选择大图标模式显示效果好看一点 我这里的需求是需要将数据库的游戏信息读取出来然后动态的去显示对应的图片所以需要通过listViewGames.LargeImageList imageList1 去绑定一个图片数组imageList1 为 ImageList控件listViewGames 为ListView控件 BeginUpdate() 和 EndUpdate()两个方法方法用于控制 ListView 的更新。它们的作用是在进行大量添加、删除或修改 ListView 中的项目时提高性能和用户界面响应速度。ImageList 添加数据通过ImageList对象.Images.Add(Image对象)这里有个需要注意的点应为我们从数据库中读取的图片路径为一个字符串所以我们需要通过这个字符串转换为Image对象然后Image类中提供了一个方法 Image.FromFilepath,将文件路径对应的图片读取为Image对象。综上所述我只需要在获取到游戏列表数据时去遍历将图片路径添加到imageList控件的项目中然后在ListView控件中添加ListViewItem即可。
二、图片上传以及picturebox 图片的动态替换
文件框选择 OpenFileDialog 完成文件上传到本地磁盘功能
private void btnChangeAvatr_Click(object sender, EventArgs e)
{OpenFileDialog fileDialog new OpenFileDialog();fileDialog.Multiselect true; fileDialog.Title 请选择文件;fileDialog.Filter 所有文件(*jpg*)|*.jpg*; //设置要选择的文件的类型if (fileDialog.ShowDialog() DialogResult.OK){// 获取图片上传的路径string localFilePath fileDialog.FileName;//格式化处理提取文件名 数据库要存的urlstring savePath localFilePath.Substring(localFilePath.LastIndexOf(\\) 1);// 存储到本地目录中 如果本地不存在该图片那么就上传if (!File.Exists(baseImageUrl savePath)){File.Copy(localFilePath, baseImageUrl savePath, false);}// 数据库更新操作 传递nickname和新的图片url即可int flag UserDataAccess.GetInstance().UpdateUserAvatar(user.Nickname, savePath);if (flag 0){MessageBox.Show(更新成功\n本地存储图片路径为: baseImageUrl savePath);RefreshWindow();}else{MessageBox.Show(修改失败);}}}说明
c#中的资源图片通常存放于当前项目的Resources若想在项目中使用图片则必须将图片上传到Resources目录下。通常上传文件获取文件的路径是一个完整路径而我们只需要它的文件名所以通过Substring(localFilePath.LastIndexOf(“\”) 1) 来截取最后一级目录即文件名文件上传一个简单的去重校验 File.Exists(path),返回 true | false,文件上传 File.copy(源路径目的路径是否重写【true|false】)
文件动态替换功能
Bitmap bitmap new Bitmap(baseImageUrl user.Avatar);
this.picAvatar.BackgroundImage bitmap;说白了就两行代码PictureBox.BackgroundImage 的值可以是一个 Bitmap对象Bitmap对象继承自Image对象而 Bitmap对象可以通过类似File类的方式通过路径产生。 三、图表插件的使用 因为之前写过一篇类似的博客 我就直接贴博客链接了winform .net6 和 framework 的图表控件为啥项目中不存在chart控件该如何解决? 因为我这个项目创建的时候没注意然后创建的项目是 .net6版本的所以下面就介绍 ScottPlot 这个图表插件的使用看文档就基本ok了,scottPlot 官网链接。 进入官网选择QuickStart快速开始然后选择winform的就行看看快速入门的例子 看完之后就根据自己的需求去选择不同的图表进行配置 https://scottplot.net/cookbook/4.1/查看它的cookbook就好啦 一个柱状图的demo https://scottplot.net/cookbook/4.1/感觉着配置都基本不用说反正按照配置项去获取对应的数据就可以生成一个动态的图表了。 下面贴一张我的SQL图表例子 四、SQL工具类封装
SQL工具类我使用的是一个单例模式 提供一个静态类对象一个私有构造器以及一个获取类对象的静态方法。这样就可以避免每次操作数据库去new一个对象了至始至终都是一个对象在操作。
using GamePlantForm.Dao;
using GamePlantForm.Entity;
using GamePlantForm.Utils;
using Microsoft.VisualBasic.ApplicationServices;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace GamePlantForm.DataAccess
{public class GameDataAccess{// 使用单例模式private static GameDataAccess instance;private GameDataAccess() { }public static GameDataAccess GetInstance(){return instance ?? (instance new GameDataAccess());}SqlConnection conn;SqlCommand comm;SqlDataAdapter adapter;/// summary/// 数据库资源释放/// /summaryprivate void Dispose(){if (adapter ! null){adapter.Dispose();adapter null;}if (comm ! null){comm.Dispose();comm null;}if (conn ! null){conn.Close();conn.Dispose();conn null;}}/// summary/// 数据库链接/// /summaryprivate bool DBConnection(){// string connStr Data Source.\\SQLEXPRESS;databasegame_plantform;uidsa;pwd123456;if (conn null){conn new SqlConnection(connStr);}try{conn.Open();return true;}catch (Exception ex){return false;}}}
}五、高德地图天气API的使用
这个的话重点在于自己找到对应的API接口文档然后发送请求用几个实体类对接一些想要的数据即可。我这里只放一下自己写的发送请求的代码。
tips:注意一定使用自己申请的密钥哇
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using System.Threading.Tasks;
using GamePlantForm.Entity;namespace GamePlantForm.Utils
{// 自定义天气接口工具类internal class WeatherRobin{private readonly HttpClient _httpClient;public WeatherRobin(){_httpClient new HttpClient();}// 150200public async void GetWeatherAsync(string cityName,Label labprovince,Label labcity, Label labadcode, Label labweather,Label labtemperature, Label labwinddirection, Label labwindpower, Label labhumidity, Label labreporttime){var response await _httpClient.GetAsync(https://restapi.amap.com/v3/weather/weatherInfo?citycityNamekey自己的天气密钥);var content await response.Content.ReadAsStringAsync();// 1. 将获取到的json转换为数组RootObject obj Newtonsoft.Json.JsonConvert.DeserializeObjectRootObject (content);// 2. 将获取到的数据填充到传递过来的实体类对象中labprovince.Text : obj.lives[0].province;labcity.Text : obj.lives[0].city;labadcode.Text : obj.lives[0].adcode;labweather.Text : obj.lives[0].weather;labtemperature.Text : obj.lives[0].temperature℃;labwinddirection.Text : obj.lives[0].winddirection;labwindpower.Text : obj.lives[0].windpower级;labhumidity.Text : obj.lives[0].humidity;labreporttime.Text : obj.lives[0].reporttime;}}
}数据库设计部分 ER图之间的关系有点偷懒了不想画啦QAQ这个SQL资源需要的可以找我拿
完整代码资源
完整代码可以私信找我发也可以通过这篇文章的绑定资源去下载。 tips:本人只是个又菜又爱分享的小白,如果这篇文章可以帮助到你帮我点个哈哈哈