WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(二)(中)

简介: WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(二)(中)

3. 课程类CourseEntity

课程类与课程表对应,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 课程实体
5. /// </summary>
6. public class CourseEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. /// 课程名称
15. /// </summary>
16. public string Name { get; set; }
17. 
18. /// <summary>
19. /// 授课老师
20. /// </summary>
21. public string Teacher { get; set; }
22. 
23. /// <summary>
24. /// 创建时间
25. /// </summary>
26. public DateTime CreateTime { get; set; }
27. 
28. /// <summary>
29. /// 当前登录的账号的ID
30. /// </summary>
31. public int CreateUser { get; set; }
32. 
33. /// <summary>
34. /// 最后编辑时间
35. /// </summary>
36. public DateTime LastEditTime { get; set; }
37. 
38. /// <summary>
39. /// 最后修改人
40. /// </summary>
41. public int LastEditUser { get; set; }
42.     }
43. }

4. 成绩类ScoreEntity

成绩类与成绩表对应,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 成绩实体
5. /// </summary>
6. public class ScoreEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. ///学生id
15. /// </summary>
16. public int StudentId { get; set; }
17. 
18. /// <summary>
19. /// 课程id
20. /// </summary>
21. public int CourseId { get; set; }
22. 
23. /// <summary>
24. /// 成绩
25. /// </summary>
26. public double Score { get; set; }
27. 
28. /// <summary>
29. /// 创建时间
30. /// </summary>
31. public DateTime CreateTime { get; set; }
32. 
33. /// <summary>
34. /// 当前登录的账号的ID
35. /// </summary>
36. public int CreateUser { get; set; }
37. 
38. /// <summary>
39. /// 最后编辑时间
40. /// </summary>
41. public DateTime LastEditTime { get; set; }
42. 
43. /// <summary>
44. /// 最后修改人
45. /// </summary>
46. public int LastEditUser { get; set; }
47.     }
48. }

5. 其他实体类

除了以上四个主要的实体类,还有其他实体类,如下所示:

菜单实体MenuEntity,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 菜单管理
5. /// </summary>
6. public class MenuEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. /// 菜单名称
15. /// </summary>
16. public string Name { get; set; }
17. 
18. /// <summary>
19. /// 菜单描述
20. /// </summary>
21. public string Description { get; set; }
22. 
23. /// <summary>
24. /// 菜单路径
25. /// </summary>
26. public string Url { get; set; }
27. 
28. /// <summary>
29. /// 父ID
30. /// </summary>
31. public int? ParentId { get; set; }
32. 
33. /// <summary>
34. /// 排序
35. /// </summary>
36. public int? SortId { get; set; }
37.     }
38. }

用户实体类UserEntity,如下所示:

1. namespace SIMS.Entity
2. {
3. public class UserEntity
4.     {
5. /// <summary>
6. /// 用户唯一标识
7. /// </summary>
8. public int Id { get; set; }
9. 
10. /// <summary>
11. /// 登录账号
12. /// </summary>
13. public string UserName { get; set; }
14. 
15. /// <summary>
16. /// 密码
17. /// </summary>
18. public string Password { get; set; }
19. 
20. /// <summary>
21. /// 显示名称
22. /// </summary>
23. public string NickName { get; set; }
24.     }
25. }

角色实体类RoleEntity,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 角色
5. /// </summary>
6. public class RoleEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. /// 角色名称
15. /// </summary>
16. public string Name { get; set; }
17. 
18. /// <summary>
19. /// 角色描述
20. /// </summary>
21. public string Description { get; set; }
22.     }
23. }

用户角色关系实体类UserRoleEntityr,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 用户-角色模型
5. /// </summary>
6. public class UserRoleEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. /// 用户ID
15. /// </summary>
16. public int UserId { get; set; }
17. 
18. /// <summary>
19. /// 角色ID
20. /// </summary>
21. public int RoleId { get; set; }
22.     }
23. }

角色菜单关系实体RoleMenuEntity,如下所示:

1. namespace SIMS.Entity
2. {
3. /// <summary>
4. /// 角色-菜单关联
5. /// </summary>
6. public class RoleMenuEntity
7.     {
8. /// <summary>
9. /// 唯一标识
10. /// </summary>
11. public int Id { get; set; }
12. 
13. /// <summary>
14. /// 菜单IP
15. /// </summary>
16. public int MenuId { get; set; }
17. 
18. /// <summary>
19. /// 角色ID
20. /// </summary>
21. public int RoleId { get; set; }
22.     }
23. }

一共九个实体类,对应数据库中的九个表。

WebApi数据接口

在本示例中,客户端和服务端交互通过webapi接口进行,避免直接操作数据库。具体步骤如下所示:

1. EntityFramework框架

EntityFramework是.Net领域通用的ORM框架,有CodeFirst和DBFirst两种方式,本文采用DBFirst方式,即先设计数据库表结构,再创建实体和映射。如果要使用EntityFramework框架,首先进行安装,可通过NuGet包管理器进行安装,如下所示:

创建DataContext数据操作类,继承自DbContext,并重写OnModelCreating方法,将数据表和实体类建立联系,实现映射,如下所示:

1. namespace SIMS.WebApi.Data
2. {
3. public class DataContext:DbContext
4.     {
5. public DbSet<UserEntity> Users { get; set; }
6. 
7. public DbSet<MenuEntity> Menus { get; set; }
8. 
9. public DbSet<RoleEntity> Roles { get; set; }
10. 
11. public DbSet<UserRoleEntity> UserRoles { get; set; }
12. 
13. public DbSet<RoleMenuEntity> RoleMenus { get; set; }
14. 
15. /// <summary>
16. /// 学生
17. /// </summary>
18. public DbSet<StudentEntity> Students { get; set; }
19. 
20. /// <summary>
21. /// 班级
22. /// </summary>
23. public DbSet<ClassesEntity> Classes { get; set; }
24. 
25. /// <summary>
26. /// 课程
27. /// </summary>
28. public DbSet<CourseEntity> Courses { get; set; }
29. 
30. /// <summary>
31. /// 成绩
32. /// </summary>
33. public DbSet<ScoreEntity> Scores { get; set; }
34. 
35. public DataContext(DbContextOptions options) : base(options)
36.         {
37. 
38.         }
39. 
40. protected override void OnModelCreating(ModelBuilder modelBuilder)
41.         {
42. base.OnModelCreating(modelBuilder);
43.             modelBuilder.Entity<UserEntity>().ToTable("Users");
44.             modelBuilder.Entity<MenuEntity>().ToTable("Menus");
45.             modelBuilder.Entity<StudentEntity>().ToTable("Students");
46.             modelBuilder.Entity<RoleEntity>().ToTable("Roles");
47.             modelBuilder.Entity<UserRoleEntity>().ToTable("UserRoles");
48.             modelBuilder.Entity<RoleMenuEntity>().ToTable("RoleMenus");
49.         }
50.     }
51. }

2. 创建服务

在本示例中,为了封装数据库的底层操作,提取了四个服务接口和类,如下所示:

学生服务接口IStudentAppService,是对学生表操作的封装,如下所示:

1. namespace SIMS.WebApi.Services.Student
2. {
3. public interface IStudentAppService
4.     {
5. /// <summary>
6. /// 查询学生列表
7. /// </summary>
8. /// <param name="name"></param>
9. /// <returns></returns>
10. public PagedRequest<StudentEntity> GetStudents(string no,string name, int pageNum, int pageSize);
11. 
12. /// <summary>
13. /// 查询某一班级的学生列表
14. /// </summary>
15. /// <param name="classId"></param>
16. /// <returns></returns>
17. public PagedRequest<StudentEntity> GetStudentsByClasses(int classId);
18. 
19. /// <summary>
20. /// 通过id查询学生信息
21. /// </summary>
22. /// <param name="id"></param>
23. /// <returns></returns>
24. public StudentEntity GetSudent(int id);
25. 
26. /// <summary>
27. /// 新增学生
28. /// </summary>
29. /// <param name="student"></param>
30. /// <returns></returns>
31. public int AddStudent(StudentEntity student);
32. 
33. /// <summary>
34. /// 修改学生
35. /// </summary>
36. /// <param name="student"></param>
37. /// <returns></returns>
38. public int UpdateStudent(StudentEntity student);
39. 
40. /// <summary>
41. /// 删除学生
42. /// </summary>
43. /// <param name="id"></param>
44. public int DeleteStudent(int id);
45.     }
46. }

学生服务实现类StudentAppService

学生服务实现类是对接口的实现,如下所示:

1. namespace SIMS.WebApi.Services.Student
2. {
3. public class StudentAppService : IStudentAppService
4.     {
5. private DataContext dataContext;
6. 
7. public StudentAppService(DataContext dataContext) {
8. this.dataContext = dataContext;
9.         }
10. 
11. /// <summary>
12. /// 新增学生
13. /// </summary>
14. /// <param name="student"></param>
15. /// <returns></returns>
16. public int AddStudent(StudentEntity student)
17.         {
18. var entry = dataContext.Students.Add(student);
19.             dataContext.SaveChanges();
20. return 0;
21.         }
22. 
23. /// <summary>
24. /// 删除学生
25. /// </summary>
26. /// <param name="id"></param>
27. public int DeleteStudent(int id)
28.         {
29. var entity = dataContext.Students.FirstOrDefault(x => x.Id == id);
30. if (entity != null)
31.             {
32.                 dataContext.Students.Remove(entity);
33.                 dataContext.SaveChanges();
34.             }
35. return 0;
36.         }
37. 
38. /// <summary>
39. /// 查询学生列表
40. /// </summary>
41. /// <param name="name"></param>
42. /// <param name="pageNum">页数</param>
43. /// <param name="pageSize">每页大小</param>
44. /// <returns></returns>
45. public PagedRequest<StudentEntity> GetStudents(string no,string name,int pageNum,int pageSize)
46.         {
47.             IQueryable<StudentEntity> students = null;
48. if (!string.IsNullOrEmpty(name) && string.IsNullOrEmpty(no))
49.             {
50.                 students = dataContext.Students.Where(r => r.Name.Contains(name) && r.No.Contains(no)).OrderBy(r => r.Id);
51.             }
52. else if (!string.IsNullOrEmpty(name))
53.             {
54.                 students = dataContext.Students.Where(r => r.Name.Contains(name)).OrderBy(r => r.Id);
55.             }
56. else if (!string.IsNullOrEmpty(name)) {
57.                 students = dataContext.Students.Where(r => r.No.Contains(no)).OrderBy(r => r.Id);
58.             }
59. else
60.             {
61.                 students = dataContext.Students.Where(r => true).OrderBy(r => r.Id);
62.             }
63. int count = students.Count();
64.             List<StudentEntity> items;
65. if (pageSize > 0)
66.             {
67.                 items = students.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList();
68.             }
69. else {
70.                 items = students.ToList();
71.             }
72. return new PagedRequest<StudentEntity>()
73.             {
74.                 count = count,
75.                 items = items
76.             };
77.         }
78. 
79. /// <summary>
80. /// 查询某一班级的学生列表
81. /// </summary>
82. /// <param name="classId"></param>
83. /// <returns></returns>
84. public PagedRequest<StudentEntity> GetStudentsByClasses(int classId)
85.         {
86.             IQueryable<StudentEntity> students = dataContext.Students.Where(r => r.ClassesId==classId).OrderBy(r => r.Id);
87. int count = students.Count();
88. var items = students.ToList();
89. return new PagedRequest<StudentEntity>()
90.             {
91.                 count = count,
92.                 items = items
93.             };
94.         }
95. 
96. /// <summary>
97. /// 通过id查询学生信息
98. /// </summary>
99. /// <param name="id"></param>
100. /// <returns></returns>
101. public StudentEntity GetSudent(int id)
102.         {
103. var entity = dataContext.Students.FirstOrDefault(r => r.Id == id);
104. return entity;
105.         }
106. 
107. /// <summary>
108. /// 修改学生
109. /// </summary>
110. /// <param name="student"></param>
111. /// <returns></returns>
112. public int UpdateStudent(StudentEntity student)
113.         {
114.             dataContext.Students.Update(student);
115.             dataContext.SaveChanges();
116. return 0;
117.         }
118.     }
119. }

班级服务接口IClassesAppService

班级服务接口是对班级表操作的封装,如下所示:

1. namespace SIMS.WebApi.Services.Classes
2. {
3. public interface IClassesAppService
4.     {
5. public PagedRequest<ClassesEntity> GetClassess(string dept, string grade, int pageNum, int pageSize);
6. 
7. /// <summary>
8. /// 通过id查询班级信息
9. /// </summary>
10. /// <param name="id"></param>
11. /// <returns></returns>
12. public ClassesEntity GetClasses(int id);
13. 
14. /// <summary>
15. /// 新增班级
16. /// </summary>
17. /// <param name="classes"></param>
18. /// <returns></returns>
19. public int AddClasses(ClassesEntity classes);
20. 
21. /// <summary>
22. /// 修改班级
23. /// </summary>
24. /// <param name="classes"></param>
25. /// <returns></returns>
26. public int UpdateClasses(ClassesEntity classes);
27. 
28. /// <summary>
29. /// 删除班级
30. /// </summary>
31. /// <param name="id"></param>
32. public int DeleteClasses(int id);
33.     }
34. }

班级服务实现类ClassesAppService,如下所示:

1. namespace SIMS.WebApi.Services.Classes
2. {
3. public class ClassesAppService : IClassesAppService
4.     {
5. private DataContext dataContext;
6. 
7. public ClassesAppService(DataContext dataContext)
8.         {
9. this.dataContext = dataContext;
10.         }
11. 
12. /// <summary>
13. /// 新增班级
14. /// </summary>
15. /// <param name="classes"></param>
16. /// <returns></returns>
17. public int AddClasses(ClassesEntity classes)
18.         {
19. var entry = dataContext.Classes.Add(classes);
20.             dataContext.SaveChanges();
21. return 0;
22.         }
23. 
24. /// <summary>
25. /// 删除班级
26. /// </summary>
27. /// <param name="id"></param>
28. public int DeleteClasses(int id)
29.         {
30. var entity = dataContext.Classes.FirstOrDefault(x => x.Id == id);
31. if (entity != null)
32.             {
33.                 dataContext.Classes.Remove(entity);
34.                 dataContext.SaveChanges();
35.             }
36. return 0;
37.         }
38. 
39. /// <summary>
40. /// 查询班级
41. /// </summary>
42. /// <param name="id"></param>
43. /// <returns></returns>
44. public ClassesEntity GetClasses(int id)
45.         {
46. var entity = dataContext.Classes.FirstOrDefault(r => r.Id == id);
47. return entity;
48.         }
49. 
50. public PagedRequest<ClassesEntity> GetClassess(string dept, string grade, int pageNum, int pageSize)
51.         {
52.             IQueryable<ClassesEntity> classes = null;
53. if (!string.IsNullOrEmpty(dept) && string.IsNullOrEmpty(grade))
54.             {
55.                 classes = dataContext.Classes.Where(r => r.Dept.Contains(dept) && r.Grade.Contains(grade)).OrderBy(r => r.Id);
56.             }
57. else if (!string.IsNullOrEmpty(dept))
58.             {
59.                 classes = dataContext.Classes.Where(r => r.Dept.Contains(dept)).OrderBy(r => r.Id);
60.             }
61. else if (!string.IsNullOrEmpty(grade))
62.             {
63.                 classes = dataContext.Classes.Where(r => r.Grade.Contains(grade)).OrderBy(r => r.Id);
64.             }
65. else
66.             {
67.                 classes = dataContext.Classes.Where(r => true).OrderBy(r => r.Id);
68.             }
69. int count = classes.Count();
70.             List<ClassesEntity> items=new List<ClassesEntity>();
71. if (pageSize < 1)
72.             {
73.                 items = classes.ToList();
74.             }
75. else {
76.                items = classes.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList();
77.             }
78. 
79. return new PagedRequest<ClassesEntity>()
80.             {
81.                 count = count,
82.                 items = items
83.             };
84.         }
85. 
86. /// <summary>
87. /// 修改班级
88. /// </summary>
89. /// <param name="classes"></param>
90. /// <returns></returns>
91. public int UpdateClasses(ClassesEntity classes)
92.         {
93.             dataContext.Classes.Update(classes);
94.             dataContext.SaveChanges();
95. return 0;
96.         }
97.     }
98. }

其他服务接口和类尚不完善,暂时先不贴代码。

相关文章
|
7月前
|
C# 开发者
一款WPF开发的网易云音乐客户端 - DMSkin-CloudMusic
一款WPF开发的网易云音乐客户端 - DMSkin-CloudMusic
155 36
|
7月前
|
程序员 C# 异构计算
一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
71 0
|
11月前
|
设计模式 前端开发 测试技术
WPF开发之Prism详解【内附源码】
WPF开发之Prism详解【内附源码】
273 0
|
11月前
|
C#
WPF工控组态软件之冷却塔和空气压缩机开发
WPF工控组态软件之冷却塔和空气压缩机开发
202 0
|
11月前
|
C#
WPF工控组态软件之管道和冷却风扇开发
WPF工控组态软件之管道和冷却风扇开发
195 0
|
11月前
|
C# 数据库 C++
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)(下)
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)(下)
353 0
|
11月前
|
前端开发 C# UED
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)(上)
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)(上)
223 0
|
11月前
|
C# 数据库
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(四)(下)
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(四)(下)
122 0
|
1月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
151 0
|
1月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
84 1