}
(2)退回此界面按钮代码的实现:
private void button1_Click(object sender, EventArgs e) { this.Close(); } (3)删除通讯录按钮代码的实现:
private void button4_Cl ick(object sender, EventArgs e)
{string name = dataGridView1.SelectedCells[0] .Value.ToString();
string phone = dataGridView1.SelectedCells [1].Value.ToString();
string zhuzhi = dataGridView1.SelectedCells [2].Value.ToString();
string leixing = dataGridView1.SelectedCells [3].Value.ToString();
string connstr = \Source=(local);Initial Catalog=Message;Integrated Security=True\; SqlConnection con = new SqlConnection (connstr); con.Open();
string str = \from 个人通讯录 where 姓名='\+name+\电话='\+phone+\住址='\+zhuzhi+\类型='\+leixing+\; if(MessageBox.Show(\你确定要删除此信息吗?\,\提示\,MessageBoxButtons.YesNo)==、DialogResult.Yes)
{SqlCommand comm = new SqlCommand(str,con); comm.ExecuteNonQuery(); }
MessageBox.Show(\删除通讯录成功\,\提示\); foreach (DataGridViewRow r in dataGridView1. SelectedRows) { if (!r.IsNewRow)
{dataGridView1.Rows.Remove(r);} } con.Close();
}
(4)修改个人通讯录按钮的代码实现: private void button3_Click(object sender, EventArgs e)
{string name = dataGridView1.SelectedCells、[0].Value.ToString();
string phone = dataGridView1.SelectedCells [1].Value.ToString();
string zhuzhi = dataGridView1.SelectedCells [2].Value.ToString();
string leixing = dataGridView1.SelectedCells [3].Value.ToString();
string connstr = \Source=(local);Initial Catalog=Message;Integrated Security=True\; SqlConnection con = new SqlConnection (connstr); con.Open(); SqlDataAdapter sda1, sda2;
string str1 = \个人通讯录\; string str2 = \个人通讯录 set 姓名='\ + name + \电话='\ + phone + \住址='\ + zhuzhi + \类型='\ + leixing + \姓名='\ +name+ \;
sda1 = new SqlDataAdapter(str1, con); sda2 = new SqlDataAdapter(str2, con); SqlCommandBuilder scd1 = newSqlCommandBuilder (sda1);
SqlCommandBuilder scd2 = newSqlCommandBuilder (sda2);
DataSet ds1 = new DataSet(); sda1.Fill(ds1, \); DataSet ds2 = new DataSet(); sda2.Fill(ds2, \);
if (MessageBox.Show(\你确定要修改此信息吗\, \提示\, MessageBoxButtons.YesNo) ==
DialogResult.Yes)
{sda2.Update(ds1.Tables[\]);} else return;
MessageBox.Show(\删除成功!\,\提示\); con.Close(); }
个人风采界面的实现如下图4-11所示:
图4-11 个人风采界面实现
(1)显示个人风采按钮代码的实现:
private void button24_Click(object sender, EventArgs e)
{ timer2.Enabled = true; } (2)实现照片的更换代码实现:
private void timer2_Tick(object sender, EventArgs e)
{ count = fengcai.Images.Count;
pbzhaopian.Image = fengcai.Images[i]; i++;
if (i == count) i = 0; }
(3)实现文件的上传按钮代码的实现: private void button25_Click(object sender,
EventArgs e)
{count=fengcai.Images.Count;
OpenFileDialog of = new OpenFileDialog(); of.Filter = \;
if (DialogResult.OK == of.ShowDialog()) { string name = of.FileName; try
{ pbzhaopian.Image = Image.FromFile(@name); fengcai.Images.Add(Image.FromFile(@name)); }
catch (Exception ed)
{ MessageBox.Show(ed.Message); return; } MessageBox.Show(\照片添加成功\); }
第5章 系统使用说明
1.系统名称:个人信息管理系统 2.系统拥有的界面如下所示: (1) 登录系统 (2) 个人备忘录 (3) 个人理财 (4) 个人通讯录 (5) 个人风采 (6) 修改密码 (7) 修改备忘录 (8) 查询个人理财 (9) 修改个人理财 (10)理财总计模块 (11)查询个人通讯录 3.界面实现说明:
(1)登陆界面的实现:用户在使用此系统时必须输入正确的用户名和密码,如果输入出现错误就会有提示。同时也可以在对用户名和密码输入正确的前提下对密码进行修改。 (2)个人备忘录界面的实现:它包括对备忘录的添加,在添加时创建时间不用输入,系统会提取当前时间把它存入数据库。提醒时间格式必须正确,如输入错误,就会有提示。同时本系统可以按查询条件对备忘录的查询。除此之外,还可以实现对备忘录的修改,它包括对备忘录进行修改和删除。
(3) 个人理财界面的实现:基本功能同个人备忘录界面界面的实现,同时他可以实现碎总计,转到理财总计界面。
(4) 个人通讯录界面的实现:功能同个人备忘录。
(5) 个人风采界面的实现:可以实现照片的显示,照片的更换时间为1.5秒。同时他可以实现对照片的上传。
(6) 修改密码界面的实现:在原密码输入正确的前提下,输入要更改的密码两次,若两次输入的密码相同,则对密码进行修改。
(10) 修改备忘录界面的实现:可以按照备忘录的标题实现对备忘录的多项目的修改。除
此之外还可以实现按照输入的多个条件对备忘录的进行删除
(11) 查询个人理财界面的实现:按所输入的条件对个人理财信息的查询。 (12) 修改个人理财界面的实现:同修改备忘录界面的实现。
(10)理财总计模块模块的实现:可以按照输入的时间范围对理财进行统计,包括收入总计、支出总计和合计。
(11)查询个人通讯录界面的实现:可以按照输入的条件实现对通讯录的查询。同时也可以在查询出来的表上进行修改和删除。
36
第6章 课程设计总结
6.1 主要问题及解决办法
在上机测试之前我们对所编的程序作了纸面上的检查,先消灭一些低级错误,所谓的低级错误是指由于人为的输入不仔细等造成的,如{ }没有搭配完整,漏写 ,拼写错误等,这些都是我们通过认真的态度在运行之前可以解决、避免的。而且还可以减少机器时间。往往一连串的错误是由于漏写或写错一个字符引起的。
经过仔细检查之后进行上机调试。进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译??如此反复,直到顺利通过编译和连接为止。在本次实习过程中碰到的编译、连接的错误主要有: 1、 缺少变量定义,定义位置不正确;
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我们后来还是用不同的变量名来表示,结果引起的那些错误解决了。 2、 语法错误;
大多的语法错误在通过书本参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。这些语法错误有信息框的提示一般是能够排除的。
3、 在本次调试过程中我们还碰到了一些以前上机过程中从未碰到过的错误。
用“\\\\”才能最后输出一个引号; 还有是在注释的时候不能同我们平常做笔记一样随心所欲,爱写哪就写哪,这造成我们最后本来已经编译成功的程序一下子又多了很多错误。注释的时候,注释文字应写在一起中间不能有中断包含了c#语言的语句,不然又引起错误格式不正确或是多了字符等。这又让我们学到了一点知识。
编译、连接的成功并不意味着程序的最终成功。逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。这种错误的查找是最难的,需要编程序的人有相当的耐心和
37
细心去把问题找出来。这也是本次程序编辑过程中碰到的最大的难题。往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个writeline语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的writeline都删去。若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。如此循环往复,直到最后程序运行成功。在本次程序编辑过程中,我们就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,我怀疑是哪个对方对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了writeline语句用来显示n的变化,例如在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。所以到最后我们找到了错误,及时改正,终于把程序完成了,一切功能显示正常。 6.2 课程设计体会
编程看起来似乎是一件很枯燥、乏味的事情,但是经历了这次大程序的编辑之后,发现其实里面还是充满乐趣的,一旦真的钻研下去什么事情都可以放下,来认真研究。本来大家都认为花两周的时间来编一个大作业未免太浪费时间了,但是事实证明两周的时间只有真正利用起来才能做出优秀的作业。
虽然本程序运用的函数不多,再编写过程中也出现这样那样的错误,但是最终我们还是说服了自己坚持了下来,看到自己最后的作业,虽然不是很优秀,但是还是很自豪。
总之,编程尤其是调试是一项细致深入的工作,需要下工夫、动脑子、善于积累经验,这往往能反映出一个人的水平、经验和科学态度。
在编写程序的过程中,我们得到了老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢!` 6.3 自我评定
课程设计完成之际,我由衷地感谢指导老师的大力帮助和支持,感谢我的同学与朋友,在我遇到各种各样复杂问题的时候,给与我鼓励和帮助,使我的分析问题和解决问题能力有了很大的提高。