GIS项目

GIS项目
小楼夜听雨GIS项目
作者的第一个项目,具有重要意义
同时,也是一个命运多舛的项目
开始于24年6月1日,本是一个创新创业的比赛项目
一开始是打算做一个平台,实现对应的功能
时间来到7月,发现时间不够,于是打算先搭建一个有界面的网站,先不管功能和交互
作者就开始呼哧呼哧学习前端
于8月初搭建了网站的雏形,被通知比赛结束,项目终止
时光匆匆,一转眼到了10月
项目组长说继续搞平台,项目继续进行
跟老师沟通之后决定使用C#和框架进行开发
于11月初完成了该项目并提交给学校
经过2个月漫长的等待,终于在1月3号申请完毕
证书终于到我的手上啦
学校科研处比较忙,项目贡献率证书要在下个学期才能开出来(先欠着,嘻嘻)
先给照片占个位
开发
基于C#的窗体开发,使用MySQL数据库储存数据
功能包括:
- 用户注册
- 用户或者管理员登录
- 个人页面展示个人信息
- 矿区页面展示矿区信息以及相关图片
- 矿区页面矿区信息修改以及图片上传
- 分析页面通过输入各项数据,通过相关算法计算出相关指标
- 分析页面提供保存到数据库和帮助的按钮
- 生态评分页面从数据库获取矿区数据,并展示评分
- 退出功能
开发过程遇到的问题以及解决方法
连接本地数据库(通过MySQL直接连接失败和ODBC连接失败,暂时不知道原因)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39//注意:使用数据库信息需要更换下面两个类函数的数据库相关信息
/* builder.Server = "localhost";
builder.Port = 3306;
builder.UserID = "root";
builder.Password = "200402";
builder.Database = "gis项目";*/
internal class MySQL连接
{
MySqlConnection sc; //数据库连接的对象
public MySqlConnection connect()//连接数据库
{
var builder = new MySqlConnectionStringBuilder();
builder.Server = "localhost";
builder.Port = 3306;
builder.UserID = "root";
builder.Password = "200505";
builder.Database = "gis项目";
sc = new MySqlConnection(builder.ConnectionString);//集合上面的数据,给交换函数,通过函数打开数据库
sc.Open();
return sc;
}
public MySqlCommand command(string sql)//执行SQL语句
{
MySqlCommand cmd = new MySqlCommand(sql, connect());//将SQL语句和连接的数据库对象执行
return cmd;
}
public int Execute(string sql)//执行SQL语句后,返回数据库表中,数据条款的数量
{
return command(sql).ExecuteNonQuery();
}
public MySqlDataReader read(string sql)//执行sql语句,读取数据库中的数据返回成数组形式一条
{
return command(sql).ExecuteReader();
}取消每个功能开新窗体的效果,统一在一个窗口进行,需要设置导航栏效果
通过tabcontrol嵌套tabcontrol实现一级导航栏效果
通过tabcontrol控件和menuStrip控件实现二级导航栏效果
将tabcontrol的每个标签页绑定menuStrip的各级菜单选项
获取用户输入的内容
通过获取textbox的text方法获取
注册功能实现时,防止注册的账号重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36public bool YZFF(string id)
{
// 数据库连接字符串,请根据您的MySQL服务器配置进行替换
string connectionString = "server=localhost;user=root;database=gis项目;port=3306;password=200505;";
// 要检查的账号
string accountToCheck = $"{id}";
// 使用using语句确保MySqlConnection对象在使用后正确关闭和释放资源
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
// SQL查询语句,用于检查账号是否存在
// 使用EXISTS可以优化查询,因为它在找到第一个匹配项时就会停止搜索
string query = "SELECT EXISTS(SELECT 1 FROM 用户信息 WHERE U_账号 = @U_账号)";
// 使用using语句确保MySqlCommand对象在使用后正确关闭和释放资源
using (MySqlCommand command = new MySqlCommand(query, connection))
{
// 使用参数化查询来避免SQL注入攻击
command.Parameters.AddWithValue("@U_账号", accountToCheck);
// 打开数据库连接
connection.Open();
// 执行查询,并返回查询结果的第一行第一列的值
// ExecuteScalar如果返回的是null则无法直接转化成bool类型
// 判断ExecuteScalar返回值是否为空,并将值转化为整数再判断为1还是为0
object result = command.ExecuteScalar();
bool accountExists = (result != null && Convert.ToInt32(result) > 0);
// 根据返回的结果判断账号是否存在
return accountExists;
}
}
}如果重复快速获取个人信息,会导致异常
创建静态变量,登录之后获取数据库的数据赋给静态变量,再将静态变量的值给显示的控件
数据传入传出数据库需要转化数据类型
int转化成string:通过Tostring方法转化
string转化数字:通过int.please方法
判断用户输入的内容是否为数字
通过double.TryParse的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14private bool cd(TextBox textBox1)
{
double number1;
bool isValidInput = double.TryParse(textBox1.Text, out number1);
if (!isValidInput)
{
MessageBox.Show("请输入有效的数字!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
else
{
return true;
}
}设置上传图片的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15private void button94_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.gif";
openFileDialog.Title = "Select an Image File";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
pictureBox3.Image = Image.FromFile(filePath);
// pictureBox3是图片的控件
// 如果需要保存图片到另一个位置,可以在这里添加代码
// 例如:Image img = Image.FromFile(filePath);
// img.Save("C:\\path\\to\\save\\image.jpg");
}
}
由于项目代码量过多,所以在此不进行展示









