C语言程序设计考试系统设计.docx
《C语言程序设计考试系统设计.docx》由会员分享,可在线阅读,更多相关《C语言程序设计考试系统设计.docx(34页珍藏版)》请在冰豆网上搜索。
C语言程序设计考试系统设计
【摘要】:
C语言是CombinedLanguage(组合语言)的中英混合简称。
是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
C语言考试系统采用MicrosoftVisualC++和MicrosoftSQLServer2000相结合,很好的实现了登录验证功能。
登录身份有管理员和学生。
管理员是对整个考试系统的环境设置,其中包括对各个题型的题量设置、定义考试说明、考场要求和对学生的管理等。
学生登录实现了让有考试权限的学生进入考试环境。
在这个环境下,系统完全实现了随机抽题。
C语言考试系统实现了嵌入turboc2.0编译器进行程序的编辑;采用了S数据库访问技术进行数据库的操作;完成了学生考试、管理员管理的功能。
C语言考试系统提高网络教学质量的同时大大拓展了考试的灵活性,阅卷效率,以及保证了考试的公平性、答案的安全性。
【关键词】:
C语言考试系统数据库编译器文件操作
引言
C语言是1972年由美国的DennisRitchie设计的,并首次在UNIX操作系统的DECPDP-11计算机上使用。
它由早期的编程语言BCPL发展演变而来的。
在1970年,AT&T贝尔实验室的KenThompson根据BCPL语言设计出较先进的并取名为B的语言,随后C语言问世了。
随着微型计算机的日益普及,C语言出现了许多版本。
由于没有统一的标准,使得这些C语言版本之间出现了一些不一致的地方。
为了改变这种情况,美国国家标准学会(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。
C语言考试系统,是为了配合C语言的教学而设计的。
它是C语言课件的一个重要组成部分。
试卷可根据题库中的内容即时生成,可避免考试前的压题;而且可以采用大量标准化试题,从而使用计算机阅卷,大大提高阅卷效率;还可以直接把成绩送到数据库中,进行统计、排序等操作。
试题内容放在服务器上,考生通过准考证号进行登录,考试答案也存放在服务器中,这样考试的公平性、答案的安全性可以得到有效的保证。
因此,采用无纸化将是以后考试发展的必然趋势。
考试是网络教学的重要部分,日渐普及的网络教学呼唤着功能强大的网络考试系统的出现。
网络考试系统方便了传统考试中的各个环节。
提高了试题治理的自动化、标准化、便捷化,也提高了试题的安全性和保密性。
试题的自动生成,使每个考生都有一套不同的试题,把固定在单一试卷中的试题发展到了可以自由组合的题库,随着题库的建立,组卷变得方便了,测试的形式也发生着变化,由所有学生同考一张试卷的大规模的集体测试发展到了同一场考试使用等同考查效力的不同试卷,而且可以跨地域的进行同一考试,除了在本地也可以在异地进行,打破了以前考试的局限性。
在成绩统计方面,可以方便快捷地实现成绩统计,如各种均值,方差,分布等的计算,同时还可以方便地评判考试的信度和效度。
通过使用试题自动生成系统完全摆脱了纸和笔,考生使用计算机答卷,然后通过网络提交试卷,系统自动阅卷。
基于计算机网络的考试需要专门的较高水平的技术支持,网络考试已经发展成为一种产业。
发展网络教学有着非常深远的意义,网络教学在全世界范围内得到了迅速的发展。
在国外,美国每年大约有近1700万人通过网络接受教育和培训;欧洲网络教育规模也很大,巨大的需求推动了网上教育业的快速发展。
目前,在国际市场上比较闻名的网上教育软件产品有:
Lotus公司LearningSpace,英属哥伦比亚大学计算机科学系开发的WebCT,WBTSystem公司的TopClass和加拿大SimonFraser大学开发的Virtual-U等。
美国的NTU,英国的OpenCollege都是十分典型的网络教育示例。
第一章C语言程序概述
1.1C语言的演变及特点
1.1.1C语言的发展过程
C语言的原型ALGOL60语言(也称为A语言)。
1963年,剑桥大学将ALGOL60语言发展成为CPL(CombinedProgrammingLanguage)语言。
1967年,剑桥大学的MatinRichards对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的KenThompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。
意思是将CPL语言煮干,提炼出它的精华。
并且他用B语言写了第一个UNIX操作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BGPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1987年,随着微型计算机的日益普及,出现了许多C语言版本。
由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。
为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准3.C语言的主要特点,即经典的87ANSIC。
C语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。
许多著名的系统软件,如DBASEⅢPLUS、DBASEⅣ都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,象PC-DOS、WORDSTAR等就是用这种方法编写的。
1990年,国际化标准组织ISO(IntrernationalStandardOrganization)接受了87ANSIC为ISOC的标准(ISO9899-1990)。
1994年,ISO修订了C语言的标准。
目前流行的C语言编译系统大多是以ANSIC为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则略有差别。
1.1.2C语言版本
1983年,美国国家标准协会(AmericanNationalStandardsInstitute)在标准C基础上制定了C语言新标准,于1983年发表,称为ANSIC,它比标准C有了更大的发展。
目前广泛流行的C语言版本有MicrosoftC或称MSC。
BorlandTurboC或称TurboC。
AT&TC,QuickC等。
1.1.3C语言的特点
(1)C是中级语言
它把高级语言的基本结构和语句及低级语言的实用性结合起来。
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。
它把高级语言的基本结构和语句及低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
(2)C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
(3)C语言功能齐全。
C语言的运算符包含的范围很广泛,共有34种运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
从而使C语言的运算类型极其丰富,表达式类型多样化。
灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
C语言的数据类型有:
整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。
能用来实现各种复杂的数据结构的运算。
并且引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
(4)C语言适用范围大。
虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。
1.1.4C语言及其他语言的差别
1.C语言吸取了汇编语言的精华
汇编语言是一种面向机器的低级语言,尽管它的编程要比高级语言麻烦得多,但目标程序质量高,运行快,所以在工业自动化控制系统等领域仍然被广泛使用,显现出强大的生命力。
(1)C语言提供了对位、字节及地址的操作,使程序可以直接访问硬件。
(2)C语言吸取了宏汇编技术中的一些灵活处理方式,提供了宏替换命令#define和文件包含的预处理命令#include。
(3)C语言程序能及汇编语言程序实现无缝连接,可以在C语言程序中方便地引用汇编语言程序。
(4)C语言编译生成的目标程序代码质量高,执行效率高,运行速度快。
及汇编程序生成的目标程序代码执行效率相比,只低10%~20%,这是其他高级语言所无法达到的。
2.C语言继承和发扬了高级语言的优势
(1)继承了Pascal语言具有丰富数据类型的特点,并具有完备的数据结构。
(2)吸取了FORTRAN语言中模块结构的思想,C语言中每个函数都是独立的,允许单独进行编译。
这有利于大程序的分工协作和调试。
(3)允许递归调用,使有些算法的实现简明、清晰。
(4)发扬了高级语言面向用户、可读性强、容易编程和维护等特点,使C语言易学、易读、易懂、易编程、易维护。
(5)具有良好的可移植性,它没有依赖于硬件的输入输出语句,便于在不同硬件结构的计算机之间移植。
1.2C语言的程序结构
1.2.1C源程序的结构特点
一个实现某种特点功能的C语言程序(一个或多个文件)应包含若干个函数,每个函数又是由若干条语句组成的。
同其他的高级语言一样,C语言的语句用来向计算机系统发出操作指令。
一条语句经编译后会产生若干条机器指令。
因此,C语言程序的结构形式如图所示。
说明:
(1)一个C语言源程序可以由一个或多个源文件组成。
(2)每个源文件可由一个或多个函数组成。
(3)一个源程序不论由多少个文件组成,都有且只能有一个main函数,即主函数。
(4)源程序中可以有预处理命令(#include命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
(5)每一个说明,每一个语句都必须以分号结尾。
但预处理命令,函数头和花括号“}”之后不能加分号。
1.2.2C语言程序结构组成
(1)数组。
数组是一种非常重要的线性结构的数据类型,在程序设计中常常使用。
同时,C语言中,“字符串”可以通过字符数组来实现。
数组的定义和使用在C语言中具有相当重要的位置。
在介绍数组的应用时,可结合《数据结构》课程中排序及检索的常用算法,通过实例说明数组的具体应用。
(2)指针。
指针是C语言中最灵活,最活跃的数据类型,是C语言的核心。
要学习好C语言,必须掌握指针的概念极其应用。
C语言指针应用,在数据链式存储中,指针是数据中不可分割的一个部分,既使在顺序存储的数据中,指针也是数据扫描(遍历)、查找定位、插入、删除、统计等各种数据加工处理的重要手段和工具。
同时必须指出,指针应用不当也会带来意想不到的后果。
(3)函数。
C语言是一种函数式语言,函数是C语言程序的基本组成部分。
在教学中,可以通过一些实际例子说明,使学生掌握C语言函数定义、函数调用、参数传递等内容,树立程序模块的基本思想。
(4)变量存贮属性。
存贮属性关系到变量的作用范围,函数(模块)间的程序接口,对树立程序设计的全局观念,变量存贮属性起重要作用。
(5)文件。
在实际应用中,我们一般通过文件的形式及外设进行交流,“文件”是C语言实际应用的主要方式,应介绍文件的打开、读、写、关闭等基本操作。
(6)结构体。
在实际应用中,数据结构类型往往以结构体形式出现。
只有掌握结构体类型的定义和使用,才能在实际应用中发挥C语言作用。
第二章C语言考试系统
2.1C语言考试系统发展背景
在线考试系统就是人们经常谈论中的一个例子,在我国,不论是机关单位还是大中小学校,考试频率堪称世界之最,而传统的考试一般要经过出题,印试卷,安排考场,监考,收集试卷,评改试卷,讲评试卷和分析试卷。
不仅如此,在线考试系统还打破了考场的时空局限性,考生可以自由选择考试的时间和地点,而条件是只要具有一台能上互联网的电脑就行了,考生考试结束后,即可产即查询自己的考试分数,名次等信息,还可以对照标准答案对答错的试题进行适当的分析,全部科目考试结束后,考生还可以打印自己的成绩单,及传统考试不同的是,在线考试系统需要管理员添加足够多的题库来保证每个考生随机抽出来的题目是不一样的,保证了考试的公证性。
C语言是各大学所有理工科学生的必修课,是计算机专业编程语言的入门课程,C语言考试系统,是为了配合C语言的教学而设计的。
它是C语言课件的一个重要组成部分。
试卷可根据题库中的内容即时生成,可避免考试前的压题;而且可以采用大量标准化试题,从而使用计算机阅卷,大大提高阅卷效率;还可以直接把成绩送到数据库中,进行统计、排序等操作。
试题内容放在服务器上,考生通过准考证号进行登录,考试答案也存放在服务器中,这样考试的公平性、答案的安全性可以得到有效的保证。
因此,采用无纸化将是以后考试发展的必然趋势。
2.2C语言考试系统的组成
完整的C语言考试系统应具有题库、自动组卷模块、学生考试模块、考试成绩管理模块,用以实现计算机自动出卷、答卷、批卷流程的全程管理。
而我下面所介绍的就是这4个模块的核心元件。
2.2.1MicrosoftVisualC++
VC是微软公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC类库。
MFC中封装了大部分WindowsAPI函数和Windows控件,它包含的功能涉及到整个Windows操作系统。
MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样我们就可以从一个较高的起点编程,节省了大量时间。
另外,它提供了大量的代码,指导用户编程是实现某些技术和功能。
因此VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。
C++
(1)C++的组成
1、C子语言。
C++支持C语言的几乎全部功能,在语法上及C语言仅有极微妙的差别。
2、面向对象的C++。
C++首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。
3、泛型编程语言。
C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。
4、STL(C++标准模板库)。
随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性及规范性使它大受欢迎。
(2)C++的优势
传统上认为,C++相对于目前一些新潮的语言,如Java、C#,优势在于程序的运行性能。
这种观念并不完全。
一般认为,使用Java或C#的开发成本比C++低。
但是,如果能够充分分析C++和这些语言的差别,会发现这句话的成立是有条件的。
这个条件就是:
软件规模和复杂度都比较小。
如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。
否则,随着代码量和复杂度的增加,C++的优势将会越来越明显。
造成这种差别的就是C++的软件工程性。
在Java和C#大谈软件工程的时候,C++实际上已经悄悄地将软件工程性提升到一个前所未有的高度。
MFC
MFC,微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种ApplicationFramework,随微软VisualC++开发工具发布。
MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。
VC是WinDOS下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。
MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不及一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类,如数据库的管理类等。
(1)一些重要的MFC
CWnd:
窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。
该类很大,一开始也不必学,知道就行了。
CDocument文档:
负责内存数据及磁盘的交互。
最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)。
CView视图:
负责内存数据及用户的交互。
包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。
最重要的是OnDraw(重画窗口),通常用CWnd:
:
Invalidate()来启动它。
另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。
你自己的许多功能都要加在里面,你打交道最多的就是它。
(2)MFC编程的优势
随着编程语言的推陈出新,MFC一些缺点日益突出。
最重要的就是入门门槛相对其他语言要高,而且同样完成一个任务代码量相对较多。
但是MFC真的没有任何优势了吗?
不是,面对底层程序,它能很轻松的及WindowsAPI或驱动程序结合,就是在自己的代码中直接使用API函数,而API和驱动程序的资料都是以C语言为基础的,这使得VC程序员能够更轻松的使用WindowsAPI。
这样造成了一个很有意思的现象,即入门时VC程序员要付出更多的努力来学习,但是一旦掌握后,开发其他领域的程序或使用第三方软件时,如工业控制类的程序,由于底层的程序都是用C语言编写,反倒是VC程序员能够更快的掌握该领域的编程技术。
而很多其他的编程语言甚至找不到相关的资料。
这就说明VC(MFC)实际上是一种入门困难,但是扩展学习却很轻松的语言框架。
如果既限于某一领域的话VC毫无优势可言,但是如果开发一个新的领域的应用程序或者该程序涉及多个应用领域的话,可减少重复学习的频率和难度,VC(MFC)的优势会立刻显现出来。
2.2.2SQLSERVER2000(结构化查询语言SQL)
1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。
目前SQL标准有3个版本。
基本SQL定义是ANSIX3135-89,“DatabaseLanguage-SQLwithIntegrityEnhancement”[ANS89],一般叫做SQL-89。
SQL-89定义了模式定义、数据操作和事务处理。
SQL-89和随后的ANSIX3168-1989,“DatabaseLanguage-EmbeddedSQL”构成了第一代SQL标准。
ANSIX3135-1992[ANS92]描述了一种增强功能的SQL,现在叫做SQL-92标准。
SQL-92包括模式操作,动态创建和SQL语句动态执行、网络环境支持等增强特性。
在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。
SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。
(1)SQLServer2000特点
1.完全的Web支持:
SQLServer2000提供了以Web标准为基础的扩展数据库编程功能。
丰富的XML和Internet标准支持允许使用内置的存储过程以XML格式轻松存储和检索数据。
还可以使用XML更新程序容易地插入、更新和删除数据。
通过Web轻松访问数据。
也可以使用HTTP来向数据库发送查询、对数据库中存储的文档执行全文搜索、以及通过Web进行自然语言查询。
SQLServer2000分析服务功能被扩展到了Internet。
通过Web浏览器来访问和控制多维数据。
2.高度的可伸缩性和可靠性
使用SQLServer2000可以获得非凡的可伸缩性和可靠性。
通过向上伸缩和向外扩展的能力,SQLServer满足了苛刻的电子商务和企业应用程序要求。
SQLServer2000利用了对称多处理器(SMP)系统。
SQLServerEnterpriseEdition最多可以使用32个处理器和64GBRAM。
向外扩展可以将数据库和数据负载分配给多台服务器。
通过增强的故障转移群集、日志传送和新增的备份策略,SQLServer2000达到了最大的可用性。
(2)SQL数据库的数据结构
数据结构分为数据的逻辑结构和数据的物理结构。
数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,及数据的存储位置无关。
数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。
这里只研究数据的逻辑结构,并将反映和实现数据联系的方法称为数据模型。
(3)SQL数据库中常用的几个系统表
1、sysobjects
系统对象表。
保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等
sysobjects重要字段解释:
sysObjects(
Namesysname,--object名称
idint,--objectid
xtypechar
(2),--object类型
typechar
(2),--Object类型
uidsmallint,--object所有者的ID
...--其他的字段不常用到。
)
该表中包含该数据库中的所有对象,如有那些表存储过程视图等信息
2、sysColumns数据库字段表。
当前数据库的所有字段都保留在里面。
重要字段解释:
sysColumns(
namesysname,--字段名称
idint,--该字段所属的表的ID
xtypetinyInt,--该字段类型,关联systypes表
lengthsmallint,--该字段物理存储长度
...
)
比如要查询某一个张表的有那些字段和这些字段的长度
3、sysusers
当前数据库的系统组,以及用户。
sysusers(
uidsmallint,--用户id
namesmallint,--名称
uidvarbinary(85),--属于一个登陆
....
)
对数据库的用户进行管理
2.2.3Turboc2.0编译器
(1)编译器的工作原理及总体结构
编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。
典型的编译器输出是由