【乱写代码坑人系列】ZJUT数据库大型实验 - 学生管理系统(三):建立数据库和登录

学生管理系统(三)建立数据库和登录

  现在可以根据之前画的图来建立数据库了,打开SSMS,建立五张表。

 1 USE EducationManager
 2 
 3 GO
 4 
 5 CREATE TABLE Department
 6 (
 7     DeptId      varchar(4),
 8     Name        varchar(20),
 9     CONSTRAINT PK_DeptId PRIMARY KEY (DeptId)
10 )
11 
12 CREATE TABLE Teacher
13 (
14     TchId       varchar(4),
15     DeptId      varchar(4),
16     Name        varchar(20),
17     Salary      numeric(8, 2)   CHECK (Salary >= 0),
18     CONSTRAINT PK_TchId         PRIMARY KEY (TchId),
19     CONSTRAINT FK_Tch_DeptId    FOREIGN KEY    (DeptId) REFERENCES Department(DeptId)
20 )
21 
22 CREATE TABLE Student
23 (
24     StdId           varchar(12),
25     DeptId          varchar(4),
26     Name            varchar(20),
27     EntranceDate    datetime,
28     Credit          numeric(3, 1)    CHECK (Credit >= 0),
29     CONSTRAINT PK_StdId         PRIMARY KEY (StdId),
30     CONSTRAINT FK_Std_DeptId    FOREIGN KEY    (DeptId) REFERENCES Department(DeptId)
31 )
32 
33 CREATE TABLE Course
34 (
35     CourseId    varchar(4),
36     DeptId      varchar(4),
37     TchId       varchar(4),
38     Name        varchar(20),
39     Credit      numeric(3, 1)   CHECK (Credit >= 0),
40     CONSTRAINT PK_CourseId        PRIMARY KEY (CourseId),
41     CONSTRAINT FK_Course_DeptId   FOREIGN KEY    (DeptId)    REFERENCES Department(DeptId),
42     CONSTRAINT FK_Course_TchId    FOREIGN KEY    (TchId)     REFERENCES Teacher(TchId)
43 )
44 
45 CREATE TABLE Report
46 (
47     StdId       varchar(12),
48     CourseId    varchar(4),
49     Grade       int           CHECK (0 <= Grade and Grade <= 100),
50     CONSTRAINT FK_Rep_StdId       FOREIGN KEY    (StdId)       REFERENCES Student(StdId),
51     CONSTRAINT FK_Rep_CourseId    FOREIGN KEY    (CourseId)    REFERENCES Course(CourseId)
52 )

   建立好之后回到VS,右键项目EducationManagerClass(刚发现本来是想叫Library的,结果打成了Class……懒得改了反正一样用啊哈哈),选择属性,设置,点击添加一个设置文件,然后在加入两个属性:connectionString,类型为string,值为Data Source=你的服务器名;Initial Catalog=EducationManager;Persist Security Info=True;   和 remeberMe,类型为bool,值为False。

  这两个属性分别用来记录连接字符串和下次自动登录。

  接下来,依旧是Class项目中,新建类AppDbConnection,这个类将用来连接数据库,并进行各种操作,代码如下

 1 using System.Data.SqlClient;
 2 using EductionManagerClass.Properties;
 3 
 4 namespace EductionManagerClass
 5 {
 6     public class AppDbConnection
 7     {
 8         private static string AppConnectionString { get; set; } = Settings.Default.connectionString; // C# 6.0
 9 
10         public bool Login(string uid, string pwd, bool remeberMe)
11         {
12             var connectionStr = AppConnectionString + "User ID=" + uid + ";Password=" + pwd;
13             SqlConnection con = new SqlConnection(connectionStr);
14             bool sucess = false;
15 
16             try
17             {
18                 con.Open();
19                 sucess = true;
20                 AppConnectionString = connectionStr;
21                 if (remeberMe)
22                 {
23                     Settings.Default.connectionString = connectionStr;
24                     Settings.Default.remeberMe = true;
25                     Settings.Default.Save();
26                 }
27             }
28             catch
29             {
30                 sucess = false;
31             }
32             finally
33             {
34                 con.Close();
35             }
36 
37             return sucess;
38         }
39     }
40 }

  之前在配置文件中的连接字符串是没有提供登录名和密码的,所以在Login方法中需要作为参数提供。登录成功后会修改AppDbConnection中的连接字符串,同时,当remeberMe 为true 的时候,将会修改配置文件,使其记录登录名和密码,否则的话,程序会在下一次启动时依旧要求验证登录名和密码。

  登录的验证方法很简单:用一个临时的string来保存加上参数的连接字符串,然后尝试连接并打开数据库,如果出错则会抛出异常,并返回false;否则就是登录成功,保存可用的字符串后返回true。

  另外需要注意的是,这里给AppConnectionString 赋值的语句为C# 6.0 的语法。

  接下来,在UI项目中,新建一个窗口,名为Login.xaml ,打开App.xaml,将其中的StartUri的值改为Login.xaml,保存并按Ctrl+shift+B 编译一次。

  技术分享

  再点击解决方案资源管理器中App.xaml旁边的小三角,打开App.xaml.cs,并在App 类中添加代码

  技术分享

 1 using System.Windows;
 2 using EductionManagerClass; // 注意加这个!
 3 
 4 namespace EductionManagerUI
 5 {
 6     /// <summary>
 7     /// App.xaml 的交互逻辑
 8     /// </summary>
 9     public partial class App : Application
10     {
11         public static AppDbConnection AppDbconnection { get; } = new AppDbConnection(); // C# 6.0
12     }
13 }

  这样,就添加了一个单例模式的AppDbConnection 实例,之后便可直接用App.AppDbConnection 来调用各种方法。

  打开Login.xaml,添加登录名和密码的输入框,以及记住我的选择框,还有登录按钮。注意密码框应该使用PasswordBox 而不是TextBox。

  技术分享

  我这不小心加了点特效,不过这不是重点,具体的代码回头传git上,地址在最下面……接下来给登录按钮加上点击事件

<Button x:Name="loginButton" Content="登录" Margin="150,266,149,0" VerticalAlignment="Top" Background="{x:Null}" Foreground="#FF007ACC" BorderBrush="#FF007ACC" FontSize="16" Style="{StaticResource NormalButtonStyle}" Click="loginButton_Click"/>

  在输入Click之后按回车键,智能提示会出现添加新事件的选项,选择之后VS会自动帮你在Login.xaml.cs中新建一个空的事件,现在打开Login.xaml.cs,修改事件代码

1         private void loginButton_Click(object sender, RoutedEventArgs e)
2         {
3             var success = App.AppDbconnection.Login(uidTextBox.Text, pwsTextBox.Password, remeberMeCheckBox.IsChecked ?? false);
4             if (success)
5                 MessageBox.Show("Success!");
6             else
7                 MessageBox.Show("Something Wrong!");
8         }

  在Login 的参数中,用?? 运算符来保证checkbox 的值在为null 的时候也返回false。

  至此,连接以及登录功能已经完成。然后在菜单中选择视图,打开团队资源管理器,选择更改,并填写修改信息,点击提交并推送。

  技术分享

  这时会提醒你连接到一个git 仓库,只需要去github (其他的也可以)上新建一个仓库,然后将url 拷过来就好,选择发布,会钻出来一个光头,让你填写git的账号密码,登录后就会自动推到git上。

  技术分享技术分享

 

最后放上git:  github/LzxHahaha

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。