系统架构设计
主要界面设计
1.系统登陆界面:
用户注册
用户登录
2.UI主要实现功能:
个人收入或支出查询.
个人收入及支出录入
个人收入及支出更改以及删除
主要细节
3.与数据库交互。实现(添加,删除,更新)
个人收入录入/个人支出录入
收入或支出信息的更新
收入或支出信息删除
系统模块实现
用户登录
修改密码
收支模块
出纳模块
其他模块
系统表结构设计
财务管理数据库financialMS设计表:
(1)表名:users(用户表),如表1所示。
|字段名称| 数据类型 |字段说明 |字段属性|
| -------- | :---- | :---- |
|userName | Varchar(20) |用户名 |主键|
|password | Varchar(20) |密码 |不能为空|
|juese |Varchar(20) |角色 |扩展功能用,可以先设置为空|
(2)表名:income(收入详细表),如表2所示。
|字段名称 |数据类型 |字段说明 |字段属性|
| -------- | :---- | :---- |
|incomeID |int |收入ID |主键、自动增长值为1|
|incomeName |Varchar(20) |收入人姓名 |不能为空|
|incomeNum |int |收入金额 |不能为空|
|incomeDep |Varchar(100) |收入内容描述 |可以为空|
|incomeDate |DateTime |收入时间 |不为空|
(3)表名:spend(支出详细表),如表3所示
|字段名称 |数据类型 |字段说明 |字段属性
| -------- | :---- | :---- |
|spendID |int |支出ID |主键、自动增长值为1
|spendName |Varchar(20) |支出人姓名 |不能为空
|spendNum |int |支出金额 |不能为空
|spendDep |Varchar(100) |支出内容描述 |可以为空
|receiveName |Varchar(20) |接收人姓名 |不能为空
|spendAdd |Varchar(20) |支出地点 |可以为空
|spendDate |DateTime |支出时间 |不为空
系统数据库操作实现
一、连接数据库 Connection对象
Connection对象:是一个连接对象,主要功能是建立于物理数据库的连接,主要包括4中访问数据库的对象类,如下:
1)SQL Server数据提供程序,位于System.Data.SqlClient命名空间 相对应:SqlConnection
2)ODBC数据提供程序,位于System.Data.Odbc命名空间 相对应:OdbcConnection
3)OLEDB数据提供程序,位于System.Data.OleDb命名空间 相对应:OleDbConnection
4)Oracle数据提供程序,位于System.Data.OracleClient命名空间 相对应:OracleConnection
打开连接为: .Open() 关闭连接为:.Close()
二、执行SQL语句Command对象
Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改的SQL语句。Command对象主要有以下几种方式(与一相对应):
1)SqlCommand :向SQL Server数据库发送SQL语句
2)OdbcCommand:向使用ODBC公开的数据库发送SQL语句
3)OleDbCommand:向使用OLEDB公开的数据库发送SQL语句,如Access数据库和MySql数据库
4)OracleCommand:向使用ORACLE公开的数据库发送SQL语句
方法:
1)ExecuteNonQuery方法:用于向数据库发送增、删、改命令。返回值:受影响的行数
2)ExecuteReader方法:执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例 返回值:一个SqlDataReader对象【详见三】
例:
SqlCommand cmd = new SqlCommand(strSql,conn); 或者【 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn;cmd.CommandText=strSql;cmd.CommandType=CommandType.Text; 】
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
listView1.Items.Add(sdr1.ToString());
}
3)ExecuteScalar方法:执行SQL语句,返回结果集中的第一行的第一列
三、读取数据:DataReader对象
DataReader对象是数据读取器对象,提供只读向前的游标,如果只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取,对于不同的数据库连接,有不同的DataReader类型,如下:
1)在System.Data.SqlClient命名空间下,可以调用SqlDataReader类
2)在System.Data.Odbc命名空间下,可以调用OdbcDataReader类
3)在System.Data.OleDb命名空间下,可以调用OleDbDataReader类
4)在System.Data.OracleClient命名空间下,可以调用OracleDataReader类
实例:
if (myreader.Read())
{
//myreader中有数据,表示给出的用户名和密码在数据库中有匹配记录
MessageBox.Show(“登录成功”);
//如果登录成功则取出用户名和等级填入下面的文本框中
textBox3.Text = myreader[“username”].ToString();
textBox4.Text = myreader[“level”].ToString();
}
else
{
//myreader中没有数据,表示给出的用户名和密码至少有一个是错的
MessageBox.Show(“登录失败!!”);
}
四、数据适配器:DataAdapter对象
DataAdapter对象是一个数据适配器对象,是DataSet与数据源之间的桥梁。DataAdapter对象对象提供了4个属性,实现与数据源之间的互通:
1)SelectCommand属性
2)DeleteCommand属性
3)InsertCommand属性
4)UpdateCommand属性
实例:
string strConn=“uid=账号;pwd=密码;database=数据库;server=服务器”;//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例
DataSet ds=new DataSet();//创建DataSet实例
da.Fill(ds,“自定义虚拟表名”);//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close ();//关闭数据库
五、数据集DataSet对象
DataSet对象就像存放于内容中的小型数据库。它可以包含数据表、数据列、数据行、视图、约束以及关系。
1)合并DataSet内容 方法为:Merge(dataSet将合并的数据和架构的dataSet名,preserveChanges是否保留当前DataSet中的更改,missingSchemaAction枚举值之一);
2)复杂DataSet内容 方法为:Copy 例:DataSet ds1 =ds.Copy();
用户登录校验实现
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;
using System.Diagnostics;
namespace fms
{
public partial class FormLogin : Form
{
public FormLogin()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SQLHelper dbhelp = new SQLHelper();//dbhelp为访问sqlhelper的对象,即在登陆窗体中让sqlhelper类实例化。
string name = tdname.Text.Trim();//获取用户名控件文本,且去掉空格
string pwd = tdpwd.Text.ToString().Trim();//获取密码控件文本,且去掉空格
int n = dbhelp.checklogin(name, pwd);//调用类中的checklogin方法。
if (n>0)
{
MessageBox.Show("登陆成功");
FromMain zhujiemian = new FromMain();//主窗体,对象实例化
zhujiemian.Show();//显示主窗体
this.Hide();//隐藏登陆窗体
}
else
{
MessageBox.Show("用户/密码错误,登陆失败","错误信息框",MessageBoxButtons.OK);
}
}
private void linkLabel_Regist_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
FormRegistNewUser newusers = new FormRegistNewUser(); //类作为对象的实例化。
newusers.Show(); //对象的属性,简而言之就是让超级赛亚人附体的意思。
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void FormLogin_Load(object sender, EventArgs e)
{
}
}
}