C#课程设计公交卡管理系统论文.docx
《C#课程设计公交卡管理系统论文.docx》由会员分享,可在线阅读,更多相关《C#课程设计公交卡管理系统论文.docx(28页珍藏版)》请在冰豆网上搜索。
C#课程设计公交卡管理系统论文
摘 要
公交卡信息管理是城市公交管理中的一部分,城市人口的增多,人流量增加,为了减少堵车,保护环境,很多人选择乘公交车出行。
为了加快上车速度,减少站点停车时间,增加人们的出行效率,有了无人售票系统,并使用公交卡乘车。
公交卡管理信息系统主要解决公交卡的信息管理问题,设计开发一个简单的公交卡管理系统,实现公交卡的注册、充值、挂失、激活和注销,用户信息的修改,操作员密码的修改和一些简单的查询功能。
在课程设计中,系统开发平台为Win7,程序设计语言采用C#,数据库采用SQL Server 2005,程序运行平台为Win7。
程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在公交管理部门的管理中,解决实际问题。
一.引言
城市公交的“无人售票”系统经过多年的运作,在管理上已日趋完善,但新的课题又呈现在我们的面前。
“零钞不够”,这是实行无人售票以来乘客与公交公司之间最大的矛盾。
“无人售票”对车辆的承运速度和业务管理无疑是起很大的促进作用,但是由于“不设找赎”,对身上没有足够零钞的乘客来讲,肯定是增加了经济负担,这正是推行“无人售票”之后,乘客最大意见之处。
“无人售票”需要完善,另外随着经济环境的变化,取消月票,也是势在必行。
非接触式IC卡技术的推出为实现城市公交自动收费提供了现代技术的支持。
二.开发环境和开发工具
2.1C#语言简介
C#是美国微软公司推出的windows操作系统下的应用程序开发平台VisualS(简称VS.net)家族中的一员,C#是对C++进行了很大改进的一种完全面向对象的可视化程序设计语言。
由于C#采用了类似于VisualBasic的较易使用的程序设计界面,从而成为了一种更加简单易学、功能强大的应用程序开发工具。
C#是一种先进的、面向对象的语言,使用C#语言可以让开发人员快速的建立大范围的基于MS网络平台的应用,并且提供大量的开发工具和服务,帮助开发人员开发基于计算机和通信的各种应用。
由于C#是一种面向对象的开发语言,所以C#可以大范围地适用于高层商业应用和底层系统的开发。
即使是通过简单的C#构造,也可以让各种组件方便的转变为基于Web的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用调用。
2.2开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
采用计算机进行信息化管理已成为现在管理方式的变革方向,而公交卡管理的全面自动化、信息化则也是其变革的方向之一。
公交卡信息管理的好坏对公交车和乘客来说都至关重要,在很大程度上影响着人们的出行。
因此,本文所研究的公交卡管理信息系统具有一定的使用价值和现实意义。
一直以来,人们乘坐公交都使用现金,售票员找零。
到现在使用无人售票系统,在人们的零钞不够等原因的情况下,就逐渐开始了使用公交卡乘车的方法,但公交卡管理工作量大、容易混乱,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
鉴于此,本文研究了一种基于关系型数据库的公交卡信息管理方案。
利用SQLSERVER2005数据库管理系统灵活性和开发效率高的特点,采用面向对象的C#方法,开发出公交卡管理信息系统。
该系统所具有的优点:
检索迅速、查找方便、可靠性高、存储量大、保密性好、信息利用率高、成本低等。
该系统能够极大地提高公交卡信息管理的效率,节省管理公交卡所需要的人力、物力,降低公交公司的管理费用,为公交卡信息管理的信息化、正规化奠定了坚实的基础。
2.3开发环境
本文所采用的开发环境主要是基于数据库系统的SQLSERVER2005和基于面向对象程序设计的C#。
利用SQLSERVER2005创建公交卡注册信息表,充值表,挂失表,注销表,激活表以及用C#连接数据库用的管理员信息表。
利用C#中的控件按钮以及一些程序代码实现一些特定的功能,例如:
用户注册、充值、挂失、查询用户信息等,极大的提高了公交卡信息管理的效率。
这些功能都可以在此文研究的系统中简单的实现,当然对于一些复杂的操作还要再仔细的考虑!
SQLSERVER2005是我们大二学的内容,里面的查询语句是重点,而C#和SQLSERVER2005的结合就能够解决我们需要解决的问题。
三.公交卡管理信息系统的分析与设计
3.1系统需求分析
在公交卡管理系统中,管理员要为每个用户建立账户,并且录入用户信息,包括基本的姓名、性别、联系方式等,用户通过管理员注册后,会发放给用户一张公交卡,包括卡号和用户姓名和照片等基本信息。
持有公交卡的用户,通过接触公交车上的刷卡机器,用户即可正常的乘坐公交车。
当然,系统还提供强大的信息查询服务,查询可以通过多种方式实现,包括通过公交卡号查询和用户的身份证号码查询的方式。
通过这些方式可以查询用户的基本信息和用户的充值消费情况。
公交卡管理员通过该系统能够提供公交卡的挂失和注销服务,为丢失了公交卡的用户或者不愿再使用公交卡的用户提供更加优质的服务。
3.2系统总体设计
3.2.1系统总体结构设计
系统分三个模块:
公交卡管理模块,用户管理模块和查询模块。
系统功能总结构图如下:
3.2.2系统功能模块设计
系统要实现的主要是公交卡的管理,而公交卡管理有以下功能:
(1)公交卡注册:
通过此功能,通过用户提供的信息,管理员录入注册信息即可完成公交卡的注册,用户即可正常使用公交卡;
(2)公交卡的充值:
用户可以完成对公交卡的充值,可以继续使用公交卡;
(3)公交卡的注销:
如果用户要换卡或者不想继续使用公交卡可以通过此项功能实现;
(4)公交卡挂失:
挂失丢失的公交卡,冻结公交卡上的余额,让丢失的公交卡不能再被其他人使用;
(5)公交卡激活:
对挂失的公交卡进行激活,用户可以继续使用。
公交卡管理功能结构图:
用户管理功能结构图:
四.数据库设计
4.1数据库需求分析
根据系统需求分析,要完成系统预定功能,需建立数据表:
注册表、充值表、挂失表、激活表、注销表、管理员表等六张表。
4.2数据库概念结构设计
数据库E-R图设计如下:
4.3数据库逻辑结构设计
公交卡管理系统主要管理公交卡的信息,一个用户对应一个公交卡,故数据库设计中将公交卡与用户作为一个实体创建数据表。
管理员信息表
用户-卡信息/注册表
充值表
挂失表
激活表
注销表
五.系统详细设计与实现
5.1公共类设计与实现
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespace公交卡管理系统
{
classuser
{
publicstaticstringuserid;
publicstaticstringusername;
publicstaticstringuserpassword;
//产生验证码函数
publicstaticstringGetVailidateCode(intn)
{
string[]sourceCode={"a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","v",
"w","x","y","z","2","4","3","5","6","7","8","9","A",
"B","C","D","E","F","G","H","I","J","K","L","M","N","P",
"Q","R","S","T","U","V","W","X","Y","Z"};
Randomr=newRandom();
//stringValidateCode="";
StringBuilders=newStringBuilder();
for(inti=0;i{
s.Append(sourceCode[r.Next(sourceCode.Length-1)]);
}
returns.ToString();
}
}
}
5.2数据访问层类设计与实现
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Windows.Forms;
namespace公交卡管理系统
{
classdb
{
publicstaticstringsqlconn="DataSource=.\\SQLEXPRESS;
InitialCatalog=MyBusTicket;IntegratedSecurity=True";
publicstaticSqlConnectionconn=newSqlConnection(sqlconn);
publicstaticvoidbindgrid(DataGridViewdg,stringsqlstr)
{
SqlDataAdapteradp=newSqlDataAdapter(sqlstr,conn);
DataSetds=newDataSet();
adp.Fill(ds,"yonghu");
dg.DataSource=ds.Tables["yonghu"].DefaultView;
}
}
}
5.3界面设计与实现
5.3.1登陆界面设计与实现
登陆界面设计:
登陆界面代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace公交卡管理系统
{
publicpartialclassLogin:
Form
{
publicLogin()
{
InitializeComponent();
//窗体居中
StartPosition=FormStartPosition.CenterScreen;
}
//调用user类中GetVailidateCode()加载验证码
privatevoidLogin_Load(objectsender,EventArgse)
{
label5.Text=user.GetVailidateCode(4);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
try
{
stringsqlstr="select*frommanagerwhere账号='"+textBox1.Text+"'and密码='"+textBox2.Text+"'";
SqlDataAdapteradp=newSqlDataAdapter(sqlstr,db.conn);
DataSetds=newDataSet();
adp.Fill(ds,"yonghu");
if(textBox1.Text=="")
{
MessageBox.Show("用户名不能为空!
");
textBox1.Focus();
}
else
{
if(ds.Tables["yonghu"].Rows.Count>0)
{//用户ID、密码正确
inti=string.Compare(textBox3.Text,label5.
Text,true);
if(i==0)
{//验证码正确
//登陆成功,保存用户信息,隐藏login窗体,打开mainform窗体
user.userid=textBox1.Text;
user.userpassword=textBox2.Text;user.username=ds.Tables["yonghu"].
Rows[0].ItemArray[1].ToString();
this.Hide();
mainformf=newmainform();
f.Show();
}
else
{
MessageBox.Show("验证码错误!
");
}
}
else
{//用户名、密码不一致
MessageBox.Show("请仔细核对用户ID和密码!
");
textBox2.Clear();
textBox1.Focus();
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{}
}
//点击退出,退出程序
privatevoidbutton2_Click(objectsender,EventArgse)
{
Application.Exit();
}
//鼠标点击验证码文本框时,文本框清空
privatevoidtextBox3_MouseClick(objectsender,MouseEventArgse)
{
textBox3.Clear();
}
}
}
5.3.2主界面设计与实现
主界面设计:
主界面代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespace公交卡管理系统
{
publicpartialclassmainform:
Form
{
publicmainform()
{
InitializeComponent();
//窗体居中
StartPosition=FormStartPosition.CenterScreen;
}
privatevoidmainform_Load(objectsender,EventArgse)
{
timer1.Interval=1000;
timer1.Enabled=true;
}
privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse)
{//弹出退出确定窗口,确定时退出
if(MessageBox.Show("确定退出?
","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
Application.Exit();
}
}
privatevoid注销ToolStripMenuItem1_Click(objectsender,EventArgse)
{//弹出注销确定窗口,确定时注销
if(MessageBox.Show("确定注销该账号?
","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
this.Close();
Loginl=newLogin();
l.Show();
}
}
privatevoid修改密码ToolStripMenuItem_Click(objectsender,EventArgse)
{
xiugaimimax=newxiugaimima();
x.Show();
}
privatevoid充值ToolStripMenuItem_Click(objectsender,EventArgse)
{
chongzhicz=newchongzhi();
cz.Show();
}
privatevoid挂失ToolStripMenuItem_Click(objectsender,EventArgse)
{
guashigs=newguashi();
gs.Show();
}
privatevoid激活ToolStripMenuItem_Click(objectsender,EventArgse)
{
jihuojh=newjihuo();
jh.Show();
}
privatevoid注册ToolStripMenuItem_Click(objectsender,EventArgse)
{
regeditrd=newregedit();
rd.Show();
}
privatevoid注销ToolStripMenuItem_Click(objectsender,EventArgse)
{
zhuxiaozx=newzhuxiao();
zx.Show();
}
privatevoidtimer1_Tick(objectsender,EventArgse)
{
toolStripStatusLabel3.Text=DateTime.Now.ToString();
}
privatevoid统计查询ToolStripMenuItem_Click(objectsender,EventArgse)
{
chaxuncx=newchaxun();
cx.Show();
}
privatevoid查询用户ToolStripMenuItem1_Click_1(objectsender,EventArgse)
{
userXCu=newuserXC();
u.Show();
}
privatevoid修改用户ToolStripMenuItem_Click(objectsender,EventArgse)
{
updateUserud=newupdateUser();
ud.Show();
}
}
}
5.4测试
修改密码功能:
注册功能:
当所注册卡号与已有卡号重复时,提示卡号重复:
当注册时身份证号不满足15—18位数字的要求时,提示
充值界面:
输入卡号查询用户余额,
点击充值按钮,充值成功
冲值成功后自动刷新当前用户余额,
挂失界面:
挂失后激活界面:
若不挂失,不能激活
注销界面:
修改用户信息界面:
选中一行,下面标签中显示当前选中行的详细可修改信息
修改标签内容后,自动更新用户信息表中数据,
查询界面:
基本信息查询,可以按公交卡号和身份证号查询
充值记录查询,也可以按公交卡号和身份证号查询,点击确定按钮界面关闭
分类查询界面:
充值统计可以统计每个注册过的卡号的充值总钱数,并按充值总钱数降序排列,为根据每个卡当月充值总钱数超过一定量后卡类型进行自动升级做准备。
结束语
课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。
通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容在本次设计的全过程中,我对所学的知识有了一个比较系统的认识和理解。
涉及了各方面的知识,大大扩展了我的知识面,同时是我学会了如何使用所学的知识去解决一些实际的问题。
在设计中我深知自己掌握的知识还远远不够,掌握的一些理论知识应用到实践中去,总会出现这样或那样的问题,不是理论没有掌握好,而是光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。
把学到的知识应用到时间中去,多做多练,才可以把理论的精华发挥出来。
知识不是知道,了解就好,一定要去应用它,发展它,让它在现实生活中得到充分的应用,从而解决一些问题,这才是学习的根本目的。
而且知识又不是单一的,它是互相联系的,学科与学科之间都有着内在的联系。
计算机是一门非常复杂且庞大的学科,一项课题往往需要多项技术才可以完成的。
在设计阶段,通过对课题的深入分析与研究,迫使我对技术有了一定的了解。
在遇到问题时,得到了指导老师与同学的悉心帮助,使我感受到集体的力量是无穷的。
通过这次设计,我学会了和别人配合工作,因为一个人所学的知识不可能面面俱到的,只有通过合作,发挥自己的优点,体现团队精神,才能使工作做得更为出色。
通过这次设计,我学到了许多书本上学不到的知识,增强了自己的动手能力。
即将毕业我十分珍惜这次锻炼的机会,我按部就班的完成了自己的设计任务,但由于自己的知识水平有限,仍然存在很多的不足之处,恳请老师多多指教!
计算机技术的高速发展,使我深深地认识到只有不断的加强学习,才能在计算机技术方面不至于被淘汰,今后,我还要加强学习,努力使自己成为一位专业的计算机人员,为我自己所从事的工作服务。
参考文献
[1]郑宇军:
《C#程序设计基础》[M],北京:
清华大学出版社,2011
[2]吴绍兴,刘岩,明廷堂:
《C#项目案例导航》[M],北京:
电子工业出版社,2012
[3]欧立奇:
《Visualc#.NET案例开发集锦》[M],北京:
电子工业出版社,2009
[4]刘晓英:
《ASP.NET实用教程》[M],北京:
北京理工大学出版社,2009.7
[5]王珊,萨师煊:
《数据库系统概论》[M],北京:
高等教育出版社,2007
[6]郑阿奇:
《SQLserver数据库教程》,人民邮政出版社,2008年
[7]王小科:
《C#从入门到精通》.清华大学出版社,2011年
[8]段德亮,余建,张仁才:
《C#案例精编》.清华大学出版社,2012年
[9]罗富强:
《C#程序设计经典教程》,清华大学出版社,2012年
[10]王小科,梁冰:
《视频学C#》,人民邮电出版社,2010年
[11]孙晓非:
《C#课程设计基础教程与实验指导》,清华大学出版社,2012年
[12]王贤明:
《C#课程设计》,清华大学出版社,2012年
[13]郑宇军:
《C#语言程序设计基础》,清华大学出版社,2011年