c语言课设唱歌比赛评分系统_第1页
c语言课设唱歌比赛评分系统_第2页
c语言课设唱歌比赛评分系统_第3页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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、程序总体结构图(传

5、统流程图或 N-S 框图)2、主要功能模块框图(传统流程图或 N-S 框图)1)密码程序 plus()3)浏览选手数据 browse()4)查询选手成绩 search()(5)删除函数 del()(6)查询选手信息 print()(7) 菜单函数 menu()(8) 修改函数 update()(9) 指针函数 rank()(10) 保存函数 save()三、主要界面截图图1 进入程序输入密码界面图 2 程序主界面图 3 选手信息录入图 4 选手信息浏览图 5 单个选手成绩查询图7 选手信息修改图8 选手信息删除四、技术要点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->grades9)/8;/ 去掉一个最高分,去

7、掉一个这一低分,得出最后的平均分2、文件操作包括了文件的写入和读取两个方面。 运用指针程序文件的写入 操作,用于保存录入的数据,也用于保存所修改的数据。例如下段 程序。void save()/ 将数据保存到文件FILE *fp;S_MESSAGE *p1;/=(S_MESSAGE *)malloc(LEN);p1=head;fp=fopen(" 参赛选手名单 .txt","w");fprintf(fp,"|n");fprintf(fp," 编号 | 姓名 n");fprintf(fp,"|n")

8、;fprintf(fp," %-9d%-6sn",p1->num,p1->name);p1=p1->next;fprintf(fp,"|n");fclose(fp);printf("nt 文件已将保存到 " 参赛选手名单 .txt"");3、关于删除算法实现从系统中删除某位同学的相关信息的算法稍微复杂一些, 其实质是对数组某个或某些元素的删除操作。 对数组元素的删除操 作完成后,再将数组写入到文件中,就完整地实现了“删除”void del()S_MESSAGE *node;/=(S_MESSAGE

9、 *)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 = del_num)printf(&quo

10、t;n 要删除的选手信息n");printf("|n");printf("编号 | 姓名n");在这printf("|n");printf(" %-9d%-6sn",node->num,node->name); /里找到了要删除的选手信息n");printf("check=1;/ 找到要删除的信息,赋为真if(node = head && head->next = NULL)/ 是头结点,并且只有一个结点head=NULL;tail=head;free

11、(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("n 删除信息成功n");

12、/ 中间节点删除成功n=n-1;删除信息成功p1->next=NULL; tail=p1; free(node); printf("nn"); /尾节点删除成功n=n-1;getchar();return;else p1=node;node=node->next;if(head != NULL && check = 0)printf("n 对不起,你要删除的选手信息不存 在!n");getchar();五、个人总结自从拿到题目到完成整个编程,从理论到实践,在整整一个星期 的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以

13、前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通 过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理 论知识是远远不够的,只有把所学的理论知识与实践相结合起来, 从理论中得出结论,才能真正为社会服务,从而提高自己的实际动 手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立 做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了 自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不 够牢固,比如说结构体通过这次课程设计之后,一定把以前所 学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最 后在谢老师的辛勤指导下,终于游逆而解。对

14、给过我帮助的所有同 学和各位指导老师再次表示忠心的感谢!六、参考文献(参考的书籍或互联网资源)1 谭浩强 C 程序设计北京:清华大学出版社, 20052 网络资源加密程序七、源程序/* 密码:123456 只有密码输入正确 , 才能进入 plus 程序.*/#include <stdio.h>#include <stdlib.h>#include <conio.h> #include <string.h> #include <malloc.h> #define LEN sizeof(S_MESSAGE) #define N 7type

15、def struct songer/long num;/char name20;/float gradesN;/double ave;/struct songer * next; /变量,指向结构体变量定义选手信息链表结构选手编号选手姓名选手成绩平均成绩链表的结点, next 是指针S_MESSAGE;S_MESSAGE * head;/ 定义链表的头指针S_MESSAGE * tail; /int n=0; /结点的个数void creat(); /数带回一个指向链表头的指针定义链表的尾指针n 为全局变量,用于统计建立单向动态链表。此函用于参赛选手的录入void del(); /选手的删除v

16、oid search(); / 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/* 临时指针变

17、量 */n=0;p1=head;if(head = NULL && tail = NULL)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-&g

18、t;next!=endpt;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-&

19、gt;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

20、= 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%-

21、9s%-9.1lf%-5dn",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 &&

22、tail = NULL )printf("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",

23、p1->num,p1->name);printf(" ");for(i=0;i<N;i+)printf(" %.1f ",p1->gradesi);printf(" %-6.2lfn",p1->ave);check=1;getchar();return;elsep1=p1->next;if(head != NULL && check = 0)!n");printf("n 对不起,你查看的选手成绩不存在getchar();/* search函数*/void sear

24、ch()int c;printf("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

25、(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->name);p1=p1->next;fprintf(fp,"|n");fclose(fp);printf("nt 文件已将

26、保存到 " 参赛选手名单 .txt"");/*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"

27、;);elsep1=head;while(p1 != 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;/ 从新写入修改项目pri

28、ntf("n 修改选手编号为: ");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 = NUL

29、L && tail = NULL)printf("n当前信息记录为空n");elseprintf("n 你要浏览的选手信息如下-n");printf("|n");printf(" 编号 | 姓名 n");p1=head;while(p1 != NULL)printf("|n");printf(" %-9d%-6sn",p1->num,p1->name);p1=p1->next;n");printf("/* del函数*/

30、void del()S_MESSAGE *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)n");printf("n 当前信息记录为空,删除失败!elsenode=head;p1=head;while(node != NUL

31、L)if(node->num = del_num)printf("n 要删除的选手信息n");n");printf("printf("编号 | 姓名 n");printf("|n");printf(" %-9d%-6sn",node->num,node->name);/ 在这里找到了要删除的选手信息printf("|n");check=1;/ 找到要删除的信息,赋为真if(node = head && head->next = NULL

32、)/ 是头结点,并且只有一个结点head=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;fr

33、ee(node);printf("n 删除信息成功n"); /中间节点删除成功n=n-1;else if(node->next = NULL) / 删除尾节点p1->next=NULL;tail=p1;free(node);printf("n 删除信息成功n"); /尾节点删除成功n=n-1;return;elsep1=node;node=node->next;if(head != NULL && check = 0)printf("n 对不起,你要删除的选手信息不存在 !n");/* 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);prin

35、tf("n 请输入 7 位评委点评成绩: ");p1->ave = 0;for(i=0;i<N;i+)scanf("%f",&(p1->gradesi); /runtime errorp1->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->

36、gradesj=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) /当前没有结点,创建第n");n");一个结点head=p1;head->next=NULL;tail=head;

37、printf("n 选手信息录入成功 -else / 如果当前还有节点则插入到尾部tail->next=p1;tail=p1;tail->next=NULL;printf("n 选手信息录入成功 -printf(" 是否继续 (Y/N):");getchar();scanf("%c",&c);/* quit函数*/void quit()printf("nnt= 感谢您使用歌唱比赛评分系统=nn");/* menu 函数*/void menu()printf("nnt* 歌唱比赛评分系统(制作人况思雨)nn");printf(" 1.选手信息浏览2.n");printf(" 3.选手信息保存4.n");printf(" 5.选手信息修改 6.n");printf("7.退出系统n");选手信息录入选手成绩查询选手信息删除printf("n *系统菜单选择界面*n");prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论