预算管理系统开发随笔(一)
前两天主管谈到需要对单位的预算开支做一个简单的管理软件,结合最近对C#的学习,我决定用C#来制作这个程序,程序的功能很简单 ,希望能通过这个程序的制作熟悉C#Winform应用程序的开发。我会把开发过程详细的记录下来,希望大家就软件的设计和编码上的问题多提建议.
一、需求分析。
程序要实现对每笔划分到单位的预算的使用情况进行管理,要求具有一定的安全控制手段。
对于预算管理要求实现的功能如下:
1、可以很直观的管理每一笔预算,对于预算的性质和预算资金的设用状态必须有详细的记录。
2、每笔预算可能用于若干项目,要求追踪每个项目的详细资料和资金拨付情况。
3、大的预算可能包含小的预算和若干项目。
二、概要设计
数据库选择:Access(足够了)
安全控制手段: 程序建立用户表,存储每个用户的用户名密码。每个用户均可以修改自己的密码,特殊的admin内置用户可以删除用户和添加新用户。
数据模型:分析预算和项目的关系,很明显类似于系统的文件和文件夹的关系,文件夹可能包含文件夹和文件,而文件则保存具体的数据。 这里预算可以包含小预算和具体的项目,而实际资金的使用最终是通过项目来完成的。 每笔预算和每个项目应该记录的信息如下:
预算: |
项目 |
名称 | 名称 |
备注 | 备注 |
预算金额 | 预算金额 |
已分配金额 | 分配金额=预算金额 |
已支付金额 | 已支付金额 |
子预算列表 | 使用单位 |
子项目列表 | 项目类别 |
是否固定资产 | |
支出日期 | |
资金类别 | |
经办单位 |
报表需求:待定。
三、详细设计:
因为项目在某种程度上也是一种预算,所以抽象出基类BudgetBase包含预算的基本操作,预算(Budget)和项目(ProjectBudget)做为它的两个子类。
namespace BudgetControl
{
public class BudgetBase
{
Data member
//返回预算金额
public abstract decimal GetBudgetAmount();
//返回已支付金额
public abstract decimal GetPayedAmount();
//返回已非配金额
public abstract decimal GetAssignedamount();
}
}
{
public class BudgetBase
{
Data member
//返回预算金额
public abstract decimal GetBudgetAmount();
//返回已支付金额
public abstract decimal GetPayedAmount();
//返回已非配金额
public abstract decimal GetAssignedamount();
}
}
namespace BudgetControl
{
public class Project: BudgetBase
{
//使用单位
private string m_usedDepartment;
public string UsedDepartment
{
get { return m_usedDepartment; }
set { m_usedDepartment = value; }
}
//经办单位
private string m_manageDepartment;
public string ManageDepartment
{
get { return m_manageDepartment; }
set { m_manageDepartment = value; }
}
//项目类别
private string m_projectType;
public string ProjectType
{
get { return m_projectType; }
set { m_projectType = value; }
}
//是否固定资产
private string m_isFixedAssets;
public string IsFixedAssets
{
get { return m_isFixedAssets; }
set { m_isFixedAssets = value; }
}
//立项日期
private DateTime m_createdDate;
public DateTime CreatedDate
{
get { return m_createdDate; }
set { m_createdDate = value; }
}
//资金类别
private string m_cashType;
public string CashType
{
get { return m_cashType; }
set { m_cashType = value; }
}
public override decimal GetAssignedamount()
{
throw new Exception("The method or operation is not implemented.");
}
public override decimal GetPayedAmount()
{
throw new Exception("The method or operation is not implemented.");
}
}
}
{
public class Project: BudgetBase
{
//使用单位
private string m_usedDepartment;
public string UsedDepartment
{
get { return m_usedDepartment; }
set { m_usedDepartment = value; }
}
//经办单位
private string m_manageDepartment;
public string ManageDepartment
{
get { return m_manageDepartment; }
set { m_manageDepartment = value; }
}
//项目类别
private string m_projectType;
public string ProjectType
{
get { return m_projectType; }
set { m_projectType = value; }
}
//是否固定资产
private string m_isFixedAssets;
public string IsFixedAssets
{
get { return m_isFixedAssets; }
set { m_isFixedAssets = value; }
}
//立项日期
private DateTime m_createdDate;
public DateTime CreatedDate
{
get { return m_createdDate; }
set { m_createdDate = value; }
}
//资金类别
private string m_cashType;
public string CashType
{
get { return m_cashType; }
set { m_cashType = value; }
}
public override decimal GetAssignedamount()
{
throw new Exception("The method or operation is not implemented.");
}
public override decimal GetPayedAmount()
{
throw new Exception("The method or operation is not implemented.");
}
}
}
namespace BudgetControl
{
public class Budget: BudgetBase
{
private List<Budget> m_subBudgets;
private List<Project> m_subProjects;
public override decimal GetAssignedamount()
{
throw new Exception("The method or operation is not implemented.");
}
public override decimal GetPayedAmount()
{
throw new Exception("The method or operation is not implemented.");
}
}
}
{
public class Budget: BudgetBase
{
private List<Budget> m_subBudgets;
private List<Project> m_subProjects;
public override decimal GetAssignedamount()
{
throw new Exception("The method or operation is not implemented.");
}
public override decimal GetPayedAmount()
{
throw new Exception("The method or operation is not implemented.");
}
}
}