同济大学
《数据库技术与应用》
项目设计报告
项目设计报告题目:
Aganippe
小组成员姓名:__ 1351503 魏琪_____________
__ 1351495 娄竞丹_____________
__ 1351497 徐嫣然_____________
_ 1351583 何依静_____________
班级:
年级:大二专业:
指导教师:袁科萍
日期:2015 年 1 月 2 日
一.课题设计目的和意义
1、项目开发背景
现在的人们总是忙于工作和学习,快节奏的生活让我们很少能有时间停下来歇一歇,喝一杯茶,看一场画展。但是艺术本是生活中不可缺少的一部分,艺术可以让生活更丰富多彩,让生活更有格调。有人认为艺术是高高在上的,是触不可及的,殊不知,欣赏地铁站上一幅漂亮的宣传画也是艺术,艺术本就和我们的生活密不可分。
画作是艺术的一种展现形式,画作是画家表达内心感情与想法的方法,欣赏画作不仅能带给人们精神上的愉快,同时也是一种思想的交流和碰撞。优秀的画作总能带给人们感动和思考。我们希望通过这个平台可以让更多的人欣赏到优秀的画作,希望更多的人开始自己的创造,希望人们的生活不再只有呆板的工作和学习,还有艺术的滋养。
2、项目设计目的和意义
项目设计的目的是希望更多的人可以用画作充实自己的精神国度,接受优秀画作带来的精神洗礼。同时让更多的人可以自己亲手创作画作,体验创作的乐趣。分享自己的画作,欣赏他人的画作,学会分享与赞扬,并且通过交流可以别人的长处并找到自己的不足,从他人得带最诚恳的评价和赞扬。向着更完美的自己更进一步。走出家门,走进艺术的殿堂,近距离感受艺术带来的震撼与感动。
二.课题主要功能描述
本课题的主要功能分为以下三点:
1、进入登录界面用户可以直接注册或用已有用户名登录,登录成功后可以欣赏世界名家的画作并可以了解作家的基本信息。用户可以根据画作的类型进行选择和查询。
2、登陆成功后可以选择进入画板界面,此界面的主要功能是用户自己进行画作的创作,并可以将自己创作好的画作进行上传使所有用户都可以看到。看其他用户上传的画作可以进行点赞和评价功能。
3、登陆成功后也可以选择进入艺术展界面,此界面的主要功能是介绍近期上海的艺术展和其基本信息及简要介绍。
三.数据库设计
1.数据需求分析
现在有很多图画的欣赏网站,也有很多图片的查询网站。比如很普遍的百度图片等。但一般的网络图片欣赏只有单独的图片查询功能,不能让用户自己作画并上传。一般的图片欣赏网站主要都包含:图片作者名,图片名称以及图片。也有专门的网站可以让用户自己作画并上传,绝大部分这样的系
统的网络服务器中还包含着与用户之间的交互,这些交互主要包括着用户对图片的评论和打分等。
随着人们物质生活水平越来越高,越来越重视精神生活,对艺术的需求也越来越大,对艺术的要求也越来越高。我们将图片欣赏与画作创作结合在一起,希望能够满足人们对艺术的需求。
2.概念模式设计(E-R图设计)
3.逻辑模式设计(转换为关系模式和规范化处理)
画家(画家ID,画家姓名,画家国籍,画家介绍)
画作(画作ID,画家ID,画作名称,画派)
用户(用户ID,用户姓名,用户密码,用户邮箱,用户人气)
作品(作品ID,用户ID,作品名称,点赞数,标签)
画展(画展ID,画展名,画展时间,画展地点,门票费,画展介绍)
4. 数据库实施
(一)创建表
(1)创建画家
create table Painter
(PID char(3)not null primary key
check (PID like'[0-9][0-9][0-9]'),
Pname varchar(20),
Pnation varchar(10)
)
(2)创建画作
create table Picture
(PicID char(4)not null primary key
check(PicID like 'p[0-9][0-9][0-9]'),
PID char(3)foreign key references Painter, Picname varchar(50),
faction varchar(20),
(3)创建用户
)
create table Users
(UsID char(4) not null primary key
check (UsID like 'U[0-9][0-9][0-9]'),
Uname varchar(10) not null,
popular smallint,
Ukey char(8) not null,
Umail varchar(20)not null check(Umail like '%@%') )
(4)创建作品
create table Works
(WID varchar (4) not null primary key check (WID LIKE 'W[0-9][0-9][0-9]' ), Wname varchar(20) not null,
UsID char(4) foreign key references Users, love smallint,
label varchar(40),
)
(5)创建展览
create table Exhibit
(EID char(4) not null primary key check(EID like 'E[0-9][0-9][0-9]'), Ename varchar(20) not null,
Etime varchar(10) not null
place varchar(40) not null,
price varchar(10) not null,
Einf text not null
)
(二)触发器
create trigger users_update
on users
for update
as
declare @_email as varchar(40)
select @_email=Uemail from inserted i
if @_email not like('%@%')
begin
print'输入的邮箱格式不正确!' rollback
end
else
begin
print'插入成功!'
End
触发器测试:
在用户注册时若输入的邮箱不含“@”则报错
四、窗体设计与功能设计程序标注
1、界面设计:
一个优秀的软件应该是在讲究功能的同时也要注重在美学上的设计,因此,我们界面主要是以温和的色调来渲染出一种优雅、闲适、小资的艺术感。
界面以绿色为主色调,起到了缓解眼部疲劳的功效,再加上白色,两种颜色的混合,带来一种清新的青春气息,倒也不觉得单调乏味
人性化的界面分类,简约的按钮设置,既起到导航的作用,又将各种功能明确地分类,而不显得杂乱。
2功能窗体简述:
(一)登陆界面
老用户登陆:在第一栏输入用户名,第二栏输入密码,点击登陆,登陆成功则显示“登陆成功,(用户名)欢迎光临”,
失败,则显示
新用户注册:进入注册页面
退出:点击右上角叉号
代码如下:
Public Class登陆
Dim mybind As BindingManagerBase
Dim myconn As New SqlConnection("Data Source=(local)\sqlexpress;Initial
Catalog=aganippe;Integrated Security=True")
Public Declare Function SendMessage Lib"user32"Alias"SendMessageA" _
(ByVal hwnd As IntPtr, _
ByVal wMsg As Integer, _
ByVal wParam As IntPtr, _
ByVal lParam As Byte()) _
As Integer
Public Const EM_SETCUEBANNER As Integer = &H1501
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim mySkin As Sunisoft.IrisSkin.SkinEngine = New Sunisoft.IrisSkin.SkinEngine mySkin.SkinFile = Application.StartupPath & "/skin/midsummer.ssk"
TxtBoxName.Clear()
TxtBoxpw.Clear()
ActiveControl = TextBox1
SendMessage(TxtBoxName.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("name"))
SendMessage(TxtBoxpw.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("password"))
End Sub
Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles
PictureBox3.Click
Me.Close()
End Sub
Private Sub LogIn_Click(sender As Object, e As EventArgs) Handles LogIn.Click Dim mysql As String
mysql = "select * from Users where Uname='" & TxtBoxName.Text & "'and Ukey='" & TxtBoxpw.Text & "'"
Dim myadapter As New SqlClient.SqlDataAdapter(mysql, myconn)
Dim mydb As New DataSet
myadapter.Fill(mydb, "1")
If mydb.Tables("1").Rows.Count = 0 Then
MsgBox("用户名或密码错误!") '非合法用户报出错误
TxtBoxName.Focus()
TxtBoxpw.Clear()
Else
'欢迎登录用户
MsgBox(TxtBoxName.Text & ",欢迎光临,", MsgBoxStyle.OkOnly, "<欢迎使用Aganippe>")
初始界面.Show()
Me.Hide()
End If
End Sub
Private Sub Register_Click(sender As Object, e As EventArgs) Handles Register.Click Dim register As New Register
register.Show(Me)
Me.Hide()
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles
TextBox1.TextChanged
End Sub
End Class
(二)注册界面
用户名:用户自行选择,不可重复
密码:6—8位数字密码
确认密码:内容用于上栏相同
邮箱:必须含有“@”
头像:点击“浏览”本地上传头像并存于头像文件夹
确认:注册并加入数据库
重新输入:填写内容清空
代码如下:
Public Class Register
Dim mybind As BindingManagerBase
Dim myconn As New SqlConnection("Data Source=(local)\sqlexpress;Initial
Catalog=aganippe;Integrated Security=True")
Dim mystr As String
Dim mydataset As New DataSet
Public Declare Function SendMessage Lib"user32"Alias"SendMessageA" _
(ByVal hwnd As IntPtr, _
ByVal wMsg As Integer, _
ByVal wParam As IntPtr, _
ByVal lParam As Byte()) _
As Integer
Public Const EM_SETCUEBANNER As Integer = &H1501
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles
PictureBox1.Click
If name1.Text <> ""And password.Text <> ""And repassword.Text <> ""And email.Text
<> ""Then
Dim mysql1 = "select * from users"
Dim mycom1 As New SqlCommand(mysql1, myconn)
Dim mydatadapter As New SqlDataAdapter(mysql1, myconn)
Dim mydataset As New DataSet
mydatadapter.Fill(mydataset, "users")
Dim str1 As String = mydataset.Tables("users").Rows.Count + 1
Dim mysql = "insert into users values('" + str1 + " ','" + name1.Text + " ','" + "0" + "','" + password.Text + "','" + email.Text + "')"
Dim mycom As New SqlCommand(mysql, myconn)
myconn.Open()
Try
mycom.ExecuteNonQuery()
MessageBox.Show("恭喜你注册成功!", "提示", MessageBoxButtons.OK) Catch ex As Exception
MessageBox.Show("请填写正确的邮箱!", "触发器报错", MessageBoxButtons.OK) End Try
myconn.Close()
登陆.Show()
Me.Close()
Else
MsgBox("您的信息输入不完整,不能注册")
End If
Dim frm1 As New登陆
frm1.Show()
End Sub
Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles
PictureBox2.Click
name1.Clear()
password.Clear()
repassword.Clear()
email.Clear()
End Sub
Private Sub name1_Leave(sender As Object, e As EventArgs) Handles name1.Leave Dim mysql1 As String
mysql1 = "select * from users where Uname='" & name1.Text & "'"
Dim myadapter1 As New SqlClient.SqlDataAdapter(mysql1, myconn)
Dim mydb1 As New DataSet
myadapter1.Fill(mydb1, "users")
If mydb1.Tables("users").Rows.Count = 1 Then
Label1.Text = "对不起,该用户名已存在,请重新输入!"
name1.Clear()
ElseIf name1.Text = ""Then
Label1.Text = "用户名不能为空"
Else
Label1.Text = "恭喜你!此用户名可用"
End If
End Sub
Private Sub password_Leave(sender As Object, e As EventArgs) Handles password.Leave If Len(password.Text) > 8 Or Len(password.Text) < 4 Then
Label2.Text = "密码长度超出范围,请重新输入"
password.Clear()
ElseIf password.Text = ""Then
Label2.Text = "密码不能为空"
Else
Label2.Text = "该密码可用"
End If
End Sub
Private Sub repassword_Leave(sender As Object, e As EventArgs) Handles repassword.Leave If repassword.Text = ""Then
Label3.Text = "用户名不能为空"
ElseIf password.Text <> repassword.Text Then
password.Focus()
Label3.Text = "您两次输入的密码不相同,请重新输入"
Label2.Text = "请重新输入"
repassword.Text = ""
Else
Label3.Text = "该密码可用"
End If
End Sub
Private Sub email_Leave(sender As Object, e As EventArgs) Handles email.Leave If InStr(email.Text, "@") <> 0 Then
Label4.Text = "该邮箱可用"
ElseIf email.Text = ""Then
Label4.Text = "邮箱不能为空"
Else
Label4.Text = "邮箱格式错误,请重新输入"
email.Text = ""
End If
End Sub
Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click
Me.Close()
Dim frm1 As New登陆
frm1.Show()
End Sub
Private Sub Label9_Click(sender As Object, e As EventArgs) Handles Label9.Click Dim src As String = ""
OpenFileDialog1.Filter = "|*.jpg"
If (OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK) Then
src = OpenFileDialog1.FileName.ToString()
PictureBox4.Refresh()
PictureBox4.Image = Image.FromFile(src)
End If
Dim mysql1 = "select * from users"
Dim mycom1 As New SqlCommand(mysql1, myconn)
Dim mydatadapter As New SqlDataAdapter(mysql1, myconn)
Dim mydataset As New DataSet
mydatadapter.Fill(mydataset, "users")
Dim str1 As Integer = mydataset.Tables("users").Rows.Count + 1
PictureBox4.Image.Save(Application.StartupPath + "\head\" + str1.ToString + ".jpg")
End Sub
Private Sub Register_Load(sender As Object, e As EventArgs) Handles MyBase.Load ActiveControl = TextBox1
SendMessage(name1.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("请输入名字"))
SendMessage(password.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("请输入6-8位密码"))
SendMessage(repassword.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("请再输入一次密码"))
SendMessage(email.Handle, _
EM_SETCUEBANNER, _
IntPtr.Zero, _
System.Text.Encoding.Unicode.GetBytes("请输入邮箱")) End Sub
End Class
(三)初始界面
个人信息栏:显示用户头像。
根据时间显示“上午好,XXX”或者“下午好,XXX”“晚上好,XXX”。
“个人主页”:点击进入“个人主页”窗口
“分享平台”:点击进入“分享平台”窗口
“设置”:点击进入“个人设置”窗口
“大师名作”:点击进入“大师名作”窗口
“画板”:点击进入“画板”窗口
“注销”:退出登录,显示“用户登录”窗口
画作展示(右上角):随机展示大师作品
近期展览:显示近期画展宣传图,左击进入“展览”窗口
代码如下:
Public Class初始界面
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim grzy As New Mzone
grzy.Show()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim dsmz As New master
dsmz.Show()
End Sub
Dim myconn As New SqlConnection("Data Source=(local)\SqlExpress;Initial
Catalog=aganippe;Integrated Security=True")
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim fxpt As New分享平台
fxpt.Show()
End Sub
Private Sub初始界面_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Enabled = True
AxWindowsMediaPlayer1.URL = Application.StartupPath + "\summer.mp3"
AxWindowsMediaPlayer1.settings.setMode("loop", True)
AxWindowsMediaPlayer1.Ctlcontrols.play()
Dim hour As Integer = CType(DateTime.Now.ToString("HH"), Int32)
If hour > 5 And hour <= 11 Then
Label1.Text = "上午好,"
ElseIf hour > 11 And hour <= 14 Then
Label1.Text = "中午好,"
ElseIf hour > 14 And hour <= 19 Then
Label1.Text = "下午好,"
Else
Label1.Text = "晚上好,"
End If
Dim uid As Integer
Dim sql As String= "select * from works,USERS where Uname='"+ 登陆.TxtBoxName.Text + "' AND https://www.doczj.com/doc/b815033724.html,ID=https://www.doczj.com/doc/b815033724.html,ID"
myconn.Open()
Dim myadpter As New SqlDataAdapter(sql, myconn)
Dim mydataset As New DataSet
myadpter.Fill(mydataset, "uid")
uid = mydataset.Tables("uid").Rows(0).Item(5).ToString
Label7.Text = mydataset.Tables("uid").Rows(0).Item(6).ToString
myconn.Close()
PictureBox2.Image = Image.FromFile(Application.StartupPath & "\head\" & uid & ".jpg")
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim sz As New settings
sz.Show()
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim paint As New FrmPaint
paint.Show()
End Sub
Dim i As Integer = 0
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
i = i + 1
If i < 9 Then
PictureBox1.Image = Image.FromFile(Application.StartupPath & "\picture\p00"& i & ".jpg")
ElseIf i > 9 And i < 92 Then
PictureBox1.Image = Image.FromFile(Application.StartupPath & "\picture\p0" & i & ".jpg")
ElseIf i > 91 Then
i = 0
End If
End Sub
Private Sub PictureBox8_Click(sender As Object, e As EventArgs) Handles
PictureBox8.Click
Label11.Text = Label3.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub PictureBox7_Click_1(sender As Object, e As EventArgs) Handles
PictureBox7.Click
Label11.Text = Label4.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub PictureBox5_Click(sender As Object, e As EventArgs) Handles
PictureBox5.Click
Label11.Text = Label5.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles
PictureBox3.Click
Label11.Text = Label6.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub PictureBox4_Click(sender As Object, e As EventArgs) Handles
PictureBox4.Click
Label11.Text = Label9.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub PictureBox6_Click(sender As Object, e As EventArgs) Handles
PictureBox6.Click
Label11.Text = Label10.Text
Dim ex As New exhibition
ex.Show()
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 登陆.Show()
Me.Close()
End Sub
Private Sub PictureBox9_Click(sender As Object, e As EventArgs) Handles
PictureBox9.Click
Dim grzy As New Mzone
grzy.Show()
End Sub
Private Sub PictureBox10_Click(sender As Object, e As EventArgs) Handles PictureBox10.Click
Dim dsmz As New master
dsmz.Show()
End Sub
Private Sub PictureBox11_Click(sender As Object, e As EventArgs) Handles
PictureBox11.Click
Dim fxpt As New分享平台
fxpt.Show()
End Sub
Private Sub PictureBox12_Click(sender As Object, e As EventArgs) Handles PictureBox12.Click
Dim paint As New FrmPaint
paint.Show()
End Sub
Private Sub PictureBox13_Click(sender As Object, e As EventArgs) Handles PictureBox13.Click
Dim sz As New settings
sz.Show()
End Sub
Private Sub PictureBox15_Click(sender As Object, e As EventArgs) Handles PictureBox15.Click
登陆.Show()
Me.Close()
End Sub
Private Sub PictureBox14_Click(sender As Object, e As EventArgs) Handles PictureBox14.Click
Me.Close()
End Sub
End Class
(三)个人主页