


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用乂档沈阳航空航天大学课程设计学号班级姓名指导教师年月日实用文档沈阳航空航天大学课程设计任务书学院:专业:班级:学号:题目:唱歌比赛评委评分系统、课程设计时间二、课程设计内容参加唱歌比赛 3位选手的名称和出场顺序存放在文件file22.txt 中;评委共有7个。每当一个选手表演之后,7个评委都分别评分(010分),而选手的最终得分计算规则为:去掉7个评分的最高和最低分,取剩下 5个评分的平均值。程序最后打印出3位选手的成绩。三、课程设计要求程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“读取并显示选手名单”、“表演与评 分”、“打印最后成绩”
2、、“退出” 4项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:成绩学生签名:六、教师评语4.8.14.14一、 需求分析 1二、 设计分析 2三、主要界面截图四、技术要点'五、个人总结六、参考文献七、源程序一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如 下的需求分析。该系统是一个分数录入以及评定系统,其使用者被假定为某歌 唱比赛的管理人员,系统应该具有安全、稳定、功能齐全的特点。1. 安全性分析系统管理的数据涉及到参赛的所有选手,为防
3、止他人恶意修 改,所以在进入评分系统前有密码程序,只有掌握了正确的密码才 能进入程序进行各项操作。2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理 正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。3. 主要功能分析(1)密码程序:在程序尾端设置好密码,只有掌握密码的管 理员才能进入程序进行成绩录入,修改等操作,避免信息被他人修 改,造成比赛不公(2)菜单:有一个功能强大又清晰明了的菜单能极大程度方 便管理员的操作(3)数据输入:在每个输入前都有详细分类和提示,简单明 了,根据提示输入参赛选手号数,姓名,各个评委打分成绩(4)数据保存:对于输入的数据,或被修改的数
4、据应该保存 到某个磁盘文件中,实现永久存储。运用了指针函数后便可实现该 功能。将输入的选手信息存储到自动生成的文件中,以便于程序自动读取或人工阅读(5) 成绩排名:利用冒泡程序对数组进行排序,删除一个最 高与最低然后进行讲剩下的值平均,得出选手最终得分,再根据分 数高低排名(6 )数据查询:用户输入查询条件,系统规则地在界面显示 查询结果,不光可以输入号数,查询到该选手信息,每位评委打分; 还可以选择排名查询,显示的数据全面。、设计分析主要有9个功能模块,每个模块对应一个 C语言自定义函数这些函数原型及其功能简述如下:2、主要功能模块框图(传统流程图或 N-S框图)(1)密码程序plus()(
5、2)参赛选手信息录入creat ()Printf参赛选手号数Printf姓名Printf7位评委打分是否继续输入是否重新执行开头返回主菜单(3) 浏览选手数据browse()(4) 查询选手成绩search()(5) 删除函数del()(6) 查询选手信息print()(7) 菜单函数menu()(8) 修改函数update()(9) 指针函数rank()(10) 保存函数save()三、主要界面截图图1进入程序输入密码界面图2程序主界面图3选手信息录入图4选手信息浏览图5单个选手成绩查询图6选手排名查询图7选手信息修改图8选手信息删除图9程序退出四、技术要点1冒泡程序应用运用冒泡程序对各个参
6、赛选手排序, 并去除头与尾即最高分和 最低分,将剩下的评委得分运算得出选手最终平均分, 然后再排序, 便能得出选手名次。for(i=0;i<N-1;i+)/冒泡排序法让那个成绩从小到大排列,然后选出最大值是最后一个, 最小值是第一个for(j=0;j<N-1-i;j+) if(p1->gradesj>p1->gradesj+1) t=p1->gradesj; p1->gradesj=p1->gradesj+1;p1->gradesj+1=t; p1->ave=(p1->ave-(p1->grades0+p1->gra
7、des9)/8;/去掉一个最高分,去掉一个这一低分,得出最后的平均分2、文件操作包括了文件的写入和读取两个方面。运用指针程序文件的写入操作,用于保存录入的数据,也用于保存所修改的数据。例如下段 程序。void save()/将数据保存到文件FILE *fp;S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);p仁head;fp=fopen(” 参赛选手名单.txt","w");fprintf(fp,"1n");fprin tf(fp,"编号 | 姓名 n");while(p1 != NULL)f
8、printf(fp,"1n");fprin tf(fp," %-9d%-6sn",p1-> num,p1-> name);p1=p1- >n ext;fprintf(fp,"1n");fclose(fp);printf("nt文件已将保存到"参赛选手名单.txt"");3、关于删除算法实现从系统中删除某位同学的相关信息的算法稍微复杂一些,其实质是对数组某个或某些元素的删除操作。对数组元素的删除操作完成后,再将数组写入到文件中,就完整地实现了“删除”。void del()S_ME
9、SSAGE *no de;/=(S_MESSAGE *)malloc(LEN);S_MESSAGE *p1;long del_ num;prin tf("n请输入要删除的选手的编号:”);scan f("%d", &del_ num);if(head = NULL && tail =NULL)prin tf("n当前信息记录为空,删除失败!n");elsenode=head;p仁head;while( node != NULL)if(no de->num = del_ num)printf("n要删除的选
10、手信息n");printf(”1n");printf(" 编号 | 姓名 n");printf(”1n");printf(” -9d%-6sn", no de->num,no de->n ame);/在这里找到了要删除的选手信息check=1;/找到要删除的信息,赋为真if(node = head && head->n ext = NULL)/是头结点,并且只有一个结点head=NULL;tail=head;free( no de);printf("n删除信息成功n"); /删除唯
11、一的节点else if(node = head && head->next != NULL)/删除头节点node=head;head=head->n ext;free( no de);printf("n删除信息成功n"); /头节点删除成功n=n-1;else if(node ->next != NULL) /删除中间节点p1- >n ext =no de->n ext;free( no de);n"); /中间节点删除成功n=n-1;else if(n ode-> next = NULL) /删除尾节点p1-&
12、gt; next=NULL;tail=p1;free( no de);printf("n删除信息成功n"); /尾节点删除成功n=n-1;getchar();return;elsep1= no de;node=no de->n ext;if(head != NULL && check = 0)getchar();五、个人总结自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且 学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理 论与实际相结合是很重要的,只有
13、理论知识是远远不够的,只有把所学的理 论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而 提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这 毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了 自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固, 比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温 故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在谢老 师的辛勤指导下,终于游逆而解。对给过我帮助的所有同学和各位指导老师 再次表示忠心的感谢!六、参考文献(参考的书籍或互联网资源)1 谭浩强.C程序设计北京:
14、清华大学出版社,20052 网络资源加密程序七、源程序/*密码:123456只有密码输入正确,才能进入plus程序.*/#in elude <stdio.h>#i nclude <stdlib.h>#in elude vconi o.h>#i nclude <stri ng.h>#in elude <malloc.h>#defi ne LEN sizeof(S_MESSAGE)#defi ne N 7typedef struct son ger/long num;/char n ame20;/float gradesN;/double av
15、e;/struct son ger * n ext;/变量,指向结构体变量 S_MESSAGE;S_MESSAGE * head;/S_MESSAGE * tail;/定义选手信息链表结构选手编号选手姓名选手成绩平均成绩链表的结点,next是指针int n=0;/结点的个数定义链表的头指针定义链表的尾指针n为全局变量,用于统计数带回一个指向链表头的指针,用于参赛选手的录入void del();/用于删除结点,用于参赛选手的删除void search();/参赛选手成绩的查询void prin t();/用于输出链表void rank();/按个人平均成绩从咼到低的顺序进行排序void upda
16、te();/参赛选手的修改void menu();/操作系统菜单界面void menu _select();/菜单选择界面void browse();/选手信息浏览void save();/选手信息保存void quit();/退出系统界面/*rank*/函数void ran k()S_MESSAGE *p1,*p2,*e ndpt,*p; / *en dpt/* */ *p/*临时指针变量*/n=0;p1=head;控制循环比较if(head = NULL && tail = NULL)printf("n 当前信息记录为空n");elsepl = (S_M
17、ESSAGE *)malloc(LEN);p1-> next = head; /*注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节 点没有前驱,我们不能交换地址。*/head = p1;/*让head指向p1节点,排序完成后,我们再把p1节点释放掉*/for(endpt=NULL; endpt!=head; endpt=p) /*结合第 6 点理解*/for(p=p1=head; p1- >n ext- >n ext!=e ndpt;p1=p1- >n ext)if(p1- >n ext->ave < p1- >
18、n ext- >n ext->ave)/*如果前面的节点键值比后面节点的键值小,则交换*/p2 = p1-> next-> next;1、排序后q节点指向p节点,在调整指向之前,我们要保存原 p的指向 节点地址,即:p2=p1- >n ext- >n extp1-> next- >n ext = p2-> next;2、顺着这一步一步往下推,排序后p1->next->next要指的是p2->next.所以 p1->next->next=p2->nextp2-> next = p1-> next
19、;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- >n ext- >n ext;5、至此,完成了相邻两节点的顺序交换把pl的信息去掉*/让head指向排序后的第一个释放p1*/pl = head;/*head = hea
20、d->n ext;/*节点*/free(p1);/*printf("n 选手成绩排名信息如下n");printf("111n");printf(" 编号| 姓名|平均成绩|名次n");p仁head;while(p1 != NULL)printf("111n");prin tf(" %-9d%-9s%-9.1lf%-5dn",p1-> num,p1-> name,p1- >ave ,n+1);n+;p1=p1- >n ext;printf("111n&quo
21、t;);getchar();/*print函数*/ void prin t()S_MESSAGE * p1=(S_MESSAGE *)malloc(LEN);int check=0,i;long seek num;prin tf("n请输入要查找的选手编号:");sca nf("%d",&seek nu m);if(head = NULL && tail = NULL )printf("n对不起,当前记录为空!n");elsep仁head;printf("n 你要找的选手的成绩如下n");在
22、这里找到了要查找的选手成绩printf("-|-|-|-|-|-|-|-|-|-|1n");prin tf(" 编号 | 姓名 | 成绩 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |平均成绩n");printf("-|-|-|-|-|-|-|-|-I-T1n");while(p1 != NULL)if(p1- >num = seek num)prin tf(" %-7d%-6s",p1-> num,p1-> name);printf("");for(i=0;i&l
23、t;N;i+)printf(" %.1f ",p1->gradesi);printf(" %-6.2lfn",p1->ave);check=1;getchar();return;elsep1=p1- >n ext;if(head != NULL && check = 0)prin tf("n对不起,你查看的选手成绩不存在!n");getchar(); void search()/*search*/函数int c;prin tf("n请选择查询内容:n");printf("
24、1.选手详细成绩查询2.选手排名查询n请输入您的选择:");sea nf("%d",&c);switch(c)case 1:system("cls");pri nt();break;case 2:system("cls");ra nk();break;/*save函数*/void save()将数据保存到文件FILE *fp;S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);p仁head;fp=fopen(” 参赛选手名单.txt","w");fprint
25、f(fp,"1n");fprin tf(fp,"编号 | 姓名 n");while(p1 != NULL)fprintf(fp,"1n");fprin tf(fp," %-9d%-6sn",p1-> nu m,p1-> name);p1=p1- >n ext;fprintf(fp,"1n");fclose(fp);printf("nt文件已将保存到"参赛选手名单.txt"");/*update函数*/ void update()S_MES
26、SAGE *p1;/=(S_MESSAGE *)malloc(LEN);in t check=0; /用来进行判断,是否找到了要修改的信息long update num;printf("n请输入要修改的选手编号:");sca nf("%d",&update nu m); 查找到要修改的选手if(head = NULL && tail = NULL)printf("n 当前信息记录为空n");elsep仁head;if(p1- >num = update num)printf("n 你要修改的选手
27、信息如下n");printf("1n");printf(" 编号 | 姓名 n");printf("1n");prin tf(" %-9d%-6sn",p1-> num,p1-> name);printf("1n");printf("n 请重新写入此选手信息:n");check=1;从新写入修改项目prin tf("n修改选手编号为:");scan f("%d",&p1-> nu m);prin tf
28、("n修改选手姓名为:");sca nf("%s",p1- >n ame);return;else p1=p1- >n ext;if(head != NULL && check = 0)!n");prin tf("n对不起,你要修改的选手信息不存在getchar();/*browse函数*/ void browse()S_MESSAGE *p1;if(head = NULL && tail = NULL)printf("n 当前信息记录为空n")elseprintf(&q
29、uot;n 你要浏览的选手信息如下n");printf("1n");printf(" 编号 | 姓名 n");p仁head;printf("1n");prin tf(" %-9d%-6sn",p1-> num,p1-> name); p1=p1- >n ext;printf("1n");/*del函数*/ void del()S_MESSAGE *no de;/=(S_MESSAGE *)malloc(LEN);S_MESSAGE *p1;in t check=0;
30、/用来进行判断,是否找到了要删除的信息long del_ num;prin tf("n请输入要删除的选手的编号:");sca nf("%d",&del_num);if(head = NULL && tail =NULL)elsenode=head;p仁head;while( node != NULL)if(no de->num = del_ num)printf("n要删除的选手信息n");printf("1n");printf(" 编号 | 姓名 n");prin
31、tf("1n");printf(” -9d%-6sn", no de->num,no de->n ame);/在这里找到了要删除的选手信息printf("1n");check=1;/找到要删除的信息,赋为真if(node = head && head->n ext = NULL)/是头结点,并且只有一个结点head=NULL;tail=head;free( no de);printf("n 删除信息成功n"); /删除唯一的节点else if(node = head && h
32、ead->n ext != NULL)/删除头节点n"); /n"); /node=head;head=head->n ext;free( no de);printf("n 删除信息成功头节点删除成功n=n-1;else if(node ->next != NULL) / 删除中间节点p1- >n ext=no de->n ext;free( no de);printf("n 删除信息成功中间节点删除成功n=n-1;else if(no de-> next = NULL) / 删除尾节点p1-> next=NUL
33、L;tail=p1;free( no de);printf("n 删除信息成功n"); / 尾节点删除成功n=n-1;getchar();return;elsep1= no de;node=no de->n ext;if(head != NULL && check = 0)!n");prin tf("n对不起,你要删除的选手信息不存在getchar();/*creat函数*/void creat()int i,j;float t;char c='y'while(c = 'y' | c = 'Y
34、')S_MESSAGE *p1=(S_MESSAGE *)malloc(LEN); prin tf("n请输入要录入的选手信息:n");prin tf("n选手编号:");sca nf("%d",&p1-> nu m);prin tf("n选手姓名:");sca nf("%s",p1- >n ame);printf("n请输入7位评委点评成绩:");p1->ave = 0;for(i=0;i<N;i+)sca nf("%f&q
35、uot;,&( p1->gradesi);/run timeerrorp1->ave += p1->gradesi;for(i=0;i<N-1;i+)/冒泡排序法让那个成绩从小到大排列,然后选出最大值是最后一个,最小值是第一个for(j=0;j<N-1-i;j+)if(p1->gradesj>p1->grades|j+1)t=p1->gradesj;p1->gradesj=p1->gradesj+1; p1->gradesj+1=t;p1->ave=(p1->ave-(p1->grades0+p1
36、->grades9)/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->n ext=p1;tail=p1;tail-> next=NULL;print
37、f("n 选手信息录入成功n");printf("是否继续(Y/N):");getchar();sca nf("%c",&c);/*quit函数*/void quit()prin tf("nnt=感谢您使用歌唱比赛评分系统=nn");/*menu函数*/void menu()prin tf("nnt*歌唱比赛评分系统(制作人况思雨)*nn");prin tf("1.选手信息浏览2.n");prin tf("3.选手信息保存4.n");prin tf("5.选手信息修改6.n");prin tf("7.退出系统n");prin tf("n *系统菜单选择界面选手信息录入选手成绩查询选手信息删除*n");prin tf("t>>请根据您想执行的命令,输入对应功能的数字键&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 伺服系统与工业机器人课件第10章 工业机器人的运力学分析
- 守护蓝色星球
- 分享护理文献
- 羊驼创意画课件
- 山西省平遥县综合职业技术学校2024-2025学年高三第二学期期终调研测试文生物试题试卷含解析
- 河北东方学院《文化人类学》2023-2024学年第二学期期末试卷
- 甘肃省会宁一中2025届高三下学期4月月考化学试题含解析
- 南阳理工学院《统计分析与软件应用》2023-2024学年第一学期期末试卷
- 唐山学院《太阳能发电技术》2023-2024学年第二学期期末试卷
- 内蒙古化工职业学院《企业战略思考与行动系列讲座》2023-2024学年第二学期期末试卷
- 事业单位固定资产购置流程图
- 变压器生产工艺
- 融创文旅集团出差管理制度(培训课件)
- 基坑监测周报
- 客户信用等级评价表
- CCTV雨污水管道检测缺陷内容判断依据判断标准
- 《青少年管弦乐队指南》.PPT
- 合规管理有效性评估表
- 应急管理试题库
- 苯的加成精彩动画演示教学课件
- 输电线路验收典型缺陷识别
评论
0/150
提交评论