数据库课程设计:长途汽车信息管理系统设计与实现(c#实现)MVC三层架构

数据库课程设计:长途汽车信息管理系统设计与实现(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 管理员子系统

个人信息管理:查询账号密码、修改登录密码
客户管理:批量导入客户信息、管理初始认证库(增加、修改、删除初始认证库信息)、管理认证记录、对客户信息增删改查操作
线路信息管理:查询、修改、增加、删除线路信息
订单查询:查询所有已购订单信息、删除订单
车辆管理:查询车辆信息、增加车辆、修改车辆信息 、删除车辆
信息统计:线路运营情况(所有线路的车辆数)、售票输入情况(售票情况、余票情况)、用户分布情况的统计与分析

系统用例图
由图所得,此用例主要描述了长途汽车信息管理系统,客户可以访问个人信息界面,线路界面和订单界面来完成个人需求,管理员可以对整个系统内的所有信息进行管理。
系统用例图共包含2个参与者,29个用例。参与者分别是客户和管理员。客户与用例“实名以证”,“个人信息管理”,“查询线路信息”,“建立购票订单”,“ 查询已购订单”关联,管理员与用例“管理个人信息”,“客户管理”,“ 线路信息管理”,“信息统计”,“订单管理”,“车辆管理”关联,“个人信息管理”包含“查询个人信息”和“修改个人信息”,“客户管理”包含”查询用户信息”, “客户信息批量导入”,“初始认证库管理”,“认证记录管理”,“线路信息管理”包含“查询线路信息”,“增加线路信息”,“修改线路信息”,“删除线路信息”,“信息统汁”包含“线路运营情况统计”,“售票收入情况统计”,“用户分布情况统计”,“订单管理”包含“查询已购订单”,“删除订单”,“车辆管理“包含“查询车辆信息”,“增加车辆信息”“修改车辆信息”,“删除车辆信息”。

三、数据库设计

系统概念模型
在这里插入图片描述
关系数据库设计
在这里插入图片描述

四、详细设计与实现

系统界面
在这里插入图片描述
在这里插入图片描述
系统源代码
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();
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值