C#课程设计通讯录软件设计.docx
《C#课程设计通讯录软件设计.docx》由会员分享,可在线阅读,更多相关《C#课程设计通讯录软件设计.docx(31页珍藏版)》请在冰豆网上搜索。
![C#课程设计通讯录软件设计.docx](https://file1.bdocx.com/fileroot1/2022-11/23/07ff1f07-61c6-4e2d-a21b-91fd3ab1e224/07ff1f07-61c6-4e2d-a21b-91fd3ab1e2241.gif)
C#课程设计通讯录软件设计
**学院
课程设计说明书
(2012/2013学年第一学期)
课程名称:
软件程序设计
题目:
通讯录软件设计
专业班级:
学生姓名:
放羊娃
学号:
·
指导教师:
设计周数:
2周
设计成绩:
2013年1月18日
1.课程设计目的…………………………………………………………………………………..3
2.课程(三级项目—软件)分析及设计3
2.1通讯录系统分析3
2.2通讯录系统设计3
2.2.1通讯录系统的功能模块3
2.2.2通讯录系统流程图4
2.2.3通讯录系统功能图4
2.2.4数据库系统设计5
3、课程设计步骤6
3.1、设计登录界面6
3.2、设计数据库6
3.3、注册界面6
3.4、设计主界面10
3.5、整体设计17
4、系统调试和相关问题12
5课程设计总结18
6参考文献19
1.课程(三级项目—软件)目的
本次课程设计旨在加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用及其其中的控件和属性的熟练的操作与使用。
并在此过程中要求学生能结合数据库知识和visualstudio中的windows窗体,实现基本的应用软件,激发学生对c#的兴趣,以此来激发学生对软件的热爱,加强学生的自我编程能力。
2.课程(三级项目—软件)分析及设计
2.1通讯录系统分析
根据技术要求和现有开发环境,分析通讯录系统,一个简单的通讯录可以实现用户登录,用户注册,联系人的添加,修改,删除,用户的密码修改,刷新,精确查找和模糊查找等功能;可能的话,支持相片功能,随心更换图片。
在课程设计中,使用了采用windows窗体和C#语言来进行实际设计,涉及到了多用户登录等相关操作和SQLSERVER数据库连接使用。
2.2通讯录系统设计
2.2.1通讯录系统的功能模块
该通讯录系统大致可分为两大部分:
登录界面和主界面。
登录界面:
简洁,靓丽的登录界面会给使用者一种愉悦的心情;该界面包括基本的用户登录,还可以注册,第一次使用时,可以先注册一个新用户,登录就去。
主界面:
通讯录的的基本功能都在主界面中,使用tabcontrol控件,来回切换,简单方便,主要包括联系人的添加,修改,删除查看,精确查找和模糊查找;窗体上端有menuStrip1,可以实现用户的密码修改,刷新,退出功能。
2.2.2通讯录系统流程图
图1通讯录程序流程图
2.2.3通讯录系统功能图
·
2.2.4数据库系统设计
用户信息表(UserInfo)
列名
数据类型
长度
是否为主键
是否为空
注释
UserName
nverchar
20
是
否
用户名
UserPwd
nverchar
20
否
否
密码
联系人信息表(FriInfo)
列名
数据类型
长度
是否为主键
是否为空
注释
id
int
是
否
编号
头像
nvarchar(MAX)
MAX
否
是
本人
nvarchar
20
否
否
UserName(用户名)
姓名
nvarchar
20
否
否
性别
char
2
否
否
出生日期
datetime
否
否
电话
char
20
否
否
qq
char
20
否
否
籍贯
nvarchar
20
否
否
邮箱
char
20
否
是
3、课程设计步骤
3.1、设计登录界面
两个textbox控件组成一个简单的登录界面:
用户名输入框、密码输入框,建立数据库后,可以链接数据库验证用户名和密码是否存在或一致;必不可少的两个触发按钮:
登录、重置;另外加上注册按钮,新用户必须先注册,其也与数据库相链接。
图2.登录窗口
登录按钮的程序设计:
stringsql="select*fromUserInfowhereUserName='"+txtUserName.Text.Trim().ToLower()+"'andUserPwd='"+txtPassword.Text.Trim()+"'";
if(OperateDB.ExecuteReader(sql))
{
username=txtUserName.Text.Trim().ToLower();
frmMain1frm=newfrmMain1();
frm.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误!
","来自软件消息",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
3.2、设计数据库
yx数据库包括UserInfo(用户信息)、FriInfo(联系人信息)两个表。
3.3、注册界面
简单的注册界面包括:
用户名、密码、在此输入密码,可以的话加上验证码;每个新注册的用户在数据库中必有数据;因为链接数据库,输入已有的用户名或者每天写某一项时,会报错。
图3.用户注册界面
程序设计(该窗体的全部功能的实现):
privatevoidForm3_Load(objectsender,EventArgse)//主窗体的代码区
{
CodeImage(CheckCode(refstr));
}
stringstr="";
privatevoidbtnCompelet_Click(objectsender,EventArgse)
{
if(txtUsername.Text.Trim()!
="")
{
if(txtZhuPwd.Text.Trim()==txtZhuPwdAgain.Text.Trim())
{
if(txtYanZheng.Text=="")
{
MessageBox.Show("请输入验证码!
","来自软件消息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
if(txtYanZheng.Text==str)
{
stringsql1="select*fromUserInfowhereUserName='"+txtUsername.Text.Trim()+"'";
boolcount=(bool)OperateDB.ExecuteReader(sql1);
if(count==false)
{
stringsql="insertintoUserInfo(UserName,UserPwd)values('"+txtUsername.Text.Trim()+"','"+txtZhuPwd.Text.Trim()+"')";
if(OperateDB.ExecuteNonQuery(sql)==1)
{
MessageBox.Show("用户注册成功!
","来自软件消息",MessageBoxButtons.OK);
}
else
{
MessageBox.Show("用户注册失败!
","来自软件消息",MessageBoxButtons.OK);
}
}
else
{
MessageBox.Show("用户名已存在!
","来自软件消息",MessageBoxButtons.OK);
}
}
else
{
MessageBox.Show("验证码错误!
","来自软件消息",MessageBoxButtons.OK,MessageBoxIcon.Information);
str="";
CodeImage(CheckCode(refstr));
}
}
}
else
{
MessageBox.Show("两次输入的密码不一致!
","来自软件消息",MessageBoxButtons.OK);
}
}
else
{
MessageBox.Show("用®?
户¡ì名?
不?
能¨¹为a空?
!
","来¤¡ä自Á?
软¨¨ª件t消?
息¡é",MessageBoxButtons.OK);
}
}//产生随机数的函数
privatestringCheckCode(refstrings)
{
intnumber;
charcode;
stringcheckCode=String.Empty;//空字符串且为只读属性
Randomrandom=newRandom();//新建一个随机数产生器
for(inti=0;i<4;i++)
{
number=random.Next();//随机产生一个整数
if(number%2==0)//如果随机数是偶数取余
code=(char)('0'+(char)(number%10));
else
code=(char)('A'+(char)(number%26));//如果随机数是奇数选择从[A-Z]
checkCode+=""+code.ToString();//4个字符的组¦合
s=s+code.ToString();
}
returncheckCode;//返回字符串checkCode
}
privatevoidCodeImage(stringcheckCode)//建立一个随机图形
{
if(checkCode==null||checkCode.Trim()==String.Empty)
return;
//建立一个位图文件确立长宽¨ª
System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*8.5)),20);
Graphicsg=Graphics.FromImage(image);
try
{
Randomrandom=newRandom();//生成随机生¦成器
g.Clear(Color.White);//清空图片背景色
for(inti=0;i<3;i++)//画图片的背景噪音线
{
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Black),x1,y1,x2,y2);
}//把产生的随机数以字体的形式写入画面
Fontfont=newSystem.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold));
g.DrawString(checkCode,font,newSolidBrush(Color.Red),2,2);
for(inti=0;i<150;i++)//画图片的前景噪音点
{
intx=random.Next(image.Width);
inty=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
}//画图片的边框线?
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
this.pictureBox1.Width=image.Width;
this.pictureBox1.Height=image.Height;
this.pictureBox1.BackgroundImage=image;
}
catch
{}
}
privatevoidtimer1_Tick(objectsender,EventArgse)
{
this.Opacity+=0.05;
}
privatevoidpictureBox1_Click(objectsender,EventArgse)
{
str="";
CodeImage(CheckCode(refstr));
}
privatevoidbtnReset_Click(objectsender,EventArgse)
{
txtUsername.Text="";
txtZhuPwd.Text="";
txtZhuPwdAgain.Text="";
txtYanZheng.Text="";
}
3.4、设计主界面
按照我的思路主页面有两个大体的控件:
menuStrip、tabControl。
1、menuStrip主要包括管理帐号、刷新、退出
2、tabControl:
在该控件上建立几个选项卡,分别命名:
显示主页、查看、添加、管理联系人、关于
其中大部分必须链接数据库:
stringsql=”select/update(from)表名where/set…….”;
其次加上”欢迎观临:
用户名”,当前时间,背景音乐(独曲)
显示时间的程序设计:
DateTimedt=DateTime.Now;//当前时间的实例
label10.Text=dt.ToString();
图4.修改密码
管理帐号(即修改密码)程序设计:
if(txtNewPwd.Text.Trim()==txtNewPwdAgain.Text.Trim())
{//使用类封装
stringsqlCheckPwd="select*fromUserInfowhereUserName='"+frmLogin.username+"'andUserPwd='"+txtOldPwd.Text.Trim()+"'";
if(OperateDB.ExecuteReader(sqlCheckPwd))
{
stringsql="updateUserInfosetUserPwd='"+txtNewPwd.Text.Trim()+"'whereUserName='"+frmLogin.username+"'";
if(OperateDB.ExecuteNonQuery(sql)==1)
{
MessageBox.Show("密码修改成功!
");
this.Hide();
}
else
{
MessageBox.Show("密码修改失败!
");
}
}
else
{
MessageBox.Show("旧密码不正确!
");
}
}
else
{
MessageBox.Show("两次修改的密码不一!
");
}
图5添加联系人
添加头像的程序设计如4.系统调试和问题解决
添加联系人的程序设计:
if(txtName.Text.Trim()!
="")
{
if(mtxtPhone.Text.Trim()!
="")
{
if(mtxtPhone.Text.Trim().Length==11)
{
if(pictureBox1.Image!
=null)
{
stringFriSex="";
if(optMale.Checked)
{
FriSex="男";
}
if(optFemale.Checked)
{
FriSex="女";
}
stringsql="insertintoFriInfo(本人,姓名,性别,出生日期,电话,QQ,籍贯,邮箱,头像)Values('"+frmLogin.username+"','"
+txtName.Text.Trim().ToLower()+"','"+FriSex+"','"+dateTimePicker1.Value+"','"
+mtxtPhone.Text+"','"+txtQq.Text+"','"+comboBox1.SelectedItem+"','"+txtYxiang.Text+"','"+newName+"')";
try
{
if(OperateDB.ExecuteNonQuery(sql)==1)
{
MessageBox.Show("添加联系人成功!
");
}
else
{
MessageBox.Show("添加联系人失败!
");
}
}
catch
{
MessageBox.Show("添加失败,不能重复记录!
");
}
}
else
{
MessageBox.Show("头像不能为空!
");
}
}
else
{
MessageBox.Show("请输入11位有效电话号码...","来自软件消息",MessageBoxButtons.OK);
}
}
else
{
MessageBox.Show("电话不能为空!
");
}
}
else
{
MessageBox.Show("姓名不能为空!
");
}
图6管理联系人
修改头像按钮的程序设计:
stringcc=String.Empty;//定义字符类型
stringdbName=String.Empty;
OpenFileDialogopen=newOpenFileDialog();//打开文件
open.Filter="图片文件(*.jpg;*.gif;*.png;*.bmp)|*.jpg;*.gif;*.png;*.bmp|所有文(*.*)|*.*";
if(open.ShowDialog()==DialogResult.OK)
{
cc=open.FileName;//
Imageimage=System.Drawing.Image.FromFile(cc);//索要打开的图像
pictureBox2.Image=image;
string[]splitName=cc.Split('.');//分割字符串,为获得扩展名做准备
stringext=splitName[splitName.Length-1];//获取文件的扩展名
if(ext=="jpg"||ext=="jpeg"||ext=="bmp"||ext=="gif"||ext=="ico"||ext=="png")
{
dbName=DateTime.Now.ToString("yyyymmddhhmmss")+"."+ext;
//给上传的图片起名字,以时间为名字
newName=AppDomain.CurrentDomain.BaseDirectory+"images\\"+dbName;//新路径即当前的相对路径\images\dbName;
File.Copy(cc,newName,true);
Imagedd=System.Drawing.Image.FromFile(newName);//复制文件到新目录
stringsql="updateFriInfoset头像='"+newName+"'whereID='"+b+"'";
SqlConnectionconn=newSqlConnection(OperateDB.ConnString);
conn.Open();
SqlCommandcmd=newSqlCommand(sql,conn);
inti=cmd.ExecuteNonQuery();
conn.Close();
BindData();
修改联系人修改按钮的程序设计:
intj=dataGridView1.SelectedRows.Count;
int[]l=newint[j];
intc;
for(c=0;c{
l[c]=dataGridView1.SelectedRows[c].Index;
}
intk=0;
while(k{
a=ds.Tables[0].Rows[l[k]][1].ToString();
b=ds.Tables[0].Rows[l[k]][0].ToString();
Imageimage=newBitmap(a);
pictureBox2.Image=image;
k++;
}
stringsql="updateFriInfoset头像='"+newName+"'whereID='"+b+"'";
SqlConnectionconn=newSqlConnection(OperateDB.ConnString);
conn.Open();
SqlCommandcmd=newSqlCommand(sql,conn);
intx=cmd.ExecuteNonQuery();
conn.Close();
BindData();
删除联系人的程序设计:
DialogResultdlResult=MessageBox.Show(this,"确定删除所选信息吗?
","来自软件消息",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if(dlResult==DialogResult.Yes)
{
intj=dataGridView1.SelectedRows.Count;
int[]m=newint[j];
inti;
for(i=0;i