c#报刊订阅管理系统(数据库课程设计报告).doc
课 程 设 计课程设计名称: 数据库应用系统课程设计 专 业 班 级 : 学 生 姓 名 : 马飞扬 学 号 : 指 导 教 师 : 课程设计时间: 2011-12-19至2011-12-30 计算机科学与技术 专业课程设计任务书学生姓名 马飞扬专业班级学号题 目报刊订阅管理系统课题性质其它课题来源自拟课题指导教师同组姓名无主要内容人们在部门单位中一直以来都是使用传统人工方式管理本单位的报刊订阅,这种管理方式存在着许多缺点,而且时间一长,将产生大量的文件和数据,难于归类整理,这对于查找、更新和维护都带来了不少的困难。课题要求设计并实现一个报刊订阅管理系统,能够通过计算机和数据库对本单位的报刊订阅进行管理。一个单位可指定一个或多个管理员,普通用户注册获得一个账号后就可以订阅报刊以及在自己的权限范围内进行相关的操作。功能应包括:登录对角色的判断,管理员注册新用户,查看、更新报刊信息,查询、统计订阅信息,维护数据,管理用户,普通用户修改个人信息,查询、统计、增加订阅等模块。界面设计相对友好,方便用户的操作。任务要求综合运用所学的数据库基本知识,并能通过查阅相关文献材料,独立完成该课题的设计开发工作。要求根据本课题设计出合理的数据结构,并实现报刊订阅管理系统中,登录对角色的判断,管理员注册新用户,管理员查看、更新报刊信息,查询、统计订阅信息,维护数据,管理用户,普通用户修改个人信息,查询、统计、增加订阅等功能模块。参考文献【1】尹志宇、郭晴 数据库原理与应用教程 清华大学出版社 2010.5【2】(美)厄尔曼 数据库系统基础教程 机械工业出版社 2009.8【3】郑阿奇 sql server2005教程 电子工业出版社 2011.2【4】明日科技 c#开发技术大全 人民邮电出版社 2011.11【5】(美)米凯利斯 c#本质论 人民邮电出版社 2010.9审查意见指导教师签字:教研室主任签字: 年 月 日 报刊订阅管理系统1:概述人们在部门单位中一直以来都是使用传统人工方式管理本单位的报刊订阅,这种管理方式存在着许多缺点,譬如:效率低、保密性差,而且时间一长,将产生大量的文件和数据,难于归类整理,这对于查找、更新和维护都带来了不少的困难。本学期学习了c#、数据库以及基于c#的windows应用程序开发以后,在本次课程设计中,便利用这些知识点,实现一个报刊订阅管理系统,能够通过计算机和数据库对本单位的报刊订阅进行管理,实现智能化管理,克服传统人工管理方式的缺点以及弊端。在报刊订阅管理系统中,要实现:一个单位可指定一个或多个管理员,管理员可以注册新用户,查看、更新报刊信息,查询、统计订阅信息,系统维护,管理用户;普通用户通过注册获得一个账号后就可以订阅报刊以及在自己的权限范围内进行查询、统计订阅以及修改个人信息等相关的操作。功能应包括:登录对角色的判断,管理员注册新用户,管理员查看、更新报刊信息,管理员查询、统计订阅信息,管理员维护数据、管理员管理用户、普通用户修改个人信息、普通用户查询、统计、增加订阅等功能模块。界面设计要相对友好,方便用户的操作。2:需求分析设计报刊订阅管理系统,要能够通过计算机和数据库对本单位的报刊订阅进行管理,实现智能化管理,克服传统人工管理方式的缺点以及弊端。要实现:一个单位可指定一个或多个管理员,管理员可以注册新用户,查看、更新报刊信息,查询、统计订阅信息,系统维护,管理用户;普通用户通过注册获得一个账号后就可以订阅报刊以及在自己的权限范围内进行查询、统计订阅以及修改个人信息等相关的操作。具体功能应包括:用户登录,管理员注册用户(包括普通用户、管理员),更新报刊(包括查看、录入、修改、删除),查询订阅(按用户、报刊、部门),统计订阅(按用户、报刊、部门),系统维护(备份、还原数据)、管理用户(查询、修改、删除),普通用户修改个人信息,增加、删除、修改、查询、统计订阅信息等功能模块。界面设计要相对友好,方便用户的操作。系统流程图如图1:图1:普用用户、管理员注册用户查看、录入、修改、删除更新报刊按用户、报刊、部门查询订阅按用户、报刊、部门统计订阅备份、还原数据系统维护查询、修改、删除管理用户管理员用户登录个人信息查询、修改统计订阅查询订阅增加订阅普通用户3:概念结构设计在报刊订阅管理系统中,共涉及到3个实体:报刊、部门、用户。用户包括普通用户、管理员,每个用户都唯一属于一个部门,每个部门可包括多个用户,它们是多对一的关系。普通用户可以订阅多份报刊,一份报刊可被多个用户订阅,属于多对多的关系。E-R图如图2。图2:分类名称订阅普通用户管理员部门报刊部门名称部门编号。报刊编号用户账号属于报刊编号用户用户账号身份证号。用户账号密码。4:逻辑结构设计设计数据库共有7个关系模式,分别为:用户(用户账号,姓名,密码,用户类别)用户账号为主键,决定因素为主键自身或包含主键,满足BC范式。普通用户1(用户账号,联系电话,联系地址,部门编号)用户账号为主键,部门编号为外键,决定因素为主键自身或包含主键,满足BC范式。普通用户2(用户账号,身份证号)用户账号为主键,决定因素为主键自身或包含主键,满足BC范式。部门(部门编号,部门名称)部门编号为主键,决定因素为主键自身或包含主键,满足BC范式。报刊信息(报刊编号,报刊名称,出版报社,出版周期,季度报价,内容介绍,分类编号)报刊编号为主键,分类编号为外键,决定因素为主键自身或包含主键,满足BC范式。报刊类别(分类编号,分类名称)分类编号为主键,决定因素为主键自身或包含主键,满足BC范式。订单(用户编号,报刊编号,订阅份数,订阅月数)用户编号、报刊编号为主键,决定因素为主键自身或包含主键,满足BC范式。5:源代码及系统截图源代码:(1) 登录界面的逻辑实现using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;using System.Data.SqlClient;namespace newspaperorder public partial class login : Form private int childFormNumber = 0; public login() InitializeComponent(); private void ShowNewForm(object sender, EventArgs e) Form childForm = new Form(); childForm.MdiParent = this; childForm.Text = "Window " + childFormNumber+; childForm.Show(); private void OpenFile(object sender, EventArgs e) OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); openFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" if (openFileDialog.ShowDialog(this) = DialogResult.OK) string FileName = openFileDialog.FileName; private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e) SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" if (saveFileDialog.ShowDialog(this) = DialogResult.OK) string FileName = saveFileDialog.FileName; private void ExitToolsStripMenuItem_Click(object sender, EventArgs e) this.Close(); private void CascadeToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.Cascade); private void TileVerticalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.TileVertical); private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.TileHorizontal); private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.ArrangeIcons); private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e) foreach (Form childForm in MdiChildren) childForm.Close(); private void button2_Click(object sender, EventArgs e) this.textBox1.Clear(); this.textBox2.Clear(); private void notifyicon1_click(object sender, System.Windows.Forms.MouseEventArgs e) if (e.Button = System.Windows.Forms.MouseButtons.Right) if (this != null && this.contextMenuStrip1 != null) this.contextMenuStrip1.Show(); private void button1_Click(object sender, EventArgs e) string usernum = null;usernum=this.textBox1.Text.ToString(); string userpass = null;userpass=this.textBox2.Text.ToString(); if (usernum.Equals("") | userpass.Equals("") MessageBox.Show("请?输?入?账?号?和í密ü码?"); else string strCon = "server=(local);Integrated Security=true;database=newspaperorder;uid=sa;pwd=" SqlConnection MyCon = new SqlConnection(strCon); try MyCon.Open(); string sql = "select * from 用?户§ where 用?户§账?号?=" + usernum + " and 密ü码?=" + userpass + " " SqlCommand MyCommand = new SqlCommand(sql, MyCon); SqlDataReader mydatareader = MyCommand.ExecuteReader(); if (mydatareader.HasRows) mydatareader.Read(); string power = mydatareader.GetString(3); if (power.StartsWith("管ü理员±") this.Hide(); this.admin = new adminform(usernum); if (power.StartsWith("普?通用?户§") this.Hide(); mon = new commonform(usernum); else MessageBox.Show("账?号?或ò密ü码?不?正y确?"); MyCon.Close(); catch (Exception e1) MessageBox.Show(e1.Message); private void toolStripMenuItem1_Click(object sender, EventArgs e) this.Dispose(); (2) 管理员主界面的逻辑实现using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace newspaperorder public partial class adminform : Form private int childFormNumber = 0; public adminform(string usernum) this.Visible = true; this.usernum = usernum; InitializeComponent(); private void ShowNewForm(object sender, EventArgs e) Form childForm = new Form(); childForm.MdiParent = this; childForm.Text = "Window " + childFormNumber+; childForm.Show(); private void OpenFile(object sender, EventArgs e) OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); openFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" if (openFileDialog.ShowDialog(this) = DialogResult.OK) string FileName = openFileDialog.FileName; private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e) SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" if (saveFileDialog.ShowDialog(this) = DialogResult.OK) string FileName = saveFileDialog.FileName; private void ExitToolsStripMenuItem_Click(object sender, EventArgs e) this.Close(); private void CascadeToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.Cascade); private void TileVerticalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.TileVertical); private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.TileHorizontal); private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout.ArrangeIcons); private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e) foreach (Form childForm in MdiChildren) childForm.Close(); private void toolStripMenuItem5_Click(object sender, EventArgs e) if (this.userselect1 = null) this.userselect1 = new userselect(); this.userselect1.TopMost = true; else if (this.userselect1.WindowState = FormWindowState.Minimized) this.userselect1.WindowState = FormWindowState.Normal; this.userselect1.display(); this.userselect1.TopMost = true; this.userselect1.Show(); private void 管ü理员±ToolStripMenuItem_Click(object sender, EventArgs e) if (this.add1 = null) this.add1 = new addadmin(); this.add1.TopMost = true; else this.add1.Show(); this.add1.TopMost = true; private void 普?通用?户§ToolStripMenuItem_Click(object sender, EventArgs e) if (this.add2 = null) this.add2 = new addcommon(); this.add2.TopMost = true; else this.add2.Show(); this.add2.TopMost = true; private void toolStripMenuItem3_Click(object sender, EventArgs e) if (this.addnewspaper1 = null) this.addnewspaper1 = new addnewspaper(); this.addnewspaper1.TopMost = true; else this.addnewspaper1.Show(); this.addnewspaper1.TopMost = true; private void toolStripMenuItem6_Click(object sender, EventArgs e) if (this.newspaperselect1 = null) this.newspaperselect1 = new newspaperselect(); this.newspaperselect1.TopMost = true; else if (this.newspaperselect1.WindowState = FormWindowState.Minimized) this.newspaperselect1.WindowState = FormWindowState.Normal; this.newspaperselect1.display(); this.newspaperselect1.Show(); this.newspaperselect1.TopMost = true; private void toolStripMenuItem7_Click(object sender, EventArgs e) if (this.departselect1 = null) this.departselect1 = new departselect(); this.departselect1.TopMost = true; else if (this.departselect1.WindowState = FormWindowState.Minimized) this.departselect1.WindowState = FormWindowState.Normal; this.departselect1.display(); this.departselect1.Show(); this.departselect1.TopMost = true; private void 按恪用?户§ToolStripMenuItem_Click(object sender, EventArgs e) if (this.countuser1 = null) this.countuser1 = new countuser(); this.countuser1.TopMost = true; else this.countuser1.display(); this.countuser1.Show(); this.countuser1.TopMost = true; private void 按恪报馈刊ToolStripMenuItem_Click(object sender, EventArgs e) if (this.countnewspaper1 = null) this.countnewspaper1 = new countnewspaper(); this.countnewspaper1.TopMost = tru