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

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

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

1 USEEducationManager2

3 GO

4

5 CREATE TABLEDepartment6 (7 DeptId nvarchar(4), --系编号,用于生成学号

8 Name nvarchar(20) NOT NULL, --系名

9 CONSTRAINT PK_DeptId PRIMARY KEY(DeptId)10 )11

12 CREATE TABLEBuilding13 (14 BldgName nvarchar(6),15 RoomNum int,16 CONSTRAINT PK_Bldg PRIMARY KEY(BldgName, RoomNum)17 )18

19 CREATE TABLETeacher20 (21 TchId nvarchar(4), --教师编号

22 DeptId nvarchar(4), --教师所属学院编号

23 BldgName nvarchar(6), --办公室建筑名

24 RoomNum int, --办公室编号

25 Name nvarchar(20) NOT NULL, --教师名

26 Gender bit NOT NULL, --性别

27 Title numeric(8, 2) NOT NULL, --职称

28 PhoneNum nvarchar(11) NOT NULL, --电话

29 CONSTRAINT PK_TchId PRIMARY KEY(TchId),30 CONSTRAINT FK_Tch_DeptId FOREIGN KEY (DeptId) REFERENCESDepartment(DeptId),31 CONSTRAINT FK_Tch_BldgName FOREIGN KEY (BldgName, RoomNum) REFERENCESBuilding(BldgName, RoomNum)32 )33

34 CREATE TABLELocation35 (36 Province nvarchar(10), --省

37 City nvarchar(20), --市

38 CONSTRAINT PK_Loc PRIMARY KEY(Province, City),39 )40

41 CREATE TABLEClass42 (43 ClassId nvarchar(4), --班级编号

44 DeptId nvarchar(4), --系编号

45 CONSTRAINT PK_ClsId PRIMARY KEY(ClassId),46 CONSTRAINT FK_Cls_DeptId FOREIGN KEY (DeptId) REFERENCESDepartment(DeptId),47 )48

49 CREATE TABLEStudent50 (51 StdId nvarchar(12), --学号

52 DeptId nvarchar(4), --学院编号

53 Province nvarchar(10), --省

54 City nvarchar(20), --市

55 Name nvarchar(20) NOT NULL, --姓名

56 Gender bit NOT NULL, --性别

57 Birthday datetime NOT NULL, --出生日期

58 ClassId nvarchar(4) NOT NULL, --班级编号

59 Credit numeric(3, 1) CHECK (Credit >= 0), --已修学分

60 CONSTRAINT PK_StdId PRIMARY KEY(StdId),61 CONSTRAINT FK_Std_DeptId FOREIGN KEY (DeptId) REFERENCESDepartment(DeptId),62 CONSTRAINT FK_Std_ClsId FOREIGN KEY (ClassId) REFERENCESClass(ClassId),63 CONSTRAINT FK_Std_Loc FOREIGN KEY (Province, City) REFERENCESLocation(Province, City),64 )65

66 CREATE TABLECourse67 (68 CourseId nvarchar(4), --课程编号

69 DeptId nvarchar(4), --系编号

70 TchId nvarchar(4), --授课教师

71 ClassId nvarchar(4), --上课班级

72 BldgName nvarchar(6), --教学楼

73 RoomNum int, --教室

74 Name nvarchar(20) NOT NULL, --课程名

75 Credit numeric(3, 1) CHECK (Credit >= 0), --学分

76 Semester nvarchar(12) NOT NULL, --学年

77 ClassHour int NOT NULL, --学时

78 CONSTRAINT PK_CourseId PRIMARY KEY(CourseId),79 CONSTRAINT FK_Course_DeptId FOREIGN KEY (DeptId) REFERENCESDepartment(DeptId),80 CONSTRAINT FK_Course_TchId FOREIGN KEY (TchId) REFERENCESTeacher(TchId),81 CONSTRAINT FK_Course_ClsId FOREIGN KEY (ClassId) REFERENCESClass(ClassId),82 CONSTRAINT FK_Course_BldgName FOREIGN KEY (BldgName, RoomNum) REFERENCESBuilding(BldgName, RoomNum)83 )84

85 --由于课程是按照班级来上,所以只需要比较班级编号即可,不用再建表

86

87 CREATE TABLEReport88 (89 StdId nvarchar(12), --学号

90 CourseId nvarchar(4), --课程编号

91 Grade int CHECK (0 <= Grade and Grade <= 100), --成绩

92 CONSTRAINT FK_Rep_StdId FOREIGN KEY (StdId) REFERENCESStudent(StdId),93 CONSTRAINT FK_Rep_CourseId FOREIGN KEY (CourseId) REFERENCESCourse(CourseId)94 )

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

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

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

1 usingSystem.Data.SqlClient;2 usingEductionManagerClass.Properties;3

4 namespaceEductionManagerClass5 {6 public classAppDbConnection7 {8 private static string AppConnectionString { get; set; } =Settings.Default.connectionString; // C# 6.09

10 public bool Login(string uid, string pwd, boolremeberMe)11 {12 var connectionStr = AppConnectionString + "User ID=" + uid + ";Password=" +pwd;13 SqlConnection con = newSqlConnection(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 returnsucess;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 编译一次。

47977cd26b39112e717fc7f36ffe93ad.png

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

74d01f85853c1bba68ab6c3c603de5cc.png

1 usingSystem.Windows;2 using EductionManagerClass; //注意加这个!

3

4 namespaceEductionManagerUI5 {6 ///

7 ///App.xaml 的交互逻辑8 ///

9 public partial classApp : Application10 {11 public static AppDbConnection AppDbconnection { get; } = new AppDbConnection(); //C# 6.0

12 }13 }

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

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

68d658e2835ac291b87b66b89edad6c6.png

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

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

1 private void loginButton_Click(objectsender, 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。

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

41f11ef1ce1c399001dbbdb7b5fd8dd2.png

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

110f27e7c940efb45149a24a829a19bf.png

cc453b322ef18d6900ee45f20945302d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值