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