c语言

#include#include#include#include

#defineSTU_NUM40/*最多的学生人数*/#defineCOURSE_NUM10/*最多的考试科目*/

structstudent{intnumber;/*每个学生的学号*/charname[10];/*每个学生的姓名*/intscore[COURSE_NUM];/*每个学生M门功课的成绩*/intsum;/*每个学生的总成绩*/floataverage;/*每个学生的平均成绩*/};typedefstructstudentSTU;

/*函数功能:向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidAppendScore(STU*head,intn,intm){intj;STU*p;for(p=head;pnumber);printf("Inputname:");scanf("%s",p->name);for(j=0;jscore+j);}}}

/*函数功能:打印n个学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidPrintScore(STU*head,intn,intm){STU*p;inti;charstr[100]={'\0'},temp[3];strcat(str,"NumberName");for(i=1;i<=m;i++){strcat(str,"Score");itoa(i,temp,10);strcat(str,temp);strcat(str,"");}strcat(str,"sumaverage");printf("%s",str);/*打印表头*/for(p=head;pnumber,p->name);for(i=0;iscore[i]);}printf("%11d%9.2f\n",p->sum,p->average);}}

/*函数功能:计算每个学生的m门功课的总成绩和平均成绩函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidTotalScore(STU*head,intn,intm){STU*p;inti;for(p=head;psum=0;for(i=0;isum=p->sum+p->score[i];}p->average=(float)p->sum/m;}}

/*函数功能:用选择法按总成绩由高到低排序函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数函数返回值:无*/voidSortScore(STU*head,intn){inti,j,k;STUtemp;for(i=0;isum>(head+k)->sum){k=j;}}if(k!=i){temp=*(head+k);*(head+k)=*(head+i);*(head+i)=temp;}}}

/*函数功能:查找学生的学号函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量num,表示要查找的学号整型变量n,表示学生人数函数返回值:如果找到学号,则返回它在结构体数组中的位置,否则返回-1*/intSearchNum(STU*head,intnum,intn){inti;for(i=0;inumber==num)returni;}return-1;}

/*函数功能:按学号查找学生成绩并显示查找结果函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidSearchScore(STU*head,intn,intm){intnumber,findNo;printf("PleaseInputthenumberyouwanttosearch:");scanf("%d",&number);findNo=SearchNum(head,number,n);if(findNo==-1){printf("\nNotfound!\n");}else{PrintScore(head+findNo,1,m);}}

/*函数功能:显示菜单并获得用户键盘输入的选项函数参数:无函数返回值:用户输入的选项*/charMenu(void){charch;

printf("\nManagementforStudents'scores\n");printf("1.Appendrecord\n");printf("2.Listrecord\n");printf("3.Searchrecord\n");printf("4.Sortrecord\n");printf("0.Exit\n");printf("PleaseInputyourchoice:");scanf("%c",&ch);/*在%c前面加一个空格,将存于缓冲区中的回车符读入*/returnch;}

摘要

学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息及成绩进行管理,具有手工管理所无法比拟的优点.

Studentresultmanagementthesystemisthepartofeducationunitindispensability,itscontentssaysalltothepassimportanceforthedecisionmakerofschoolandthegovernor,sostudenttheresultmanagethesystemshouldbeabletoprovideampleinformationandfastsearchmeansforcustomer.Butalwayspeopleusethewaymanagementoftraditionalartificialdocumentfile,thismanagementwayexistsmuchweakness.Alongwithsciencetechniqueofcontinuouslyraise,calculatorscienceisgradualmaturity,itthestrongfunctionhavealreadyprofoundlyknownforpeople,ithasalreadygotintomankind'seachrealmofsocietytoerupttoflickamoreandmoreimportantfunction.Asapartofthecalculatorapplication,usagethecalculatorcarryonamanagementtostudent'sinformationandtheresultandhavethehandicraftmanagementcansnotcomparetoofadvantage.

一.课程设计目的

1、熟练掌握C语言课程中所学的理论知识;

C语言是在国内外广泛使用的一种计算机语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。学习使用C语言程序的目的是掌握程序设计的思路,学会用计算机语言编写程序正确处理算法和语法的关系算法是程序的核心、是灵魂,语法是外壳、是工具。通过课程设计,我们要熟练的掌握C语言的算法、语言、函数的调用、循环的使用、数组的运用等。

2、通过综合C语言的基本知识来解决实际问题;

C语言中与许多的东西,像:数据类型、运算符、表达式、程序设计结构、数组与函数调用。其中C语言最难和最经典的地方就是循环,(while和for的嵌套)运用WHILE,FOR,SWITCH和if的循环嵌套,我们可以实现现实中课程信息管理、图书信息管理、学生信息管理、商品信息管理等。C语言还具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

3、加强分析和解决问题的能力。

通过这次的课程设计,能加强我们对程序设计的思考、设计、分析、理解和解决问题的能力。对于我们初学者来说,主要是学习成长设计的方法,进行程序设计的基本训练为将来进一步学习打下基础。课程设计不能之掌握概念,还要动手编程、上机调试运行。只有自己动手,才能学的更多。

二.课程设计题目描述和要求

1.题目:学生成绩管理系统.在程序设计时将其逐步细化,每个模块由一个函数实现,整个程序通过函数调用联系。使用函数思想编写程序,程序中的每个模块都做成函数形式,由主函数调用子函数。在各个功能模块设计时根据其具体功能使用所学知识进行设计,例如:在需要循环输出时可以使用for循环,需要条件控制时可以使用if语句,在排序时可以使用冒泡法等。

2.要求:设计包含N个学生的数据信息的学生成绩管理系统,包括以下信息:学号—num[10](字符串)、姓名(拼音)—name[25](字符串)、性别—sex(字符,M或F)、年龄—age三门课程成绩(高数、英语、计算机)—score[3](整型)。

三、课程设计报告内容、算法分析及调试

1.设计步骤

(1)、需求分析:对系统的应实现的功能进行分析。

(2)、概要设计:对系统功能进行模块分解,对模块的功能及模块之间的相互关系进行说明(如用到函数,则对函数间的接口进行说明),对系统使用的数据结构(各数组、主要变量的设置及其代表的含义)进行说明。

(3)、详细设计:用流程图、伪代码等方法对各主要算法进行描述。

(4)、编写代码:根据设计编写。源程序要按照程序的格式规范来编写,要求结构清晰,界面友好,关键部分有必要的注释。

(5)、调试分析:准备充分的测试数据对系统进行调试(对错误的数据输入也要进行测试,保证程序的容错性),并通过测试对系统提出改进设想。

5.调试

经过我们这个小组一天的调试,我们终于把各自的模块整合起来了,在这过程中,我们遇到了很多问题,像数据不匹配,括号不配对,赋值重复等。因为C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等原因。但经过我们这小组共同的努力,终于完成了。首先,我们用DOWHILE循环,使这个图书系统能无限使用,再次,我们用SWITCH对各个模块功能进行了组合,使学生成绩管理系统的功能更完善,界面更清晰、明了。

四.总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

六、附录的源程序及各模块说明

1、主函数

#include

#include

#include

#defineN100

intM=0;

structstudent

{charnum[10];

charname[25];

charsex;

intage;

floatscore[3];

}stu[N];

voidmain()

{voidsystem();

voidmenu();voidadd();

voiddel();

voidsearch();

voidmodify();

voidsort();

intk,i;

charstr[10];

printf("*****************************************************************************\n");

{printf("请输入六位数密码:");

for(i=0;(str[i]=getch())!='\r';i++)

putchar('*');

printf("\n");

str[i]='\0';

if(strcmp(str,"123456")!=0)

printf("密码错误!\n");

elsebreak;

}

printf("登陆成功!");

printf("\n\n\n");

system("cls");

menu();

2、菜单函数

定义菜单函数,通过输出函数显示系统功能。利用switch语句实现多分支选择结构。

voidmenu()

{intc;printf("欢迎进入主菜单!\n");

printf("****************************************************************************\n");

printf("请选择操作:");

scanf("%d",&c);

if(c<1||c>6)c=0;

switch(c)

{case0:printf("输入错误!\n");break;

case1:add();break;

case2:del();break;

case3:search();break;

case4:modify();break;

case5:sort();break;

case6:break;

}}

3、录入函数

多次使用输入输出函数输入信息,通过标记flag控制多次输入。

voidadd()

inti=0,flag=1;chark;

system("cls");printf("欢迎进入学生信息的录入!\n");

while(flag)

{i++;

printf("请输入第%d个学生的学号:",i);

scanf("%s",stu[i-1].num);

printf("请输入第%d个学生的姓名:",i);

scanf("%s",stu[i-1].name);

printf("请输入第%d个学生的性别:",i);getchar();

scanf("%c",&stu[i-1].sex);

printf("请输入第%d个学生的年龄:",i);

scanf("%d",&stu[i-1].age);

printf("输入第%d个学生的数学成绩:",i);

scanf("%f",&stu[i-1].score[0]);

printf("输入第%d个学生的英语成绩:",i);

scanf("%f",&stu[i-1].score[1]);

printf("输入第%d个学生的计算机成绩:",i);

scanf("%f",&stu[i-1].score[2]);

M++;printf("\n\n");

printf("序号:%d\n",i);

printf("学号:%s\n",stu[i-1].num);

printf("姓名:%s\n",stu[i-1].name);

printf("性别:%c\n",stu[i-1].sex);

printf("数学:%.2f\n",stu[i-1].score[0]);

printf("英语:%.2f\n",stu[i-1].score[1]);

printf("计算机:%.2f\n",stu[i-1].score[2]);printf("\n\n");

printf("继续或退出(y/n):");getchar();scanf("%c",&k);

if(k=='n'||k=='N')

flag=0;}

4、删除函数

输入学号,通过学号找到对应的学生,从删除项起后面对应的信息前移。同时,用标记flag控制多次删除。

voiddel()

inti,j,flag=1;

charc;

printf("欢迎进入学生信息的删除成功。\n");

{printf("请输入要删除的学号:");

scanf("%s",str);

for(i=0;i

if(strcmp(str,stu[i].num)

==0)

{for(j=i;j

stu[j]=stu[j+1];

printf("删除成功!\n");

M--;break;}

if(i==N)

printf("无此学号!\n");

printf("继续或退出(y/n):");

getchar();

scanf("%c",&c);

if(c=='n'||c=='N')flag=0;

5查找函数

flag=0

inti,flag=1;

charm;

printf("欢迎进入学生信息的查找!\n");

{printf("请输入要查找的学号:");

if(strcmp(str,stu[i].num)==0)

{printf("学号姓名性别年龄高数英语计算机\n");

printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f\n",

stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],

stu[i].score[1],stu[i].score[2]);

break;

if(i==N)printf("无此学号!\n");

printf("继续或退出(Y/N)");

scanf("%c",&m);

if(m=='n'||m=='N')

算法:通过顺序查找法,从N=0到N-1循环顺序查找输入的学号,再通过字符串比较函数找到学号的位置i,并通过结构体数组输出学生i一系列的信息;通过标记flag=1进入外层循环,控制多次查找信息。

6、修改函数

输入要修改的学号,通过学号找到对应的学生,再修改其信息,同样,还是利用标记flag控制多次修改。

voidmodify()

chark;

printf("欢迎进入学生信息的修改!\n");

{printf("请输入要修改的学号:");

{printf("ok!\n");

printf("输出修改前的信息:\n");

printf("学号姓名性别年龄高数英语计算机\n");

printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n",

printf("\n输入修改的分数:\n");

printf("高数英语计算机:");

for(j=0;j<3;j++)

scanf("%f",&stu[i].score[j]);

printf("输出修改后的信息:\n");

scanf("%c",&k);

if(k=='n'||k=='N')flag=0;

7、排序函数

定义结构体变量作为空瓶子,在利用简单选择排序法以后,用k标记每一躺的最大值的位置,在交换信息。利用flag控制返回主菜单。

voidsort()

structstudentt;

floatsum[N];

floataver[N];

floatf,g;

inti,j,k,p,x,flag=1;

printf("欢迎进入学生信息的排序!\n");

{for(i=0;i

sum[i]=0;

for(i=0;i

{sum[i]=sum[i]+

stu[i].score[j];

aver[i]=sum[i]/3;}

if(sum[x]

x=p;

g=sum[k];sum[k]=sum[x];sum[x]=g;

t=stu[k];stu[k]=stu[x];stu[x]=t;

f=aver[k];aver[k]=aver[x];aver[x]=f;}

printf("学号姓名性别年龄高数英语计算机总分平均分\n");

printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f%9.1f%9.1f\n",

THE END
1.C语言程序设计图书管理系统c语言程序设计课程设计图书管理系统图书管理系统 本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用文件存储结构实现对图书管理的原理,为进一步开发出高质量的管理信息系统打下坚https://blog.csdn.net/qq_63964231/article/details/128260731
2.C语言实现图书管理系统课程设计C语言这篇文章主要为大家详细介绍了C语言实现图书管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下+ 目录 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家https://www.jb51.net/article/256425.htm
3.C++课程设计(简单图书管理系统)6篇(全文)C++课程设计(简单图书管理系统) 第3篇 随着计算机技术的迅猛发展, 很多新的、高效的软件开发技术应运而生。《C++程序设计》就是应潮流与需求而发展起来的一门优秀的程序设计语言, 它受到许多计算机专业人士及程序设计人员的青睐,在很多高等院校中《C++程序设计》都被列为计算机专业教学体系中的一门重要的主干课。但https://www.99xueshu.com/w/fileiuknvdrv.html
4.c语言图书管理系统程序设计C语言图书管理系统程序设计是一个经典的编程练习,它涵盖了数据结构、文件操作、用户交互等多个方面。以下是一个基于你提供的tips的详细设计和实现方案: 一、设计图书管理系统的数据结构 首先,我们需要设计存储图书信息和读者信息的数据结构。这里可以使用结构体(struct)来定义这些数据。 c #include <stdio.h>https://agents.baidu.com/content/question/4ee55e04f12ab75d86fefd8a
5.轻松学做C语言课程设计:图书管理系统数组实现C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。 题目要求 图书管理系统提供图书信息管理以及借还管理。图书信息至少包括:图书编号、书名、价格、作者、借还状态,提供以下功能: https://www.jianshu.com/p/4747f7993672
6.图书管理系统可行性研究报告(精选6篇)在当下社会,报告的使用频率呈上升趋势,我们在写报告的时候要注意逻辑的合理性。相信许多人会觉得报告很难写吧,下面是小编为大家整理的图书管理系统可行性研究报告(精选6篇),供大家参考借鉴,希望可以帮助到有需要的朋友。 图书管理系统可行性研究报告1 第1章 引言 https://m.ruiwen.com/baogao/6424056.html
7.图书管理系统设计报告3篇(图书管理系统详细设计报告).docx图书管理系统设计报告1 中南高校 本科生课程设计(实践)任务书、设计报告 (计算机程序设计基础C+) 题目 同学姓名 指导老师 学院 专业班级 同学学号 图书馆信息管理系统 计算机基础教学试验中心 2022 年 7 月 1 日 图书馆信息管理系统 1.任务描述 始终以来人们使用传统的人工方式管理图书馆的日常工作,手工管理书籍https://m.renrendoc.com/paper/225342986.html
8.C/C++项目开发之图书管理系统嵌入式技术C/C++项目开发之图书管理系统-管理系统一直是我们计算机专业同学都要经历的项目设计,而管理系统的核心知识点其实都是一样的,无法就是换了个马甲,今天我们就来看看很多同学都会遇到的管理项目之一:图书管理系统!https://www.elecfans.com/emb/202210281913516.html
9.java图书馆管理系统项目详细设计基于javaweb+mysql的ssm+maven图书馆图书管理系统(java+ssm+jsp+js+mysql) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基于javaweb+mysql的SSM+Maven图书馆图书管理系统(java+ssm+jsp+js+mysql) 项https://blog.51cto.com/u_16213589/11950751
10.《数字系统设计在图书馆管理系统中的应用调查问卷》比较熟悉C. 一般了解D. 不太了解E. 完全不了解 在您的日常工作 / 学习中,您经常使用图书馆管理系统的哪些功能?(可多选) 图书信息查询借阅图书归还图书读者账户管理图书预订与预约查看借阅历史接收系统通知(如逾期提醒)其他 您认为数字系统设计给图书馆管理带来的最大优势是什么?(可多选) 提高图书管理效率方便读者https://www.wjx.cn/xz/294504596.aspx
11.承德市人民政府专项规划承德市绿色建筑专项规划(2020~2025年坚持合理布局、分步实施、统筹安排、有序推进,抓好绿色建筑提质、建筑能效提升、建造方式革新、绿色产业培育、技术创新驱动、典型示范带动,促进建筑由“浅绿”到“深绿”、从单体到街区(社区)等区域单元,从规划、设计、建造到运行管理,从绿色建筑到装配式建筑、绿色建材,把绿色发展理念延伸至建筑全领域、全过程及全产业https://www.chengde.gov.cn/art/2021/9/2/art_10609_793714.html
12.2023年4月自考《管理系统中计算机应用》考试真题(更新中)自考C.一致性检验 D.无冗余性检验 24.在系统设计阶段,通常采用结构化设计方式,进行软件结构设计的主要方法是绘制 A.控制结构图 B.数据流程图 C.业务流程图 D.实体属性图 26.某管理信息系统中对人员编码采用“人名汉语拼音”,该编码方式采用的是 A.顺序码 https://www.educity.cn/chengkao/5036952.html
13.课程图书管理系统的设计 闫大顺 第一章程序设计基础知识 程序设计基础知识 ●1.1程序与程序语言 程序与程序语言 ●1.2算法和算法描述 算法和算法描述 ●1.3结构化程序设计方法 结构化程序设计方法 第二章C语言概述 C语言概述 ●2.1最简单C程序 最简单C程序 ●2.2C语言的上机执行过程 C语言的上机执行过程 ●2.3C语言的https://higher.smartedu.cn/course/6260b20af29a9e60d0f26c04
14.图书馆管理系统因此本人结合开入式图书馆的要求,对MS SQL Server2000数据库管理系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆https://www.fwsir.com/ligong/html/ligong_20070130182525_25748.html
15.2020年一级造价工程师《建设工程技术与计量(安装)》真题及答案7.具有较高的强度、耐热性,最高工作温度可达95C,在1.0MPa下长期(50年)使用温度可达70C,无毒,耐化学腐蚀,常温下无任何溶剂能溶解,广泛地用在冷热水供应系统中的管材为( )。 A.聚氯乙烯管 B.聚乙烯管 C.聚丙烯管 D.工程塑料管 【汇英答案】C 【汇英解析】聚丙烯管无毒,价廉,但抗冲击强度差。Pp-R管是最轻http://m.huiyingedu.net/h-nd.html?id=1846
16.数据库设计说明介绍模板实例说明文书会员借阅 / 归图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信二具 V F 7 . 0 / P o w e r D e s i g n e r 第三章结构设计 3 . ) 中的函数依赖为 C - H , 为 B 0 F , 此关系模式包含了联系一“增 及系统状态的查看、维护并生成催还图书报表。 ( 一 ) 管理系统https://www.docin.com/p-4655707842.html
17.软件工程课程设计——学校图书借阅管理系统专业方向组设计 学校图书借阅管理系统 指导教师 李鑫 院(系、部) 电信学院 专业班级 计算机 06—2 学 号 0606010212 姓 名 宋成龙 电子与信息工程学院 计算机科学系 参考目录 1 问题定义 2 项目背景 https://doc.mbalib.com/view/c33c697a77fd207ec1f042da189adfdd.html
18.2024年免费图书管理软件:用户评价最高的前十名下面给大家推荐几款好用的免费的图书管理软件,有需要的小伙伴们来了解一下。 1.精点图书管理系统 单机版 6.0 精点图书管理系统是一款专为中小型图书馆设计的管理软件。它融合了先进的图书管理经验,是科学化、信息化建设的有力工具。该系统适用于各类企事业单位、学校和科研院所的图书馆或图书室。主要功能包括采访https://app.zol.com.cn/jiqiao/129836.html
19.软件技术创业计划书(精选7篇)创业团队自成立以来一直致力于软件开发,专业应用软件如“国腾学院图书管理系统”、“诚安顺公司管理销售系统”,硬件集成系统如“‘绿墙’小区安全综合系统”(获得微软大学生实践项目资助,并完全结题)等,从作需求分析、计划书编写到模块划分、封装测试都是独立完成,积累了一定的技术经验,构建了良好的开发模式。最初的一https://www.yjbys.com/chuangye/ziliao/chuangyejihuashu/633438.html