Skip to content

VanMesure/DataStructure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

这个网站是出于个人兴趣所做,主要功能是可以在线做一些c语言的编程题目,然后提交给服务器,服务器再返回结果。
用到的都是很基础的技术:html css ajax php ,服务器端负责编译运行的程序则是由java来写的。
用到的框架主要是 H-ui,CodeMirror
没有写后台,所以维护起来比较麻烦。new/里边为站点的全部资源,java/里边则是服务器端java程序的源码。




后期维护主要是以下几个方面:
	1.数据库
	2.增加新的题目
	3.···

	
0.目录结构(加*号的为维护时可能要用到的文件或目录,部分内容已省略,仅列出重要的)
	new
	|————index.php		跳转用页面
	|
	|————code/			主目录
	|	|
	|	|————index.php	登录页面
	|	|————images/	图片目录			
	|	|————pages/			
	|	|		|
	|	|		|———logincheck.php	登录处理,由登录页面请求	
	|	|		|———getCode.php		获取代码(从question目录中)
	|	|		|———receive.php		提交代码(将提交的代码插入数据库)
*	|	|		|———qList.php		题目清单页面
	|	|		|———getResult.php	查询结果
*	|	|		|———compile/		所有代码在该目录下被编译测试
*	|	|		|		|——test.jar	测试用java程序,整个网站的核心(java -jar test.jar)
	|	|		|——css/				css目录	
	|	|		|——js/				js目录
*	|	|		|——qPages/			存放题目页面(该目录下的页面请严格按照 “q题号.php” 命名,如“q2.php”)
*	|	|		|——questions/		存放题目代码 (该目录下的文件请严格按照 “q题号.txt” 命名, 如“q2.txt”)	
			



1.数据库
	newds一共有两个表,表的结构如下:
	  newds
		|——student_info
		|		|————username:	用户名
		|		|————password:	密码    
		|		|————name:		姓名
		|		|————class:		班级
		|
		|————student_code
				|————username:	用户名
				|————qID:		题号		
				|————code:		代码 		
				|————status:	状态号  (0-待处理  1-编译错误  2-运行错误  3-通过)		
				|————result:	结果		
				|————error_info	错误结果	(暂时不用)

2.增加新题目
	请注意0中加*的目录或者文件,增加题目按照以下步骤:
		· 提交一个测试用c文件在compile目录下,命名规则为 "q + 题号 + _test.c", 例如 q1_test.c,该目录下的"_student.c"文件为自动生成的。
		· 提交题目代码到qusetions目录下,命名规则为 “q + 题号 + .txt”,如 q1.txt
		· 代码准备工作完成,下面开始更新页面。首先更改qList.php页面, 其中.row类为一行, .qbox-a类为一个题目块,按需复制粘贴,更改对应的说明、超链接即可
		· 在qPages目录下创建对应的题目页面,创建方法为复制粘贴一个已有的题目页面,然后按照"q题号.php"的命名规则改名,
		  然后修改代码中的两处(已经用注释标出),第一处在代码开头,修改_SESSION全局变量的qID为对应题号。第二处为<aside>中的说明性文字


关于题目:
	* 测试用程序的所有printf()都将插入到result字段中,因此可以方便的加入一些说明性文字。
	* 有一点必须要注意,所有测试通过的程序,都要在最后输出一个 printf("0")或者printf("1"),最好是单独一行,test.jar是通过检测这个值来判断程序是否跑通的,如果是其他情况,请输出其他值。
	* 测试程序main()函数必须有返回值,如果程序正确,返回0;错误的话,返回任意其他值
	* 另外,这个值也将作为结果被插入result,editor页面已经做了相应的处理,因此不会输出到页面上。