基于控制台的 《学生选课系统》
一、问题描述
利用C#实现基于命令行的《学生选课系统》管理系统,并将数据保存在数据库中,其中要求:
1.设计学生类,课程类;
2.设计数据库表;
3.实现针对基础数据的学生,课程的管理功能,
4.实现学生信息的导入功能。
二、基本要求
利用ASP.NET Core设计控制台程序实现对学生选课系统的管理,系统包含对学生和课程信息的相关操作,其中,课程信息包含字段:课程代码、课程名称、类型(选修/必修)、学分,且课程代码不能为重复,所有信息不能为空,学生信息包含字段:学号、姓名、班级、学分,所有信息存在MySql数据库中。
程序应该在控制台输入提示信息,提醒用户进行相关操作。可执行的操作包括增加、修改或者查看课程信息,或者增加、修改、查看全部或特定学生信息以及删除特定学生信息,所有上述操作的结果应该被存在数据库中。同时,对于学生信息,假定已存在*.csv文件,其中存有包含上述字段的学生信息,可以在控制根据提示选择将该文件夹中的信息导入数据库。
三、测试数据
1.新增课程信息,在控制台输入课程信息,包含正确信息与错误信息,观察数据是否正确存入数据库。
2.查看课程信息,选择查看课程信息功能,观察是否正确输出课程信息。
3.修改课程信息,在控制台输入正确与错误的修改信息,观察是否正确修改或者修正错误。
4.增加学生信息,在控制台输入待增加的学生信息,包含正确输入与错误输入,观察数据是否正确存入数据库或处理错误输入。
5.查看学生信息,选择查看学生信息,观察数据是否正确输出。
6.删除学生信息,输入要删除的学生信息,观察数据是否被正确删除。
7.修改学生信息,输入要修改的学生信息,观察数据是否被正确修改。
8.导入学生信息,建立文件夹stufile.csv,存入相关学生信息,观察选择导入学生信息后,数据是否能正确导入数据库,文件夹截图如图3-1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/256124e42892bfa0ca16fdc461a58454.png)
四、实现提示
系统中涉及到学生和课程两类实体,二者的关系为“选择”,多个学生可以任意选择多门课程,选择关系是一种多对多关系。根据数据库设计相关概念,首先将实体“学生”和“课程”设计为两张表“student”和“course”,同时将多对多关系选择设计为一张表“selection”。其中,student表包含学号stu_id、学生姓名stu_name、学生班级class、学分stu_grade四个字段,学号为主键。course表包含课程名称crs_name、课程描述description、课程性质(选修/必修)is_optional、课程编号crs_id四个字段,课程编号为主键。selection中包含选课编号slc_id、选课学生学号stu_id和课程编号crs_id三个字段,selection表和student、course的依赖关系通过使用stu_id和crs_id作为外键来体现。三个表的关系以及各字段的类型定义如图4-1所示。
系统开始后首先在控制台提示用户选择学生管理或者客户管理的相关功能,并且在用户输入正确后进入相关模块,功能1到功能3分别对应学生信息管理、课程信息管理和退出系统,在用户输入错误时给出相关提示直到输入正确。系统主要工作流程图如图4-2所示。
![](https://i-blog.csdnimg.cn/blog_migrate/fdfd9ab6ca8f09f415f44743839ba125.png)
![](https://i-blog.csdnimg.cn/blog_migrate/757804891db7b894b07e731ed221b71b.png)
在两个管理模块中,同样给出提示并等待用户输入,直到用户输入且选择正确功能后执行相应功能。在学生信息管理模块中,功能1到功能5分别对应学生信息的增加、删除、查找、导入、修改,选择功能6返回上一级菜单,其执行流程图如图4-3所示。在对应功能中,用户可根据提示输入相应信息,系统给出响应结果。在这些功能当中,存在可共用的流程如输入学生信息和查找学生,分别如过程1→2和过程3→4表示。在查找流程中,用户输入要查找的学生信息,如果找不到则给出提示信息,找得到则利用找到的学生信息继续。在输入流程中,直到用户输入正确,才能继续。课程信息管理模块中的功能1到功能3分别对应课程信息的增加、查看和修改,选择功能4返回上一级菜单,其过程1→2和过程3→4与学生管理相同,执行流程如图4-4所示。
![](https://i-blog.csdnimg.cn/blog_migrate/e141ab627672a7f5c2e866261e506812.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a08fc77cc4d5fdc11cd706e760e73e2.png)
六、实现代码
系统包结构如图6-1所示,其中Models文件夹是由Etity Framework生成的实体模型集合,其中包含三个数据表的实体类和数据库脚手架CourseCotext。CSVHelper类用于处理对*.csv文件的处理,主程序在Program类中。
6.1 课程管理
(1)新增课程信息
增加某个课程的代码如下所示,其中CrsId、CrsName、Grade、IsOptional是课程实体类中和数据库对应的字段,id、name、grade、info是经过控制台读取并处理的,可以正确进行输入的课程字段信息,context是数据库脚手架实例。根据输入信息生成新课程实例后插入数据库,最后保存更改即可增加课程信息。
var crs = new Course()
{
CrsId = id,
CrsName = name,
Grade = grade,
IsOptional = info
};
context.Course.Add(crs);
context.SaveChanges();
(2)查看课程信息
using (var context = new CoursesContext())
{
return context.Course.Where(x => x.CrsId != "").ToList();
}
using (var context = new CoursesContext())
{
retur