为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

歌唱比赛评分系统设计(C语言完整版)

2021-10-14 7页 doc 671KB 51阅读

用户头像 个人认证

dczly68

从事多年财务会计,税务工作的经验

举报
歌唱比赛评分系统设计(C语言完整版)----word.zl--..-可修遍-?软件设计实践?报告学院:中北大学信息商务学院专业:通信工程专业题目:歌唱比赛评分系统1305044142王泽学生:1305044138郭世杰1305044149贺鑫完成时间:2016年1月18日指导教师:鲁旭涛爱琴沅目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc440904839"课程设计任务书PAGEREF_Toc440904839\h2HYPERLINK\l"_Toc440904840"1需求分析PAGEREF_Toc440904840\...
歌唱比赛评分系统设计(C语言完整版)
----.zl--..-可修遍-?软件设计实践?报告学院:中北大学信息商务学院专业:通信工程专业题目:歌唱比赛评分系统1305044142王泽学生:1305044138郭世杰1305044149贺鑫完成时间:2016年1月18日指导教师:鲁旭涛爱琴沅目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc440904839"课程设计任务书PAGEREF_Toc440904839\h2HYPERLINK\l"_Toc440904840"1需求PAGEREF_Toc440904840\h2HYPERLINK\l"_Toc440904841"1.1题目分析PAGEREF_Toc440904841\h2HYPERLINK\l"_Toc440904842"1.2系统分析PAGEREF_Toc440904842\h2HYPERLINK\l"_Toc440904843"2设计概要PAGEREF_Toc440904843\h2HYPERLINK\l"_Toc440904844"3程序设计及模块分工明细PAGEREF_Toc440904844\h2HYPERLINK\l"_Toc440904845"3.1人员模块分工PAGEREF_Toc440904845\h2HYPERLINK\l"_Toc440904846"3.2人员模块分工明细PAGEREF_Toc440904846\h2HYPERLINK\l"_Toc440904847"4测试结果PAGEREF_Toc440904847\h2HYPERLINK\l"_Toc440904848"4.1调试与测试PAGEREF_Toc440904848\h2HYPERLINK\l"_Toc440904849"4.2测试结果截图PAGEREF_Toc440904849\h2HYPERLINK\l"_Toc440904850"设计总结PAGEREF_Toc440904850\h2HYPERLINK\l"_Toc440904851"致PAGEREF_Toc440904851\h2HYPERLINK\l"_Toc440904852"参考文献PAGEREF_Toc440904852\h2HYPERLINK\l"_Toc440904853"附录PAGEREF_Toc440904853\h2课程设计任务书设计目的C语言是通信工程专业一门重要的专业技术课程,它是一门实践性很强的课程。软件设计实践课程是为配合c语言课程,对学生进展全面综合训练、与课堂教学、作业练习题、上机实验相辅的必不可少的一个教学环节。利用所学的C语言知识及其编程方法:构造程序设计、数组、指针、构造体、文件操作等容,通过布置具有一定难度的实际程序设计题目,要求学生独立完成所布置题目。在分析设计过程中,要求学生养成良好的编程习惯,学会分析解决简单的实际问题,学会C语言的实际调试技巧和方法,要求学生在教师的指导下逐步完成应用程序的设计设计容和要求有十个选手参加歌唱比赛,十个裁判对每个选手的演唱进展打分,去掉一个最高分,去掉一个最低分,剩下分数的平均值作为每位选手最后的成绩。要求:〔1〕采用构造体定义每个选手的参赛编号,以及十个裁判打出的分数;〔2〕从键盘输入每个选手的相关信息:参赛编号,和十个得分;〔3〕计算每位选手的最后得分,并按分数由高到低排序;〔4〕查询功能:输入参赛选手的编号或,便可输出该选手的得分以及排名;以上功能采用菜单操作方式,即从键盘输入1到3这三个数,分别完成以上〔2〕到〔4〕的功能。设计工作任务及工作量的要求每个组员完成自己的模块设计。完成一份设计。有正确的运行结果及结果分析需求分析题目分析软件设计实践课程是为配合c语言课程,对学生进展全面综合训练、与课堂教学、作业练习题、上机实验相辅的必不可少的一个教学环节。利用所学的C语言知识及其编程方法:构造程序设计、数组、指针、构造体、文件操作等容,通过布置具有一定难度的实际程序设计题目,要求学生独立完成所布置题目。在分析设计过程中,要求学生养成良好的编程习惯,学会分析解决简单的实际问题,学会C语言的实际调试技巧和方法来解决实际问题。系统分析歌唱比赛评分系统包括:菜单:系统以菜单方式工作,界面友好,易于操作。录入:在每个输入前都有详细分类和提示,简单明了,根据提示输入参赛选手号数,,各个评委打分成绩。查询:用户输入查询条件,系统规那么地在界面显示查询结果,不光可以输入号数,查询到该选手信息,每位评委打分;还可以选择排名查询,显示的数据全面。修改:在已有数据的根底上实现对每位选手的信息,以及评分的修改。排名:利用冒泡程序对数组进展排序,删除一个最高与最低然后进展讲剩下的值平均,得出选手最终得分,再根据分数上下排名。储存:对于已经输入的数据,已文档的信息储存到电脑硬盘中,实现永久储存。系统的程序设计环境:本系统使用VisualC++作为程序开发工具。VisualC++是基于对象的快速应用程序开发工具,是当今最强大、最灵活的应用程序开发工具之一,具有良好的可视化应用程序开发环境和强大的可扩展数据库功能。利用VisualC++提供的可视化组件库进展编程,可以快速、高效地开发出基于Windows环境的各类应用程序。VisualC++语言的特点是面向对象设计的程序语言,VisualC++的根底编程语言是具有面向对象特性的语言,具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了C语言中,使这种根底语言有了新的开展空间。与其它编程软件相比,特别是在数据库和网络应用方面,VisualC++具有简便易用、灵活高效的特点。开发软件通常要经过修改源代码、编译、测试、再修改、再编译、再测试等操作,这些操作形成了一个开发循环,所以快速的编译器可以大降低开发周期。VisualC++正是建立在这种高效编译器的根底之上,是针对Windows的最快的高级语言代码编译器,因此生成的代码十分精练高效,使VisualC++程序的运行速度更快。这也是使用VisualC++作为程序设计开发语言的重要原因。设计概要总体设计目标:使用者可以利用本系统进展对选手信息以及评委评分的各项运算操作,如根据需求添加选信息,删除选手信息,对选手得分进展排名等。最后清晰完整的结果于屏幕中。方便了评分操作,不仅节省时间,而且提高准确性,可以到达事半功倍的效果。总体设计谋略:本系统采用的是自顶向下、层次化的模块构造。对高层模块,采用以事务为中心的设计谋略,把一个大的模块逐步分解成较小的相对简单的模块。对低层模块,采用以变换为中心的设计谋略。为了提高每个模块的聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块〔即功能聚〕,使模块间的联系完全是通过主模块的控制和调用来实现〔即非直接耦合〕。结合上述分析该系统应包括以下模块:选手信息浏览,选手信息录入,选手信息保存,选手成绩查询,选手信息修改,选手信息删除。选手数据:编号、、成绩、平均成绩。图1.总体构造图程序设计及模块分工明细人员模块分工王泽:浏览选手数据browse();查询选手成绩search();查询选手信息print()。郭世杰:菜单函数menu_select();修改函数update();保存函数save()。贺鑫:参赛选手信息录入creat〔〕;成绩排序rank();删除函数del();公共模块:color()、quit()、wele()。人员模块分工明细浏览选手数据browse()分析:实际为链表的遍历,将头节点的指针给予临时节点p1,用while语句实现链表的遍历。STARTEND申明指针变量IF(head==NULL&&tail==NULL)当前信息为空表头WHILEp1!=空输出选手信息图2.浏览选手数据模块/*----------------------browse函数-----------------------------*/voidbrowse(){SONGER_MESSAGE*p1;if(head==NULL&&tail==NULL){printf("\n--------当前信息记录为空--------\n");}else{printf("\n-----------你要浏览的选手信息如下---------\n");printf("--------|--------\n");printf("编号|\n");p1=head;while(p1!=NULL){printf("--------|--------\n");printf("%-9d%-6s\n",p1->num,p1->name);p1=p1->next;}printf("--------|--------\n");}}查询选手成绩search()分析:提供详细成绩查询,排名查询的函数调用。其中各功能均采用菜单项选择择的方式。STARTEND定义变量c,并赋值SWITCH(c)输入1跳转到详细成绩查询Break输入2排名查询Break图3.查询选手成绩/*---------------------------search函数-------------------------------*/voidsearch(){intc;printf("\n请选择查询容:\n");printf("1.选手详细成绩查询2.选手排名查询\n请输入您的选择:");scanf("%d",&c);switch(c){case1:system("cls");print();break;case2:system("cls");rank();break;}}查询选手信息print()分析:实际为输出链表中的某个某个节点,输出某个选手的编号与较为好实现,输出10位评委成绩那么用的for语句来实现。STARTEND输入要查找的选手编号IFhead==NULL&&tail==NULL当前记录为空输出表头WHILE(p1!=NULL)IF(p1->num==seeknum)输出编号XXFOR(i=0;inum==seeknum){printf("%-7d%-6s",p1->num,p1->name);printf("");for(i=0;igrades[i]);}printf("%-6.2lf\n",p1->ave);check=1;getchar();return;}else{p1=p1->next;}}}if(head!=NULL&&check==0){printf("\n对不起,你查看的选手成绩不存在!\n");}getchar();}菜单函数menu_select()分析:菜单主函数要求设计比拟简洁,只提供设输入,处理和输出局部的函数调用。其中各功能模块用菜单方式选择。STARTEND定义变量chars[100];intc;WHILE〔1〕利用atoi()函数将所接收的字符串转换成数值,提供应if语句判断IF(c<1||c>7)输入有误BreakSWITCH(c)1信息浏览Break2信息录入Break3信息保存Break4成绩查询Break5信息修改Break6信息删除Break7退出系统ReturnBreakdefaultBreakCode图5菜单模块/*----------------menu_select函数------------------------*/voidmenu_select(){chars[100];intc;gets(s);//不管用户输入的是数字键或是字母键使用gets都能将输入作为字符串接收while(1)//限定用户输入的数值必须在1-7之间才有效,否那么要求重新输入{c=atoi(s);//利用atoi()函数将所接收的字符串转换成数值,提供应if语句判断if(c<1||c>7){printf("您的输入有误,请重新输入:");gets(s);}elsebreak;}switch(c){case1:system("cls");//清屏browse();//选手信息浏览break;case2:system("cls");creat();//选手信息录入break;case3:system("cls");save();//选手信息保存break;case4:system("cls");search();//选手成绩查询break;case5:system("cls");update();//选手信息修改break;case6:system("cls");del();//选手信息删除break;case7:system("cls");quit();//退出系统return;break;default:break;}getchar();system("cls");menu();menu_select();}修改函数update()分析;实现选手信息的修改,核心容为链表的遍历。找出要修改的选手,修改其个人信息。STARTEND输入要修改的选手编号:IF(head==NULL&&tail==NULL)当前信息记录为空p1=headWHILE(p1!=NULL)IF(p1->num==updatenum)修改信息Returnp1=p1->next;指向下一个节点IF(head!=NULL&&check==0)选手信息不存在NOgetchar();图6.修改模块/*------------------------update函数--------------------------*/voidupdate(){SONGER_MESSAGE*p1;//=(SONGER_MESSAGE*)malloc(LEN);intcheck=0;//用来进展判断,是否找到了要修改的信息longupdatenum;printf("\n请输入要修改的选手编号:");scanf("%d",&updatenum);//查找到要修改的选手if(head==NULL&&tail==NULL){printf("\n--------当前信息记录为空--------\n");}else{p1=head;while(p1!=NULL){if(p1->num==updatenum){printf("\n-----------你要修改的选手信息如下---------\n");printf("--------|--------\n");printf("编号|\n");printf("--------|--------\n");printf("%-9d%-6s\n",p1->num,p1->name);printf("--------|--------\n");printf("\n-----------请重新写入此选手信息:---------\n");check=1;//从新写入修改工程printf("\n修改选手编号为:");scanf("%d",&p1->num);printf("\n修改选手为:");scanf("%s",p1->name);return;}else{p1=p1->next;}}}if(head!=NULL&&check==0){printf("\n对不起,你要修改的选手信息不存在!\n");}getchar();}保存函数save()分析:保存文件的流程。使用fopen()函数翻开txt文件,“w〞参数代表翻开只写文件,再利用fprintf()函数写入选手容,最后用fclose〔〕函数关闭文件。STARTEND翻开一个文件,并写入数据WHILE(p1!=NULL)向文件写入“编号〞,“XX〞关闭文件图7.保存模块/*-------------------------------save函数------------------------------*/voidsave()//将数据保存到文件{FILE*fp;SONGER_MESSAGE*p1;//=(SONGER_MESSAGE*)malloc(LEN);p1=head;fp=fopen("参赛选手.txt","w");fprintf(fp,"--------|--------\n");fprintf(fp,"编号|\n");while(p1!=NULL){fprintf(fp,"--------|--------\n");fprintf(fp,"%-9d%-6s\n",p1->num,p1->name);p1=p1->next;}fprintf(fp,"--------|--------\n");fclose(fp);printf("\n\t文件已将保存到\"参赛选手.txt\"");}参赛选手信息录入creat〔〕分析:录入信息表现为创立链表节点并给节点的元素赋值,然后对评委的分数进展排序〔链表的排序〕,排序选择冒泡排序法,最后去掉一个最高分去掉一个最低分。STARTEND定义变量inti,j;floatt;charc='y';WHILE(c=='y'||c=='Y')录入选手信息:编号,XXFOR(i=0;igrades[j]>p1->grades[j+1])交换数的位置去掉一个最高分,去掉一个这一低分,得出最后的平均分IF(p1==NULL)内存分配失败IF(head==NULL&&tail==NULL)创立节点选手信息录入成功如果当前还有节点那么插入到尾部是否继续(Y/N)图7.参赛选手信息录入模块/*---------------creat函数-----------------------*/voidcreat(){inti,j;floatt;charc='y';while(c=='y'||c=='Y'){SONGER_MESSAGE*p1=(SONGER_MESSAGE*)malloc(LEN);printf("\n请输入要录入的选手信息:\n");printf("\n选手编号:");scanf("%d",&p1->num);printf("\n选手:");scanf("%s",p1->name);printf("\n请输入10位评委点评成绩:");p1->ave=0;for(i=0;igrades[i]));//runtimeerrorp1->ave+=p1->grades[i];}for(i=0;igrades[j]>p1->grades[j+1]){t=p1->grades[j];p1->grades[j]=p1->grades[j+1];p1->grades[j+1]=t;}p1->ave=(p1->ave-(p1->grades[0]+p1->grades[9]))/8;//去掉一个最高分,去掉一个这一低分,得出最后的平均分p1->next=NULL;if(p1==NULL){printf("\n存分配失败\n");n=n-1;}if(head==NULL&&tail==NULL)//当前没有结点,创立第一个结点{head=p1;head->next=NULL;tail=head;printf("\n------选手信息录入成功------\n");}else//如果当前还有节点那么插入到尾部{tail->next=p1;tail=p1;tail->next=NULL;printf("\n------选手信息录入成功------\n");}printf("是否继续(Y/N):");getchar();scanf("%c",&c);}}成绩排序rank()分析:用冒泡排序的方法对平均成绩〔链表〕进展排序。STARTEND定义指针变量*p1,*p2,*endpt,*p;p1=head;IF(head==NULL&&tail==NULL)当前信息记录为空为p1分配内存,p1->next=head;head=p1;FOR(endpt=NULL;endpt!=head;endpt=p)FOR(p=p1=head;p1->next->next!=endpt;p1=p1->next)IF(p1->next->avenext->next->ave)两节点的顺序交换把p1的信息去掉,head指向排序后的第一个节点释放p1并将p1重新指向头指针WHILE(p1!=NULL)输出选手排名加上表尾部getchar();图8.成绩排序模块/*------------------------------------rank函数-----------------------------------------*/voidrank(){SONGER_MESSAGE*p1,*p2,*endpt,*p;//*endpt/*控制循环比拟*/*p/*临时指针变量*/n=0;p1=head;if(head==NULL&&tail==NULL){printf("\n--------当前信息记录为空--------\n");}else{p1=(SONGER_MESSAGE*)malloc(LEN);p1->next=head;/*注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比拟。因为第一个节点没有前驱,我们不能交换地址。*/head=p1;/*让head指向p1节点,排序完成后,我们再把p1节点释放掉*/for(endpt=NULL;endpt!=head;endpt=p)/*结合第6点理解*/{for(p=p1=head;p1->next->next!=endpt;p1=p1->next){if(p1->next->avenext->next->ave)/*如果前面的节点键值比后面节点的键值小,那么交换*/{p2=p1->next->next;//1、排序后q节点指向p节点,在调整指向之前,我们要保存原p的指向节点地址,即:p2=p1->next->nextp1->next->next=p2->next;//2、顺着这一步一步往下推,排序后p1->next->next要指的是p2->next,所以p1->next->next=p2->nextp2->next=p1->next;//3、p2->next原是q发出来的指向,排序后q的指向要变为指向p的,而原来p1->next是指向p的,所以p2->next=p1->nextp1->next=p2;//4、p1->next原是指向p的,排序后图16中p1->next要指向q,原来p1->next->next〔即p2)是指向q的,所以p1->next=p2p=p1->next->next;//5、至此,完成了相邻两节点的顺序交换}}}p1=head;/*把p1的信息去掉*/head=head->next;/*让head指向排序后的第一个节点*/free(p1);/*释放p1*/printf("\n-----------选手成绩排名信息如下---------\n");printf("--------|--------|--------|--------\n");printf("编号||平均成绩|名次\n");p1=head;while(p1!=NULL){printf("--------|--------|--------|--------\n");printf("%-9d%-9s%-9.1lf%-5d\n",p1->num,p1->name,p1->ave,n+1);n++;p1=p1->next;}printf("--------|--------|--------|--------\n");}getchar();}删除函数del()分析:节点的删除较为繁琐。第一种情况:数据在链表头部,并且只有一个结点。第二种情况:数据在链表头部,头结点。第三种情况:数据在链表中间,中间节点。第四种情况:数据在链表尾部,尾部节点。STARTEND定义变量,输入要删除的选手的编号&del_numIF(head==NULL&&tail==NULL)信息记录为空,删除失败!node=head;p1=head;WHILE(node!=NULL)IF(node->num==del_num)输出要删除的选手信息IF(node==head&&head->next==NULL)删除唯一的节点IF(node==head&&head->next!=NULL)删除头节点IF(node->next!=NULL)中间节点删除成功IFif(node->next==NULL)删除尾节点getchar();Returnp1=node;node=node->next;IF(head!=NULL&&check==0)要删除的选手信息不存在!图9.删除模块/*----------------------del函数--------------------------*/voiddel(){SONGER_MESSAGE*node;//=(SONGER_MESSAGE*)malloc(LEN);SONGER_MESSAGE*p1;intcheck=0;//用来进展判断,是否找到了要删除的信息longdel_num;printf("\n请输入要删除的选手的编号:");scanf("%d",&del_num);if(head==NULL&&tail==NULL){printf("\n当前信息记录为空,删除失败!\n");}else{node=head;p1=head;while(node!=NULL){if(node->num==del_num){printf("\n--------要删除的选手信息--------\n");printf("--------|--------\n");printf("编号|\n");printf("--------|--------\n");printf("%-9d%-6s\n",node->num,node->name);//在这里找到了要删除的选手信息printf("--------|--------\n");check=1;//找到要删除的信息,赋为真if(node==head&&head->next==NULL)//是头结点,并且只有一个结点{head=NULL;tail=head;free(node);printf("\n--------删除信息成功--------\n");//删除唯一的节点}elseif(node==head&&head->next!=NULL)//删除头节点{node=head;head=head->next;free(node);printf("\n--------删除信息成功--------\n");//头节点删除成功n=n-1;}elseif(node->next!=NULL)//删除中间节点{p1->next=node->next;free(node);printf("\n--------删除信息成功--------\n");//中间节点删除成功n=n-1;}elseif(node->next==NULL)//删除尾节点{p1->next=NULL;tail=p1;free(node);printf("\n--------删除信息成功--------\n");//尾节点删除成功n=n-1;}getchar();return;}else{p1=node;node=node->next;}}}if(head!=NULL&&check==0){printf("\n对不起,你要删除的选手信息不存在!\n");}getchar();}公共模块颜色控制函数color()分析:为了使程序看起来更美观,所以引入windowsapi来控制颜色函数,用来改变字体颜色。/*--------------------------color函数-----------------------------*/voidcolor(constunsignedshortcolor1){/*仅限改变0-15的颜色;如果在0-15那么实现他的颜色因为如果超过15后面的改变的是文本背风光。*/if(color1>=0&&color1<=15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color1);/*如果不在0-15的围颜色,那么改为默认的颜色白色;*/elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);/*颜色对应值:0=黑色8=灰色  1=蓝色9=淡蓝色2=绿色10=淡绿色0xa3=湖蓝色11=淡浅绿色0xb4=红色12=淡红色0xc5=紫色13=淡紫色0xd6=黄色14=淡黄色0xe7=白色15=亮白色0xf*/}退出函数quit()分析:用来退出程序/*----------------------quit函数----------------------------*/voidquit(){printf("\n\n\t==========?感您使用歌唱比赛评分系统?==========\n\n");}目录函数menu()分析;为程序入口提供显示,因篇幅有限,所以显示有错乱。/*-------------------------------------menu函数-----------------------------------------*/voidmenu(){system("modeconcols=100lines=30");color(11);printf("\t.;r155551r;.\n");printf("\t★☆★☆歌唱比赛评分系统☆★☆★:r1hhhhhhhhhh1r:\n");printf("\t:1SSSS555555555SSSSSr\n");printf("\t.sSSS555SS1.,.\n");printf("\t1.选手信息浏览hS55555SSiiSh.\n");printf("\trS5555SSh,.sSSS1\n");printf("\trh555SS5i;5S555S,\n");printf("\t2.选手信息录入Sh5SS5r,1SS5555Si\n");printf("\thh5555555555SS5r..sSS555555S;\n");printf("\t,hS555555SSS5r..r5SS555555S5.\n");printf("\t3.选手信息保存:SS555SSS1;,sSSS5555555SS;\n");printf("\tiSSSShi.;1SSS55555555SS;\n");printf("\t,sr,,r5SS55555555SSS1,s1.\n");printf("\t4.选手成绩查询i533SSSSSSSSSSS5s,.1SS5i\n");printf("\t.:is1h5555h1si,.r5S55SSh;\n");printf("\t..,;s5SS55555SS1,\n");printf("\t5.选手信息修改.sS3S555555555SSs.\n");printf("\t,r5SS55555555SS5i\n");printf("\t;hSSS5555555SSh:\n");printf("\t6.选手信息删除:sSSS5555555SS1,\n");printf("\t,r5SS5555555SSr.\n");printf("\t.ihSSS55555SS5;\n");printf("\t7.退出系统:1SSS55555SSs\n");printf("\t,r5SS5555S5\n");printf("\t:shhhhh:\n");color(15);}欢送模块wele()分析:一个系统需要一个美观欢送界面,由于DOS窗口有限,所以用点阵字写出“wele〞并且在右下角增加当前时间显示。时间用的time.h库来实现。/*--------------------------wele函数-----------------------------*/intwele(){system("modeconcols=65lines=25");printf("\n\n\n\n");color(14);printf("##########################\n");color(14);printf("#############\n");color(11);printf("############\n");color(11);printf("####################\n");color(11);printf("############\n");color(13);printf("#############\n");color(13);printf("###############################\n");color(10);printf("\n\n\n\n\n制作:电子信息工程系通信工程1班42王泽38郭世杰49贺鑫\n");color(15);time_tit;it=time(NULL);ptr=localtime(&it);printf("\n\t\t\t当前系统时间:%4d年%02d月%02d日%d:%d\n",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);printf("\n\n按任意键进入主菜单\n");getch();system("cls");menu();menu_select();return0;}主函数main()分析;提供程序入口。/*-------------------------------------main函数-----------------------------------------*/intmain(){wele();return0;}库函数#include#include#include#include#include#include#include#defineLENsizeof(SONGER_MESSAGE)#defineN10构造体structtm*ptr;//用于wele〔〕显示时间的构造体typedefstructsonger//定义选手信息链表构造{longnum;//选手编号charname[20];//选手floatgrades[N];//选手成绩doubleave;//平均成绩structsonger*next;//链表的结点,next是指针变量,指向构造体变量=>指针域}SONGER_MESSAGE;//等价于structSONGER_MESSAGESONGER_MESSAGE*head;//定义链表的头指针SONGER_MESSAGE*tail;//定义链表的尾指针intn=0;//n为全局变量,用于统计结点的个数测试结果调试与测试第一,用一组简单的数据对程序进展调试,是否各函数有出错现象。然后用复杂数据对程序进展调试。直到确定程序对正常数据没有错误为止。第二,当数据测试时,程序错误,要首先找到出错的函数,对函数中各个变量进展观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助。你也可以先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试,对有疑问的数据循环进展仔细观察。虽然这是比拟省力气的活,但对复杂的数据错误并不是很有效,所以仔细观察每个数据的变化对调试的成功与否有决定性作用。第三,测试时,根本的错误并不一定在运行错误的函数,或许在前面的函数已经奠定了这些错误数据的根底,需要反过头来,对所有的的函数进展一项项的调试!从程序运行的第一个函数开场调试。按照程序运行的步骤下去。一个个确实定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数。所谓的各个击破便是如此。对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意。第四,调试时,需要对错误缩小围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小围或对编译没通过的程序缩小错误围时可以用"/**/"来进展调试,确定正常围,缩小错误围。测试结果截图图10.欢送界面图11.主菜单图12.选手信息浏览图13选手信息录入图14选手信息保存图15选手信息查询图16选手详细信息查询图17选手排名查询图18选手信息修改图19选手信息删除图20退出系统设计总结通过以上各章节的介绍,已经完成了歌唱比赛评分系统设计系统的开发,歌唱比赛评分系统设计是一套实用性非常强的系统,可以应用到各种评分系统。歌唱比赛评分系统设计不仅需要灵活的交互功能,还需要经常与数据库进展联系,要求具有操作简单和功能强大的数据库访问能力。界面尽量美观友好、多彩多姿,完全的图形化设计,操作者易于上手,同时多种媒体技术的集成利用,可以方便的完成用户乐于承受的各种界面设计。本系统虽具备了根本的功能,但由于时间关系,还有很多功能待实现,在此根底上结合实际应用中所出现的问题,更智能化的排名系统,以及增加网络评分,观众评分等功能。通过这次编程我深深的感受到对代码的变量命名,代码注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大防止重复性的开发工作。善于总结,也是学习能力的一种表达,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的缺乏,这样所编写的程序才能逐步提高。致在学习中,教师严谨的治学态度、丰富渊博的知识、精益求精的工作态度以及侮人不倦的师者风是我终生学习的楷模,教师们的高深精湛的造诣与严谨的治学精神,将永远鼓励着我。在此,谨向教师们致以衷心的感和崇高的敬意!另外,感校方给予我我们这样一次时机,能够独立地完成一个课程设计,并在这个过程当中,给予我们各种方便,使我们在这学期快要完毕的时候,能够将学到的知识应用到实践中,增强了我们实践操作和动手应用能力,提高了独立思考的能力。感所有任课教师和所有同学在这三年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的意。在这次课程设计的撰写中,我得到了许多人的帮助。首先我要感我的教师在课程设计上给予我的指导、提供应我的支持和帮助,这是我能顺利完成这次设计的主要原因,更重要的是教师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。最后再一次感所有在设计中帮助过我的良师益友和同学参考文献[1]谭浩强.C程序设计.:清华大学,2007.91-310[2]谭浩强.C程序设计题解与上机指导.:清华大学,2005.130-155[3]明慧.VisualC++开发图书管理系统.:师大学,2005.32-40[4]C编写组编.常用C语言用法速查手册.:龙门书局,1995.34-45[5]俐,莹 编著.C语言高级程序设计.:清华大学,2006.67-78[6]海新,燕主编.C语言程序设计实用教程.:机械工业,2007.161-174附录源代码:#include#include#include#include#include#include#include#defineLENsizeof(SONGER_MESSAGE)#defineN10structtm*ptr;//用于wele〔〕显示时间的构造体typedefstructsonger//定义选手信息链表构造{longnum;//选手编号charname[20];//选手floatgrades[N];//选手成绩doubleave;//平均成绩structsonger*next;//链表的结点,next是指针变量,指向构造体变量=>指针域}SONGER_MESSAGE;//等价于structSONGER_MESSAGESONGER_MESSAGE*head;//定义链表的头指针SONGER_MESSAGE*tail;//定义链表的尾指针intn=0;//n为全局变量,用于统计结点的个数voidcreat();//建立单向动态链表。此函数带回一个指向链表头的指针,用于参赛选手的录入voiddel();//用于删除结点,用于参赛选手的删除voidsearch();//参赛选手成绩的查询voidprint();//用于输出链表voidrank();//按个人平均成绩从高到低的顺序进展排序voidupdate();//参赛选手的修改voidmenu();//操作系统菜单界面voidmenu_select();//菜单项选择择界面voidbrowse();//选手信息浏览voidsave();//选手信息保存voidquit();//退出系统界面/*----------------------browse函数-----------------------------*/voidbrowse(){SONGER_MESSAGE*p1;if(head==NULL&&tail==NULL){printf("\n--------当前信息记录为空--------\n");}else{printf("\n-----------你要浏览的选手信息如下---------\n");printf("--------|--------\n");printf("编号|\n");p1=head;while(p1!=NULL){printf("--------|--------\n");printf("%-9d%-6s\n",p1->num,p1->name);p1=p1->next;}printf("--------|--------\n");}}/*---------------------------search函数-------------------------------*/voidsearch(){intc;printf("\n请选择查询容:\n");printf("1.选手详细成绩查询2.选手排名查询\n请输入您的选择:");scanf("%d",&c);switch(c){case1:system("cls");print();break;case2:system("cls");rank();break;}}/*------------------------------------print函数-----------------------------------------*/voidprint(){SONGER_MESSAGE*p1=(SONGER_MESSAGE*)malloc(LEN);intcheck=0,i;longseeknum;printf("\n请输入要查找的选手编号:");scanf("%d",&seeknum);if(head==NULL&&tail==NULL){printf("\n对不起,当前记录为空!\n");}else{p1=head;printf("\n-----------你要找的选手的成绩如下---------\n");//在这里找到了要查找的选手成绩printf("------|------|-----|----|----|----|----|----|----|----|----|----|----|----------|--------\n");printf("编号||成绩|1|2|3|4|5|6|7|8|9|10|平均成绩\n");printf("------|------|-----|----|----|----|----|----|----|----|----|----|----|----------|--------\n");while(p1!=NULL){if(p1->num==seeknum){printf("%-7d%-6s",p1->num,p1->name);printf("");for(i=0;igrades[i]);}printf("%-6.2lf\n",p1->ave);check=1;getchar();return;}else{p1=p1->next;}}}if(head!=NULL&&check==0){printf("\n对不起,你查看的选手成绩不存在!\n");}getchar();}/*----------------menu_select函数------------------------*/voidmenu_select(){chars[100];intc;gets(s);//不管用户输入的是数字键或是字母键使用gets都能将输入作为字符串接收while(1)//限定用户输入的数值必须在1-7之间才有效,否那么要求重新输入{c=atoi(s);//利用atoi()函数将所接收的字符串转换成数值,提供应if语句判断if(c<1||c>7){printf("您的输入有误,请重新输入:");gets(s);}elsebr
/
本文档为【歌唱比赛评分系统设计(C语言完整版)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索