1、 前言(课程设计的目的、意义、要求)
本系统主要有以下功能模块:
(1)登陆功能:登陆系统为身份验证登录。分为管理员登录和一般用户登录。分别通过不同的用户名和密码进入报刊订阅管理界面,新的用户需要注册。
(2)录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦提交就存入到后台数据库中;普通用户自行注册进行可以修改个人信息。
(3)订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不可订阅报刊,必须以用户身份订阅报刊。
(4)查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门分类查询。查询出的信息显示在界面上,并且可以预览和打印出结果。
(5)统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订阅信息进行统计;普通用户可以统计出自己的订阅情况,并且可以预览和打印出结果。
(6)系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和数据的安全性,有利于系统的维护
2、 需求分析
参考如下:
报刊订阅管理系统包括如下功能:(结构图如下)
(1) 登录和注册:登录判断帐号为管理员或普通用户,注册新的普通用户
(2) 管理员录入新信息:管理员登录后,可以录入新的报刊信息
(3) 用户修改自身信息:普通用户登录后可以查看自身信息,并进行资料修改
(4) 查询信息:普通用户可以查询报刊信息,并进行订阅。管理员可以分类查询报刊信息,用户信息
(5) 用户可以查阅自己的订阅信息;管理员可以查阅销售信息。
3、 数据库概念结构设计
参考如下:
报刊管理:
管理员(Adminuser):管理员名,密码;
部门(Department):部门号,部门名;
用户表(User):用户帐号UserID,密码,真实姓名,身份证、联系号码、联系地址、部门号;
报刊类别表(NewspaperClass):分类编号、分类名称;
报刊信息表(Newspaper):报刊号、报刊名称、出版社、出版周期、季度报价、内容介绍、分类编号;
订单表(Order):订单编号、用户编号(UsrID)、报刊号、订阅数、订阅月数;
(2) 实体间的联系:
部门与用户之间是1:n的联系;
报刊类别与报刊之间也是1:m(m≥0)的联系;
订单与用户之间也是m:n的联系;
订单与报刊之间则是m:n的关系。
(3) 人事管理子系统的E-R图:
1 n
1 1
m m n n
4、 数据库逻辑结构设计
参考如下:
(1) 逻辑结构设计图型描述:
(2)逻辑结构设计列表描述
序号 |
表名 |
中文名 |
作用 |
1 |
Adminuser |
管理员信息 |
记录管理员的帐号和密码 |
2 |
Department |
部门信息 |
部门分类 |
3 |
ForUsers |
用户表 |
存储用户信息 |
4 |
NewspaperClass |
报刊类别 |
存储报刊类别 |
5 |
Newspaper |
报刊 |
存储报刊信息 |
6 |
Order |
订单 |
用户订阅信息 |
5、 数据库实现
参考如下:
create database Newspaper;
(1)管理员信息表的建立:
CREATETABLE [dbo].[Adminstor](
[AdID] [int]IDENTITY(1,1)NOT NULL,
[AdName] [nchar](10)NOT NULL,
[AdPassword] [nchar](50)NOT NULL,
CONSTRAINT[PK_Adminstor] PRIMARYKEYCLUSTERED
(
[AdID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
(2)用户信息表的建立:
CREATETABLE [dbo].[ForUsers](
[UID] [int]IDENTITY(1,1)NOT NULL,
[UName] [nvarchar](50)NOT NULL,
[UPassword] [nchar](10)NOT NULL,
[RealName] [nchar](10)NULL,
[IDCard] [nvarchar](50)NULL,
[Telephone] [nvarchar](50)NULL,
[Address] [nvarchar](50)NULL,
[DepartmentID] [int]NULL,
CONSTRAINT[PK_ForUsers]PRIMARYKEY CLUSTERED
(
[UID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
(3)部门信息表的建立
CREATETABLE [dbo].[Department](
[DepartmentID] [int]NOT NULL,
[DepartmentName] [nchar](10)NOT NULL
)ON [PRIMARY]
(4)报刊类别的建立
CREATETABLE [dbo].[NewspaperClass](
[ClassID] [int]IDENTITY(1,1)NOT NULL,
[ClassName] [nvarchar](50)NOT NULL,
CONSTRAINT[PK_NewspaperClass]PRIMARYKEY CLUSTERED
(
[ClassID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
(5)报刊信息的建立
CREATETABLE [dbo].[Newspaper](
[NewspaperID] [int]NOT NULL,
[NewspaperName] [nvarchar](50)NOT NULL,
[Public] [nvarchar](50)NULL,
[PublicTime] [date]NULL,
[Cost] [money]NOT NULL,
[About] [nvarchar](max)NULL,
[ClassID] [int]NOT NULL
)ON [PRIMARY]
(6)订单信息表的建立
CREATETABLE [dbo].[Order1](
[OrderID] [int]IDENTITY(1,1)NOT NULL,
[UserName] [nchar](10)NOT NULL,
[NewspaperName] [nchar](10)NULL,
[Count] [int]NULL,
[Month] [int]NULL,
CONSTRAINT[PK_Order]PRIMARYKEY CLUSTERED
(
[OrderID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
系统包括登录注册,录入信息,管理自身信息,查询和订阅报刊信息,统计订阅信息五大功能模块,共有6张基本表,牵涉到大量数据的录入。在这里采用少数用例进行演示。
6、 运行结果(包括系统测试)
登录(管理员登录和普通用户)
录入报刊信息
查询报刊信息:
用户查询订阅信息:
管理员查询信息:
7、 数据库设计经验教训总结
本次课程设计,我是用C#结合SQL server来完成的。
制作期间,我遇到了很多的问题,比如Mysql的语法与SQL serveer的不同,之前的Natural join在这边不适用了;数据库定义中关键字Order的使用,让我久久不能找出Bug……不过SQL server的视图化的运用,使得工作变得更加有效率。
通过本次实验,我学习了SQL server的新的语法和其数据库的使用,与C#结合,在VS2010的平台上进行了实践,对数据库的掌握有了进一步的了解,对C#也有了更进一步的学习。
参考如下:
1. 管理员、用户基本信息表,用于记录其基本信息:
2. 报刊(Newspaper)基本信息表,用于记录报刊的基本信息:
3. 订单(Order)基本信息表,用于记录订单的基本信息:
参考如下:
1.p1Adminuser_Insert的定义:
INSERTINTO [Newspaper].[dbo].[Adminstor]
([AdName]
,[AdPassword])
VALUES
(<AdName,nchar(10),>
,<AdPassword,nchar(50),>)
2.ForUser_Insert的定义:
INSERTINTO [Newspaper].[dbo].[ForUsers]
([UName]
,[UPassword]
,[RealName]
,[IDCard]
,[Telephone]
,[Address]
,[DepartmentID])
VALUES
(<UName,nvarchar(50),>
,<UPassword,nchar(10),>
,<RealName,nchar(10),>
,<IDCard,nvarchar(50),>
,<Telephone,nvarchar(50),>
,<Address,nvarchar(50),>
,<DepartmentID,int,>)
4. Newspaper_insert的定义
INSERTINTO [Newspaper].[dbo].[Newspaper]
([NewspaperID]
,[NewspaperName]
,[Public]
,[PublicTime]
,[Cost]
,[About]
,[ClassID])
VALUES
(<NewspaperID,int,>
,<NewspaperName,nvarchar(50),>
,<Public,nvarchar(50),>
,<PublicTime,date,>
,<Cost,money,>
,<About,nvarchar(max),>
,<ClassID,int,>)
1.基本表的数据查看(基于视图查询,以SQL Server为例):
1) 查看Adminuser表中的数据:
2) 查看用户表中的数据:
2.存储过程功能的验证:
1) 存储过程Newspaper_Insert功能的验证:
(1)管理员信息表的建立:
CREATETABLE [dbo].[Adminstor](
[AdID] [int]IDENTITY(1,1)NOT NULL,
[AdName] [nchar](10)NOT NULL,
[AdPassword] [nchar](50)NOT NULL,
CONSTRAINT[PK_Adminstor] PRIMARYKEYCLUSTERED
(
[AdID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
(2)用户信息表的建立:
CREATETABLE [dbo].[ForUsers](
[UID] [int]IDENTITY(1,1)NOT NULL,
[UName] [nvarchar](50)NOT NULL,
[UPassword] [nchar](10)NOT NULL,
[RealName] [nchar](10)NULL,
[IDCard] [nvarchar](50)NULL,
[Telephone] [nvarchar](50)NULL,
[Address] [nvarchar](50)NULL,
[DepartmentID] [int]NULL,
CONSTRAINT[PK_ForUsers] PRIMARYKEYCLUSTERED
(
[UID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
(3)部门信息表的建立
CREATETABLE [dbo].[Department](
[DepartmentID] [int]NOT NULL,
[DepartmentName] [nchar](10)NOT NULL
)ON [PRIMARY]
(4)报刊类别的建立
CREATETABLE [dbo].[NewspaperClass](
[ClassID] [int]IDENTITY(1,1)NOT NULL,
[ClassName] [nvarchar](50)NOT NULL,
CONSTRAINT[PK_NewspaperClass] PRIMARYKEYCLUSTERED
(
[ClassID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
(5)报刊信息的建立
CREATETABLE [dbo].[Newspaper](
[NewspaperID] [int]NOT NULL,
[NewspaperName] [nvarchar](50)NOT NULL,
[Public] [nvarchar](50)NULL,
[PublicTime] [date]NULL,
[Cost] [money]NOTNULL,
[About] [nvarchar](max)NULL,
[ClassID] [int]NOT NULL
)ON [PRIMARY]
(6)订单信息表的建立
CREATETABLE [dbo].[Order1](
[OrderID] [int]IDENTITY(1,1)NOT NULL,
[UserName] [nchar](10)NOT NULL,
[NewspaperName] [nchar](10)NULL,
[Count] [int]NULL,
[Month] [int]NULL,
CONSTRAINT[PK_Order] PRIMARYKEY CLUSTERED
(
[OrderID] ASC
)WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)ON [PRIMARY]
1.p1Adminuser_Insert的定义:
INSERTINTO [Newspaper].[dbo].[Adminstor]
([AdName]
,[AdPassword])
VALUES
(<AdName,nchar(10),>
,<AdPassword,nchar(50),>)
2.ForUser_Insert的定义:
INSERTINTO [Newspaper].[dbo].[ForUsers]
([UName]
,[UPassword]
,[RealName]
,[IDCard]
,[Telephone]
,[Address]
,[DepartmentID])
VALUES
(<UName,nvarchar(50),>
,<UPassword,nchar(10),>
,<RealName,nchar(10),>
,<IDCard,nvarchar(50),>
,<Telephone,nvarchar(50),>
,<Address,nvarchar(50),>
,<DepartmentID,int,>)
5. Newspaper_insert的定义
INSERTINTO [Newspaper].[dbo].[Newspaper]
([NewspaperID]
,[NewspaperName]
,[Public]
,[PublicTime]
,[Cost]
,[About]
,[ClassID])
VALUES
(<NewspaperID,int,>
,<NewspaperName,nvarchar(50),>
,<Public,nvarchar(50),>
,<PublicTime,date,>
,<Cost,money,>
,<About,nvarchar(max),>
,<ClassID,int,>)