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

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

学生管理系统(一)建立项目

学生管理系统(二)项目规划

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

 1 USE EducationManager
 2 
 3 GO
 4 
 5 CREATE TABLE Department
 6 (
 7     DeptId        nvarchar(4),                    -- 系编号,用于生成学号
 8     Name        nvarchar(20)    NOT NULL,        -- 系名
 9     CONSTRAINT PK_DeptId PRIMARY KEY (DeptId)
10 )
11 
12 CREATE TABLE Building
13 (
14     BldgName    nvarchar(6),
15     RoomNum        int,
16     CONSTRAINT PK_Bldg    PRIMARY KEY (BldgName, RoomNum)
17 )
18 
19 CREATE TABLE Teacher
20 (
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)            REFERENCES Department(DeptId),
31     CONSTRAINT FK_Tch_BldgName    FOREIGN KEY    (BldgName, RoomNum)    REFERENCES Building(BldgName, RoomNum)
32 )
33 
34 CREATE TABLE Location
35 (
36     Province    nvarchar(10),                    --
37     City        nvarchar(20),                    --
38     CONSTRAINT PK_Loc    PRIMARY KEY (Province, City),
39 )
40 
41 CREATE TABLE Class
42 (
43     ClassId        nvarchar(4),                    -- 班级编号
44     DeptId        nvarchar(4),                    -- 系编号
45     CONSTRAINT PK_ClsId            PRIMARY KEY (ClassId),
46     CONSTRAINT FK_Cls_DeptId    FOREIGN KEY    (DeptId)    REFERENCES Department(DeptId),
47 )
48 
49 CREATE TABLE Student
50 (
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)            REFERENCES Department(DeptId),
62     CONSTRAINT FK_Std_ClsId        FOREIGN KEY    (ClassId)            REFERENCES Class(ClassId),
63     CONSTRAINT FK_Std_Loc        FOREIGN KEY (Province, City)    REFERENCES Location(Province, City),
64 )
65 
66 CREATE TABLE Course
67 (
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)    REFERENCES Department(DeptId),
80     CONSTRAINT FK_Course_TchId        FOREIGN KEY    (TchId)        REFERENCES Teacher(TchId),
81     CONSTRAINT FK_Course_ClsId        FOREIGN KEY (ClassId)    REFERENCES Class(ClassId),
82     CONSTRAINT FK_Course_BldgName    FOREIGN KEY    (BldgName, RoomNum)    REFERENCES Building(BldgName, RoomNum)
83 )
84 
85 -- 由于课程是按照班级来上,所以只需要比较班级编号即可,不用再建表
86 
87 CREATE TABLE Report
88 (
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)        REFERENCES Student(StdId),
93     CONSTRAINT FK_Rep_CourseId    FOREIGN KEY    (CourseId)    REFERENCES Course(CourseId)
94 )

 

  建立好之后回到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

  转载请注明出处:LzxHahaha-博客园

posted @ 2015-05-17 03:12  LzxHahaha  阅读(1610)  评论(0编辑  收藏  举报