![](http://hi.csdn.net/attachment/201108/3/0_13123393535Y8B.gif)
namespace 在线考试系统
{
public partial class print : Form
{
string department=MainFrm.department;
public print()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnPrint_Click(object sender, EventArgs e)
{
if (txtSingle.Text == "" || txtMulti.Text == "" || txtExamName.Text == "")
{
MessageBox.Show("请将信息填写完整");
}
else
{
if (Regex.IsMatch(txtSingle.Text, "^[0-9]*[1-9][0-9]*$") && Regex.IsMatch(txtMulti.Text, "^[0-9]*[1-9][0-9]*$"))
{
int single = Convert.ToInt32(txtSingle.Text.Trim());
int multi = Convert.ToInt32(txtMulti.Text.Trim());
if (single > 60 || single < 1)
{
MessageBox.Show("输入的单选题个数不合理");
txtSingle.Text = "";
}
else
{
if (multi > 30 || multi < 0)
{
MessageBox.Show("你输入的多选题个数不合理");
txtMulti.Text = "";
}
else
{
//将内容输出到word文档中
object oMissing = System.Reflection.Missing.Value;
//创建一个Word应用程序实例
Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
//设置为不可见
oWord.Visible = false;
//模板文件地址,这里假设在X盘根目录
object oTemplate = "D:\\exam.dotx";//2007版本
//以模板为基础生成文档
Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
//声明书签数组
//object[] oBookMark = new object[5];
//赋值书签名
object[] oBookMark = new object[3];
oBookMark[0] = "title";
oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = txtExamName.Text;
oBookMark[1] = "single";
oBookMark[2] = "multi";
//赋值任意数据到书签的位置
SqlDataReader sda = BaseClass.DataReader("select top " + single + " * from T_TE_Question where questiontype='False' and department='" + department + "'order by newid()");
SqlDataReader sdamulti = BaseClass.DataReader("select top " + multi + " * from T_TE_Question where questiontype='True' and department='" + department + "'order by newid()");
string[] strs = new string[4];
// SqlDataReader reader = BaseClass.DataReader("SELECT dbo.T_TE_User.username,dbo.T_TE_Result.marks FROM dbo.T_TE_Exam INNER JOIN dbo.T_TE_Result ON dbo.T_TE_Exam.examno = dbo.T_TE_Result.examno INNER JOIN dbo.T_TE_User ON dbo.T_TE_Result.userno = dbo.T_TE_User.userno where T_TE_Exam.examname='"+examnameComboBox.Text+"' order by dbo.T_TE_User.userno desc ");
while (sda.Read())
{
strs = sda.GetValue(2).ToString().Split('_');
oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = single.ToString() + "、" + sda.GetValue(1).ToString() + "\n" + "A: " + strs[0].Trim() + "\n" + "B: " + strs[1].Trim() + "\n" + "C: " + strs[2].Trim() + "\n" + "D: " + strs[3].Trim() + "\n\n";
single--;
}
while (sdamulti.Read())
{
strs = sdamulti.GetValue(2).ToString().Split('_');
oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = multi.ToString() + "、" + sdamulti.GetValue(1).ToString() + "\n" + "A: " + strs[0].Trim() + "\n" + "B: " + strs[1].Trim() + "\n" + "C: " + strs[2].Trim() + "\n" + "D: " + strs[3].Trim() + "\n\n";
multi--;
}
//弹出保存文件对话框,保存生成的Word
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Word Document(*.doc)|*.doc";
sfd.DefaultExt = "Word Document(*.doc)|*.doc";
if (sfd.ShowDialog() == DialogResult.OK)
{
object filename = sfd.FileName;
oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
//关闭word
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
}
}
MessageBox.Show("导出成功!!");
}
}
else
{
MessageBox.Show("请输入正整数");
txtSingle.Text = "";
txtMulti.Text = "";
}
}
}
}
}
感觉做的很粗糙。。。
生成的word文档
考试标题:C#测试一
一、单选题
1、以下说法正确的是()
A: 一个委托在某一时刻可以指向多个方法
B: 一个委托在某一时刻不可以指向多个方法
C: 一个委托在某一时刻只能指向多个方法
D: 一个委托在某一时刻可以指向多个事件
2、在C#中,下列关于程序的各种错误,说法错误的是( )
A: 只通过调试无法确保程序运行完全正常
B: 通过异常处理,可以捕获运行错误
C: 逻辑错误编译时不能被发现,但是可以通过调试发现
D: 语法错误容易在运行时发现
3、在以下C#代码的下划线处填入(),该C#语句表示创建一个新文件,如果该文件已存在则发生异常。
A: FileMode.Create
B: FileMode.Open
C: FileMode.Close
D: FileMode.CreateNew
4、在C#中,通过调用Thread 类的Sleep(int x)方法来实现禁止线程运行,其中x代表()
A: 禁止线程运行的微秒数
B: 禁止线程运行的豪秒数
C: 禁止线程运行的秒数
D: 禁止线程以内性的CPU时间数
5、以下是一些C#中的枚举型的定义,其中错误的用法有()
A: public enum var1{ Mike = 100, Nike = 102, Jike }
B: public enum var1{ Mike = 100, Nike, Jike }
C: public enum var1{ Mike=-1 , Nike, Jike }
D: public enum var1{ Mike , Nike , Jike }
6、在C#中,下列关于结构函数的特点的说法,正确的是()
A: 一个类中,只能有一个构造函数
B: 构造函数的名称与类名称一样,并且没有返回类型
C: 构造函数在对象销毁时自动执行
D: 一个类至少要有一个构造函数
7、.NET垃圾收集器要求程序员编写托管程序时,( )。
A: 不必为对象分配内存,但在使用完毕后必须释放它
B: 不必为对象分配内存,且在使用完毕后不必释放它
C: 为对象分配内存,在使用后必须释放它
D: 为对象分配内存,但在使用完毕后不必释放它
8、下列描述错误的是()
A: 类不可以多重继承而接口可以
B: 抽象类自身可以定义成员而接口不可以
C: 抽象类和接口都不能被实例化
D: 一个类可以有多个基类和多个基接口
9、int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是()
A: 9
B: 2
C: 6
D: 越界
10、以下哪个类是int的基类?()
A: Int32
B: Object
C: ValueType
D: Int16
二、多选题
1、以下叙述正确的是:()
A: 接口中可以有虚方法
B: 一个类可以实现多个接口
C: 接口不能被实例化
D: 接口中可以包含已实现的方法
2、以下叙述正确的是:
A: 接口中可以有虚方法
B: 一个类可以实现多个接口
C: 接口不能被实例化
D: 接口中可以包含已实现的方法
3、从数据库读取记录,你可能用到的方法有:()
A: ExecuteNonQuery
B: ExecuteScalar
C: Fill
D: ExecuteReader
4、已知变量I 有如下定义:int I = 1000则下列类型转换中,哪些出现了数据精度的丢失?()
A: byte J = (byte)ID= (double)I;
B: long L = (long)I;
C: double ;
D: short S = (short)I;
5、下列关于索引器说法正确的有()
A: 索引器不指向内存位置
B: 索引器可以有非整数下标
C: 索引器不指向get 和set访问器
D: 索引器可以重载