数据库课程设计:长途汽车信息管理系统设计与实现(c#实现)MVC三层架构
一、设计总说明
要求服务器端满足如下条件:
O.S. Windows 10
DBMS MySQL 8.0
DBAS开发平台c#
DB接口 ODBC
客户端工作软件要求:
O.S. Windows 10
浏览器 Google Chrome
数据库表格设计:PowerDesign
数据库设计:NaviCat Premium15
编程语言:c#、html、javascript、css
执行环境:Visual Studio2019
二、 主要功能和数据要求如下:
(1) 用户管理:将系统用户分为“客户类、管理员类”,客户只能查询和修改自己的基本信息; 管理员可以使用本系统的所有功能。
(2) 长途汽车信息管理:设计客户进行实名认证、可完善和修改个人基本信息的功能,还要为客 户提供查询长途汽车目的地、车次、发车时间、建立购票订单的功能。管理员可以添加、查询和修改长途汽车的目的地、车次、发车时间等信息,当然管理员应该能维护车辆信息、车票信息、票价
信息等,还可以统计所有路线的车辆数、售票情况、余票情况,查看所有购票订单。
(3) 客户信息批量导入:设计管理员对客户认证信息的多条数据一次性导入功能;假设客户认证 名录格式为 Excel 文件。
(4) 查询模块:设计管理员对客户信息、车票订单、车辆信息、线路信息的多角度综合查询功能, 要有多种精确条件查询和部分模糊条件查询。 (5) 统计模块:设计管理员对线路运营状况、售票收入情况、用户分布情况的统计与分析功能。
(1) 学生以小组的形式进行合作设计、分工开发,每个小组选举一名组长,组织小组的日常设计;课设结束时,选出一位陈述总体设计、每人答辩自己分工设计部分。
(2) 应使用“可视化”界面方式设计长途汽车信息管理系统。
(3) 数据库至少应设计 3 张以上关系表,表与表之间、表中属性与属性必须设计“主-从关系”, 旨在应用“3NF 表、外键、触发器”。
(4) 不要设计长途汽车信息管理系统的登录功能;所以系统程序应该分为成2 个用户子系统设计, 即“长途汽车信息管理系统用户端”和“长途汽车信息管理系统管理员端”。
三、需求分析
系统业务分析
1系统总目标
长途汽车信息管理系统的用户可以分为客户和管理员,要求客户可以进行实名认证、可完善修改个人信息、查询长途汽车目的地、车次、发车时间等信息、建立购票订单、查询历史订单,且进行实名认证前仅可查询线路信息,只有在实名认证之后才可以做其他操作;管理员可以使用本系统所有的功能,包括查看修改个人信息、对管理客户信息、管理车辆信息、管理线路信息、管理订单信息,客户信息导入、查询统计功能即管理员可使用本系统所有功能。
2客户子系统
实名认证:实名校验/申请认证
个人信息管理:查询和修改个人信息
线路信息管理:查询长途汽车的车次、始发地、目的地、发车时间、票价、余票等信息、建立购票订单
订单查询:查询历史已购订单
3 管理员子系统
个人信息管理:查询账号密码、修改登录密码
客户管理:批量导入客户信息、管理初始认证库(增加、修改、删除初始认证库信息)、管理认证记录、对客户信息增删改查操作
线路信息管理:查询、修改、增加、删除线路信息
订单查询:查询所有已购订单信息、删除订单
车辆管理:查询车辆信息、增加车辆、修改车辆信息 、删除车辆
信息统计:线路运营情况(所有线路的车辆数)、售票输入情况(售票情况、余票情况)、用户分布情况的统计与分析
系统用例图
三、数据库设计
系统概念模型
关系数据库设计
四、详细设计与实现
系统界面
系统源代码
1.新建用户关键代码
UsersController处执行
public ActionResult New(Users users)
{
var service = new UsersService();
service.UpdateUsers(users.UserId, users);
return Redirect(Url.Action("Index", "Users"));
}
UsersService处执行
public void CreateUsers(Users users)
{
using (var context = new CoachManagementContext())
{
context.Users.Add(users);
context.SaveChanges();
}
}
2.删除用户关键代码
UsersController处执行
public string Delete(string id)
{
var service = new UsersService();
service.DeleteUsers(id);
return "删除成功!";
}UsersService处执行
public void DeleteUsers(string userId)
{
using (var context = new CoachManagementContext())
{
var users = context.Users.FirstOrDefault(x => x.UserId == userId);
if (users != null)
{
context.Users.Remove(users);
context.SaveChanges();
}
}
}}
}
3.修改用户关键代码
UsersController处执行
public ActionResult Edit(Users users)
{
var service = new UsersService();
service.UpdateUsers(users.UserId, users);
return Redirect(Url.Action("Index", "Users"));
}
UsersService处执行
public void UpdateUsers(string userId, Users users)
{
DeleteUsers(userId);
CreateUsers(users);
}
4.查询用户关键代码
UsersController处执行
public ActionResult Search(int choose, string search)
{
var service = new UsersService();
ViewData["Users"] = service.FindUsers(choose, search);
return View("Find");
}
UsersService处执行
public List<Users> FindUsers(int choose, string search)
{
List<Users> users;
using (var context = new CoachManagementContext())
{
users = context.Users.ToList();
}
switch (choose)
{
case 0:
//模糊查询
for (int i = users.Count - 1; i >= 0; i--)
{
if (!users[i].UserId.Contains(search) && !users[i].Name.Contains(search) && !users[i].Card.Contains(search) )
users.Remove(users[i]);
}
break;
case 1:
//用户ID
for (int i = users.Count - 1; i >= 0; i--)
{
if (users[i].UserId != search)
users.Remove(users[i]);
}
break;
case 2:
//用户姓名
for (int i = users.Count - 1; i >= 0; i--)
{
if (users[i].Name != search)
users.Remove(users[i]);
}
break;
case 3:
//身份证号
for (int i = users.Count - 1; i >= 0; i--)
{
if (users[i].Card != search)
users.Remove(users[i]);
}
break;
default:
break;
}
return users;
}
5.批量导入用户关键代码
```csharp
UsersController处执行
public ActionResult ExcelToUsers(Users users)
{
var service = new UsersService();
var service2 = new RecordService();
//判空
if (Request.Form.Files.Count == 0)
{
string errorInfo = "<h1>Error, data does not exist or data is illegal!</h1>< a href='New '>Click me back</ a>";
byte[] error = System.Text.Encoding.Default.GetBytes(errorInfo);
Response.BodyWriter.WriteAsync(error);
return Redirect("New");
}
//打开流
Stream ism = Request.Form.Files[0].OpenReadStream();
var name = Request.Form.Files[0].FileName;
string[] temp = name.Split('.');
string lastStr = temp[temp.Length - 1];
if (lastStr != "xlsx")
{
string errorInfo = "<h1>Error, data does not exist or data is illegal!</h1><a href='New'>Click me back</a>";
byte[] error = System.Text.Encoding.Default.GetBytes(errorInfo);
Response.BodyWriter.WriteAsync(error);
return Redirect("New");
}
ISheet sheet = null;
IWorkbook book = null;
book = new XSSFWorkbook(ism);
sheet = book.GetSheetAt(0);
for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
Users user = new Users();
user.UserId = row.Cells[0].ToString();
user.Account = row.Cells[1].ToString();
user.Password = row.Cells[2].ToString();
user.Name = row.Cells[3].ToString();
user.Age = int.Parse(row.Cells[4].ToString());
user.Phonenum = row.Cells[5].ToString();
user.Card = row.Cells[6].ToString();
user.Sex = row.Cells[7].ToString();
user.Locat = row.Cells[8].ToString();
service.CreateUsers(user);
service2.UpdateRecord(user);
}
return Redirect("Index");
}
6.查询订单关键代码
```csharp
OrdersController处执行
public ActionResult Search(int choose, string search)
{
var service = new OrdersService();
ViewData["Orders"] = service.FindOrders(choose, search);
return View("Find");
}
OrdersService处执行
public List<Orders> FindOrders(int choose, string search)
{
List<Orders> orders;
using (var context = new CoachManagementContext())
{
orders = context.Orders.ToList();
}
switch (choose)
{
case 0:
//模糊查询
for (int i = orders.Count - 1; i >= 0; i--)
{
if (!orders[i].Ordernum.Contains(search) && !orders[i].UserId.Contains(search) && !orders[i].Fnum.Contains(search) && !orders[i].Name.Contains(search) && !orders[i].Card.Contains(search))
orders.Remove(orders[i]);
}
break;
case 1:
//订单号
for (int i = orders.Count - 1; i >= 0; i--)
{
if (orders[i].Ordernum != search)
orders.Remove(orders[i]);
}
break;
case 2:
//用户ID
for (int i = orders.Count - 1; i >= 0; i--)
{
if (orders[i].UserId != search)
orders.Remove(orders[i]);
}
break;
case 3:
//车次
for (int i = orders.Count - 1; i >= 0; i--)
{
if (orders[i].Fnum != search)
orders.Remove(orders[i]);
}
break;
case 4:
//用户姓名
for (int i = orders.Count - 1; i >= 0; i--)
{
if(!orders[i].Name.Contains(search))
orders.Remove(orders[i]);
}
break;
case 5:
//身份证号
for (int i = orders.Count - 1; i >= 0; i--)
{
if (orders[i].Card != search)
orders.Remove(orders[i]);
}
break;
default:
break;
}
return orders;
}
7.删除订单关键代码
OrdersController处执行
public string Delete(string id)
{
var service = new OrdersService();
service.DeleteOrders(id);
return "删除成功!";
}
OrdersService处执行
public void DeleteOrders(string orderNum)
{
using (var context = new CoachManagementContext())
{
var order = context.Orders.FirstOrDefault(x => x.Ordernum == orderNum);
if (order != null)
{
context.Orders.Remove(order);
context.SaveChanges();
}
}
}