栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

“线上食堂”项目报告

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“线上食堂”项目报告

“线上食堂”项目报告
成员名单学号
周旭2019111446
李志伟2019110574
蒋壮壮2019110596
杨瀚君2019110094

文章目录
  • “线上食堂”项目报告
    • 一:项目背景(需求分析)
    • 二:底层逻辑
      • 1.前台(用户操作逻辑):
      • 2.数据逻辑(数据库设计):
    • 三:工作流程
    • 四:具体分工
    • 五:窗体代码的注释
      • 1.用户登录注册以及企业入口的窗体(李志伟)
        • Module1.vb
        • 登录界面.vb
        • 注册窗口.vb
        • 用户中心.vb
        • 修改菜品.vb
        • 新添菜品.vb
      • 2.菜品列表与菜品详情的窗体(杨瀚君)
        • 菜品查询.vb
        • 菜品详情.vb
      • 3.查看评价或增加评论的窗体(蒋壮壮)
        • 查看评论.vb
        • 增加评论.vb
      • 4.共餐社区的窗体(周旭)
        • 共餐社区.vb
        • 修改帖子.vb
        • 发布新的帖子.vb
        • 留言.vb
    • 六:遇到的部分问题以及解决办法
    • 七:客观评价与总结
      • 1.平行分工的利弊
      • 2.部分未解决的设计漏洞
      • 3.总结

一:项目背景(需求分析)

食堂作为每一所大学的基础设施,承担着全校师生的饮食重任.然而,在校园网络化的进程中,食堂系统却并未与时俱进,依然保持着最原始的独立形态,设计一个信息公开化、查询便捷化、交互人性化的食堂系统显得尤为重要.

我们将亟需改革的痛点总结如下:

  1. 获取信息成本较高,缺乏高效线上浏览食堂信息的程序;
  2. 消费者面临信息不对称,缺乏系统评价食堂的论坛或程序;
  3. 作为公共场所,食堂所承担的社交属性有待开发;
  4. 信息流通程度不足,信息利用率底下,食堂无法获取用户诉求.

针对这些痛点,我们希望最终的项目能够基本完成以下功能:

  1. 能够在线上浏览食堂每一个菜品的详细信息;
  2. 能够在线上对菜品进行评价并浏览别人的评价;
  3. 提供线上约餐功能,提高学校脱单率;
  4. 让食堂可以获取用户反馈的数据.

就此,我们确立了小组项目的目标,建立一个线上食堂信息系统,即“线上食堂”项目.

二:底层逻辑 1.前台(用户操作逻辑):

我们将用户设定为普通用户“学生”和企业用户“食堂”两类.
信息源为以下三类:

  • 学生身份信息、食堂身份信息;
  • 菜品信息;
  • 交互信息:学生对菜品的评价、学生对学生的留言等.

就此我们大致确立了完整的用户操作逻辑如下:

其所对应的大致窗体分布为:

2.数据逻辑(数据库设计):

根据信息来源需要,我们确立了三大实体、三大联系如下:

  • 实体1.用户(账号,密码,用户名,头像,性别,学号)
  • 实体2.菜品(菜品代码,菜名,价格,折扣,窗口,原料,图片,菜品种类,累计点击量)
  • 实体3.食堂(食堂代码,食堂名称,管理员密匙)
  • 联系1.评论(账号,菜品代码,评论时间,评分,文字评论,图片,关键词)
  • 联系2.共餐(账号,食堂代码,共餐时间,共餐时长,留言,菜品,备注)
  • 联系3.点赞(账号,菜品代码,是否点赞)

对应的ER图如下:

对ER图的若干解释:

  1. 联系“共餐”代表的实际含义是“某一个用户发布一个共餐帖子,标明想在某一时间的某一食堂与其他人共餐”,因此,“一个人,一个地点、一个时间点”三要素能确立一个元组,共同作为该属性的主键.我们本来想将“共餐”设置为“两个用户在某一时间点共餐”,但涉及用户表的自连接,过于复杂,故舍弃这样的数据确定方式;
  2. 联系“评论”代表的含义是“某一个用户针对某一个菜品在某一时间点发布评论”,因此,“一个主体,一个对象,一个时间点”三要素能确立一个元组,共同作为该属性的主键;
  3. 联系“点赞”代表的含义是“某一个用户对某一个菜品点赞”,因此“用户”和“菜品”两要素可以确定一个元组,且“点赞”这一属性的值域为(是,否);
  4. 以上联系均满足第三范式或BC范式.

建表部分SQL代码如下:

create database meal1
go

use meal1
create table 用户(
    账号 char(20) check(len(账号)>=6 and len(账号)<=20) primary key,
	密码 char(15) check(len(密码)>=6 and len(密码)<=15),
	用户名 char(20) check(len(用户名)>=5 and len(用户名)<=20),
	头像 image,
	性别 char(2) check(性别 in ('男','女')),
	学号 char(10) check(isnumeric(学号)=1)
	)

use meal1
create table 菜品(
    菜品代码 char(4) check(菜品代码 like'c[0-9][0-9][0-9]') primary key,
	菜名 char(10),
	价格 money,
	折扣 int,
	窗口 int,
	菜品种类 char(4),
	图片 image,
	原料 char(20),
食堂代码 char(5)  foreign key references.食堂
	)

use meal1
create table 评论(
    账号 char(20) foreign key references.用户,
	评论时间 date,
	菜品代码 char(4) foreign key references.菜品,
	评分 int check(评分>=0 and 评分<=5),
	文字评论 char(50) check(len(文字评论)>=5 and len(文字评论)<=50),
	评论图片 image,
	primary key(账号,评论时间,菜品代码)
	)

use meal1
create table 食堂(
    食堂代码 char(5) primary key,
	食堂名称 char(10),
	管理员密匙 char(20)
	)

use meal1
create table 共餐(
     账号 char(20) foreign key references.用户,
食堂代码 char(5)  foreign key references.食堂,
    共餐时间 datetime,
	共餐时长 char(5),
	留言 char(50),
	菜品代码 char(4) foreign key references.菜品,
	备注 char(20),
     primary key(账号,共餐时间,食堂代码)
	)

use meal1
create table 点赞(
    账号 char(20) foreign key references.用户,
	菜品代码 char(4) foreign key references.菜品,
	是否点赞 char(2) check(是否点赞 in ('是','否'))
	)
三:工作流程

四:具体分工
  1. 李志伟:用户基本信息系统和食堂基本信息系统的构建
  2. 杨瀚君:菜品信息浏览功能的开发
  3. 蒋壮壮:评论功能的开发
  4. 周旭:共餐社区的设计开发
五:窗体代码的注释 1.用户登录注册以及企业入口的窗体(李志伟) Module1.vb

涉及到的全局变量

Imports System.Data.SqlClient
Module Module1
    Public _account As String
    Public _password As String
    Public yonghuming As String
    Public xuehao As String
    Public shitang As String
    Public myconn As New SqlConnection("database=meal0;data source=.;integrated security=true;")
End Module

定义全局变量包括用户名,用户密码,学号等信息,并定义myconn对象,便于在用户企业登录模块直接连接。

登录界面.vb
Imports System.Data.SqlClient

Public Class 登录界面

    Dim mydataset As New DataSet

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim myselectquery As String = "select * from 用户 where 账号='" & TextBox1.Text & "'and 密码='" & TextBox2.Text & "'"
        Dim mycommand As New SqlCommand(myselectquery, myconn)
        myconn.Open()
        Dim myreader As SqlDataReader
        myreader = mycommand.ExecuteReader()
        If myreader.HasRows = False Then
            MsgBox("账号或密码错误!!")
            TextBox1.Text = ""
            TextBox2.Text = ""
        Else
            myreader.Read()
            _account = Me.TextBox1.Text.ToString
            _password = Me.TextBox2.Text.ToString
            内容界面.Show()
            Me.Hide()
        End If
        myreader.Close()
        myconn.Close()

    End Sub
End Class

用户登录的代码,思路与企业登录一致,连接数据库meal0,定义SQL查询语句,查询所输入的学号密码,若在数据库中存在一行该值,则说明账号密码正确,则登陆成功,否则账号或密码错误,重新输入。

注册窗口.vb
Imports System.Data.SqlClient
Imports System.IO

Public Class 注册窗口

    Dim mydataset As New DataSet
    Dim mysql As String = "select * from 用户"
    Dim myadapter As SqlDataAdapter = New SqlDataAdapter(mysql, myconn)
    Dim photoStream As IO.FileStream
    Dim fileByte() As Byte

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If File.Exists("D:pic1.jpg") Then
            Kill("D:pic1.jpg")
        End If

        Dim s As String
        s = "D:pic1.jpg"
        PictureBox1.Image.Save(s)

        myadapter.Fill(mydataset, "user")
        Dim user_row As DataRow = mydataset.Tables("user").NewRow
        user_row(0) = Me.TextBox1.Text.ToString
        user_row(1) = Me.TextBox2.Text.ToString
        user_row(2) = Me.TextBox3.Text.ToString
        yonghuming = TextBox3.Text
        user_row(5) = Me.TextBox5.Text.ToString
        xuehao = TextBox5.Text
        Dim gender As String
        gender = ""
        If (RadioButton1.Checked) Then
            gender = "男"
        End If
        If (RadioButton2.Checked) Then
            gender = "女"
        End If
        user_row(4) = gender

        photoStream = New FileStream("D:" & "pic1" & ".jpg", FileMode.Open)
        ReDim fileByte(photoStream.Length - 1)
        photoStream.Read(fileByte, 0, photoStream.Length)
        user_row(3) = fileByte


        mydataset.Tables("user").Rows.Add(user_row)
        Dim cm As SqlCommandBuilder = New SqlCommandBuilder(myadapter)
        myadapter.Update(mydataset, "user")

        MsgBox("注册成功")
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
            PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
        End If

    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        登录界面.Show()
        Me.Close()
    End Sub

End Class
  • 用户注册的主要过程,包括用户名,密码等基本文字信息,以及头像的处理过程,其中用户名,密码,账号,学号,通过新建dataset.tables(“users”).newrow 新建立一行,并将textbox的字符串传入newrow中,其中图片的处理较为困难,首先通过openfiledialog1打开文件选择图片,填充到picturebox中,并保存图片至D盘目录下,通过photostream读取图片,转换成byte类型,放在newrow中的图片一列(即数据库中的image类型一列),最后通过update传入数据,更新数据库,即完成注册。
  • 关于图片的现实操作,通过openfiledialog1打开文件并选择图片后,图片被显示在picturebox中,通过picturebox.sizemode设置为zoom保持图片大小根据picturebox大小进行变化。
用户中心.vb
Imports System.Data.SqlClient
Imports System.IO
Public Class 用户中心
    Dim mydataset As New DataSet
    Dim filebyte() As Byte

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Close()
        内容界面.Show()

    End Sub

    Private Sub 用户中心_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Text = _account
        Dim mysql As String = "select 用户.用户名,学号,头像 from 用户 where 账号='" & _account & "'"
        Dim myadapter As New SqlDataAdapter(mysql, myconn)
        myadapter.Fill(mydataset, "用户信息")
        TextBox2.Text = mydataset.Tables("用户信息").Rows(0).Item(0).ToString
        TextBox3.Text = mydataset.Tables("用户信息").Rows(0).Item(1).ToString
        filebyte = mydataset.Tables("用户信息").Rows(0).Item(2)
        PictureBox1.Image = Image.FromStream(New MemoryStream(filebyte))
        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
    End Sub

End Class

主要目的为显示用户个人信息,因此思路与注册登录基本一致,建立mysql查询语句,通过建立与sqlsever连接,查询所登录账号的一列用户信息,继而通过vb中定义的mydataset的tables进行数据选择显示。关于图片的显示,同样读取image类型,将byte类型通过memorystream读取,放入picturebox中,可直接显示头像。

修改菜品.vb
Imports System.Data.SqlClient
Imports System.IO

Public Class 修改菜品

    Dim mydataset As New DataSet
    Dim mysql As String = "select * from 菜品 where 食堂名称='" & shitang & "'"
    Dim ada = New SqlDataAdapter(mysql, myconn)
    Dim photostream As IO.FileStream
    Dim data() As Byte

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        企业窗口.Show()
        Me.Close()
    End Sub

    Private Sub 修改菜品_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: 这行代码将数据加载到表“Meal2DataSet.菜品”中。您可以根据需要移动或删除它。
        ada.Fill(mydataset, "S")

        Dim primarykey(0) As DataColumn
        primarykey(0) = mydataset.Tables("S").Columns("菜品代码")
        mydataset.Tables("S").PrimaryKey = primarykey

        ComboBox1.DisplayMember = "菜品代码"
        ComboBox1.DataSource = mydataset.Tables("S")

        TextBox4.DataBindings.Add("Text", mydataset.Tables("S"), "菜名")
        TextBox1.DataBindings.Add("Text", mydataset.Tables("S"), "价格")
        TextBox2.DataBindings.Add("Text", mydataset.Tables("S"), "窗口")
        TextBox3.DataBindings.Add("Text", mydataset.Tables("S"), "折扣")

        myconn.Close()

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim mysql As String = "update 菜品 set 价格=" & TextBox1.Text & ",折扣=" & TextBox3.Text & ",窗口=" & TextBox2.Text & "where 菜品代码='" & ComboBox1.Text.ToString & " '"
        Dim mycmd As New SqlClient.SqlCommand(mysql, myconn)

        Try
            mycmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        MsgBox("修改成功!!")
        myconn.Close()
    End Sub

    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        新添菜品.Show()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

        If mydataset.Tables("S").Rows.Find(ComboBox1.Text).Item(6).GetType() Is GetType(DBNull) Then
            Exit Sub
        Else
            data = mydataset.Tables("S").Rows.Find(ComboBox1.Text).Item(6)
            PictureBox1.Image = Image.FromStream(New MemoryStream(data))
        End If
    End Sub
End Class
  • 关于菜品查询以及修改的问题,以及combox的用法问题,此窗口因为是来自于企业登录后的窗口,因此设计为登录某个食堂就显示该食堂的菜品(如,登录新食堂,此处的combox只显示新食堂所拥有的菜品,下文以新食堂举例),因此关于combox的datasource与displaymember就变得很难选择,因为是通过SQL语句现在数据中查询新食堂的菜品信息,需要新建立dataset获取查询后的菜品信息,并设置dataset.table中的主键,通过textbox的databindings功能实现当选择combox中另一个菜品时,textbox内容也会随之改变,而对于picturebox中的图片,选择在combox.selectedindexchange中放入一段代码,即data(byte类型)获取dataset.table中的image类型数据(即图片),然后再读入picturebox中。
  • 关于菜品的修改问题,定义button2,点击后,使用SQLSERVER的update语句直接更新,直接更新textbox中修改后的信息。
新添菜品.vb
Imports System.Data.SqlClient
Imports System.IO


Public Class 新添菜品
    Dim mydataset As New DataSet
    Dim mysql As String = "select * from 菜品"
    Dim myadapter As SqlDataAdapter = New SqlDataAdapter(mysql, myconn)
    Dim photoStream As IO.FileStream
    Dim fileByte() As Byte
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
            PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
        End If

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If File.Exists("D:pic1.jpg") Then
            Kill("D:pic1.jpg")
        End If

        Dim s As String
        s = "D:pic1.jpg"
        PictureBox1.Image.Save(s)

        myadapter.Fill(mydataset, "caipin")
        Dim user_row As DataRow = mydataset.Tables("caipin").NewRow
        user_row(0) = Me.TextBox1.Text.ToString
        user_row(1) = Me.TextBox2.Text.ToString
        user_row(2) = Me.TextBox3.Text
        user_row(3) = Me.TextBox4.Text
        user_row(4) = Me.TextBox5.Text
        user_row(5) = Me.TextBox6.Text.ToString
        
        photoStream = New FileStream("D:" & "pic1" & ".jpg", FileMode.Open)
        ReDim fileByte(photoStream.Length - 1)
        photoStream.Read(fileByte, 0, photoStream.Length)
        user_row(6) = fileByte
        user_row(7) = TextBox7.Text.ToString
        user_row(8) = TextBox8.Text.ToString

        mydataset.Tables("caipin").Rows.Add(user_row)
        Dim cm As SqlCommandBuilder = New SqlCommandBuilder(myadapter)
        myadapter.Update(mydataset, "caipin")
        myconn.Close()

        MsgBox("添加成功!!")

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        
        Me.Close()
    End Sub

End Class

此过程与用户注册过程一致,因此不做详细解释。

2.菜品列表与菜品详情的窗体(杨瀚君) 菜品查询.vb

呈现指定食堂的所有菜品,可根据用户的选择进行筛选和排序操作.

mports System.Data.SqlClient
Public Class 菜品查询
    Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs)
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.Enter
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        菜品详情.Show()
    End Sub
    '打开菜品详情窗口
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 菜品,食堂 where 
 食堂.食堂代码=菜品.食堂代码
 and 食堂名称 ='" & ComboBox1.Text & "' and 菜品种类 ='" & ComboBox3.Text & "'"
        '从数据库中查询特定食堂名称和菜品种类的菜品列表
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
        '将菜品列表显示在datagrid框里面
    End Sub
  Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.Enter
    End Sub
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 菜品,食堂 where 
 食堂.食堂代码=菜品.食堂代码
 and 食堂名称 ='" & ComboBox1.Text & "' and 菜品种类 ='" & ComboBox3.Text & "'
order by  菜品.折扣 desc"  '将菜品列表以折扣降序排列
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 菜品,食堂 where 
 食堂.食堂代码=菜品.食堂代码
 and 食堂名称 ='" & ComboBox1.Text & "' and 菜品种类 ='" & ComboBox3.Text & "'
order by  菜品.价格 desc"'将菜品列表以价格降序排列
         Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs)

    End Sub

    Private Sub 菜品查询_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("新食堂")
        ComboBox1.Items.Add("绿叶食堂")
        ComboBox1.Items.Add("清真食堂")
        ComboBox1.Items.Add("新园食堂")
        ComboBox3.Items.Add("川菜")
        ComboBox3.Items.Add("粤菜")
        ComboBox3.Items.Add("江浙")
        ComboBox3.Items.Add("鲁菜")
        ComboBox3.Items.Add("西北")
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

    End Sub
End Class

菜品详情.vb

查看所选行(菜品)的详细信息

Imports System.Data.SqlClient
Imports WindowsApp2
Imports System.IO
Public Class 菜品详情
    Dim f4 As New Form1
    Dim photostream As IO.FileStream
    Dim data() As Byte
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs)
    End Sub
    Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TextBox5.TextChanged
        dishcode = TextBox5.Text '记录菜品序号
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 菜品
where 菜品代码='" & TextBox5.Text & " '" '查询菜品序号为dishcode的菜品
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        Dim primarykey(0) As DataColumn
        primarykey(0) = mydataset.Tables("take_list").Columns("菜品代码")
        mydataset.Tables("take_list").PrimaryKey = primarykey
        DataGridView1.DataSource = mydataset.Tables("take_list")
        data = mydataset.Tables("take_list").Rows.Find(TextBox5.Text).Item(6) '获取菜品图片单元格二进制代码
        PictureBox1.Image = Image.FromStream(New MemoryStream(data)) '将二进制代码转换为图片放在picturebox中
        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom '将picture大小自动调整为适应照片尺寸
    End Sub
    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    End Sub
    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        f4.Show() '显示查看评论窗口
    End Sub
    Private Sub 菜品详情_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
End Class

照片无法直接导入sql数据库,并且无法从vb中直接匹配图片
解决方法:将照片放在特定debug中的picture文件夹,通过vb将照片转换为二进制代码储存在sql数据库中,再通过vb将二进制转化为图片显示在界面上。

3.查看评价或增加评论的窗体(蒋壮壮) 查看评论.vb

呈现指定菜品的相关评论,可根据用户的选择进行筛选和排序操作.
这里仅仅演示对一种菜品(c001)的评论的操作.

Imports System.Data.SqlClient
Public Class Form1
    Dim f2 As New Form2
    Private Sub 查看评论_Click(sender As Object, e As EventArgs) Handles 查看评论.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub
//通过gridview查看评论
Private Sub 按时间排序_Click(sender As Object, e As EventArgs) Handles 按时间排序.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
order by datediff(day,'2021-05-25',评论时间)
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub
//按照评论时间进行正序排列顺序
  Private Sub 按评分正序_Click(sender As Object, e As EventArgs) Handles 按评分正序.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
order by 评分 desc
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub
//按评分正序评论
 Private Sub 按评分倒序_Click(sender As Object, e As EventArgs) Handles 按评分倒序.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
order by -评分 desc
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")
    End Sub
//按评分倒序排列
 Private Sub 按点赞数排序_Click(sender As Object, e As EventArgs) Handles 按点赞数排序.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
order by 点赞数 desc
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "take_list")
        DataGridView1.DataSource = mydataset.Tables("take_list")

    End Sub
	//按点赞数排序
 Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Dim zi%, zs$
        For zi = 0 To DataGridView1.ColumnCount - 1
            zs = DataGridView1.CurrentRow.Cells(zi).Value
            ListBox1.Items.Add(zs)
        Next

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.CurrentRow.Cells(5).Value = DataGridView1.CurrentRow.Cells(5).Value + 1
        MsgBox("点赞成功")
    End Sub
//点赞功能
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        DataGridView1.CurrentRow.Cells(6).Value = DataGridView1.CurrentRow.Cells(6).Value + 1
    End Sub
//举报功能
 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        f2.ShowDialog()
    End Sub

    Private Sub MenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked

    End Sub
/
    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    End Sub
End Class

增加评论.vb

为指定菜品增加评论.
这里仅仅演示当前登陆用户对一种菜品(c001)的评论的操作.

Imports System.Data.SqlClient
Public Class Form2

    Dim T3 As Integer


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim myconn As New SqlConnection("DataBase=meal0;Data Source=.;Integrated Security=True;")
        Dim mystrl As String = "Select * from 评论
"
        Dim myadapter As New SqlDataAdapter(mystrl, myconn)
        Dim mydataset As New DataSet
        myadapter.Fill(mydataset, "scl")

        Dim 评论_row As DataRow = mydataset.Tables("scl").NewRow
        If Val(TextBox3.Text) = 0 Then
            T3 = 0
        Else
            T3 = Val(TextBox3.Text)
        End If
        评论_row(0) = Me.TextBox1.Text.ToString
        评论_row(1) = Now()
        评论_row(2) = Me.TextBox2.Text.ToString
        评论_row(3) = T3
        评论_row(4) = Me.TextBox4.Text.ToString
        评论_row(5) = 0
        评论_row(6) = 0
        mydataset.Tables("scl").Rows.Add(评论_row)
        Dim cm As SqlCommandBuilder = New SqlCommandBuilder(myadapter)
        myadapter.Update(mydataset, "scl")
        MsgBox("反馈成功")
        Close()
    End Sub
//添加评论
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class

点赞和举报功能的实现:通过设计使点赞和评论成为了表的一部分,然后使用currentrow控件实现对选定行的点赞和举报.

4.共餐社区的窗体(周旭) 共餐社区.vb

呈现所有用户发布的所有共餐帖子,可根据用户的选择进行筛选操作.

Imports System.Data.SqlClient
Public Class 共餐社区
    Dim cb1 As String   '食堂代码
    Dim cb2 As String   '性别
    Dim cb3 As String   '菜品种类
    Dim cb4 As String   '小时
    Dim cb5 As Date     '日期
    Dim cb6 As Integer  '时长开头
    Dim cb7 As Integer  '时长结尾
’设置公共变量
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ComboBox1.Items.Clear()
        ComboBox1.Items.Add("所有食堂")
        ComboBox1.Items.Add("清真食堂")
        ComboBox1.Items.Add("新食堂")
        ComboBox1.Items.Add("新园食堂")
        ComboBox1.Items.Add("绿叶食堂")
        ComboBox1.Text = ComboBox1.Items(0)

        ComboBox2.Items.Clear()
        ComboBox2.Items.Add("不限性别")
        ComboBox2.Items.Add("只看男生")
        ComboBox2.Items.Add("只看女生")
        ComboBox2.Text = ComboBox2.Items(0)

        ComboBox3.Items.Clear()
        ComboBox3.Items.Add("所有菜系")
        ComboBox3.Items.Add("鲁菜")
        ComboBox3.Items.Add("江浙菜")
        ComboBox3.Items.Add("西北菜")
        ComboBox3.Items.Add("川菜")
        ComboBox3.Items.Add("粤菜")
        ComboBox3.Text = ComboBox3.Items(0)

        ComboBox4.Items.Clear()
        ComboBox4.Items.Add("大致时间")
        ComboBox4.Items.Add("11:00")
        ComboBox4.Items.Add("12:00")
        ComboBox4.Items.Add("13:00")
        ComboBox4.Items.Add("17:00")
        ComboBox4.Items.Add("18:00")
        ComboBox4.Items.Add("20:00")
        ComboBox4.Items.Add("21:00")
        ComboBox4.Text = ComboBox4.Items(0)

        TextBox1.Text = 0
        TextBox2.Text = 120
’combobox和textbox是筛选帖子的信息入口,此处设置率选的选项
Dim zconn As New SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")
        Dim zsqlstr1$
        zsqlstr1 = "select * from 共餐"
        Dim zadp As New SqlDataAdapter(zsqlstr1, zconn)
        Dim zdataset As New DataSet
        zdataset.Reset()
        zadp.Fill(zdataset, "共餐")
        DataGridView1.DataSource = zdataset.Tables("共餐")
’连接数据库,在DataGridView中展示“共餐”表的所有信息
        DataGridView1.AutoGenerateColumns = True
        DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter
’为保证可对DataGridView的信息直接进行修改,需要预设其可访问性
    End Sub
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim zi%, zs$
        ListBox1.Items.Clear()
        For zi = 0 To DataGridView1.ColumnCount - 1
            zs = DataGridView1.CurrentRow.Cells(zi).Value
            ListBox1.Items.Add(zs)
        Next
    End Sub
’为浏览数据更方便,将选中行的数据逐行展示在ListBox中
 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Form2.Show()
    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        留言.Show()
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        修改帖子.Show()
    End Sub
’进入留言窗口,对选中行的帖子进行留言

 Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Call Form1_Load(Nothing, Nothing)
    End Sub
’刷新窗体,清空选项,重新加载
  Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        If ComboBox1.Text = ComboBox1.Items(0) Then
            cb1 = "*"
        ElseIf ComboBox1.Text = ComboBox1.Items(1) Then
            cb1 = "sh001"
        ElseIf ComboBox1.Text = ComboBox1.Items(2) Then
            cb1 = "sh004"
        ElseIf ComboBox1.Text = ComboBox1.Items(3) Then
            cb1 = "sh003"
        ElseIf ComboBox1.Text = ComboBox1.Items(4) Then
            cb1 = "sh002"
        End If

        If ComboBox2.Text = ComboBox2.Items(0) Then
            cb2 = "*"
        ElseIf ComboBox2.Text = ComboBox2.Items(1) Then
            cb2 = "男"
        ElseIf ComboBox2.Text = ComboBox2.Items(2) Then
            cb2 = "女"
        End If

        If ComboBox3.Text = ComboBox3.Items(0) Then
            cb3 = "*"
        Else : cb3 = ComboBox3.Text
        End If

        If ComboBox4.Text = ComboBox4.Items(0) Then
            cb4 = "*"
        Else : cb4 = Microsoft.VisualBasic.Left(ComboBox4.Text, 2)
        End If

        cb5 = DateTimePicker1.Value.ToString("yyyy-MM-dd")
        cb6 = TextBox1.Text    '时长开头
        cb7 = TextBox2.Text    '时长结尾
’设置筛选项对应触发的结果,为sql查询做准备

        Dim zsqlstr2 As String
        zsqlstr2 = "select distinct 共餐.账号,共餐.食堂代码,共餐.共餐时间 ,共餐.共餐时长,共餐.留言,共餐.菜品代码,共餐.备注 from 共餐,菜品,用户 " _
            & "where 共餐.食堂代码='" & cb1 & "'" _
            & "and 用户.性别 in (select 用户.性别 from 用户 inner join 共餐 on 用户.账号=共餐.账号 where 用户.性别='" & cb2 & "') " _
            & "and 菜品.菜品种类 in(select 菜品.菜品种类 from 菜品 inner join 共餐 on 菜品.菜品代码=共餐.菜品代码 where 菜品.菜品种类='" & cb3 & "') " _
            & "and DATEPART(hh,共餐时间)-" & cb4 & "<1 and DATEPART(hh,共餐时间)-" & cb4 & ">-1 " _
            & "and CONVERT(varchar(100),共餐.共餐时间, 23)='" & cb5 & "'" _
            & "and 共餐时长>=" & cb6 & " and 共餐时长<=" & cb7
’sql查询:根据用户设定的要求筛选符合要求的帖子
        Dim zconn As New SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")
        Dim zadp2 As New SqlDataAdapter(zsqlstr2, zconn)
        Dim zdataset As New DataSet
        zdataset.Reset()
        zadp2.Fill(zdataset, "共餐")
        DataGridView1.DataSource = zdataset.Tables("共餐")
’将查询结果展示在DataGridView中
    End Sub

End Class

修改帖子.vb

对已选定的行(帖子)进行修改或删除操作

Imports System.Data.SqlClient
Public Class 修改帖子
    Private Sub Form4_Load(sender As Object, e As EventArgs) Handles Me.Load
        TextBox1.Text = 共餐社区.DataGridView1.CurrentRow.Cells(0).Value    '用户名不可修改
        TextBox2.Text = 共餐社区.DataGridView1.CurrentRow.Cells(1).Value    '食堂代码不可修改
        TextBox3.Text = 共餐社区.DataGridView1.CurrentRow.Cells(2).Value    '共餐时间不可修改
        TextBox4.Text = 共餐社区.DataGridView1.CurrentRow.Cells(3).Value    '共餐时长
        TextBox5.Text = 共餐社区.DataGridView1.CurrentRow.Cells(5).Value    '菜品代码
        TextBox6.Text = 共餐社区.DataGridView1.CurrentRow.Cells(6).Value    '备注
        TextBox1.Enabled = False
        TextBox2.Enabled = False
        TextBox3.Enabled = False
    End Sub
’在修改框中显示选中行原有信息
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '此处需要验证是否为本用户
        Dim i%, strsql$
        i = MsgBox("确认修改?")
        If i = vbOK Then
            Dim strrow0 As String = 共餐社区.DataGridView1.CurrentRow.Cells(0).Value.ToString
            Dim strrow1 As String = 共餐社区.DataGridView1.CurrentRow.Cells(1).Value.ToString
            Dim strrow2 As String = 共餐社区.DataGridView1.CurrentRow.Cells(2).Value.ToString
            strsql = "Update 共餐 set 共餐时长='" & TextBox4.Text & "',菜品代码='" & TextBox5.Text & "',备注='" & TextBox6.Text & "' where 账号 = '" + strrow0 + "'and 食堂代码='" + strrow1 + "'and 共餐时间='" + strrow2 + "'"
’根据前三个确定的属性确定帖子,对其进行update
            Dim zconn As New SqlClient.SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")
            Dim zcomm As New SqlClient.SqlCommand(strsql, zconn)
            zconn.Open()
            zcomm.ExecuteNonQuery()
            MsgBox("修改成功")
            zconn.Close()
        End If
        Me.Hide()
    End Sub
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim i%, strsql$
        i = MsgBox("确认删除?")
        If i = vbOK Then
            Dim strrow0 As String = 共餐社区.DataGridView1.CurrentRow.Cells(0).Value.ToString
            Dim strrow1 As String = 共餐社区.DataGridView1.CurrentRow.Cells(1).Value.ToString
            Dim strrow2 As String = 共餐社区.DataGridView1.CurrentRow.Cells(2).Value.ToString
            strsql = "delete * from 共餐 where 账号 = '" + strrow0 + "'and 食堂代码='" + strrow1 + "'and 共餐时间='" + strrow2 + "'"
’根据前三个确定的属性确定帖子,对其进行delete
            Dim zconn As New SqlClient.SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")
            Dim zcomm As New SqlClient.SqlCommand(strsql, zconn)
            zconn.Open()
            zcomm.ExecuteNonQuery()
            MsgBox("删除成功")
            zconn.Close()
        End If
        Me.Hide()
    End Sub
End Class
发布新的帖子.vb

指定用户发布新的共餐帖子

Imports System.Data.SqlClient
Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
        TextBox3.Text = Format(Now, "yyyy-mm-dd")
        TextBox4.Text = "例子  12:30"
        TextBox5.Text = "例子  60"
    End Sub
      Private Sub TextBox3_Click(sender As Object, e As EventArgs) Handles TextBox3.Click
        TextBox3.Text = ""
    End Sub

    Private Sub TextBox4_Click(sender As Object, e As EventArgs) Handles TextBox4.Click
        TextBox4.Text = ""
    End Sub

    Private Sub TextBox5_Click(sender As Object, e As EventArgs) Handles TextBox5.Click
        TextBox5.Text = ""
    End Sub
’预设输入框内原有字符作为输入格式参照
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim zconn As New SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")


        Dim zsqlstr1 As String = "select * from 共餐"
        Dim zadp As New SqlDataAdapter(zsqlstr1, zconn)
        Dim zdataset As New DataSet
        zdataset.Reset()
        zadp.Fill(zdataset, "共餐1")

        Dim 共餐_row As DataRow = zdataset.Tables("共餐1").NewRow
        Dim ztimestr As String = TextBox3.Text & " " & TextBox4.Text & ":00"
        Dim ztime As Date = CDate(ztimestr)

        共餐_row(0) = Me.TextBox1.Text.ToString   '账号
        共餐_row(1) = Me.TextBox2.Text.ToString   '食堂
        共餐_row(2) = ztime                       '日期&时间
        共餐_row(3) = Me.TextBox5.Text.ToString   '时长
        共餐_row(4) = ""                          '留言
        共餐_row(5) = Me.TextBox6.Text.ToString   '菜品
        共餐_row(6) = Me.TextBox7.Text.ToString   '备注
        zdataset.Tables("共餐1").Rows.Add(共餐_row)

        Dim zm As SqlCommandBuilder = New SqlCommandBuilder(zadp)
        zadp.Update(zdataset, "共餐1")

        Me.Hide()
    End Sub
End Class
'更新共餐表

留言.vb

对选中行(帖子)进行留言操作

Public Class 留言

    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
        Label3.Text = 共餐社区.DataGridView1.CurrentRow.Cells(4).Value
        TextBox1.Text = 共餐社区.DataGridView1.CurrentRow.Cells(4).Value
    End Sub
'显示选中行原有的留言作为参照
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim zconn As New SqlClient.SqlConnection("Initial Catalog=meal1;Data Source=.;User ID=sa;Password=1961615926;")
        Dim strrow0 As String = 共餐社区.DataGridView1.CurrentRow.Cells(0).Value.ToString
        Dim strrow1 As String = 共餐社区.DataGridView1.CurrentRow.Cells(1).Value.ToString
        Dim strrow2 As String = 共餐社区.DataGridView1.CurrentRow.Cells(2).Value.ToString
        Dim value As String = TextBox1.Text
        Dim strcomm As String = "update 共餐 set 留言 ='" + value + "'where 账号 = '" + strrow0 + "'and 食堂代码='" + strrow1 + "'and 共餐时间='" + strrow2 + "'"
        
        Dim zcomm As New SqlClient.SqlCommand(strcomm, zconn)
        zconn.Open()
        zcomm.ExecuteNonQuery()
        MsgBox("留言成功")
        zconn.Close()

        Me.Hide()
    End Sub
End Class

六:遇到的部分问题以及解决办法
  1. 用户信息中因为要得到用户的账号,用户名,头像,因此设计全局变量,在用户登录时获取用户账号,以便在用户信息的界面通过sql语言直接查询信息。

  2. 用户注册时的图片显示问题,起初的设计思路是从文件中挑选图片作为头像,显示在picturebox中,按下注册按钮时,直接将picturebox中的图片存入SQLSERVER数据库中,而实际情况无法实现。最终设计运行过程几乎没有区别,但是设计思路改变较大,先将picturebox中的图片保存至D盘,然后再读取该图片路径读取为byte类型,这也是为什么在该窗口最前面放置一段if判断代码(如果在D中存在的一张图片,则删除该图片,以防止后面读取图片时读错图片),然后再将图片放入dataset中。

  3. 修改菜品遇到的问题,经过修改菜品.vb中的叙述,起初的设计思路是,将查询所得出的数据放入datatable中,将textbox与picturebox直接通过databindings与datatable进行绑定,但是picturebox涉及到图片的类型方面,通过各种方式无法与其绑定,或者无法查询到图片位置,或者绑定后无法显示图片,因此最后通过设计dataset将dataset.table设置主键,通过查找,找到image类型头像,在读入byte类型的data,继而能够显示图片。

  4. 图片存放遇到的问题,由于新添菜品的vb程序设计只能添加一道菜的信息,因此为了避免过多的重复性劳动,另通过老师给的代码设计了一段vb代码,直接将所有菜品的图片直接存入至SQLSERVER的meal0数据库中,直接解决了菜品表中的图片问题。

  5. 日期形式统一问题:由于我们需要根据用户选择的日期(年月日)和时间段(整点)分别检索符合要求的帖子,因此必须保证“共餐”表中的“共餐时间”属性包括年月日和小时分钟.但是考虑到在vb.net中书写sql语句时必须保持vb和sql的时间精度一致,因此必须要选择两者中更精确的时间形式作为最小单位.由于vb.net的时间格式无法只取“时分”不要“秒”,因此sqlserver中不能取更实用的smalldatetime(年月日时分)格式,而应该采取精确到秒的datetime且默认秒为“:00”.

  6. 时间格式转换问题:由于时间和日期需要分别进行筛选,所以在sql中,选择采取CONVERT函数取年月日,采用DATEPART函数取小时,最终结果均为日期格式;在vb.net中采用DateTimePicker1.Value.ToString(“yyyy-MM-dd”)只取用户录入的日期(实际上精确到秒,默认时分秒为00:00:00)的年月日部分,用Microsoft.VisualBasic.Left(ComboBox4.Text, 2)只取用户录入的小时,最终结果均为字符串格式.由此可见,不同的时间段需要在不同软件中使用不同函数实现截取,而取得的结果的格式也是不一样的.

  7. 窗口合并后运行失败问题:原本能够运行的二级窗口在合并后成为三级窗口,如果涉及加载上一级窗口的数据则会报错.要将所引用的上一级窗口的数据设为变量存在model中则可以避免报错,正确运行.

七:客观评价与总结 1.平行分工的利弊
  • 为了让每个成员充分享受编程的快乐,应用学习的技能,我们采取了完全平行分工,要求每个成员都独立搭建了一整套可独立运行的程序,包括局部数据库的搭建和局部窗体的编写运行.
  • 这样的分工使得每个人都完整地走完了一遍数据库项目的实现过程,且在自己负责的部分有更大的发挥空间,并有精力设计更多功能和细节.
  • 但是在这个过程中,协调工作进程和统一数据源耗费了大量的时间和精力,且出现了原先可正常运行的窗体在合并后报错的问题,所幸最终得以解决.
2.部分未解决的设计漏洞
  • 第一类是功能的缺失或交互逻辑的漏洞:比如未赋予用户修改个人信息的权限、在发布评论和帖子时要求用户重新输入主键信息.未修补这样的漏洞的原因在于,我们已完成了一个相对完整且运行成功的程序,解决这些漏洞所需要的相关知识已在其他代码中有所体现,时间关系未能一一修改.
  • 第二类是数据安全性问题:比如对帖子进行修改和删除操作时为验证操作用户和帖主身份是否一致.一方面,这是由于交接问题所导致的不良结果,不同组之间未能就变量统一及时达成共识;另一方面,验证所需知识已在其他代码中有所体现,时间关系没有在这些细节上改良.
3.总结

我们的项目是极具创新性和实用性的,尤其是“共餐社区”,将消费场景和使用群体紧密联系.可以说,只要能够基于我们的项目进行移植,就可以成为上财乃至全国高校中最受欢迎的app之一,如果有机会,我们的团队将考虑在本科期间持续优化并维护该项目,切实用数据库课程所学知识服务现实生活.
最后,尤其要感谢史海波优秀的授课和细致的指导,衷心期待与史老师的下一次合作!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号