资源描述
《名片管理系统设计》
摘 要
名片管理系统是为了实现办公自动化管理而设计的,它完全取代了原来一直用人工处理的工作方式,并且避免了由于用户的工作疏忽以及管理质量问题所造成的各种错误,为及时,准确,高效的完成名片管理工作提供了强有力的工具和管理手段。名片管理系统是一个小型数据库管理系统,采用C#开发而成的,界面美观,操作简单,安全性高,基本满足了用户的要求。整个系统由系统设置,类别设置,查询管理,输入管理,打印管理等模块组成。
一、系统可行性分析
可行性分析的任务,并不是所有问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模之内解决。如果问题没有可行的解,那么花费这项开发工程上的任何时间,资源,人力和经费都是无谓的浪费。
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决必须记住,可行性研究的目的不是解决问题,而是确定问题是否值得去解。怎样达到这个目的呢?当然不能靠主观猜想而只能靠客观分析。必须分析几种主要的可能解法的利弊,从而判断原定的系统目标和规模是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。
因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。所以从以上的分析原则来看,我所要设计的信息管理系统是一个规模不太大的系统,但是目标明确,清晰地描述了对目标系统的一切限制和约束。本系统几乎在所有的酒店使用,当然它需要进一步的完善和更新,在使用过程中,要看他能不能带来效益,毕竟在现今社会效率是第一位的。但是从本系统的物理系统出发,导出现有系统的逻辑模型,从现实看,这还是有一定的实用价值的。从另一个角度看,在现在的社会发展之飞速,尊重科技也是势在必行的,因此本系统正是基于这种情况才开发,21世纪是计算机的时代,它必然取代一部分人的工作,让高科技的监控系统进入社会生活的方方面面也是发展的趋势,进而走向智能化。
开发工具与技术的研究
就现在开发OA的技术来说,主要集中分为三大类:基于B/S结构的应用程序开发,结合C/S结构和Web技术的复合应用程序,基于B/S结构的动态网页技术。以下将分析这三类技术的各自优缺点:
B/S结构系统:是传统开发模式,一般以数据库和客户端的两层结构实现,也有加入中间件的三层或多层结构,在OA早期是标准的系统模式,但随着计算机技术的发展和网络的发展,它已经无法满足现在的远程网络办公和移动办公,逐渐在被取代
人们普遍使用计算机来提高个人工作效率,但是在需要许多人一起协同工作的现代工作环境中,我们更需要提高我们的整体工作效率。利用网络通讯基础及先进的网络应用平台,建设一个安全、可靠、开放、高效的信息网络和办公自动化、信息管理电子化系统,为管理部门提供现代化的日常办公条件及丰富的综合信息服务,实现档案管理自动化和办公事务处理自动化,以提高办公效率和管理水平,实现企业各部门日常业务工作的规范化、电子化、标准化,增强档案部门文书档案、人事档案、科技档案、 财务档案等档案的可管理性,实现信息的在线查询、借阅。最终实现“无纸”办公。
本设计从一下三个方面进行可行性研究:
二、技术可行性
本设计“名片管理系统”是为各类人员开发的信息管理系统。通过近几个月的学习和实践,对开发管理信息系统又有了新的认识。使自己在开发管理信息系统方面的技术更加成熟。由于本设计最重要体现的是实用性,所以,通过大量的社会调查和分析,结合自己现有的技术水平加上导师的指导,还是能按期完成本毕业设计。
三、经济可行性
成本方面:由于本毕业设计属于计算机科学(本科)教学的最后一个环节,所以人力消耗免费,资源学校提供,指导老师义务指导。所以成本计算只需计算开发期间开发者的生活消费,学校资源的消耗(主要包括机器的折价和消耗的电钱),所以开发本软件的成本是非常低的。
四、操作可行性
本软件的用户对象是信息管理的工作人员,由于本软件要设计成友好的界面,写出详细的使用说明,用户只需懂得简单的计算机操作知识,就能自由应用本软件。
所以从以上几个方面的分析来看,开发本软件是完全可行的。
五、需求分析
结合国内外管理软件的最新研究成果进行大量的调查和分析可以得出一下的需求分析。
(1)系统功能需求分析
系统开发的总体任务是各种信息的系统化、规范化和自动化。主要完成功能:
系统基本信息设置。包括添加新项目,退出等。
名片信息的删除,查询等。
名片信息的输入。包括包括姓名,电话,手机,备注等。
(2)数据库需求分析
用户的需求具体体现在各种信息的提供、保存、更新、和查询,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。仔细分析调查的基础上,得到如下图所示的本系统所处理的数据流程。
基本信息输入
类别选择
管理模块
打印
信息管理
退出
打印
名片管理系统数据流程图
六、系统总体设计
经过需求分析阶段的工作,系统必须“做什么”已经清楚了,现在是决定“怎样做”的时候了。总体设计的基本目的就是回答“概括的说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。总体设计的重要任务是设计软件的结构,也就是要确定系统中每个程序由哪些模块组成,以及这些模块相互间的关系。
通常程序中的一个模块完成一个适当的子功能。应该把模块组成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。软件结构(即由模块组成的层次系统)可以用层次图或结构图来描述。
对需求分析得到各项功能进行集中、分块、按照结构化程序设计的要求,得到如下图所示的系统功能模块图。
名片管理系统
类别设置
添加类别
修改类别
退出
信息管理
添加信息
修改信息
退出
查询管理
查询信息
打印管理
打印表
查看信息
菜单管理
主菜单
树
退出
系统功能模块图
(1)概念结构设计
由第三章的需求分析,就可以设计出能够满足用户需求的各种实体结构,以及他们之间的关系,为以后的逻辑结构设计打下基础。
名片信息实体E-R图如下所示:
名片管理实体
信息管理
菜单管理
查询管理
打印管理
客房信息实体E-R图
(2)逻辑结构设计
首先将名片管理信息系统的数据库概念结构转化为Access 2003数据库系统所支持的实际数据模型,即:数据库的逻辑结构。其表格如下:
七、系统实现
1、用户登录窗体
public class LoginForm:Form
{
private void btnOk_Click(object sender, EventArgs e)
{
if (txtUserName.Text.Trim().Length > 0 && txtPassword.Text.Trim().Length > 0)
{
string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;Persist Security Info=False;";
OleDbConnection thisConnection=new OleDbConnection(strConnect);
Try
string name = txtUserName.Text.Trim();
string pwd = txtPassword.Text.Trim();
thisConnection.Open();
OleDbCommand cmd = new OleDbCommand("select * from admin where username='" + txtUserName.Text + "'and password='" + pwd + "' ", thisConnection);
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.Read())
this.Hide();
MainForm MCC = new MainForm();
MCC.Show();
}
else
{ MessageBox.Show("请输入用户名和密码
else
{
MessageBox.Show("输入用户名或密码错误.", "登录错误", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
DialogResult = DialogResult.None;
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
private void txtUserName_TextChanged(object sender, EventArgs e)
{
txtUserName.SelectAll();
}
private void txtPassword_TextChanged(object sender, EventArgs e)
{
txtPassword.SelectAll();
2、名片管理系统主窗体
本模块的创建是整个管理系统的重要环节,这是管理系统的主界面,本管理系统共五个模块,分别是系统设置,信息管理,类别管理,打印管理,查询管理。其中系统设置模块功能是:添加新类别,退出。
主窗体模块主要代码如下:
private void LoadData()
{
string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;Persist Security Info=False;";
conn=new OleDbConnection(strConnect);
string query="SELECT id,name,parentid FROM codeitems ORDER BY parentid,id"; DataSet ds = new DataSet() ;
conn.Open() ;
OleDbDataAdapter command = new OleDbDataAdapter(query,conn);
command.Fill(ds,"codeitems");
DataTable dt=ds.Tables["codeitems"];
DataRowCollection rows=dt.Rows;
Hashtable h=new Hashtable();
arrCategoryID=new ArrayList();
foreach (DataRow dr in rows)
{
TreeNodeItem tni=new TreeNodeItem((int)dr[0],(string)dr[1],(int)dr[2]);
int parentID=tni.ParentID;
if (tni.ID>maxID)
{
maxID=tni.ID;
}
if (parentID==0)//is category
{
arrCategoryID.Add(tni);
}
ArrayList arr=(ArrayList)h[parentID];
if (arr==null)
{
arr=new ArrayList();
h.Add(parentID,arr);
}
arr.Add(tni);
}
rootNode=new TreeNode("名片管理");
rootNode.Tag=new TreeNodeItem(0,"名片管理",-1);
treeViewCode.Nodes.Add(rootNode);
if (maxID==-1)
maxID=0;
BuildBranch(h,0,rootNode);
}
3、类别设置模块
模块主要代码如下:
private void ShowNewCategoryForm()
{
CategoryForm f=new CategoryForm();
if (f.ShowDialog()==DialogResult.OK)
{
string strName=f.ItemName;
string strNotes=f.Notes;
if (CreateNewCategory(strName,strNotes)==null)
{
MessageBox.Show(this,"不能保存到数据库,数据库错误!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
4、名片输入模块:
模块主要代码如下:
private void ShowNewItemForm()
{
ItemForm f=new ItemForm(arrCategoryID);
if (f.ShowDialog()==DialogResult.OK)
{ string strName=f.ItemName;
string strCode=f.Code;
TreeNodeItem tniCategory=(TreeNodeItem)f.Category;
TreeNode newNode=new TreeNode(strName);
maxID++;
TreeNodeItem tni=new TreeNodeItem(maxID,strName,tniCategory.ID);
newNode.Tag=tni;
if (MessageBox.Show("您确定要保存在"+strAuthor, "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
string query="INSERT INTO codeitems (id,name,code,notes,phone,email,msn,qq,address,author,parentid)";
if (i==-1
MessageBox.Show(this,"不能保存到数据库,数据库错误!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
for (int j=0;j<rootNode.Nodes.Count;j++)
{
TreeNode nodeTemp=rootNode.Nodes[j];
TreeNodeItem temp=(TreeNodeItem)nodeTemp.Tag;
if (temp.ID==tniCategory.ID)
{
nodeTemp.Nodes.Add(newNode);
catch(Exception)
{
MessageBox.Show(this,"不能保存到数据库,数据库错误!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
5、名片查询
模块主要代码如下:
private void btnOK_Click(object sender, System.EventArgs e)
{
if (txtSearch.Text.Trim()=="")
{
MessageBox.Show(this,"请输入你要查询的信息!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
txtSearch.Focus();
}
else
{
if (chkCode.Checked==false && chkNotes.Checked==false)
{
MessageBox.Show(this,"请选择你要查询的范围!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
this.DialogResult=DialogResult.OK;
6、修改模块
模块主要代码如下:
private void EditCategoryItem()
{ TreeNode curNode=(TreeNode)treeViewCode.SelectedNode;
if (curNode==null)
return;
TreeNodeItem tni=(TreeNodeItem)curNode.Tag;
if (tni.ParentID==-1)//root
return;
if (tni.ParentID==0)//is category
{CategoryForm f=new CategoryForm(curNode.Text,txtNotes.Text);
if (f.ShowDialog()==DialogResult.OK)
{ string strName=f.ItemName;
string strNotes=f.Notes;
tni.Name=strName;
try
string query="UPDATE codeitems SET name='";
OleDbCommand command =new OleDbCommand(query,conn); int i=command.ExecuteNonQuery();
if (i==-1)
{ MessageBox.Show(this,"不能保存到数据库,数据库出错!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Error);}
else
{ curNode.Text=strName;
txtNotes.Text=strNotes;
catch(Exception
MessageBox.Show(this,"不能保存到数据库,数据库出错!","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
ItemForm f=new ItemForm(arrCategoryID,tni,new CodeItem(txtCode.Text,txtNotes.Text,txtPhone.Text,txtEmail.Text,txtMsn.Text,txtQq.Text,txtAddress.Text),curNode.Parent.Text,curNode.Text);
7、打印模块
八、模块主要源代码:
private void News_Load(object sender, System.EventArgs e)
{
string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb;Persist Security Info=False;";
OleDbConnection conn=new OleDbConnection(strConnect);
string query="SELECT * FROM codeitems ORDER BY parentid,id";
DataSet ds = new DataSet() ;
conn.Open() ;
OleDbDataAdapter command = new OleDbDataAdapter(query,conn);
command.Fill(ds,"codeitems");
DataTable dt=ds.Tables["codeitems"];
DataRowCollection rows=dt.Rows;
Hashtable h=new Hashtable();
arrCategoryID=new ArrayList();
dataGrid1.DataSource=ds.Tables[0].DefaultView;
private void menuItem1_Click(object sender, System.EventArgs e)
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
private void button1_Click(object sender, System.EventArgs e)
{
//create printerclass object
PrintC = new PrinterClass(printDocument1,dataGrid1);
printDocument1.Print();
private void button2_Click(object sender, System.EventArgs e)
//create printerclass object
PrintC = new PrinterClass(printDocument1,dataGrid1);
if (printPreviewDialog1.ShowDialog() == DialogResult.Cancel){}
private void printDocument2_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
float CurrentX = (e.PageBounds.Width - e.MarginBounds.Left) / 2; //center
float CurrentY = e.MarginBounds.Top;
string text = dataGrid1.CaptionText;
Font font = dataGrid1.CaptionFont;
e.Graphics.FillRectangle(new SolidBrush(dataGrid1.CaptionBackColor),rect);
e.Graphics.DrawString(text,font,Brushes.Black,rect);
CurrentY = CurrentY + rect.Height;
bool morepages = PrintC.Print(e.Graphics,ref CurrentX,ref CurrentY);
if (morepages)
CurrentX = (e.PageBounds.Width - e.MarginBounds.Left) / 2; //center
CurrentY += 20;
text = PrintC.PageCounter.ToString();
rect = new RectangleF(CurrentX,CurrentY,e.Graphics.MeasureString(text,font).Width,e.Graphics.MeasureString(text,font).Height);
e.Graphics.FillRectangle(new SolidBrush(dataGrid1.CaptionBackColor),rect);
e.Graphics.DrawString(text,font,Brushes.Black,rect);
private void menuItem4_Click(object sender, System.EventArgs e)
{
printDialog1.ShowDialog();
}
设计体会
经过为期两个多月的设计,一个完整的名片管理系统终于制作完毕了。我现在基本熟悉了一个管理系统的设计步骤,每个阶段应该完成的任务,但我觉得我还有学多要学习的地方。
关于本系统,虽然对名片管理进行了系统的创建,但我们不可忽略的是这个系统并不是完美无缺,还存在着许多不完善的地方,其实我们要在以后的实践中去检验它的可用性,特别要考虑它的实时性和安全性,这才是我们最值得考虑的问题,一个系统好不好,要经过反复的使和才能知道,不是光是理论中分析和设计得出来的。在系统的设计过程中当然也出现了各种各样的问题,特别是关于系统的可移植性,有许多不足之处,这时我们主要任务就是应该多查阅相关资料,反复地熟练应用,才能把系统设计的巧,设计的好,同学们之间的交流也十分重要。
经过这次毕业设计,我的感想很多,首先是做程序要有热情,只有你喜欢做了,你才能认真的去完成它;其次要有韧性,不怕麻烦,不怕失败,反复调试,反复练习,这样才能找到最佳的程序设计
展开阅读全文