一、计划做一个小学生一年级口算题卡软件,大概半小时左右完成。
二、开发
- 需求分析:作为一名一年级小学生的家长,我希望开发出一个口算题卡软件,让我的孩子能在上面练习口算题,能够自动生成一百以内正整数的加减法运算,以便减轻负担。
- 难点:自动出题、剔除掉减法结果中为负数的情况。
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;
using System.Security.AccessControl;
namespace cs_easyCalculate
{
public partial class Form1 : Form
{
// for data base
string username="", picname="",data_dir="";
DateTime starttime = System.DateTime.Now, endtime = System.DateTime.Now, middletime = System.DateTime.Now;
int useranswer=0, usetime=0;
// for fun
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
char manner=' ', current_manner=' ';
int current_countnum = 0, set_kind, set_maxnum = 0, set_countnum = 0, set_itemnum = 0;
int tmpkind = 0;
int ans_a = 0, ans_b = 0, ans_c = 0, ans_tmp = 0;
int choose_a = 0, choose_b = 0, choose_c = 0, choose_d = 0;
int result = 0, mark_right = 0, mark_error = 0, mark = 0;
public Form1()
{
InitializeComponent();
}
private void button_quit_Click(object sender, EventArgs e)
{
finishTest();
this.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 1000;
timer1.Start();
username = "同学";
userRead();
configRead();
button_back2main.Visible = false;
panel_setting.Visible = false;
panel_fun.Visible = false;
panel_logo.Visible = false;
panel_main.Visible = true;
System.GC.Collect();
}
public static bool SetFolderACL(String FolderPath, String UserName, FileSystemRights Rights, AccessControlType AllowOrDeny)
{
InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
return SetFolderACL(FolderPath, UserName, Rights, AllowOrDeny, inherits, PropagationFlags.None, AccessControlModification.Add);
}
public static bool SetFolderACL(String FolderPath, String UserName, FileSystemRights Rights, AccessControlType AllowOrDeny, InheritanceFlags Inherits, PropagationFlags PropagateToChildren, AccessControlModification AddResetOrRemove)
{
bool ret;
DirectoryInfo folder = new DirectoryInfo(FolderPath);
DirectorySecurity dSecurity = folder.GetAccessControl(AccessControlSections.All);
FileSystemAccessRule accRule = new FileSystemAccessRule(UserName, Rights, Inherits, PropagateToChildren, AllowOrDeny); dSecurity.ModifyAccessRule(AddResetOrRemove, accRule, out ret);
folder.SetAccessControl(dSecurity);
return ret;
}
private void creatDIR()
{
data_dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\易数学";
if (Directory.Exists(data_dir) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(data_dir);
}
if (Directory.Exists(data_dir+"\\用户配置文件") == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(data_dir + "\\用户配置文件");
}
}
private void button_userhead_Click(object sender, EventArgs e)
{
string fileName = "";
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择用户头像";
openFileDialog.Filter = "jpg|*.jpg|jpeg|*.jpeg";
openFileDialog.FileName = string.Empty;
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
openFileDialog.DefaultExt = "jpg";
DialogResult result = openFileDialog.ShowDialog();
fileName = openFileDialog.FileName;
if (result == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
else
{
picname = System.DateTime.Now.ToString("yyyyMMddHHmmss");
creatDIR();
if ("" != fileName)
{
File.Copy(fileName, data_dir + "\\用户配置文件" + "/" + picname + ".jpg");
}
fileName = data_dir + "\\用户配置文件" + "/" + picname + ".jpg";
Image pic = Image.FromFile(fileName);
button_userhead.BackgroundImage = new Bitmap(pic, 100, 100);
userWrite(username, picname);
}
}
private void trackBar_set03_num_Scroll(object sender, EventArgs e)
{
label__set03_numshow.Text = "(" + trackBar_set03_num.Value.ToString() + "题)";
}
private void button_self_Click(object sender, EventArgs e)
{
configRead();
panel_setting.Visible = true;
panel_main.Visible = false;
panel_fun.Visible = false;
panel_logo.Visible = false;
}
private void userWrite(string arg1, string arg2)
{
System.GC.Collect();
string arg3 = "";
if (true == button_helpmsg.Visible) { arg3="1"; } else { arg3="0"; }
creatDIR();
FileStream fs = new FileStream(data_dir + "\\用户配置文件" + "/user.ecc", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write("这是易数学的参数配置文件,请不要删除!" + Environment.NewLine);
sw.Write(arg1 + Environment.NewLine);
sw.Write(arg2 + Environment.NewLine);
sw.Write(arg3 + Environment.NewLine);
sw.Flush();
sw.Close();
fs.Close();
}
private void configWrite(string arg1, string arg2, string arg3, string arg4, string arg5)
{
System.GC.Collect();
creatDIR();
FileStream fs = new FileStream(data_dir + "" + "/ECconfig.ecc", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write("请不要删除!" + Environment.NewLine);
sw.Write(arg1 + Environment.NewLine);
sw.Write(arg2 + Environment.NewLine);
sw.Write(arg3 + Environment.NewLine);
sw.Write(arg4 + Environment.NewLine);
sw.Write(arg5 + Environment.NewLine);
sw.Flush();
sw.Close();
fs.Close();
}
private void save_setting()
{
if (radioButton_set01_1.Checked) { set_kind = 0; }
else if (radioButton_set01_2.Checked) { set_kind = 1; }
else { set_kind = 2; }
if (radioButton_set02_1.Checked) { set_maxnum = 10; }
else if (radioButton_set02_2.Checked) { set_maxnum = 100; }
else { set_maxnum = 1000; }
set_countnum = trackBar_set03_num.Value;
if (radioButton_set04_1.Checked) { set_itemnum = 2; }
else if (radioButton_set04_2.Checked) { set_itemnum = 3; }
else if (radioButton_set04_3.Checked) { set_itemnum = 4; }
else { set_itemnum = 0; }
configWrite(Convert.ToString(set_kind), Convert.ToString(set_maxnum), Convert.ToString(true==checkBox_set02.Checked?1:0), Convert.ToString(set_countnum), Convert.ToString(set_itemnum));
}
private void button_set_ok_Click(object sender, EventArgs e)
{
save_setting();
panel_setting.Visible = false;
panel_main.Visible = true;
panel_fun.Visible = false;
panel_logo.Visible = false;
}
private void button_set_cannel_Click(object sender, EventArgs e)
{
panel_setting.Visible = false;
panel_main.Visible = true;
panel_fun.Visible = false;
panel_logo.Visible = false;
}
private int singleFun(char mode, int x, int y)
{
int result = 0;
switch (mode)
{
case '+': result = x + y; current_manner = '+'; break;
case '-': result = x - y; current_manner = '-'; break;
case '*': result = x * y; current_manner = '*'; break;
case '/':
if (0 != y)
{
if (0 == x % y) { result = x / y; current_manner = '/'; }
else { result = set_maxnum + 1; }
}
else { result = set_maxnum + 1; }
break;
case '1':
switch (ra.Next(0, 999) % 2)
{
case 0: result = singleFun('+', x, y); break;
case 1: result = singleFun('-', x, y); break;
default: break;
}
break;
case '2':
switch (ra.Next(0, 999) % 5)
{
case 0: result = singleFun('*', x, y); break;
case 1: result = singleFun('*', x, y); break;
case 2: result = singleFun('/', x, y); break;
case 3: result = singleFun('/', x, y); break;
case 4: result = singleFun('/', x, y); break;
default: break;
}
break;
case '3':
switch (ra.Next(0, 999) % 5)
{
case 0: result = singleFun('+', x, y); break;
case 1: result = singleFun('-', x, y); break;
case 2: result = singleFun('*', x, y); break;
case 3: result = singleFun('/', x, y); break;
case 4: result = singleFun('/', x, y); break;
default: break;
}
break;
default: result = singleFun('3', x, y); break;
}
return result;
}
private string whichFun()
{
switch (current_manner)
{
case '+': return "+";
case '-': return "-";
case '*': return "×";
case '/': return "÷";
default: return "error";
}
}
private void finishTest()
{
button_breaktest.Visible = false;
label_fun_title.Text = "本次练习结束咯!";
if (0 == (mark_right + mark_error)) {
label_fun_content.Text = "您还一题都没有做呢!再见咯!";
}
else {
mark = mark_right * 100 / (mark_right + mark_error);
label_fun_content.Text = "你做对了" + mark_right + "题,错了" + mark_error + "题,得分" + Convert.ToString(mark) + "分!";
}
panel_logo.Visible = false;
button_back2main.Visible = true;
TimeSpan ts = endtime - starttime;
usetime = Convert.ToInt32(ts.TotalSeconds);
saveHtmlEnd();
}
private void Fun()
{
try
{
if (current_countnum <= set_countnum) { label_fun_title.Text = "第" + current_countnum + "题/共" + set_countnum + "题"; }
else
{
finishTest();
return;
}
string tmp1 = "", tmp2 = "", tmp = "", aa = "", bb = "", cc = "", dd = "";
char tmpf1 = '0', tmpf2 = '0';
int min_value = 0, itemnum = 0, k = 0, ab = 0, abc = 0, cd = 0, a = 0, b = 0, c = 0, d = 0;
if (checkBox_set02.Checked) { min_value = 0 - set_maxnum; } else { min_value = 0; }
if (0 == set_itemnum) { itemnum = ra.Next(0, 999) % 3 + 2; } else { itemnum = set_itemnum; }
switch (itemnum)
{
case 3:
abc = set_maxnum + 1;
while (abc < min_value || abc > set_maxnum)
{
ab = set_maxnum + 1;
while (ab < min_value || ab > set_maxnum)
{
a = ra.Next(1, set_maxnum / 2);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { a = -a; } }
b = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { b = -b; } }
if (b != 0) { if (0 == current_countnum % 2 && (2 <= set_maxnum / b)) { a = b * ra.Next(2, set_maxnum / b); } }
ab = singleFun(manner, a, b);
tmpf1 = current_manner;
if (a < 0) { aa = "(" + Convert.ToString(a) + ")"; } else { aa = Convert.ToString(a); }
if (b < 0) { bb = "(" + Convert.ToString(b) + ")"; } else { bb = Convert.ToString(b); }
tmp1 = aa + whichFun() + bb;
}
c = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { c = -c; } }
abc = singleFun(manner, ab, c);
k = ra.Next(0, 999);
if (c < 0) { cc = "(" + Convert.ToString(c) + ")"; } else { cc = Convert.ToString(c); }
if ('-' == current_manner || '/' == current_manner || 1 == k % 2)
{
if ('*' == current_manner || '/' == current_manner)
{
tmp1 = "(" + tmp1 + ")";
}
tmp = tmp1 + whichFun() + cc;
}
else
{
tmp1 = "(" + tmp1 + ")";
tmp = cc + whichFun() + tmp1;
}
result = abc;
}
break;
case 4:
k = ra.Next(0, 999);
if (0 == k % 2)
{
result = set_maxnum + 1;
while (result < min_value || result > set_maxnum)
{
ab = set_maxnum + 1;
while (ab < min_value || ab > set_maxnum)
{
a = ra.Next(1, set_maxnum / 2);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { a = -a; } }
b = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { b = -b; } }
if (b != 0) { if (0 == current_countnum % 2 && (2 <= set_maxnum / b)) { a = b * ra.Next(2, set_maxnum / b); } }
ab = singleFun(manner, a, b);
tmpf1 = current_manner;
if (a < 0) { aa = "(" + Convert.ToString(a) + ")"; } else { aa = Convert.ToString(a); }
if (b < 0) { bb = "(" + Convert.ToString(b) + ")"; } else { bb = Convert.ToString(b); }
tmp1 = aa + whichFun() + bb;
}
cd = set_maxnum + 1;
while (cd < min_value || cd > set_maxnum)
{
c = ra.Next(1, set_maxnum / 2);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { c = -c; } }
d = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { d = -d; } }
if (d != 0) { if (1 == current_countnum % 2 && (2 <= set_maxnum / d)) { c = d * ra.Next(2, set_maxnum / d); } }
cd = singleFun(manner, c, d);
if (c < 0) { cc = "(" + Convert.ToString(c) + ")"; } else { cc = Convert.ToString(c); }
if (d < 0) { dd = "(" + Convert.ToString(d) + ")"; } else { dd = Convert.ToString(d); }
tmp2 = cc + whichFun() + dd;
}
result = singleFun(manner, ab, cd);
if ('+' == tmpf1 || '-' == tmpf1)
{
tmp1 = "(" + tmp1 + ")";
}
tmp2 = "(" + tmp2 + ")";
tmp = tmp1 + whichFun() + tmp2;
}
}
else if (1 == k % 2)
{
result = set_maxnum + 1;
while (result < min_value || result > set_maxnum)
{
abc = set_maxnum + 1;
while (abc < min_value || abc > set_maxnum)
{
ab = set_maxnum + 1;
while (ab < min_value || ab > set_maxnum)
{
a = ra.Next(1, set_maxnum / 2);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { a = -a; } }
b = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { b = -b; } }
if (b != 0) { if (0 == current_countnum % 3 && (2 <= set_maxnum / b)) { a = b * ra.Next(2, set_maxnum / b); } }
ab = singleFun(manner, a, b);
tmpf1 = current_manner;
if (a < 0) { aa = "(" + Convert.ToString(a) + ")"; } else { aa = Convert.ToString(a); }
if (b < 0) { bb = "(" + Convert.ToString(b) + ")"; } else { bb = Convert.ToString(b); }
tmp1 = aa + whichFun() + bb;
}
c = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { c = -c; } }
abc = singleFun(manner, ab, c);
tmpf2 = current_manner;
k = ra.Next(0, 999);
if (c < 0) { cc = "(" + Convert.ToString(c) + ")"; } else { cc = Convert.ToString(c); }
if ('-' == current_manner || '/' == current_manner || 1 == k % 2)
{
if ('*' == current_manner || '/' == current_manner)
{
tmp1 = "(" + tmp1 + ")";
}
tmp2 = tmp1 + whichFun() + cc;
}
else
{
tmp1 = "(" + tmp1 + ")";
tmp2 = cc + whichFun() + tmp1;
}
}
d = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { d = -d; } }
result = singleFun(manner, abc, d);
k = ra.Next(0, 999);
if (d < 0) { dd = "(" + Convert.ToString(d) + ")"; } else { dd = Convert.ToString(d); }
if ('-' == current_manner || '/' == current_manner || 1 == k % 2)
{
if ('*' == current_manner || '/' == current_manner)
{
tmp2 = "(" + tmp2 + ")";
}
tmp = tmp2 + whichFun() + dd;
}
else
{
tmp2 = "(" + tmp2 + ")";
tmp = dd + whichFun() + tmp2;
}
}
}
break;
default:
ab = set_maxnum + 1;
while (ab < min_value || ab > set_maxnum)
{
a = ra.Next(1, set_maxnum);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { a = -a; } }
b = ra.Next(1, set_maxnum / 2);
if (checkBox_set02.Checked) { if (0 == ra.Next(1, 999) % 2) { b = -b; } }
if (b != 0) { if (0 == current_countnum % 2 && (2 <= set_maxnum / b)) { a = b * ra.Next(2, set_maxnum / b); } }
ab = singleFun(manner, a, b);
if (a < 0) { aa = "(" + Convert.ToString(a) + ")"; } else { aa = Convert.ToString(a); }
if (b < 0) { bb = "(" + Convert.ToString(b) + ")"; } else { bb = Convert.ToString(b); }
tmp = aa + whichFun() + bb;
result = ab;
}
break;
}
current_countnum++;
tmp = tmp + "=";
////label_fun_content.Text = tmp + result;
label_fun_content.Text = tmp;
if (2 == set_kind)
{
if (0 == ra.Next(1, 999) % 2) { tmpkind = 0; } else { tmpkind = 1; }
}
else { tmpkind = set_kind; }
if (0 == tmpkind)
{
ans_a = 0; ans_b = 0; ans_c = 0; ans_tmp = 0;
while (0 == ans_a || ans_a == result)
{
switch (ra.Next(min_value, set_maxnum) % 4)
{
case 0: if ((result + 1) >= min_value && (result + 1) <= set_maxnum) { ans_a = result + 1; } else { ans_a = ra.Next(min_value, set_maxnum); } break;
case 1: if ((result - 1) >= min_value && (result - 1) <= set_maxnum) { ans_a = result - 1; } else { ans_a = ra.Next(min_value, set_maxnum); } break;
case 2: if ((result + 10) >= min_value && (result + 10) <= set_maxnum) { ans_a = result + 10; } else { ans_a = ra.Next(min_value, set_maxnum); } break;
case 3: if ((result - 10) >= min_value && (result - 10) <= set_maxnum) { ans_a = result - 10; } else { ans_a = ra.Next(min_value, set_maxnum); } break;
}
}
while (0 == ans_b || ans_b == ans_a || ans_b == result)
{
switch (ra.Next(min_value, set_maxnum) % 4)
{
case 0: if ((result * 2) >= min_value && (result * 2) <= set_maxnum) { ans_b = result * 2; } else { ans_b = ra.Next(min_value, set_maxnum); } break;
case 1: if ((result * 3) >= min_value && (result * 3) <= set_maxnum) { ans_b = result * 3; } else { ans_b = ra.Next(min_value, set_maxnum); } break;
case 2: if ((result * 4) >= min_value && (result * 4) <= set_maxnum) { ans_b = result * 4; } else { ans_b = ra.Next(min_value, set_maxnum); } break;
case 3: if ((result * (-1)) >= min_value && (result * (-1)) <= set_maxnum) { ans_b = result * (-1); } else { ans_b = ra.Next(min_value, set_maxnum); } break;
}
}
while (0 == ans_c || ans_c == ans_a || ans_c == ans_b || ans_c == result)
{
switch (ra.Next(min_value, set_maxnum) % 4)
{
case 0: if ((result * 5) >= min_value && (result * 5) <= set_maxnum) { ans_c = result * 5; } else { ans_c = ra.Next(min_value, set_maxnum); } break;
case 1: if ((result - 20) >= min_value && (result - 20) <= set_maxnum) { ans_c = result - 20; } else { ans_c = ra.Next(min_value, set_maxnum); } break;
case 2: if ((result + 20) >= min_value && (result + 20) <= set_maxnum) { ans_c = result + 20; } else { ans_c = ra.Next(min_value, set_maxnum); } break;
case 3: if ((result * (-2)) >= min_value && (result * (-2)) <= set_maxnum) { ans_c = result * (-2); } else { ans_c = ra.Next(min_value, set_maxnum); } break;
}
}
int[] num = new int[] { 0, 0, 0, 0 };
num[0] = ans_a; num[1] = ans_b; num[2] = ans_c; num[3] = result;
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 3 - j; i++)
{
if (num[i] > num[i + 1]) { ans_tmp = num[i]; num[i] = num[i + 1]; num[i + 1] = ans_tmp; }
}
}
choose_a = num[0]; button_choose01.Text = Convert.ToString(choose_a);
choose_b = num[1]; button_choose02.Text = Convert.ToString(choose_b);
choose_c = num[2]; button_choose03.Text = Convert.ToString(choose_c);
choose_d = num[3]; button_choose04.Text = Convert.ToString(choose_d);
button_choose01.Visible = true;
button_choose02.Visible = true;
button_choose03.Visible = true;
button_choose04.Visible = true;
textBox_choose.Visible = false;
button_chooseOK.Visible = false;
}
else
{
button_choose01.Visible = false;
button_choose02.Visible = false;
button_choose03.Visible = false;
button_choose04.Visible = false;
textBox_choose.Visible = true;
button_chooseOK.Visible = true;
}
}
catch { MessageBox.Show("抱歉,出了一些小小的问题,我们为您跳到了下一题!");}
return;
}
private void start_test()
{
System.GC.Collect();
timercount = 0;
button_timer.Text = "累计用时:" + timercount.ToString() + "秒";
button_breaktest.Visible = true;
starttime = System.DateTime.Now;
endtime = System.DateTime.Now;
middletime = System.DateTime.Now;
saveHtmlHead();
mark = 0; mark_right = 0; mark_error = 0;
panel_fun.Visible = true;
panel_main.Visible = false;
panel_setting.Visible = false;
panel_logo.Visible = true;
current_countnum = 1;
Fun();
}
private void button_add_Click(object sender, EventArgs e)
{
manner = '+';
start_test();
}
private void button_min_Click(object sender, EventArgs e)
{
manner = '-';
start_test();
}
private void button_mul_Click(object sender, EventArgs e)
{
manner = '*';
start_test();
}
private void button_div_Click(object sender, EventArgs e)
{
manner = '/';
start_test();
}
private void button_am_Click(object sender, EventArgs e)
{
manner = '1';
start_test();
}
private void button_md_Click(object sender, EventArgs e)
{
manner = '2';
start_test();
}
private void button_ammd_Click(object sender, EventArgs e)
{
manner = '3';
start_test();
}
private void choose_answer()
{
System.GC.Collect();
if (useranswer == result) { mark_right++; } else { mark_error++; }
endtime = System.DateTime.Now;
TimeSpan ts = System.DateTime.Now - middletime;
usetime = Convert.ToInt32(ts.TotalSeconds);
saveHistoryData(label_fun_content.Text, useranswer, result, current_countnum, usetime);
middletime = System.DateTime.Now;
Fun();
}
private void button_choose01_Click(object sender, EventArgs e)
{
useranswer = choose_a;
choose_answer();
}
private void button_choose02_Click(object sender, EventArgs e)
{
useranswer = choose_b;
choose_answer();
}
private void button_choose03_Click(object sender, EventArgs e)
{
useranswer = choose_c;
choose_answer();
}
private void button_choose04_Click(object sender, EventArgs e)
{
useranswer = choose_d;
choose_answer();
}
private void button_chooseOK_Click(object sender, EventArgs e)
{
try { useranswer = Convert.ToInt32(textBox_choose.Text); }
catch { MessageBox.Show("输入答案的格式不正确!"); return; }
choose_answer();
textBox_choose.Text = "";
}
private void button_back2main_Click(object sender, EventArgs e)
{
string title = username + " " + starttime.ToString("yyyy年MM月dd日 HH时mm分ss秒 练习记录");
string filePath = data_dir + "/" + title + ".html";
System.Diagnostics.Process.Start(filePath);
button_back2main.Visible = false;
panel_setting.Visible = false;
panel_main.Visible = true;
panel_fun.Visible = false;
panel_logo.Visible = false;
}
private void button_history_Click(object sender, EventArgs e)
{
creatDIR();
System.Diagnostics.Process.Start("explorer.exe", data_dir);
}
private void userRead()
{
textBox_setname.Visible = false;
button_setname.Visible = false;
button_welcome.Visible = true;
creatDIR();
try
{
FileStream fs = File.Open(data_dir + "\\用户配置文件" + "/user.ecc", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
String line;
int i = 0;
while ((line = sr.ReadLine()) != null)
{
switch (i)
{
case 1: username = line.ToString(); break;
case 2: picname = line.ToString(); break;
case 3: if ("0" == line.ToString()) { button_helpmsg.Visible = false; } else { button_helpmsg.Visible = true; } break;
default: break;
}
i++;
}
fs.Close();
}
catch { }
try
{
Image pic = Image.FromFile(data_dir + "\\用户配置文件" + "/" + picname + ".jpg");
button_userhead.BackgroundImage = new Bitmap(pic, 100, 100);
}
catch { }
button_welcome.Text = "亲爱的" + username + ",欢迎您!";
try
{
string[] strFiles = Directory.GetFiles(data_dir + "\\用户配置文件");
foreach (string strFile in strFiles)
{
if ("jpg" == strFile.Substring(strFile.Length - 3, 3) || "jpeg" == strFile.Substring(strFile.Length - 4, 4)
|| "JPG" == strFile.Substring(strFile.Length - 3, 3) || "JPEG" == strFile.Substring(strFile.Length - 4, 4))
{
if (strFile == data_dir + "\\用户配置文件" + "/" + picname + ".jpg" || strFile == data_dir + "\\用户配置文件" + "/" + picname + ".jpg"
|| strFile == picname + ".JPG" || strFile == picname + ".JPEG") { }
else { File.Delete(strFile); }
}
}
}
catch { }
}
private void configRead()
{
set_kind = 0; set_maxnum = 0; set_countnum = 0; set_itemnum = 0;
try
{
creatDIR();
FileStream fs = File.Open(data_dir + "\\用户配置文件" + "/ECconfig.ecc", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
String line;
int i = 0;
while ((line = sr.ReadLine()) != null)
{
switch (i)
{
case 1: set_kind=Convert.ToInt32(line.ToString()); break;
case 2: set_maxnum = Convert.ToInt32(line.ToString()); break;
case 3: if (1 == Convert.ToInt32(line.ToString())) { checkBox_set02.Checked = true; } else { checkBox_set02.Checked = false; } break;
case 4: set_countnum = Convert.ToInt32(line.ToString()); break;
case 5: set_itemnum = Convert.ToInt32(line.ToString()); break;
default: break;
}
i++;
}
fs.Close();
}
catch
{
set_kind = 0; set_maxnum = 10; set_countnum = 10; set_itemnum = 2;
save_setting();
}
switch (set_kind)
{
case 0:radioButton_set01_1.Checked=true;break;
case 1:radioButton_set01_2.Checked=true;break;
case 2:radioButton_set01_3.Checked=true;break;
default:radioButton_set01_1.Checked=true;break;
}
switch (set_maxnum)
{
case 10:radioButton_set02_1.Checked=true;break;
case 100:radioButton_set02_2.Checked=true;break;
case 1000:radioButton_set02_3.Checked=true;break;
default:radioButton_set02_1.Checked=true;break;
}
if (set_countnum >= 5 && set_countnum <= 200) { trackBar_set03_num.Value = set_countnum; }
label__set03_numshow.Text = "(" + trackBar_set03_num.Value.ToString() + "题)";
switch (set_itemnum)
{
case 2: radioButton_set04_1.Checked = true; break;
case 3: radioButton_set04_2.Checked = true; break;
case 4: radioButton_set04_3.Checked = true; break;
case 0: radioButton_set04_4.Checked = true; break;
default: radioButton_set04_1.Checked = true; break;
}
}
private void button_breaktest_Click(object sender, EventArgs e)
{
finishTest();
return;
}
private void saveHtmlHead()
{
creatDIR();
FileStream fs = null;
string title = username + " "+starttime.ToString("yyyy年MM月dd日 HH时mm分ss秒 练习记录");
string filePath = data_dir + "/" + title + ".html";
Encoding encoder = Encoding.UTF8;
string str1 = "", str2, str3,str4;
switch (set_kind)
{
case 0: str1 = "全为选择题 "; break;
case 1: str1 = "全为填空题 "; break;
default: str1 = "选择加填空 "; break;
}
switch (set_maxnum)
{
case 10: str2 = "10以内 "; break;
case 100: str2 = "100以内 "; break;
default: str2 = "1000以内 "; break;
}
if (true == checkBox_set02.Checked) { str3 = "允许负数 "; } else { str3 = "没有负数 "; }
switch (set_itemnum)
{
case 2: str4 = "2个数字 "; break;
case 3: str4 = "3个数字 "; break;
case 4: str4 = "4个数字 "; break;
default: str4 = "数字个数随机 "; break;
}
string content = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /><title>" +
title + "</title></head><body>" + title + "<br />"+str1+str2+str3+str4+"共"+Convert.ToInt32( set_countnum)+"题"+
"<hr />";
byte[] bytes = encoder.GetBytes(content);
try
{
fs = File.OpenWrite(filePath);
fs.Position = fs.Length;
fs.Write(bytes, 0, bytes.Length);
}
catch
{
//label_notice.Text = "创建当前题目记录失败!" + System.DateTime.Now.ToString("(HH:mm:ss)");
}
fs.Close();
return;
}
private void saveHtmlEnd()
{
if (panel_fun.Visible == false) { return; }
string title = username + " " + starttime.ToString("yyyy年MM月dd日 HH时mm分ss秒 练习记录");
string filePath = data_dir + "/" + title + ".html";
Encoding encoder = Encoding.UTF8;
string content = "<hr />" + label_fun_content.Text + " (累计用时:" + usetime + "秒)</body></html>";
byte[] bytes = encoder.GetBytes(content);
try
{
FileStream fs = null;
fs = File.OpenWrite(filePath);
//设定书写的开始位置为文件的末尾
fs.Position = fs.Length;
//将待写入内容追加到文件末尾
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
catch
{
//label_notice.Text = "结束当前题目记录失败!" + System.DateTime.Now.ToString("(HH:mm:ss)");
}
return;
}
private void saveHistoryData(string question,int useranswer,int rightanswer,int count,int usetime)
{
FileStream fs = null;
string title = username + " " + starttime.ToString("yyyy年MM月dd日 HH时mm分ss秒 练习记录");
string filePath = data_dir + "/" + title + ".html";
Encoding encoder = Encoding.UTF8;
string str;
if (0 == tmpkind) { str = "【选择题】"; } else { str = "【填空题】"; }
string content = str + "第" + Convert.ToString(count - 1) + "题: \t" + question + Convert.ToString(rightanswer) + "\t";
if (useranswer == rightanswer)
{
content = content + "(√)";
}
else
{
content = content + " 【你的答案:"+useranswer+"】(×)";
}
content = content + " [ 用时"+usetime+"秒 ]<br />";
byte[] bytes = encoder.GetBytes(content);
try
{
fs = File.OpenWrite(filePath);
//设定书写的开始位置为文件的末尾
fs.Position = fs.Length;
//将待写入内容追加到文件末尾
fs.Write(bytes, 0, bytes.Length);
}
catch
{
//label_notice.Text = "保存当前题目记录失败!" + System.DateTime.Now.ToString("(HH:mm:ss)");
}
fs.Close();
return;
}
private void button_welcome_Click(object sender, EventArgs e)
{
textBox_setname.Text = username;
button_welcome.Visible = false;
textBox_setname.Visible = true;
button_setname.Visible = true;
}
private void button_setname_Click(object sender, EventArgs e)
{
if (textBox_setname.Text.Length < 2) { textBox_setname.Text = "同学"; return; }
username = textBox_setname.Text;
button_welcome.Text = "亲爱的"+username+",欢迎您!";
button_welcome.Visible = true;
textBox_setname.Visible = false;
button_setname.Visible = false;
userWrite(username, picname);
}
int timercount = 0;
private void timer1_Tick(object sender, EventArgs e)
{
timercount++;
button_timer.Text = "累计用时:"+timercount.ToString()+"秒";
}
private void button_help_Click(object sender, EventArgs e)
{
button_helpmsg.Visible = true;
userWrite(username, picname);
}
private void button_helpmsg_Click(object sender, EventArgs e)
{
button_helpmsg.Visible = false;
userWrite(username, picname);
}
}
}
| 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|
| 计划 | 120 | 180 |
| 开发 | 60 | 90 |
| 需求分析 (包括学习新技术) | 20 | 10 |
| · 生成设计文档 | 15 | 10 |
| · 设计复审 (和同事审核设计文档) | 20 | 10 |
| 代码规范 (为目前的开发制定合适的规范) | 10 | 1 |
| 具体设计 | 20 | 20 |
| 具体编码 | 40 | 60 |
| · 代码复审 | 5 | 10 |
| · 测试(自我测试,修改代码,提交修改) | 15 | 2 |
| 报告 | 20 | 20 |
| · 测试报告 | 5 | 5 |
| 计算工作量 | 5 | 5 |
| · 事后总结 ,并提出过程改进计划 | 10 | 10 |
总结:在这次的个人项目开发中,完成了项目基本的需求,在与开发过程中和组员并有着积极的交流。
但有些地方还是很生疏,需要勤加练习。
浙公网安备 33010602011771号