C#捐款信息管理系统

news2025/1/12 10:43:55

捐款信息管理系统

技术

C#+sqlserver

主要功能

  1. 登录、注册功能,两种角色登录判断,一种为管理员,一种为用户
  2. 管理员发起项目,即发布项目,同时拥有对项目的增加、删除、修改、查询
  3. 用户对管理员发起的项目可以进行申请操作,根据发布的项目类型提交自己的募捐申请。
  4. 用户可以跟踪查询自己申请的结果,是否通过,以及是否完成。
  5. 管理员可以对用户的申请进行审批。
  6. 管理员对所有项目下的用户申请进行统一查询如:通过申请人、项目类型、是否通过、是否完成,金额入账等操作
  7. 计算捐款金额是否满足提交的所需金额,并给出结果,显示是否完成或者还差多少。

功能实现

管理员审批实现

在这里插入图片描述
功能描述
如图管理员首先可以通过申请人、项目类型进行查询,可以两个关键字联合,也可以单独,同时基于该两个字段可以查询相关通过的,未通过的,完成的,未完成的信息。如:申请人:小明,项目类型:希望工程。当点击全部查询,输出符合该两个条件的所有信息。如点击通过查询则筛选出符合该两条信息且申请要是通过的记录,点击未通过查询,完成项目查询和未完成项目同理。

string  allinfo= "select * from (select p.项目编号,a.受捐人编号 申请编号,u.昵称 申请人,p.项目类型,a.申请时间,a.所需金额,a.已筹金额,a.审核状态,(case when a.已筹金额>=a.所需金额 then '是' else '否' end ) as 项目是否完成,a.被捐账号 from apply a left join project p on a.xmID=p.项目编号 left join userLogin u on a.申请人=u.账号) tab";

public DataTable GetAllDataType(string a, string b,string type)   //通过
{
     string strsql = "";
     if (type == "pass")
     {
         strsql = allinfo + " where 审核状态='通过'";
     }
     else if (type == "notpass")
     {
         strsql = allinfo + " where 审核状态='未通过'";
     }
     else if (type == "finish")
     {
         strsql = allinfo + " where 项目是否完成='是'";
     }
     else if (type == "notfinish")
     {
         strsql = allinfo + " where 项目是否完成='否'";
     }
     if (a != "" && b == "")
     {
         strsql = string.Format(strsql + " and 申请人='{0}'", a);
     }
     else if (a == "" && b != "")
     {
         strsql = string.Format(strsql + " and 项目类型='{0}'", b);
     }else if(a == "" && b == "")
     {
         strsql = string.Format(strsql );
     }
     else
     {
         strsql = string.Format(strsql + " and 申请人='{0}' and 项目类型='{1}'", a, b);
     }

     SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
     DataSet dt = new DataSet();
     da.Fill(dt);
     return dt.Tables[0];
 }
 private void getAllDataType(string type)
  {
       if (box1.Text == "")
       {
           dataGridView1.DataSource = tabm.GetAllDataType("", box2.Text, type);
           return;
       }

       if (box2.Text == "")
       {
           dataGridView1.DataSource = tabm.GetAllDataType(box1.Text, "", type);
           return;
       }
       dataGridView1.DataSource = tabm.GetAllDataType(box1.Text, box2.Text, type);
   }
private void button4_Click(object sender, EventArgs e)
 {
     getAllDataType("pass");
 }

 private void button5_Click(object sender, EventArgs e)
 {
     getAllDataType("notpass");
     
 }
 private void button6_Click(object sender, EventArgs e)
 {
     getAllDataType("finish");
 }

管理员可以审批用户的申请,直接输入申请编号,点击通过,即完成操作

 if (!(ver.IsNumber(textBox6.Text)))
  {
      MessageBox.Show("项目编号只能为数字!");
      return;
  }
  if (textBox6.Text!="")
  {
      try
      {
          int b1 = int.Parse(textBox6.Text);
          bool resultID = tabm.GetApplyID(b1,"未通过","否");
          if (!resultID)
          {
              MessageBox.Show("无该申请编号信息");
              return;
          }
          bool result = tabm.UpdatePass(b1);
          if (result)
          {
              MessageBox.Show("审批成功");
              getAll();
              getAllDataType("notpass");
              textBox6.Text = "";
          }
          else
          {
              MessageBox.Show("审批失败");
          }
      }
      catch
      {
          MessageBox.Show("输入有误");
      }

  }
  else
  {
      MessageBox.Show("请输入完整信息");
  }

添加金额则是在已筹金额的基础上进行添加,当已筹金额大于等于所需金额的时候,进行项目结束完成处理;当已筹金额小于所需金额的时候,计算两者差距,天机添加后提示项目差距多少完成。

private void button3_Click(object sender, EventArgs e)
{
    if (!(ver.IsNumber(box6.Text)))
    {
        MessageBox.Show("申请人编号只能为数字!");
        return;
    }
    if (box6.Text != "" && box7.Text!="")
    {
        try
        {
            int b1 = int.Parse(box6.Text);
            int b2 = int.Parse(box7.Text);

            bool resultpass = tabm.GetApplyID(b1, "未通过", "否");
            if (resultpass)
            {
                MessageBox.Show("该申请项目还未通过,无法筹集资金");
                return;
            }
            bool resultID = tabm.GetApplyID(b1,"通过","是");
            if (resultID)
            {
                MessageBox.Show("该申请项目已经完成");
                return;
            }
            string money=tabm.GetApplyByID(b1).Rows[0]["已筹金额"].ToString();
            string need = tabm.GetApplyByID(b1).Rows[0]["所需金额"].ToString();
            int addMoney = int.Parse(money) + b2;
            bool resultMoney;
            if (addMoney >= int.Parse(need))
            {
                //money,是否,id
                resultMoney = tabm.UpdateMoney(addMoney,"是",b1);
                if (resultMoney)
                {
                    MessageBox.Show("金额已添加,当前项目已完成");
                    getAllDataType("notfinish");
                    return;
                }
                else
                {
                    MessageBox.Show("金额添加失败");
                }
            }
            else
            {
                resultMoney = tabm.UpdateMoney(addMoney, "否", b1);
                int m = int.Parse(need) - addMoney;
                if (resultMoney)
                {
                    MessageBox.Show("金额已添加,当前项目还需筹集: "+m+" 元");
                    getAllDataType("notfinish");
                    return;
                }
                else
                {
                    MessageBox.Show("金额添加失败");
                }
            }
        }
        catch
        {
            MessageBox.Show("输入有误");
        }
    }
    else
    {
        MessageBox.Show("请输入完整信息");
    }
    

}

用户查询实现

在这里插入图片描述
用户端项目进度查看
用户登录后可以看见或者搜索查询自己申请项目的进度,并可以提交新的申请

public bool GetApplyID(int a,string status,string finish)           
{
    string strsql = string.Format(allinfo + " where 申请编号=@申请编号 and 审核状态='{0}' and 项目是否完成='{1}'", status,finish);
    SqlParameter[] param = new SqlParameter[]
     {
        new SqlParameter("@申请编号",a)
     };
    DataTable dt = DBHelper.GetDataTable(strsql, param);
    if (dt.Rows.Count != 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
public DataTable GetApply(int a,string b)       //全部查找
{
    string strsql = "";
    if (a == 0 && b != "")
    {
        strsql = string.Format(sql + " where p.项目类型='{0}'",b);
    }
    else if(a != 0 && b == "")
    {
        strsql = string.Format(sql + " where a.受捐人编号='{0}'",a);
    }
    else
    {
        strsql = string.Format(sql + " where a.受捐人编号='{0}' and p.项目类型='{1}'", a, b);
    }
    SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
    DataSet dt = new DataSet();
    da.Fill(dt);
    return dt.Tables[0];
}

其余功能

在这里插入图片描述
功能实现
管理员增删查改逻辑比较简单,如下为操作数据库代码

 public bool Add(string a)
 {
     string sqlStr = "insert into project (项目类型) values(@项目类型)";
     SqlParameter[] param = new SqlParameter[]
     {
         new SqlParameter("@项目类型",a)
     };
     return DBHelper.ExcuteCommand(sqlStr, param);
 }

 public bool Update(int a,string tabs)
 {
     string sqlStr = "update project set 项目类型=@项目类型 where 项目编号=@项目编号";

     SqlParameter[] param = new SqlParameter[]
     {
         new SqlParameter("@项目类型",tabs),
         new SqlParameter("@项目编号",a)
         
     };
     return DBHelper.ExcuteCommand(sqlStr, param);
 }
 public DataTable GetAll()   //全部数据获取
 {
       string strsql = "select * from project";
       SqlDataAdapter da = new SqlDataAdapter(strsql, DBHelper.connString);
       DataSet dt = new DataSet();
       da.Fill(dt);
       return dt.Tables[0];
   }
public bool Delete(Tab tabs)        //删除数据
{
    string str = "delete From project where 项目编号 = @项目编号";
    SqlParameter[] param = new SqlParameter[]
    {
       new SqlParameter("@项目编号",tabs.box1)
    };
    return DBHelper.ExcuteCommand(str, param);
}

以上为该系统基本逻辑梳理,更多系统源码可访问 winform之家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

魏副业而战:做闲鱼副业项目的3个阶段

我是魏哥,与其在家躺平,不如魏副业而战! 小伙在社群提问:有没整套的模板案例? 他找了一上午的同行,没有找到“完整”的案例,他很苦恼,所以想请老师指导一下。 其实呢,…

wait_queue如何使用

Linux内核的 等待队列(Wait Queue)是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。如下图所示, 在Linux中,等待队列以循环链表为基础结构&#xf…

基于web的实验教学管理系统java ssm教学视频平台源码和论文

研究背景 近几年来,随着地方高等院校办学规模的不断扩大,为了适用社会发展需要,地方高校将应用 型人才培养作为学校的人才培养目标。为了适应学校应用型人才培养目标,各专业尤其是理工科专 业人才培养方案中加强了实践教学环节&a…

1559_AURIX_TC275_RCU系统中的Boot支持、Pad配置以及NMI trap处理

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这一次看的10页文档虽然文字内容不多,但是涉及到的面还是很多的。而且,看完之后的确是有一种答疑解惑的畅快感。 1. ESRx作为GPIO用的时候,也拥有GPIO设…

高等数学(第七版)同济大学 习题11-1 个人解答

高等数学(第七版)同济大学 习题11-1 函数作图软件:Mathematica 1.设在xOy面内有一分布着质量的曲线弧L,在点(x,y)处它的线密度为μ(x,y),用对弧长的曲线积分分别表达:\begin{aligned}&1. \ 设在xOy面内…

蓝桥杯嵌入式MCP4017

文章目录前言一、查看MCP4017芯片手册二、MCP4017在开发板上的电路图三、工程配置四、MCP4017读写函数编写总结前言 MCP4017是一个可编程电阻,通过写入数值可以调节电阻值的大小。 一、查看MCP4017芯片手册 在这里我们只需要关注MCP4017即可。下面的几个重要点我…

广播、组播 socket编程

目录 1、单播 / 广播 / 组播 的概念 (1) 单播 (2) 广播 (3) 多播(组播) 2、广播 socket编程(只能是UDP通信) 3、多播 socket编程(只能是UDP通信) 1、单播 / 广播 / 组播 的概念 (1) 单播 之前在进行…

m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序

目录 1.算法描述 2.仿真效果预览 3.Verilog核心程序 4.完整FPGA 1.算法描述 整个模型的基本框图为 软件无线电是现代通信技术的重要研究领域和发展方向,目前发展迅速.快速发展的软件无线电技术与落后的硬件计算资源之间的矛盾越来越突出.为了缓解这个矛盾,一方面可以加快集…

职场日常:一文剖析性能测试流程,时间为啥那么长?

如果你做过性能测试,你就会知道,性能测试的时间要比功能测试时间长很多,但是,你没有做过,你可能就会问了,为什么性能测试时间要长那么多呢?今天就用一文,带大家了解性能测试工作流程…

自学python?一般人我还是劝你算了吧

前言 本人纯屌丝一枚,在学python之前对电脑的认知也就只限于上个网,玩个办公软件。这里不能跑题,我为啥说自学python,一般人我还是劝你算了吧。因为我就是那个一般人。 基础真的很简单,是个人稍微认点真都能懂&#…

Python一学就会系列:01 开发环境搭建 及 hello world

文章目录前言一、python是什么?官网简介二、开发环境安装1.下载2.安装3. 验证是否安装成功编写一个python新建一个后缀名为py的文件运行python文件总结前言 一、python是什么? 官网 https://www.python.org/ 简介 官网介绍: Python是一种编…

美团面试官总结的“Spring boot面试文档”,全是大厂高频面试题,太全了!

前言 Spring boot不单单在BAT这些一线大厂使用率极其的高,在中小企业中使用率也是非常高的,企业的需求增大,当然对待面试者的要求也会随之提高,竞争也会随之增大。 相信现在的你之所以可以看到我的这篇文章,那肯定是…

[附源码]计算机毕业设计的高校课程知识库Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Python数据分析项目案例

第一部分:数据类型处理 数据加载 字段含义: user_id:用户IDorder_dt:购买日期order_product:购买产品的数量order_amount:购买金额观察数据 查看数据的数据类型数据中是否存储在缺失值将order_dt转换成时间类型查看数据的统计描述在源数据中添加一列表示…

图像风格迁移基础入门及实践案例总结

目录 1图像的不同风格 2何为图像风格迁移 2.1基础概念及方法 2.2示例 3图像风格迁移的典型研究成果 3.1deep-photo-styletransfer 3.2CycleGAN 3.3U-…

【问题记录】Mac M1 Docker配置redis一主二从三哨兵(烧饼好吃)

文章目录Docker配置 redis一主二从三哨兵文件目录redis compose 文件在 redis 文件路径下执行 docker composesentinel 文件结构sentinel compose 配置文件sentinel config 配置文件切换到 sentinel执行 compose测试及问题记录解决方案Docker配置 redis 一主二从三哨兵 文件目…

8家最大的WooCommerce在线商店

想象一下,世界上三分之一的电子商务网站都由单一技术提供支持,而且令人惊讶的是它是免费的。我说的是最大的电子商务解决方案提供商之一,WooCommerce。在这里,我们列出了8 家最大的WooCommerce在线商店,以激发您建立自…

基于jsp+mysql+ssm供应链管理信息系统-计算机毕业设计

项目介绍 本文以销售供应链管理系统的开发为背景,对企业销售管理系统的分析,设计,开发和实施过程进行了详细的描述。本系统基于ssm框架访问作为后台数据库管理连接,通过jdbc与数据库建立连接,以jsp为前端开发工具提供…

数据库之MHA高可用集群部署及故障切换

目录 1 MHA概念 1.1 MHA 的组成 1.2 MHA 的特点 2 搭建MySQLMHA 2.2 修改三台MySQL服务器的主配置文件/etc/my.cnf,并创建命令软链接 2.3 配置MySQL一主两从 2.4 安装 MHA 软件 2.5 在所有服务器上配置无密码认证 2.6 在 manager 节点上配置 MHA 2.7 第一次配…

分类评价指标

不均衡数据 很多时候,不同类别的分类代价并不相等,这就是非均衡分类问题。如果在两个类别中,一个类别的出现次数比另一个多很多,那么错误类型将发挥重要作用。例如。我们一共有100个病人,其中99人是健康的&#xff08…