Skip to content

ccq1/Mbpis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mbpis

手机费用查询系统——C#课程设计

**“**C#程序设计”课程综合设计

设计题目:手机费用查询系统

第1章 模块划分及小组分工

第2章 系统设计流程

2.1 系统总体功能简介

简介:

首先会出现登陆界面,信息正确的情况下,如果是用户,会进入用户界面;反之,若是管理员,会进入管理员界面。在管理员界面,可以进行用户信息的增删改。在用户界面,会出现话费查询,业务办理和头像三个区域,点击前两个,会进入相应模块;点击头像,会出现退出和重新登录按钮,分别对应其字面功能。在话费查询界面,用户可以查询自己每个月的消费情况和消费明细。在业务办理界面,可以办理用户喜欢的业务。

各界面详细功能:

1.登陆界面:登陆界面后台会链接数据库中的user表,会拿用户输入的信息与数据库中的信息进行比较,如果用户名,密码和用户类别三样在user表的同一条记录都存在的话,就会显示登录成功。如果用户类型为一般用户的话,同时会实例一个主界面(User Window),利用主界面的getName方法,把登录界面的用户名传递到主界面,然后利用窗口的show方法将主界面显示出来,再关闭登录窗口。如果用户类型为管理员的话,就会用同样的方法跳到管理员界面,并关掉登陆界面。

2.管理员界面:管理员界面设计有datagrid控件,利用后台代码会在里面显示user表里的所有信息,点击某一条记录,会在下方形成一个矩形区域,显示这条记录的所有信息,同时在矩形区域上方会出现三个按钮,分别是修改,增加,删除。点击修改,然后在矩形区内修改,点击确定按钮就会完成修改。增加和此类似。点击删除,再点击确定,这条记录就会被删除。

3.主界面(用户界面):分为三个区域,查询话费区,业务办理区,和头像区。点击查询话费区,会进入查询话费界面。业务办理区同理。点击头像区,会出现退出和重新登录按钮,分别对应其字面功能。

4.业务办理界面: 点击进去,会利用datagrid显示数据库里的所有业务。点击某个业务,就会显示其详细信息,并出现确定和返回按钮。返回按钮是指返回显示所有业务的界面。在显示所有业务的界面,也有一个返回按钮,它的作用是返回主界面。

5.话费查询页面:设有expander控件,内含本年十二各月份。点击对应月份的按钮,就会显示对应月份的当月所有花费,以及月初剩余话费。同时会在下方显示所有扣费项目,

点击就会显示详细信息。本界面为选择年份和月份时,会显示当前年份和月份的信息。

2.2 数据库结构说明

定义了一个数据库,命名为db,分为三张表,分别为db01,business和user。

business

定义了五个属性,如下图所示。其中id表示存储序号,为主键。Name表示业务名称,cost表示该业务每月或每次费用,details里存储有该业务的详细信息,kind为业务的标记属性。

图片

db01

该表定义了七个属性,id同样为存储序号,name为业务名称,odate表示为订购业务时间,cost表示业务花费,balance表示为月初剩余余额,year表示该记录当时年份,month表示该记录当时月份。

User**:**

Id为存储序号,name为用户(或管理员)姓名,password为登陆密码,type为登陆人员身份(即用户或管理员),number为用户电话号码。

第3章 运行界面截图及操作说明

3.1 登录界面模块

当用户密码,用户名和用户类型有任意一个不正确时,就会弹出密码或账号错误弹窗。三者全部正确时,根据用户类型,管理员进入管理员界面,一般用户进入用户界面。

3.2 管理员界面模块

管理员登录成功后,进入的初始界面如下:

点击任意一条记录,就会显示其详细记录:

根据新出现的按钮内容完成其代表功能。例如添加功能:

3.3 用户界面模块

用户登陆成功后后就会出现此界面:

点击对应按钮,回进入对应模块。点击头像框的向下箭头,会出现重新登录和退出程序

按钮,分别对应其字面功能。

3.4 业务办理界面模块

进入业务办理界面就会出现如下图:

点击返回按钮可以返回用户界面,点击业务列表里的记录,就会出现其详细信息:

点击确定按钮,就会显示购买成功,然后会在话费查询界面的扣费项目模块添加上条记录。点击这个画面的返回按钮,就会回到上一画面。

3.5 话费查询界面模块

用户登陆成功后,点击话费查询界面,就会进入这个界面:

在此界面里,有返回主界面按钮,实现其字面功能。该界面初始信息为当月消费信息,左侧有12个月份,点击任一按钮,就会显示对应月份的信息。该界面会根据用户登录信息,显示其姓名及电话号码。消费为本月到月底的全部消费,结余为月初所剩余额。扣费项目显示的该月所有的扣费项目。点击进去,会显示该扣费项目的详细信息。

第4章 综合设计收获

**收获一:c#**无全局变量,如何获取其它窗口信息问题。

在写话费查询界面时,需要在查询界面显示登录用户的姓名与号码。登录者地信息都在登陆界面里,而且在登录界面和话费查询界面还隔有一个用户界面。最后我们决定选择用如下方式解决:由登录界面到 用户界面的时候,先实例用户窗口对应的那个类,并且在用户窗口对应的那个类内部以经定义有成员变量loadname,和其他类可访问的函数getname。该函数需要一个字符串类型的参数,功能是将该参数赋值给loadname。调用getname方法,再调用show方法显示用户窗口,再把之前的登录窗口关掉。利用同样地方法,在打开话费查询界面时,就可以把用户信息传递给话费查询界面,根据信息,调用user数据库,就可以找到登录用户的姓名和号码了。

收获二:各界面之间来回切换问题

将想要显示出来的窗口对应的类实例出来,然后利用类的show方法,将窗口显示出来,同时利用类的close方法,关闭之前的窗口。

收获三:根据条件检索出来的数据库信息如何显示在文本内

实践发现,搜索出来的信息转化成列表可以显示在listbox控件里。但是有时需要获取详细信息,例如某条记录里的姓名,利用linq语句查询,如何将其赋值与一个string类型的变量时就会发现,无法赋值,右边为iqueryable类型。即使查询的再精确,哪怕只有一条记录,但它依旧是iqueryable类型的。最后通过FirstOrDefault方法,取出第一条记录得以解决这个问题。

收获四:控件属性visibility****的使用

在实现话费查询页面时,点击扣费项目时,会显示其详细信息。当时想到直接链接到另一页,将下方的listbox给换成label,里面显示对应记录的详细信息,仔细一想发现这样浪费大,代码多,还不容易实现。最后想起案例程序中用到的控件visibility属性。利用它,开始就在查询页面下方设有listbox和label控件,将label控件的visibility属性设为collapsed。用户点击某条记录时,就会将listbox的visibility属性置为collapsed,将label属性的visibility的属性置为visible。如此就可以实现理想效果了。

收获五:对事件驱动函数的参数 object sender****的理解

实现某些功能时,需要用到触发事件的控件,最后上网得知,sender参数就是用来传递指向指向事件源对象的引用,简单来说就是当前的对象

收获六:对数据库表的数据插入更加熟练

在往表里插入大量局部相似记录时,可以利用表的脚本,修改不同的地方,然后执行,比在表的数据表格里一条一条插入方便的多。

收获七:对linq****语句使用更加熟练

系统需要大量的数据查询,需要使用大量的linq语句,由此对其使用,更加得心应手。

第5章 系统优化思考

一:关于listbox重复点击同一个记录无法触发SelectionChanged****事件

例如在话费查询页面的扣费项目区域,如果点击某条记录,阅读完详细信息后,点击返回按钮,回到之前状态,再点击这个记录,无法显示详细信息,只能先点击其它记录,然后返回,再点击该记录才行。关于这个问题,我们设想有解决方法,但未去实现。方法如下:

点击某条记录后,在SelectionChanged事件内部将selectedidex修改为-1或其它永远无法通过点击记录得到的索引。注意修改selectedidex要在事件末尾,因为要在该事件不需要当前选择记录的索引时修改。其次,事件内部只有一条if else 语句,如果selectedidex为你修改的索引值,就执行空语句,否则就在else语句块内写上想要执行的功能语句。

二:界面布局优化

该系统整体界面布局与色彩搭配很差,可以请这方面有强项的人来解决。

三:实现头像框功能

在我们常见的系统里,都有点击头像框,然后出现各种各样的功能框。本系统里虽然有头像框,但是无法通过点击头像框的任一位置来出现各种功能框。本系统是利用Ellipse控件在用户界面右上角显示图片,然后在其位置上放上一个expander控件,所以只能点击上面的箭头符号,才能出现功能按钮。优化方法:

如果Ellipse控件也能触发MouseDown事件,那就在Ellipse下方用stackpanel和label设计出和我们常见的点击头像框出现的功能框相似的模型。然后利用stackpanel的visibility属性,将其隐藏。当用户点击Ellipse控件时再将其显示出来。同时,点击每个功能框都会触发对应的MouseDown事件,实现其对应功能。

About

粗糙的wpf练习,entityframework

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published