资源描述
C#程序设计课程设计
题 目 公司抽奖管理系统设计
姓 名 贾芳超
专 业 计算机科学与技术
学 号 201215035
指导教师 黄于欣
郑州科技学院信息工程学院
二○一五年十一月
摘 要
公司抽奖系统的设计是针对公司节日或活动等为公司员工发放福利的设计,其开发主要包括前端应用程序与界面的设计和后台数据的建立与导入两个方面。对于前端要求易于操作且功能完整,随机等特点,而后台要建立起一个相应需求的数据一致性和完整性强、数据安全性好的数据列表。
Visual Studio是微软公司推出的开发环境,是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。所以本人此次采用微软公司的Microsoft Visual Studio 2010作为前端应用程序开发工具,同时利用Excel 建立后台数据,在本次课程设计中进行了公司抽奖管理系统的设计。本系统能方便而简洁地实现应用程序运行,易于操作,能很好的满足公司快捷、方便、公平,有趣地发放奖品的需求。
关键词:公司抽奖系统;Visual Studio 2010;Excel;IDE
目 录
引言 1
1系统的开发背景 2
2需求分析 2
2.1系统需求分析 2
2.2系统开发的环境的选择 2
3可行性分析 3
3.1经济的可行性 3
3.2技术的可行性 3
3.3操作的可行性 4
4系统功能设计 4
5系统功能及流程图 4
5.1系统功能图 4
5.2系统流程图 5
6数据的设计与创建 6
6.1在Excel建立的员工信息设计 6
6.2在Excel建立的奖品清单设计 6
7系统详细设计部分及测试结果 7
7.1主页面的设计及功能实现 7
7.1.1测试 16
7.2数据导入页面及功能的设计 16
7.2.1测试 24
7.3查看中奖信息功能设计 25
7.3.1测试 26
8总结 27
参考文献
引言
随着计算机技术和经济的快速发展,现在各行各业都离不开计算机。不论是企业的种种业务还是各种公共设施建立等等都需要运用计算机技术,处理着大量的繁杂的问题,实现快速有效的管理,大大提高了工作效率,同时在本次的系统设计运用也具有一定的合理,公平,有趣性。
本次的公司抽奖系统的开发设计主要包括前端应用程序以及后台数据的建立和维护两个方面。经过分析,我建立了Excel数据并选用微软公司的Microsoft Visual Studio 2010来开发系统,利用其提供的各种面向对象的开发工具,操纵建立的Excel数据。
本论文正文分介绍了公司抽奖系统开发背景以及如何开发,并简要概述了Microsoft Visual Studio 2010 和Excel。介绍系统开发前的准备,包括系统的需求说明及系统总体结构设计和详细设计和着重阐述了系统主要功能模块的具体实现及是系统开发的后期工作,讲到了该系统的不完善之处及本次系统开发过程中一些切身的感受与想法,是我做这次毕业设计的心得体会。
1系统开发背景
抽奖活动一般是很多企业或组织举办活动的必备环节。传统的翻牌抽奖、转盘抽奖、砸金蛋及以前那种使用抽奖箱+纸片,然后由嘉宾一个一个地抽取奖项的方式早已落伍了且由于经济的飞速发展。随着公司规模不断扩大,员工数量已是巨大,传统的费时费力不说,还容易出错,本来是喜庆的活动,让大家扫兴可就不好了。
在信息技术充分发展的今天,公司各种活动年年创意,活动抽奖也要紧紧抓住“创新”理念步入后尘,因此一种新兴的抽奖方式正在悄然兴起,那就是使用抽奖软件,这种方式具有很多传统人工抽奖所不具备的优点,比如抽取数量、速度、音乐、背景、画面、场景、效果等,大大超出了传统抽奖方式所能带来的体验,让参与活动的人都能感受到计算机科技带给我们的巨大惊喜。
2需求分析
2.1系统需求分析
本次公司抽奖系统需求分析就是针对此系统所需要的相关功能,确定系统的总体结构方案,完成相应的需求分析报告。在确定系统的总体结构方案过程中,包括确定应用程序的结构、系统开发环境和开发工具的选择。
2.2系统开发的环境的选择
Visual Studio 2010是微软公司推出的集成开发环境,是目前最流行的 Windows 平台应用程序开发环境。它是把代码的编写、程序的调试、编译、运行以及其他的相关操作都集成在一起的“编程工具”。 作用是程序员通过它这个平台,利用编程语言来写程序,调试,运行。
Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。
经分析,本库存管理系统选用Microsoft Visual Studio 2010来设计界面,选用Excel来建立后台数据。
由于大多数公司内部使用的计算机平台都是基于Windows环境的。为了降低系统成本,应最大程度地利用现有的资源、兼容现有的环境,可确定使用下面的开发环境。
(1)数据建立工具:Microsoft Office Excel;
(2)前端开发工具:Microsoft Visual Studio 2010;
3可行性分析
3.1经济的可行性
本公司抽奖管理系统设计需求的硬件和软件分别是计算机及相关硬件和软件环境Microsoft Visual Studio 2010+Excel,对于硬件只需要到市场上购买到而软件只需要从相关网站下载,系统成本主要集中在本管理系统的开发与维护上,对公司不造成过重的经济负担。此系统的投入使用改变了公司传统的抽奖方式,不需要消耗大量的人力物力,在此方面也节省了部分开支而且是永久性的。人力、财力产生的效益将远远大于本系统的开发成本,所以从经济方面考虑开发这个系统是可行的。
3.2技术的可行性
技术上的可行性分析要考虑现有技术条件能否顺利完成开发工作及将来要采用的硬件和软件技术能否满足公司抽奖的要求,也就是所考虑当前计算机技术和开发者的技术水平两方面。
本系统选择Microsoft Visual Studio 2010作为系统前台应用程序开发工具,采用Excel工具建立数据,并通过Microsoft Visual Studio 2010中的ADO控件使两者进行连接从而进行系统软件开发。Microsoft Visual Studio 2010由微软不仅能帮助软件开发者提高软件开发的质量和效率,缩短开发周期,而且还具备强大的数据管理功能,学校现有的计算机设备也完全能够满足开发的需要。完全能够满足本系统的开发需求。
另外,从开发人员的技术水平考虑,作为一名即将毕业的计算机科学与技术专业的大四毕业生,大学四年所积累的各项知识及本学期学习的C#语言使我在一定程度上具备了开发一个简单的公司抽奖系统的能力。
因此,综合两个方面,此次系统设计在技术上也是可行的。
3.3操作的可行性
传统公司抽奖方式,一般是设置抽奖箱,让人写出很多的纸条,又是人工手抽,方法可行,但没有效率且对于如今繁荣的社会没了新意,跟不上时代的潮流。现在设计的公司抽奖系统,只需要将公司的员工的信息录入系统,将各项要发放的奖品名称录入系统,点击开始抽奖,搭建漂亮的舞台,让员工的名字工号在大屏幕上滚动,随机自动选择停止,呈现获奖人信息,大大提高了效率,也更具有趣味性。因此此系统在操作方面也具有可行性。
4系统的功能设计
本次公司抽奖管理系统是对某公司的员工设计抽奖,它的的功能如下:
(1)Excel导入奖品清单,参与抽奖人员清单
员工信息的录入,增添、修改、删除,清空
奖品信息的录入,增添、修改、删除,清空
(2)支持按顺序抽奖,抽取某个奖品,无限次抽取现金奖
(3)抽中的人后面不会再出现
5系统功能及流程图
5.1系统功能图
添加人员
抽奖模拟系统
主页设置模块
添加设置模块
添加奖项
抽奖设置
系统设置
抽奖查询
使用说明
5.2系统流程图
主窗体
抽
将界面
系统设置
使用说明
软件帮助
退出
奖品设置
人员设置
6数据的设计与创建
6.1在Excel建立的员工信息设计(序号,工号及姓名)
6.2在Excel建立的奖品清单设计(序号,奖品名称及金额)
7系统详细设计部分及测试结果
7.1主页面的设计及功能实现
页面上有选项的抽取奖品号码,现金奖和抽奖、重抽、复位、退出,导入数据等等按钮的设计。
代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
using 抽é奖±;
//|5|1|a|s|p||x
namespace 多à线?程ì_抽é奖±
{
public partial class Form1 : Form
{
int curGiftId = Convert.ToInt16(SqlHelper.ExecuteScalar("select max(giftid) from T_Gift"));
Thread th = null;
public Form1()
{
InitializeComponent();
int k= lblLucknum.Width;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //隐皌藏?边?框ò
dg = new DeShowMessageInLabel(ShowMessageInLabel);
}
private void Form1_Load(object sender, EventArgs e)
{
//开a启?线?程ì间?调獭?用?
Control.CheckForIllegalCrossThreadCalls = false;
}
//产ú生Θ?随?机ú数簓
public int GetRandom()
{
Random ra= new Random();
int iUp = Convert.ToInt32(SqlHelper.ExecuteScalar("select max(UserId) from T_User "));
int iDown = Convert.ToInt32(SqlHelper.ExecuteScalar("select min(UserId) from T_User "));
int tem= ra.Next(iDown, iUp);
return tem;
}
//获?取?工¤号?
public string GetLuckerWorkId(int userid)
{
return Convert.ToString(SqlHelper.ExecuteScalar("select WorkId from T_User where UserId="+userid));
}
//获?取?姓?名?
public string GetLuckerName(int userid)
{
return Convert.ToString(SqlHelper.ExecuteScalar("select UserName from T_User where UserId=" + userid));
}
//获?取?奖±品·名?称?
public string GetGiftName(int giftid)
{
return Convert.ToString(SqlHelper.ExecuteScalar("select GiftName from T_Gift where GiftId=" + giftid));
}
//判D断?是?否?中D过y奖±
public bool IsLucker(int LuckerId)
{
string cmd = "select 1 from T_user A inner join T_Lucker B on A.UserId=B.LuckerId where A.UserId="+LuckerId;
object o = SqlHelper.ExecuteScalar(cmd);
if (o==null||o==DBNull.Value )
{
return false;
}
else
{
return true;
}
}
//Lab显?示?方?法ぁ?
void ShowMessageInLabel(string msg)
{
lblLucknum.Text=msg;
}
//委ˉ托狣显?示?方?法ぁ?
delegate void DeShowMessageInLabel( string mseg);
DeShowMessageInLabel dg = null;
//显?示?号?码?
public void ShowNum()
{
int i = 100;
int k = 500;
while (true)
{
i--;
int luckid = GetRandom();
if (IsLucker(luckid))
{
continue;
}
else
{
string luckerworkid = GetLuckerWorkId(luckid).Trim();
string luckername = GetLuckerName(luckid).Trim();
string mesg = luckerworkid + " " + luckername;
this.Invoke(dg, mesg);
if (i < 100 && i >= 50)
{
Thread.Sleep(100-i);
}
else if (i < 50 && i > 46)
{
k = k + 400;
Thread.Sleep(k);
}
else
{
if (chkCrash.Checked == true)
{
lblLucknum.Text = "恭§喜2:阰" + lblLucknum.Text;
string cmd = "insert into T_Lucker(LuckerId,LuckerWorkId,LuckerName,LuckerGiftId,GiftName,Dtime)";
cmd += "values(" + luckid + ",'" + luckerworkid + "','" + luckername + "',0,'现?金e奖±','" + DateTime.Now + "')";
SqlHelper.ExcutNonQuery(cmd);
th.Abort();
}
else
{
lblLucknum.Text = "恭§喜2:阰" + lblLucknum.Text;
string cmd = "insert into T_Lucker(LuckerId,LuckerWorkId,LuckerName,LuckerGiftId,GiftName,Dtime)";
cmd += "values(" + luckid + ",'" + luckerworkid + "','" + luckername + "'," + curGiftId + ",'" + GetGiftName(curGiftId) + "','" + DateTime.Now + "')";
SqlHelper.ExcutNonQuery(cmd);
curGiftId--;
btnRestart.Enabled = true;
th.Abort();
}
}
}
}
}
private void btnStart_Click(object sender, EventArgs e)
{ //抽é现?金e奖±
lblLucknum.ForeColor = System.Drawing.Color.Red;
if (chkCrash.Checked == true)
{
lblGiftName.Text = "现?金e奖±";
Thread th1 = new Thread(new ThreadStart(ShowNum));
th = th1;
th.Start();
timer2.Start();
}
else
{
if (curGiftId <= 0)
{
MessageBox.Show("奖±品·已?经-抽é完?了?");
return;
}
if (txtGiftId.Text == "")
{
lblGiftName.Text = curGiftId.ToString() + "号?奖±品·:阰 " + GetGiftName(curGiftId);
Thread th1 = new Thread(new ThreadStart(ShowNum));
th = th1;
th.Start();
timer2.Start();
}
else
{
curGiftId = Convert.ToInt16(txtGiftId.Text);
lblGiftName.Text = Convert.ToInt16(txtGiftId.Text) + "号?奖±品·:阰 " + GetGiftName(Convert.ToInt16(txtGiftId.Text));
Thread th1 = new Thread(new ThreadStart(ShowNum));
th = th1;
th.Start();
timer2.Start();
txtGiftId.Text = "";
}
}
}
//产ú生Θ?闪Θ?烁?效§果?
private void timer1_Tick(object sender, EventArgs e)
{
if(lblLucknum.ForeColor == System.Drawing.Color.Red)
{
lblLucknum.ForeColor = System.Drawing.Color.Yellow;
}
else
{
lblLucknum.ForeColor = System.Drawing.Color.Red;
}
}
//控?制?闪Θ?烁?效§果?
private void timer2_Tick(object sender, EventArgs e)
{
if (!th.IsAlive)
{
timer1.Start();
btnStart.Enabled = true;
}
else
{
timer1.Stop();
lblLucknum.Visible = true;
btnStart.Enabled = false;
}
}
private void btnQuit_Click(object sender, EventArgs e)
{
this.Dispose(true);
this.Close();
Application.Exit();
}
//重?抽é
private void btnRestart_Click(object sender, EventArgs e)
{
curGiftId++;
lblGiftName.Text = curGiftId.ToString() + "号?奖±品·:阰 " + GetGiftName(curGiftId);
Thread th1 = new Thread(new ThreadStart(ShowNum));
th = th1;
th.Start();
timer2.Start();
btnRestart.Enabled = false;
}
private void btnReset_Click(object sender, EventArgs e)
{
SqlHelper.ExcutNonQuery("delete from T_Lucker");
lblGiftName.Text = "";
lblLucknum.Text = "";
MessageBox.Show("复′位?成é功|!?");
}
//快ì捷Y键ü设Θ?置?
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.F1:
btnStart.PerformClick();
break;
case Keys.F2:
btnRestart.PerformClick();
break;
}
}
private void btnInput_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
}
}
7.1.1测试
在抽奖号码下添加1号,点击抽奖,页面中间出现1号奖品IPAD一台同时页面上中奖者姓名与相对应的工号不停变换和闪烁指导停止产生中奖者,运行测试的整体效果如下图,也可以重抽,复位。
7.2数据导入页面及功能的设计
功能内容如下
(1) 清空数据
(2) 导入人员名单
(3) 导入奖品清单
(4) 查看中奖人
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace 抽é奖±
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
// btnInputUser.Enabled = false;
// btnInputGift.Enabled = false;
}
private void btnChoseUser_Click(object sender, EventArgs e)
{
OpenFileDialog ofdlgUser = new OpenFileDialog();
ofdlgUser.Filter = "Excel文?件t(*.xls)|*.xls";
if (ofdlgUser.ShowDialog() == DialogResult.OK)
{
string filePath = ofdlgUser.FileName;
this.txtUser.Text = filePath;
}
}
private void btnChoseGift_Click(object sender, EventArgs e)
{
OpenFileDialog ofdlgGift = new OpenFileDialog();
ofdlgGift.Filter = "Excel文?件t(*.xls)|*.xls";
if (ofdlgGift.ShowDialog() == DialogResult.OK)
{
string filePath = ofdlgGift.FileName;
this.txtGift.Text = filePath;
}
}
private void btnInputUser_Click(object sender, EventArgs e)
{
if (txtUser.Text.Length == 0)
{
MessageBox.Show("请?选?择?导?入?数簓据Y的?Execl文?件t");
}
else
{
try
{
OleDbConnectionStringBuilder connectStringBuilder = new OleDbConnectionStringBuilder();
connectStringBuilder.DataSource = this.txtUser.Text.Trim();
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";
connectStringBuilder.Add("Extended Properties", "Excel 8.0");
using (OleDbConnection cn = new OleDbConnection(connectStringBuilder.ConnectionString))
{
DataSet ds = new DataSet();
string sql = "Select * from [抽é奖±名?单蹋?]";
OleDbCommand cmdLiming = new OleD
展开阅读全文