可视化程序设计.docx
《可视化程序设计.docx》由会员分享,可在线阅读,更多相关《可视化程序设计.docx(12页珍藏版)》请在冰豆网上搜索。
可视化程序设计
可视化程序设计
实习论文
计算机与信息学院
题目:
火车订票系统
学生:
王自闯(组长)
胡瑞,吴宗伟 (成员)
专业:
信息与计算科学
班级:
11计算A1
指导教师:
张世明
日期:
2013年7月1日
一、项目简介
此项目主要按生活实用性为主分为多个板块,包括网上注册,修改密码,订单查询,个人信息查询与修改,列车与车票管理,退票管理,相应的改签,其中为避免窗体过多而造成的打开窗体的数量过多,列车与车票管理又分为车票预定,余票查询,列车时刻查询,客车代售点四大块,其中列车时刻查询又分为三个板块,车次查询,票件查询,车次经过车站查询,此项目窗体有静态窗体有动态窗体,而且还有相应的语音提示,使整个画面达到了静态画面,动态显示,语音提醒的三位一体!
二、成员分工
胡瑞页面设计建立数据库页面美化录音
吴宗伟:
窗体设计数据库的录入搜集图片录音
三、项目亮点
此项目的亮点在于1:
特殊窗体(不规则窗体)的设计2:
不规则button空间的设计3窗体的滑动,淡出淡出,由中心向四边展开的效果的特效展示4:
12个圆圈无规则运动的动画特效。
5:
闪烁窗体(flashwindow)的实现6:
窗体的动态移动效果7:
GDI图像的绘制8:
流动字幕渐显效果的实现9:
label中字体的在label控件中的移动(并非label中top属性或right属性的移动)10:
利用tag属性实现textbox中字体颜色的动态改变11:
三个combox相应items属性的绑定12:
数据库四大语句select,insert,update,delete对数据库的操作12:
父窗体向子窗体的传值(庞大的窗体传值网络)13:
验证码的实现
14:
窗体提示音的加入15利用特定文本控件实现对数据库信息的查找与绑定
16:
利用datagriedview实现对两个表特定信息的显示17实现数据库图片信息的存放于读取18toolTip和errorProvider对控件输入信息的提醒与判断出现感叹号提示。
19:
picturebox中图片的变换
四、操作说明
(结合截图)
主界面设计主界面是程序的入口主要包括注册,登录,忘记密码与密码找回等信息。
同时还有订票,退票,余票查询的窗体的快捷入口主界面如图:
忘记密码(找回密码,密码修改)是同一个窗体,此窗体可以实现窗体的动态移动且此窗体为不规则窗体(这里是椭圆形窗体)
注册界面的设计主要是录入用户的基本信息,详细信息,联系方式三方面的主要内容,此窗体的相应的下一步控件为不规则控件,点击后通过此控件获取tabcontrol的相应的index的值相应的截图如下:
下面是登陆界面,登录界面的设计窗体的效果是自左向右打开的,有一种滑动的效果,此窗体主要包括车票预定窗体,个人信息查询与修改窗体,密码修改窗体,退票查询窗体,改签窗体,密码修改窗体,同时在窗体pictruebox中实现文字的动态显示,主要是利用timer控件对字符串的字节一个一个的抓取并显示,相应的截图如下:
密码修改窗体主要是通过相应控件的绑定实现的此外窗体的动态效果是12个圆圈的随机动态移动此窗体主要是用到控件传值中的用户名,通过用户名把其他的个人信息都呈现出来,相应的截图如下:
当用户点击车票预定后,下面就进入到程序的核心,也就是最主要的功能实现,由于这里的窗体若一个一个的实现窗体的数量就会过于庞大,所以就把订票功能的核心放在一个tabcontrol里面,在此窗体最上面有一个label,label中的文本信息在只在label中移动,这里并不是此label的right属性或top属性来实现,用的是measurestring函数,picture中的图片利用timer可以动态改变
相应的主界面截图为:
相应的功能显示如下图:
在订票按钮中共有两个遍历与两个操作,此时需要引入第三方控件来存放遍历的的车次信息,如查找到相应出发站目的站的信息,就把车次信息写入到listbox中,然后再用select语句对listbox中的车次信息一个一个的查找,在呈现在datagridview里面,然后在datagridview选择适合自己的车次信息,相应的车次信息是存放在两个表中的,这就需要用一个datagridview来显现两个表中的信息,这正是此中的关键所在(在实习体会中会有专门的说明)在订票的button中还有进行相应的插入操作,在这里用结构体对datagridview的选中行进行标示,然后将结构体的信息插入到用户订票信息中,因而订票button中的遍历和相应的选择,插入操作是很关键的。
此外在选择相应的车次时,若出发车次无填写,则可以在动车,z字头,T字头上选择当点击之后,只会将对应的车次信息显示出来,若出发车次的textbox对话框有填写,则根据车次优先的原则,若点击不相符的选项,仍以填写的车次信息为主。
下面是退票管理的窗体,退票管理的窗体是主要是GDI绘图操作与闪烁窗体的实现,相应的截图如图所示:
窗体的的闪烁由于截图是静态的,没有显示出来,此窗体的背景有的是渐变画刷,主要是白色到绿色的垂直变化,下面的退票,票务,改签所对应的图画为路径颜色的渐变主要使用的是brush的surround属性来设置其相应的颜色,,图中相应的字体与相应圆圈的定位也是遇到的比较难做的地方,这里运用的是g.drawstring方法,定位为圆的圆心位置,退票和改签是两个圆形特殊控件,窗体背景和相应团的绘制主要运用的是GDI制图。
下面是点击退票的效果:
点击退票时会出现messagebox对话框,点击“是”的时候,将会在数据库中删除对应的票,这里主要是运用票的编号对数据库中用户订票进行操作,这里订单编号以时间为编号,来避免订单编号的重复,同时订单编号推定之后,相应在datagridview里面删除此行,相应的代码为:
DataRowViewdrv=dataGridView1.SelectedRows[0].DataBoundItemasDataRowView;
drv.Row.Delete();
改签为可以更改相应的车次信息与时间信息若点击改签,则将会吧形影的信息保存到数据库,操作代码如下:
adapter.Update(ds,"用户订票信息");
这里是此订票系统的核心,下面是其他订票信息的介绍:
相应的功能与查询条件与订票管理差不多,这里不再多累赘!
列车时刻表的设计主要分为三个部分,车次查询,票价查询,车次经过车站查询
相应的截图为:
这三个界面主要来说一下车次经过车站查询,其他两个不再过多累赘。
相应的截图为:
若输入相应的地点之后,所有经过此车站的信息都会显现出来,方便用户查找相应的代码如下:
while(dr.Read())
{inti=2;
for(i=2;i<=14;i+=4)
{
if(dr.GetString(i)==comboBox11.Text)
{
listBox5.Items.Add(dr.GetString
(1));
}
}
}
以下是列车代售点的查询,列车代售点主要是运用comebox之间的绑定,添加的相应的items项将随着第一个comebox选择的不同而改变,截图如下:
try
{
stringstr="server=(local);IntegratedSecurity=SSPI;database=火车票订票系统";
SqlConnectioncon=newSqlConnection(str);
con.Open();
SelectString="select*from客票代售点";
stringtj4="[省/直辖市]='"+comboBox3.Text+"'";
stringtj5;
stringtj6;
if(comboBox4.Text=="==请选择==")
{
tj5="1=1";
}
else
tj5="[市/区]='"+comboBox4.Text+"'";
if(comboBox5.Text=="==已无选择==")
tj6="1=1";
else
tj6="县='"+comboBox5.Text+"'";
SelectString=SelectString+"where"+tj4+"and"+tj5+"and"+tj6;
SqlDataAdapteradapter=newSqlDataAdapter(SelectString,con);
adapter.Fill(ds5,"客票代售点");
this.dataGridView5.DataSource=ds5.Tables["客票代售点"];
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
五、项目改进
1.在项目改进上,此系统有许多需改进的地方,比如说增加返程车次,此系统主要是只考虑单程车次的情况,这对于订票系统来说,是不够完美的地方
2.改签可以包括时间改签和车次改签,但也可以同时改签两方面的内容,在这点上是没做到最符合生活实际。
3.火车订票系统有动态旅程规划,也需要用到动态规划有向图和无向图有关算法,这方面是数据结构方面的知识,由于这方面设计起来项目过大,这方面未涉及,这也是项目需改进的地方。
4.火车订票必定连带着货物服务,行包服务等方面的查询,对于这点也是要更改的地方。
5.对于此系统,本来想设计友情提示的旅程规划,加入天气信息(主要运用web项目对网页中的天气信息对字符串进行动态抓取),结过项目设计是对类的使用不够灵活,此方面的设计只好作罢,因而这就是下一步应该努力的方向
6.项目的实用性主要是给用户提供便利的方便性,此系统主要是自己订票,不可以给其他人代订,实用性仅限于个人,这也是项目改进的入口。
六、实习体会
此次项目编程最大的收获有两方面:
一是一个datagridview显示两个表中特定的字段信息,二是:
数据库中图片的存放。
Datagridview中两个表信息的存放遇到的问题最大,首先想到是的对两个表实现对等链接这一种方法未实现,另外是两个表之间的左外连接,或者右外连接,结果都没有达到预期的目的。
于是上网查找了很多资料,找到了下面的代码
SelectString="select车次车站与时间查询.车次,车站1出发站,车站2目的站,(select商务座from车次票价查询where车次车站与时间查询.车次=车次票价查询.车次)as商务座.......................
stringtj4="车次车站与时间查询.车次='"+listBox1.Items[m]+"'";
SelectString=SelectString+"where"+tj4;
SqlDataAdapteradapter=newSqlDataAdapter(SelectString,con);
adapter.Fill(ds2,"车次车站与时间查询");
this.dataGridView1.DataSource=ds2.Tables["车次车站与时间查询"];
分析上面代码,主要的关键在于(select商务座from车次票价查询where车次车站与时间查询.车次=车次票价查询.车次)as商务座其他都是按照这种方式进行查找,这样dataset只用填充一个表就可以查找到两个表中的信息。
代码的实现比自然连接的效果更好。
另外是数据库中图片的存储:
数据库中图片的存储有两种方式。
一种是文件路径的存储,一种是将图片以二进制形式进行存储,然后在对二进制读取。
对于这种方式有其中的转换,先将二进制流转化成文件流,再将文件流转化成Image图片流。
然而对于这种方式,始终在文件流转化成图像流处出现问题,查找了很多资料仍然没有解决问题,因而就改变思路,转化为将图片路径存放到数据库中,然后在进行读取,这种方法有缺陷,若程序copy到其他电脑上,路径变了,相应的图片便读取不出来,这是路径存取和数据库二进制存取的主要优缺点,但是此程序可以把二进制数据存取进去,主要是运用路径存取,这样做欠佳!
!
!
此窗体之间存在着复杂的窗体传值包括子窗体向父窗体传值,这里主要是运用用户名来进行有关的操作,具体的操作为用panel并将其设置为透明,将相应的控件覆盖。
通过本次的编程对数据库的操作有了更深的掌握,包括数据库的select,insert
Updatedelete数据库的遍历(datareader),相应控件sqlconnetion,sqlcommand,sqldatadapter另外通过此次编程,真正懂得“看起来容易做起来难”,火车票订票系统后台的操作是相当复杂的,在此程序中简化操作为一个车次为4个车站,若设计返程,相应的代码行数将会加倍,这里采用单向思维。
做起来的时候,要考虑车次信息,要考虑座位信息还要考虑时间为题,三者的融合是最难的,因而相应的代码考虑起来只能用单因素变量来实现。
另外此次编程也让我意识到其实编程最重要的不是程序代码,二是模型和思想,模型对了,思想考虑周全了,相应的代码实现起来不是难事,此外编程中还要运用到其他类似的如图片处理等方面的内容,对待程序来说,相应的图片处理技术等学科也要了解一点,这样才能使自己的程序不仅仅收获实用价值,还能达到美学价值。
对于此次编程,我知道我的程序中还有许多需要改进的地方,还有很多不完美的地方,这都是我今后努力的方向,此外C#还有重要的版块如API和类与对象,此程序只用到了简单的API,对类和对象只是简单地结构体,所以未曾加入到类和对象强大的功能中去,所以今后努力的方向是要达到程序的声,图,实用性三者的完美结合,这样程序才能更上一层楼。