NJU 足球赛程管理系统

​ 为了方便学校足球爱好者们及时查看校内足球赛程,花 3 天自学 SQL Server + C# ,制作了一个界面化 Windows 端桌面程序。期间学习到的东西很多!

项目介绍:

项目名称:NJU足球赛程管理系统
项目环境:Sql Server 2019 + Visual Studio 2019
项目编程语言:Sql Server + C#.net
日期:2020.12.18 04:24 (UTC+08:00)

项目描述:
提供针对NJU足球赛事的赛程查询、增加、修改、删除等功能,方便同学们自助关注NJU足球赛事。
程序界面由Visual Studio 2019 利用C#.Net语言WPF框架开发,后端数据则保存在Sql Server Express数据库中,利用 SQL Server Management Studio (SSMS) 2018中创建和管理,同时也在VS中通过ADO.Net技术进行连接和操纵。

项目过程:

​ (1)创建数据库:首先使用SSMS工具链接本地数据库服务器并创建数据库、创建表,然后编辑数据或从EXEL自动导入数据。

下图为导出的创建脚本和数据库数据:

​ (2)软件开发:打开我最爱的VS2019,开始创作!创建项目、设计前端界面,编写后端代码。

这里我放一下项目“解决方案管理器截屏吧”:

稍微介绍一下:

​ 本次项目使用的界面框架为C#中的WPF,比传统的WinForm强大、高级。XAML的编写风格有点像HTML,所以写起来简直舒服!我采用了前后端分离技术,前端只负责界面,后端负责程序逻辑和与数据库交互,前后端通过数据绑定来连接。

​ (3)数据库连接和操纵:这里我用了两个绝佳的方案:APP.config里增加命名空间“connectionStrings”,操纵SQL Server封装在SqlHelper类中

​ (4)界面优化: 使用阿里巴巴矢量图库iconFont下载了一些合适的icons来美化前端界面,并用我喜欢的足球明星们来当背景。赛程信息界面是C罗和梅西,主界面置顶背景为球王马拉多纳,上个月因病逝世,真的很遗憾啊!一代球神!希望您安息!

项目结果展示:

项目遇到的坑及处理方案

​ 世界上最痛苦的事情莫过于过一段时间看自己以前的代码!😂

​ 因此,我养成了一个好习惯,那就是做注释、写项目日志。其中记录学到的知识、遇到的坑以及相应的解决方案。

​ 下面我贴几个本项目的学习心得和bug日志,方便大家参考:

(1)坑00:教学视频参考

1
2
3
4
5
6
7
8

因为是刚自学,而网上关于C#的帖子、回答等都好几年前的,毫无参考价值!
因此前面进度非常慢,后来B站上看到一个近期发表的教学视频,从中受益颇多!
如果有刚学C#的朋友看到这里里,那就恭喜您,真的能少走弯路了,包括我下面遇到的 坑01-坑05 !!!
时间就是金钱,快看看这个视频吧!
https://www.bilibili.com/video/BV1Wt411Z76N?p=1


(2)坑01:C#中连接Sql Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

连接数据库时,需要检查服务器名是否正确,一般服务器名是个目标数据库的ip,如果是本地服务器的话,网上说可以用一个点(.)或者local,但是没成功!

解决方案:
我将服务器名改成SSMS中服务器属性中的名字(我的笔记本电脑的名字+SQLEXPRESS)才连接成功。
例如:payiz\\SQLEXPRESS
参考网址:
http://c.biancheng.net/view/3010.html
https://blog.csdn.net/yenange/article/details/77026214
https://www.bilibili.com/video/BV1Wt411Z76N?p=15
http://c.biancheng.net/view/3017.html

此外,链接数据库,进行数据库语句执行时,一定要注意异常处理和资源释放的问题!
可以使用try catch ,但更推荐用using关键字来释放资源!(非常重要!非常重要!非常重要!)

此外,数据库连接字段可以放到项目配置文件中,这样就不用每次都重写连接字段,项目管理、移植起来更方便
具体做法:
1.项目根目录添加一个“应用程序配置文件”,名字为App.config,通常WPF项目创建会自动生成
2.App.config中添加节点,给add起一个name
3.项目添加对System.configuration的引用(可以理解为开发包,头文件)
4.使用ConfigurationManager类(System.configuration里面的)来获取配置文件中的字段
5.例如:string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

此外,数据库的链接查询操作也不用每次都重新写一遍,更高级的用法是用一个类来封装,我们称之为SqlHelper类
具体做法可参考:https://www.bilibili.com/video/BV1Wt411Z76N?p=22

(3)坑02:C#窗体的尺寸、最大化、最小化、图标Icon之类的才哪里改?

解决方案:
方法一:选中窗体,在右边属性窗口里更改
方法二:在页面配置文件(.xaml)里写相应代码,例如:
<Window x:Class="NJU足球赛程管理系统.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:NJU足球赛程管理系统"
    mc:Ignorable="d"
    Title="NJU足球赛程管理系统" Height="600" Width="800" MinWidth="800" MinHeight="600" Left="200" Top="100" MaxWidth="800" MaxHeight="600" 
    WindowState="Normal" ShowInTaskbar="True" ResizeMode="CanMinimize" Icon = "./images/zuqiu.png" WindowStartupLocation="CenterScreen"
    >
注意:如果不知道Window这个类还有哪些属性和方法,则可以选中Window这个类,按F12,进入该类的声明查看(这个很重要!以后遇到任何陌生的类,都可以查看其声明)

(4)坑03:C# 窗体之间如何实现跳转?

1
2
3
4
5
6
7
8
9
解决方案:
在需要跳转的地方可以用这个代码进行跳跃

AddWindow aw = new AddWindow(); //先声明需要跳转的窗体类的实例对象
this.Hide(); //隐藏当前窗体,如过不是系统初始窗体,也可以用this.close()关闭掉,因为初始对话框被关闭的话程序就退出了(当然这个也是有办法解决的)。
aw.ShowDialog(); //跳转,ShowDialog()和Show()二者的区别要注意,前者为模态对话框(跳转后原对话框不可操作),后者为非模态(跳转后原对话框仍可操作)。
this.Show(); //跳转后的对话框

这里如果我说的不清楚还可以上网查一下,我留个参考网址:https://www.cnblogs.com/zhiaiyaya/archive/2014/03/12/3595275.html

(5)坑04:Sql Server中填入数据时直接从Exel表格中导入

解决方案:
非常简单,所以就放一下我参考的网址:
https://blog.csdn.net/marko_zheng/article/details/86005538
https://www.cnblogs.com/lzhc/p/8568500.html
https://docs.microsoft.com/zh-cn/sql/integration-services/import-export-data/connect-to-an-excel-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15

如果连接exel出错,可以安装:Microsoft.ACE.OLEDB.16.0
请确保已下载 Access 数据库引擎 2016 可再发行组件,而不是 Microsoft Access 2016 Runtime 。
下载网址:https://docs.microsoft.com/zh-cn/sql/integration-services/load-data-to-from-excel-with-ssis?view=sql-server-ver15#files-you-need

(6)坑05:C#数据绑定机制

1
2
3
4
5
6
7
8
9
如何将界面中的控件和后台数据绑定,实现后台数据实时更新界面上控件的内容。
经过一整天的探索,我现在确定了问题的关键:数据绑定

解决方案:
在成熟的程序开发中大家都会尽量避免在后台数据更新时直接操纵前端界面控件,取而代之的是将后台数据和前端界面控件进行数据绑定。数据绑定!数据绑定!数据绑定!真的很重要,且很强大!

话不多说,我就直接放我寻找了一整天后觉得最有用的参考网址吧!看了能少走弯路,加油!
https://www.bilibili.com/video/BV1Wt411Z76N?p=1
https://docs.microsoft.com/zh-cn/visualstudio/xaml-tools/walkthrough-binding-to-data-in-xaml-designer?view=vs-2019

项目心得

​ 从0开始自学Sql Server 和C#,而且程序交付时间很紧迫,所以珍惜每分每秒,这3天过得像过了一个星期一样!在学习和制作过程踩了很多坑,但也在解决困难过程中学习了好多知识,也让我前后端分离、数据绑定、记录项目日志等编程习惯得到了很好的锻炼,最后写出来的程序“高内聚低耦合”,非常漂亮!

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2022 PAYIZ
  • |

感谢您的支持😊

支付宝
微信