|
前两天主管谈到需要对单位的预算开支做一个简单的管理软件,结合最近对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();
}
}
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.");
}
}
}
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.");
}
}
}
上此写的BudgetBase Budget Project三个类在后来的程序编写过程中发现, 系统需要维护的仅仅是一个预算的列表,在预算下面只包含项目就可以满足需求了.因此修改设计,取消BudgetBase类. 修改Budget类代表预算,Project代表项目. 添加相应的数据成员.
程序现在实现的功能包括:
1、一个登录窗体,用来核对用户名和密码及用来管理用户的相应模块。
2、对于预算的新增、修改、删除操作。
3、对于项目的新增、修改、删除操作。
4、按照项目的属性进行分类浏览操作。
随后附上程序的源代码,及可执行文本。
这里记录一些开发过程中的一些收获:
1、DataGridView这个控件的绑定问题。
以前一直用Delphi做数据库程序,刚开始对.net的数据绑定很不适应。 对于显示预算列表的这个DataGridView
我在后台绑定了一个BindingList<Budget>做为数据源,为了得到当前选择的是那一项这个信息,又在中间插入了budgetBindingSource对象,这个对象可以提供Current属性,可以得到当前选择的是那一项这个信息。
对于显示Project列表的这个DataGridView我使用的是DataGridView-->BindingSource-->DataTable这样的绑定,对于这个列表的处理中值得注意的是, DataView 的RowFilter属性的作用, 使用这个属性可以方便的实现对于结果集的筛选,项目分类浏览功能的实现充分利用了这一点。
2、Access数据库的列的起名问题
开发过程中发现,Operator表名为password的列在插入新用户的过程中总是报错,后更改这个列的名称为pwd后解决问题。 估计是和Access的保留内容冲突(只是猜想)。
3、vs2005 team edtion的Deploy项目可以比较方便的制作程序的安装包,使用还算方便,对于小程序,推荐!
源码:
|
|