




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沈阳航空航天大学课程设计学 号班 级姓 名指导教师年 月 日沈阳航空航天大学课程设计任务书学院:专业:班级:学号:题目:唱歌比赛评委评分系统一、课程设计时间二、课程设计内容参加唱歌比赛3 位选手的名称和出场顺序存放在文件file22.txt 中;评委共有7 个。每当一个选手表演之后, 7个评委都分别评分( 010 分) , 而选手的最终得分计算规则为:去掉 7 个评分的最高和最低分, 取剩下 5 个评分的平均值。 程序最后打印出 3 位选手的成绩。三、课程设计要求程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“读取并显示选手名单” 、 “表演与
2、评分” 、 “打印最后成绩” 、 “退出” 4 项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。学生签名: 四、指导教师和学生签字指导教师: 五、成绩六、教师评语一、需求分析 二、设计分析三、主要界面截图四、技术要点五、个人总结六、参考文献 七、源程序、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。该系统是一个分数录入以及评定系统, 其使用者被假定为某歌唱比赛的管理人员,系统应该具有安全、稳定、功能齐全的特点。1. 安全性分析系统管理的数据涉及到参赛的所有选手,为
3、防止他人恶意修改,所以在进入评分系统前有密码程序,只有掌握了正确的密码才能进入程序进行各项操作。2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。3. 主要功能分析( 1 )密码程序:在程序尾端设置好密码,只有掌握密码的管理员才能进入程序进行成绩录入,修改等操作,避免信息被他人修改,造成比赛不公( 2 )菜单:有一个功能强大又清晰明了的菜单能极大程度方便管理员的操作( 3 )数据输入:在每个输入前都有详细分类和提示,简单明了,根据提示输入参赛选手号数,姓名,各个评委打分成绩( 4 )数据保存:对于输入的数据,或被修改
4、的数据应该保存到某个磁盘文件中,实现永久存储。运用了指针函数后便可实现该功能。将输入的选手信息存储到自动生成的文件中,以便于程序自动读取或人工阅读(5)成绩排名:利用冒泡程序对数组进行排序,删除一个最 高与最低然后进行讲剩下的值平均,得出选手最终得分,再根据分 数高低排名(6)数据查询:用户输入查询条件,系统规则地在界面显示 查询结果,不光可以输入号数,查询到该选手信息,每位评委打分; 还可以选择排名查询,显示的数据全面。二、设计分析主要有9个功能模块,每个模块对应一个 C语言自定义函数。 这些函数原型及其功能简述如下:1、程序总体结构图(传统流程图或 N-S框图)2、主要功能模块框图(传统流
5、程图或 N-S框图)(4)查询选手成绩search()(5)删除函数del() (6)查询选手信息print() (7)菜单函数menu() (8)修改函数update()(9)指针函数rank() (10)保存函数save()三、主要界面截图图1进入程序输入密码界面图2程序主界面图3选手信息录入图4选手信息浏览图5单个选手成绩查询图6选手排名查询图7选手信息修改图8选手信息删除图9程序退出四、技术要点1、冒泡程序应用运用冒泡程序对各个参赛选手排序, 并去除头与尾即最高分和 最低分,将剩下的评委得分运算得出选手最终平均分, 然后再排序, 便能得出选手名次。for(i=0;i<N-1;i+
6、)/冒泡排序法让那个成绩从小到大排列,然后选出最大值是最后一个, 最小值是第一个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->grades9)/8;/ 去掉一个最高分,去掉一个这一低分,得出最后的平均分2、文件操作包括了文件的写入和读取两个方面。 运用指针程序文件的写入操作,用于保存录入的数据,也
7、用于保存所修改的数据。例如下段程序。void save()/ 将数据保存到文件FILE *fp;S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);p1=head;fp=fopen(" 参赛选手名单.txt","w");fprintf(fp,"|n");fprintf(fp," 编号 | 姓名 n");while(p1 != NULL)fprintf(fp,"|n");fprintf(fp," %-9d%-6sn",p1->num,p1-&
8、gt;name);p1=p1->next;fprintf(fp,"|n");fclose(fp);printf("nt 文件已将保存到 " 参赛选手名单.txt"");3、关于删除算法实现从系统中删除某位同学的相关信息的算法稍微复杂一些,其实质是对数组某个或某些元素的删除操作。 对数组元素的删除操作完成后,再将数组写入到文件中,就完整地实现了“删除” 。void del()S_MESSAGE *node;/=(S_MESSAGE *)malloc(LEN);S_MESSAGE *p1;int check=0; / 用来进行判断,
9、是否找到了要删除的信息long del_num;printf("n 请输入要删除的选手的编号: ");scanf("%d",&del_num);if(head = NULL && tail =NULL)printf("n 当前信息记录为空,删除失败! n");elsenode=head;p1=head;while(node != NULL)if(node->num = del_num)printf("n 要删除的选手信息n");printf("|n");printf
10、(" 编号 | 姓名 n");printf("|n");printf(" %-9d%-6sn",node->num,node->name);在这里找到了要删除的选手信息printf("|n");check=1;找到要删除的信息,赋为真if(node = head && head->next = NULL)是头结点,并且只有一个结点head=NULL;tail=head;free(node);printf("n 删除信息成功n");删除唯一的节点else if(n
11、ode = head && head->next != NULL)删除头节点node=head;head=head->next;free(node);printf("n 删除信息成功n"); / 头节点删除成功n=n-1;else if(node ->next != NULL) /删除中间节点p1->next=node->next;free(node);printf("n 删除信息成功n"); / 中间节点删除成功n=n-1;else if(node->next = NULL) / 删除尾节点p1-&g
12、t;next=NULL;tail=p1;free(node);printf("n 删除信息成功n"); / 尾节点删除成功n=n-1;getchar();return; elsep1=node;node=node->next;if(head != NULL && check = 0)printf("n对不起,你要删除的选手信息不存在!n");getchar();五、个人总结自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且 学到了很多在书本上所没有学到
13、过的知识。通过这次课程设计使我懂得了理 论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理 论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而 提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这 毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了 自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固, 比如说结构体 通过这次课程设计之后,一定把以前所学过的知识重新温 故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在谢老 师的辛勤指导下,终于游逆而解。对给过我帮助的所有同学和各位指导老师 再次表示忠心的
14、感谢!六、参考文献(参考的书籍或互联网资源)1谭浩强.C程序设计.北京:清华大学出版社,2005 2 网络资源加密程序七、源程序/* 密码 :123456 只有密码输入正确#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <malloc.h>#define LEN sizeof(S_MESSAGE)#define N 7typedef struct songer/long num;/char name20;/float
15、gradesN;/double ave;/struct songer * next; /变量,指向结构体变量, 才能进入 plus 程序 .*/定义选手信息链表结构选手编号选手姓名选手成绩平均成绩链表的结点, next 是指针S_MESSAGE;S_MESSAGE * head;/定义链表的头指针S_MESSAGE * tail;/定义链表的尾指针int n=0;结点的个数/n 为全局变量,用于统计void creat();/建立单向动态链表。此函数带回一个指向链表头的指针, 用于参赛选手的录入void del();选手的删除/用于删除结点,用于参赛void search();/参赛选手成绩的
16、查询void print();/用于输出链表void rank();的顺序进行排序/按个人平均成绩从高到低void update();/参赛选手的修改void menu();/操作系统菜单界面void menu_select();/菜单选择界面void browse();/选手信息浏览void save();/选手信息保存void quit();/退出系统界面/*rank函数*/void rank()控制循环比较S_MESSAGE *p1,*p2,*endpt,*p; / *endpt/*/ *p/* 临时指针变量*/n=0;p1=head;if(head = NULL &&
17、tail = NULL)printf("n 当前信息记录为空n");elsep1 = (S_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!=en
18、dpt;p1=p1->next)if(p1->next->ave < p1->next->next->ave)/* 如果前面的节点键值比后面节点的键值小,则交换*/p2 = p1->next->next; /1 、排序后 q 节点指向 p 节点,在调整指向之前,我们要保存原p 的指向节点地址,即: p2=p1->next->nextp1->next->next = p2->next; /2 、顺着这一步一步往下推 , 排序后 p1->next->next 要指的是 p2->next, 所以 p
19、1->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->nex
20、t; /5 、至此,完成了相邻两节点的顺序交换p1 = head; /*把 p1 的信息去掉*/head = head->next; /* 让 head 指向排序后的第一个节点 */free(p1); /*释放 p1*/printf("n 选手成绩排名信息如下n");printf("|n");printf(" 编号 | 姓名 | 平均成绩 | 名次 n");p1=head;while(p1 != NULL)n");printf("printf(" %-9d%-9s%-9.1lf%-5dn"
21、,p1->num,p1->name,p1->ave,n+1);n+;p1=p1->next;printf("|n");getchar();/*print函数*/void print()S_MESSAGE * p1=(S_MESSAGE *)malloc(LEN);int check=0,i;long seeknum;printf("n 请输入要查找的选手编号: ");scanf("%d",&seeknum);if(head = NULL && tail = NULL )printf(&q
22、uot;n 对不起,当前记录为空 !n");elsep1=head;printf("n 你要找的选手的成绩如下n");/ 在这里找到了要查找的选手成绩printf("|-|n");printf(" 编号 | 姓名 | 成绩 | 1 | 2 | 3 | 4 | 5| 6 | 7 | 平均成绩 n");printf("|-|n");while(p1 != NULL)if(p1->num = seeknum)printf(" %-7d%-6s",p1->num,p1->na
23、me);printf(" ");for(i=0;i<N;i+)printf(" %.1f ",p1->gradesi);printf(" %-6.2lfn",p1->ave);check=1;getchar();return;else p1=p1->next;if(head != NULL && check = 0)printf("n 对不起,你查看的选手成绩不存在!n");getchar();/*search函数*/void search()int c;printf(&qu
24、ot;n请选择查询内容:n");printf("1.选手详细成绩查询2. 选手排名查询 n 请输入您的选择: ");scanf("%d",&c);switch(c)case 1:system("cls");print();break;case 2:system("cls");rank();break;/*save 函数*/void save()/ 将数据保存到文件FILE *fp;S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);p1=head;fp=fopen(&
25、quot; 参赛选手名单.txt","w");fprintf(fp,"|n");fprintf(fp," 编号 | 姓名 n");while(p1 != NULL) fprintf(fp,"|n");fprintf(fp," %-9d%-6sn",p1->num,p1->name); p1=p1->next;fprintf(fp,"|n");fclose(fp);printf("nt 文件已将保存到 " 参赛选手名单.txt&q
26、uot;");/*update函数*/void update()S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);int check=0; / 用来进行判断,是否找到了要修改的信息long updatenum;printf("n 请输入要修改的选手编号:");scanf("%d",&updatenum);/ 查找到要修改的选手if(head = NULL && tail = NULL) printf("n 当前信息记录为空n");elsep1=head;while(p1
27、 != NULL)if(p1->num = updatenum)printf("n你要修改的选手信息如下-n");printf("|n");printf(" 编号 | 姓名 n");printf("|n");printf(" %-9d%-6sn",p1->num,p1->name);printf("|n");printf("n 请重新写入此选手信息 :n");check=1;/ 从新写入修改项目printf("n修改选手编号为:
28、");scanf("%d",&p1->num);printf("n修改选手姓名为:");scanf("%s",p1->name);return;elsep1=p1->next;if(head != NULL && check = 0)!n");printf("n 对不起,你要修改的选手信不存在getchar();/*browse函数*/void browse()S_MESSAGE *p1;if(head = NULL && tail = NULL)
29、printf("n 当前信息记录为空n");else printf("n 你要浏览的选手信息如下n");printf("|n");printf(" 编号 | 姓名 n");p1=head;while(p1 != NULL) printf("|n");printf(" %-9d%-6sn",p1->num,p1->name); p1=p1->next; printf("|n");/*del 函数*/void del()S_MESSAGE *
30、node;/=(S_MESSAGE *)malloc(LEN);S_MESSAGE *p1;int check=0; / 用来进行判断,是否找到了要删除的信息long del_num;printf("n 请输入要删除的选手的编号: ");scanf("%d",&del_num);if(head = NULL && tail =NULL)printf("n 当前信息记录为空,删除失败! n");elsenode=head;p1=head;while(node != NULL)if(node->num = d
31、el_num)printf("n 要删除的选手信息n");printf("|n");printf(" 编号 | 姓名 n");printf("|n");printf(" %-9d%-6sn",node->num,node->name);/ 在这里找到了要删除的选手信息printf("|n");check=1;/ 找到要删除的信息,赋为真if(node = head && head->next = NULL)/ 是头结点,并且只有一个结点hea
32、d=NULL;tail=head;free(node);printf("n 删除信息成功n"); / 删除唯一的节点else if(node = head && head->next != NULL)/ 删除头节点node=head;head=head->next;free(node);printf("n 删除信息成功n"); / 头节点删除成功n=n-1;删除中间节点else if(node ->next != NULL) /p1->next=node->next;free(node);printf(&qu
33、ot;n 删除信息成功n"); / 中间节点删除成功n=n-1;else if(node->next = NULL) / 删除尾节点p1->next=NULL;tail=p1;free(node);printf("n 删除信息成功n"); / 尾节点删除成功n=n-1;getchar();return;elsep1=node;node=node->next;if(head != NULL && check = 0)!n");printf("n 对不起,你要删除的选手信息不存在getchar();/*creat
34、函数 */void creat()int i,j;float t;char c='y'while(c = 'y' | c = 'Y')S_MESSAGE *p1=(S_MESSAGE *)malloc(LEN);printf("n 请输入要录入的选手信息: n");printf("n选手编号:");scanf("%d",&p1->num);printf("n选手姓名:");scanf("%s",p1->name);printf(
35、"n 请输入 7位评委点评成绩: ");p1->ave = 0;for(i=0;i<N;i+)errorscanf("%f",&(p1->gradesi); /runtime p1->ave += p1->gradesi;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
36、=p1->gradesj+1;p1->gradesj+1=t;p1->ave=(p1->ave-(p1->grades0+p1->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 选手信息录入成功
37、 n");else / 如果当前还有节点则插入到尾部tail->next=p1;tail=p1;tail->next=NULL;printf("n 选手信息录入成功 n");printf(" 是否继续 (Y/N):");getchar();scanf("%c",&c);/*quit函数*/void quit()printf("nnt= 感谢您使用歌唱比赛评分系统 =nn");/*menu 函数*/void menu()printf("nnt*歌唱比赛评分系统(制作人况思雨)*nn");printf(" 1.n");printf(" 3.n");printf(" 5.n");printf("n");选手信息浏览2.选手信息保存4.选手信息修改6.7.退出系统选手信息录入选手成绩查询选手信息删除printf("n *系统菜单选择界面*n");printf("t>> 请根据您想执行的命令, 输入对应功能的数字键<<n&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 选择偏差的统计修正技术试卷及答案
- 汽车美容效果与客户满意度之间的关系试题及答案
- 2024秋四年级英语上册 Unit 3 My friends课时1 Let's talk Let's play教学设计 人教PEP
- 高中生物 第一册 第4章 生命的物质变化和能量转换 4.4 生物体内营养物质的转变教学设计1 沪科版
- Module 9Unit 3 Language practice-教学设计 2023-2024学年外研版英语七年级上册
- Unit 9 Have you ever been to a museum-Section B 1a-1d-教学设计2023-2024学年人教版英语八年级下册
- 信仰与文学的关系探讨试题及答案
- 五年级英语下册 Unit 2 My favourite season(The second period)第二课时教学设计 人教PEP
- 质量成本控制目标管理制度
- 二手车评估的方法与技巧试题及答案
- 信息技术(基础模块)模块六 信息素养与社会责任
- 《企业知识产权国际合规管理规范》
- 湖北省武汉市武昌区2023-2024学年四年级下学期期末检测数学试题
- 智慧医联体建设项目可行性研究报告
- 中国主要水域资源分布及开发利用
- 《中电联团体标准-220kV变电站并联直流电源系统技术规范》
- 2024年郑州黄河护理职业学院单招职业技能测试题库及答案解析文档版
- 非机动车交通管理及规划研究
- 劳务派遣及医院护工实施预案
- 华电行测题库及答案2024
- 苏州市2023-2024学年高一上学期期末考试数学试题(原卷版)
评论
0/150
提交评论