首页 > 其他分享 >华南理工大学软件学院_3181026

华南理工大学软件学院_3181026

时间:2023-03-18 20:46:46浏览次数:36  
标签:3181026 listView1 Text cmd 华南理工大学 form2 dict 软件 Intent

1.构建数据库连接类DB

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace SCUT
{
    
    class DB : IDisposable
    {
        private SqlConnection sqlConnection;

        //与打开的SQL服务建立连接
        public DB()
        {   
            sqlConnection = new SqlConnection(@"server=.\SQLEXPRESS;database=SCUT_2018;Trusted_Connection=SSPI;");
            sqlConnection.Open();
        }

        //返回参数控制CMD
        public SqlCommand getCmdBySql(string sql)
        {
            return  new SqlCommand(sql, sqlConnection);
        }
        
        //返回DataTable类型语句
        public DataTable getDataByCmd(SqlCommand cmd)
        {
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
            DataTable dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            return dataTable;
        }
        //执行无需返回值的插入和删除语句
        public void setDataByCmd(SqlCommand cmd)
        {
            cmd.ExecuteNonQuery();
        }
        public void Dispose()
        {
            sqlConnection.Close();
        }

    }
}
  1. 构建不同form之间传递值的Intent类
using System;
using System.Collections.Generic;
using System.Text;

namespace SCUT
{
    class Intent
    {
        public static Dictionary<string, object> dict = new Dictionary<string, Object>();
    }
}

  1. Form类中常见要求的函数构建
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace SCUT
{
    public partial class Form1 : Form
    {
        private DB db;

        //构造函数,建立一个数据库连接
        public Form1()
        {
            
            InitializeComponent();
            db = new DB();
        }


        //统计功能函数-可根据需求进行改写
        public void Fun2()
        {


            listView1.Clear();

            listView1.BeginUpdate();
            listView1.Columns.Add("所在城市", listView1.Width / 2 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("订单总金额", listView1.Width / 2 - 1, HorizontalAlignment.Left);

            //按照地方统计订单金额
            string sql = "SELECT E1.EmpCity, SUM(O1.OderMoney) " +
                        "FROM EMPLOYER E1, ORDERS O1 " +
                        "WHERE E1.EmpNo = O1.EmpNo " +
                        "GROUP BY E1.EmpCity ";
            SqlCommand cmd = db.getCmdBySql(sql);


            DataTable table = db.getDataByCmd(cmd);

            for (int i = 0; i < table.Rows.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    if (j == 0) item.Text = table.Rows[i][j] + "";
                    else item.SubItems.Add(table.Rows[i][j] + "");
                }
                listView1.Items.Add(item);
            }
            listView1.EndUpdate();

        }

        //查询功能函数-可根据需求进行改写
        public void Fun2()
        {

            listView1.Clear();

            listView1.BeginUpdate();
            listView1.Columns.Add("经销商号", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("订单号", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("商品名称", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("经销商名称", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("所在城市", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("订购日期", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            listView1.Columns.Add("金额", listView1.Width / 7 - 1, HorizontalAlignment.Left);
            //查询符合调价的订单信息
            string sql = "SELECT E.EmpNo,O.OrdNo,O.OrdName,E.EmpCity,O.OrdDate,O.OderMoney " +
                        "FROM EMPLOYER E, ORDERS O " +
                        "WHERE E.EmpNo = O.EmpNo AND O.OrdName LIKE @OrdName AND " +
                        "(E.EmpNo = @EmpNo OR E.EmpName = @EmpName) "+
                        "ORDER BY E.EmpName DESC, O.OrdName ASC, O.OrdDate DESC, O.OderMoney DESC";
            SqlCommand cmd = db.getCmdBySql(sql);

            cmd.Parameters.AddWithValue("@OrdName","%"+textBox1.Text+"%");
            cmd.Parameters.AddWithValue("@EmpNo",comboBox1.Text);
            cmd.Parameters.AddWithValue("@EmpName",comboBox2.Text);

            DataTable table = db.getDataByCmd(cmd);

            for (int i = 0; i < table.Rows.Count; i++)
            {
                ListViewItem item = new ListViewItem();
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    if (j == 0) item.Text = table.Rows[i][j] + "";
                    else item.SubItems.Add(table.Rows[i][j] + "");
                }
                listView1.Items.Add(item);
                
            }
            listView1.EndUpdate();

        }

        //新增部分函数-可根据需求进行改写
        private void button2_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            
            //对于新增部分form_flag设置为 0,修改部分设置为 1
            Intent.dict["form1_flag"] = 0;
            if (form2.ShowDialog() == DialogResult.OK)
            {
                foreach(ListViewItem item in this.listView2.Items)
                {
                    if (Intent.dict["form2_textbox1_text"] + "" == item.SubItems[0].Text)
                    {
                        MessageBox.Show("已存在该员工号", this.Text);
                        return;
                    }
                }

                //判断日期是否符合格式
                Regex regex = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$");
                if (!regex.IsMatch(Intent.dict["form2_textbox3_text"] + ""))
                {
                    MessageBox.Show("日期格式不正确,应为yyyy-MM-dd", this.Text);
                    return;
                }

                //判断外键是否存在
                bool forign_key = false;
                foreach (ListViewItem item in this.listView5.Items)
                {
                    
                    if (Intent.dict["form2_textbox4_text"] + "" == item.SubItems[0].Text)
                    {
                        forign_key = true;
                        break;
                    }
                }
                if (forign_key == false)
                {
                    MessageBox.Show("不存在该小科室", this.Text);
                    return;
                }

                string sql = "INSERT INTO [Patient] VALUES(@Pid,@Pname,@Date,@GroupNo)";
                SqlCommand cmd =  db.getComBySql(sql);
                cmd.Parameters.AddWithValue("@Pid", Intent.dict["form2_textbox1_text"] + "");
                cmd.Parameters.AddWithValue("@Pname", Intent.dict["form2_textbox2_text"] + "");
                cmd.Parameters.AddWithValue("@Date", Intent.dict["form2_textbox3_text"] + "");
                cmd.Parameters.AddWithValue("@GroupNo", Intent.dict["form2_textbox4_text"] + "");
                db.setBySql(cmd);
                Fun2();
            }
            
        }
        //修改部分函数-可根据需求进行改写
        private void button3_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            Intent.dict["form1_text"] = this.Text;
            //form1_flag = 0 为增加,1 为修改,2为删除
            Intent.dict["form1_flag"] = 1;
            //必须先判断是否选中
            try
            {
                string a = listView2.SelectedItems[0].SubItems[0].Text + "";
            }
            catch (Exception)
            {
                MessageBox.Show("必须先选中要修改的病人信息", this.Text);
                return;
            }
            //记录选中的信息
            Intent.dict["form1_selectedItem0"] = listView2.SelectedItems[0].SubItems[0].Text;
            Intent.dict["form1_selectedItem1"] = listView2.SelectedItems[0].SubItems[1].Text;
            Intent.dict["form1_selectedItem2"] = listView2.SelectedItems[0].SubItems[2].Text;
            Intent.dict["form1_selectedItem3"] = listView2.SelectedItems[0].SubItems[3].Text;
            if (form2.ShowDialog() == DialogResult.OK)
            {
                bool canUpdate = true;
                //如果修改过病人号,判断是否一致
                if(!(Intent.dict["form2_textbox1_text"] + "" == Intent.dict["form1_selectedItem0"]+""))
                {
                    foreach (ListViewItem item in this.listView2.Items)
                    {
                        if (Intent.dict["form2_textbox1_text"] + "" == item.SubItems[0].Text)
                        {
                            MessageBox.Show("已存在该员工号", this.Text);
                            return;
                        }
                    }
                }

                //判断日期是否符合格式
                Regex regex = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$");
                if (!regex.IsMatch(Intent.dict["form2_textbox3_text"] + ""))
                {
                    MessageBox.Show("日期格式不正确,应为yyyy-MM-dd", this.Text);
                    return;
                }
  
                string sql = "UPDATE Patient" +
                             " SET PID = @NewPid, PName = @PName, [Date] = @Date, GroupNo = @GroupNo" +
                             " where PID = @OldPid";
                SqlCommand cmd = db.getComBySql(sql);
                cmd.Parameters.AddWithValue("@NewPid", Intent.dict["form2_textbox1_text"] + "");
                cmd.Parameters.AddWithValue("@PName", Intent.dict["form2_textbox2_text"] + "");
                cmd.Parameters.AddWithValue("@Date", Intent.dict["form2_textbox3_text"] + "");
                cmd.Parameters.AddWithValue("@GroupNo", Intent.dict["form2_textbox4_text"] + "");
                cmd.Parameters.AddWithValue("@OldPid", Intent.dict["form1_selectedItem0"] + "");
                db.setBySql(cmd);
                Fun2();

            }
        //删除部分函数-可根据需求进行改写
        private void button4_Click(object sender, EventArgs e)
        {
            //判断是否选中
            try
            {
                string a = listView2.SelectedItems[0].SubItems[0].Text;
            }
            catch
            {
                MessageBox.Show("必须先选中要删除的病人信息", this.Text);
                return;
            }
            //删除操作无需用到Form2,只需获得该列的ID即可
            string sql = "Delete FROM Patient where Pid = @Pid";
            SqlCommand cmd = db.getComBySql(sql);
            cmd.Parameters.AddWithValue("@Pid", listView2.SelectedItems[0].SubItems[0].Text);
            db.setBySql(cmd);
            Fun2();
        }
        }
    }
}
  1. Form类修改框的常见函数构造
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SCUT
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "")
            {
                MessageBox.Show("任意一项没有完成填写!", this.Text);
            }
            else
            {
                //关闭form2之间,将要传给form1的值压入Intent中的dict    
                Intent.dict["form2_textbox1_text"] = textBox1.Text;
                Intent.dict["form2_textbox2_text"] = textBox2.Text;
                Intent.dict["form2_textbox3_text"] = textBox3.Text;
                Intent.dict["form2_textbox4_text"] = textBox4.Text;
                this.DialogResult = DialogResult.OK;//同时设置返回值为OK,不设置的话,默认返回Cancel    
                this.Close();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            if ((int)Intent.dict["form1_flag"] == 1)
            {
                textBox1.Text = Intent.dict["form1_selectedItem0"] + "";
                textBox2.Text = Intent.dict["form1_selectedItem1"] + "";
                textBox3.Text = Intent.dict["form1_selectedItem2"] + "";
                textBox4.Text = Intent.dict["form1_selectedItem3"] + "";
            }
            else
            {
                textBox1.Focus();
            }
        }
    }
}

5.特殊情况正则表达式的应用

  • 判断是否为yyyy-MM-dd格式的日期
   Regex regex = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$");
    if (!regex.IsMatch(Intent.dict["form2_textbox3_text"] + ""))
    {
        MessageBox.Show("日期格式不正确,应为yyyy-MM-dd", this.Text);
        return;
    }
  • 判断月份是否符合规范
    Regex regex_month = new Regex(@"^(0?[1-9]|1[0-2])$");
    if (!regex_month.IsMatch(Intent.dict["form3_textBox4"]+""))
    {
        MessageBox.Show("请输入正确的月份", this.Text);
        return;
    }
  • 判断人数是否为正整数
    Regex regex_num = new Regex(@"^[0-9]*[1-9][0-9]*$");
    if (!regex_num.IsMatch(Intent.dict["form3_textBox5"] + ""))
    {
        MessageBox.Show("请输入正确的人数", this.Text);
        return;
    }
  • 判断是否输入的是数字
   Regex regex = new Regex("^[0-9]*$");
    if (!regex.IsMatch(Intent.dict["form2_textbox3_text"] + ""))//
    {
        canUpdate = false;
        MessageBox.Show("年龄不为正数!", this.Text);
        return;
    }
  1. 特殊组件的使用

7.常见组件的设置

标签:3181026,listView1,Text,cmd,华南理工大学,form2,dict,软件,Intent
From: https://www.cnblogs.com/wyk0412/p/17231692.html

相关文章

  • 2023.3.18(软件工程日报)
    Spinner是下拉框控件,它用于从一串列表中选择某项,其功能类似于单选按钮的组合。下拉列表的展示方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设......
  • 圈子社团交友分享日常h5软件小程序定制开发源码二开
    搜索和关注自己喜欢的内容,点击上方的搜索框输入关键词或者关键语句对内容进行检索,找到对应的视频点击就可以看到。新用户登陆客户端需要使用账号和密码登陆,点击下方的用户注......
  • 谷歌-软件工程
    原文链接:https://qiangmzsx.github.io/Software-Engineering-at-Google/#/?id=software-engineering-at-google前言软件工程softwareengineering编程programming......
  • 从事软件测试,在外包公司待了3年我后悔了...
    不要去外包!上车容易,下车很难作为跳过很多坑的“坑主”,先送你一个小小的建议:你很优秀,即使现在什么都不会,以后依然会很优秀,千万不要迁就进入外包:1. 外包公司很少具备......
  • 简单高效的打字学习软件:Master of Typing 3 Mac版
    想要提升打字速度,一款好用的打字学习软件必不可少,今天推荐MasterofTyping3Mac版给大家,一款帮助用户提高打字技巧的打字游戏。它具有不同难度级别的多个级别,可以测试和......
  • 20230317软件测试入门
    https://zh.wikipedia.org/wiki/软件测试https://www.ibm.com/cn-zh/topics/software-testinghttps://www.softwaretestingmaterial.com/software-testing/https......
  • scrcpy软件的使用
    一、scrcpy软件介绍:scrcpy是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备。它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需......
  • 3月17日软件工程结队日报
    今日对查找换乘站进行了尝试,目前的思路是对全部地铁站锦星便利,设立flag,将flag>1的站存到另一个数据库中,但是在实际操作时发现了错误,那就是不清楚如何对两个换乘站的线路进......
  • 软件工程3月17日结队日报
    学习时间:两小时代码量:300博客量:1任务:今天研究了第三个功能的一些构想思路,总共存在三种情况:第一种情况中,得到查询输入的起始站和终点站,查询line表,在二者的Line属性......
  • 软件工程师3月17日结队日报
    今日对查找换乘站进行了尝试,目前的思路是对全部地铁站锦星便利,设立flag,将flag>1的站存到另一个数据库中,但是在实际操作时发现了错误,那就是不清楚如何对两个换乘站的线路进......