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

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
长途汽车信息管理系统课程设计-java-数据库长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第1页。长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第1页。长途汽车信息管理系统 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第1页。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第1页。 2021年12月 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第2页。长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第2页。长途汽车信息管理系统 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第2页。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第2页。 图3. 3系统组成设计图图3. 3系统组成设计图实名认证申请实名认证申请 图3. 3系统组成设计图 图3. 3系统组成设计图 实名认证申请 实名认证申请 2. 3.数据库结构设计 2. 3.1.需求分析 (1) 系统管理对象 长途汽车信息管理系统涉及的人有2类,登录系统希望买票的乘客、系统管理员,管 理的事务有车辆、路线信息、订单信息、车票信息。 (2) 实体间联系 实体之间主要事务联系如下: 用户向管理员提出实名认证申请。 用户可查询相应的路线、车票、订单信息,可修改个人用户信息。 管理员审核实名认证信息,管理用户信息。 管理员维护车辆信息、增删改路线信息及车票信息 管理员可对车辆信息、车票信息、订单信息等进行统计分析。 (3) 功能需求 能够进行数据库的数据定义、数据操纵、数据控制等处理功能。 具体功能应包括:系统应该提供管理员对车辆、路线、车票、订单信息的添加、插入、 删除、更新、查询操作;同时实现用户对车辆、路线、车票、订单的查询,以及对个人用 户信息的修改、查询功能。 (4) 安全性与完整性需求 对于长途汽车信息管理系统而言,涉及的实体较多,要维护好不同实体表之间的管理 关系,涉及相应的外围程序,保证数据输入的完整性。同时要对注入信息进行识别并拦截, 防止数据库被恶意破坏。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第3页。长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第3页。2. 3. 2.概念结构设计 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第3页。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第3页。 根据上文分析,本系统主要实体有乘客(用户)、管理员、车辆信息、路线信息、订单 信息、车票信息。 主要涉及的实体间联系有:用户、车票信息与订单信息之间存在"订购"的联系,且 一个用户可购买多种车票,一种车票可被多位顾客购买,故涉及的关系为多对多关系。车 票信息与车辆信息之间存在"承载"关系,说明该车票所应搭乘的汽车,一类车票搭乘一 辆汽车,汽车可承载多路车票的运行,所有车票信息与车辆信息之间为多对一关系。车票 与路线之间存在"经由"关系,一类车票具有唯一确定的路线,一条路线可由不同时段的 多种车票经由,所以车票信息与路线信息为多对一关系。 各实体所涉及的属性如下: 乘客(乘客ID,姓名,性别,联系方式,身份证号,登录密码) 车辆(车辆ID,车牌号,座位数,总里程,运行状态,投用时间) 路线(路线ID,始发站,终点站,总距离) 车票(车票ID,数量,始发时间,到达时间,车票价格) 订单(订单ID,生成时间,支付状况) 根据以上设计,可以得到实体联系ER图及概念模型图如图3.4和图3.5所示。 图3. 4实体联系ER图 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第4页。长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第4页。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第4页。 长途汽车信息管理系统课程设计-java-数据库】全文共46页,当前为第4页。 图3. 5概念模型 2. 3. 3.逻辑结构设计 (1)概念模型转换为逻辑模型 完成了概念模型的设计,以下将利用概念模型转换为逻辑模型的六条原则,对上述概 念模型进行处理。 根据设计原则一,将各实体转换为关系表,各表结构如下: 乘客(乘客ID,姓名,性别,联系方式,身份证号,登录密码) PassengertPid.pwd.name.gender.contactJd.card) 车辆(车辆ID,车牌号,座位数,总里程,投用时间) Bus(Bid,busNum)seats,total_dis)bir_time) 路线(路线ID,始发站,终点站,总距离) R

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值