GIS项目

GIS项目

作者的第一个项目,具有重要意义

同时,也是一个命运多舛的项目

开始于24年6月1日,本是一个创新创业的比赛项目

一开始是打算做一个平台,实现对应的功能

时间来到7月,发现时间不够,于是打算先搭建一个有界面的网站,先不管功能和交互

作者就开始呼哧呼哧学习前端

于8月初搭建了网站的雏形,被通知比赛结束,项目终止

时光匆匆,一转眼到了10月

项目组长说继续搞平台,项目继续进行

跟老师沟通之后决定使用C#和框架进行开发

于11月初完成了该项目并提交给学校

经过2个月漫长的等待,终于在1月3号申请完毕

证书终于到我的手上啦

学校科研处比较忙,项目贡献率证书要在下个学期才能开出来(先欠着,嘻嘻)

先给照片占个位

开发

基于C#的窗体开发,使用MySQL数据库储存数据

功能包括:

  • 用户注册
  • 用户或者管理员登录
  • 个人页面展示个人信息
  • 矿区页面展示矿区信息以及相关图片
  • 矿区页面矿区信息修改以及图片上传
  • 分析页面通过输入各项数据,通过相关算法计算出相关指标
  • 分析页面提供保存到数据库和帮助的按钮
  • 生态评分页面从数据库获取矿区数据,并展示评分
  • 退出功能

开发过程遇到的问题以及解决方法

  1. 连接本地数据库(通过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();
    }
  2. 取消每个功能开新窗体的效果,统一在一个窗口进行,需要设置导航栏效果

    通过tabcontrol嵌套tabcontrol实现一级导航栏效果

    通过tabcontrol控件和menuStrip控件实现二级导航栏效果

    将tabcontrol的每个标签页绑定menuStrip的各级菜单选项

  3. 获取用户输入的内容

    通过获取textbox的text方法获取

  4. 注册功能实现时,防止注册的账号重复

    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
    public 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;
    }
    }
    }
  5. 如果重复快速获取个人信息,会导致异常

    创建静态变量,登录之后获取数据库的数据赋给静态变量,再将静态变量的值给显示的控件

  6. 数据传入传出数据库需要转化数据类型

    int转化成string:通过Tostring方法转化

    string转化数字:通过int.please方法

  7. 判断用户输入的内容是否为数字

    通过double.TryParse的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private 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;
    }
    }
  8. 设置上传图片的功能

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private 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");
    }
    }

由于项目代码量过多,所以在此不进行展示