second commit

master
高瑞波 6 years ago
parent c2978f2a49
commit df9d746731

106
2.c

@ -0,0 +1,106 @@
int info_show() //打印所有信息
{ int i;
for(i=0;i<snum;i++)
{
printf("\n---------------------------------------------------------------------------------------------\n");
printf("| 编号:%04d | 姓名:%s | 平均分%.2f |\n",st[i].id,st[i].name,st[i].sum);
int j;
printf("|十位评委成绩:");
for(j=0;j<10;j++)
{
printf("[%d]%4.2f ",j+1,st[i].score[j]);
}
printf("\n---------------------------------------------------------------------------------------------\n");
}
getchar();
getchar();
return 0;
}
int info_find() //检索信息
{
int i;
printf("请输入参赛编号\n");
int k;
scanf("%d",&k);
for(i=0;i<snum;i++)//遍历结构体数组course[]查找对应的 课程id
{
if(st[i].id==k)//找到后输出
{
printf(" 编号:%04d 姓名:%s :平均分%.2f \n",st[i].id,st[i].name,st[i].sum);
int j;
printf("十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
break;
}
}
getchar();getchar();
return 0;
}
int grade_modify()
{
int id,i;
printf("请输入参赛编号:");
scanf("%d",&id);
for(i=0;i<snum;i++)//遍历结构体数组course[]查找对应的 课程id
{
if(st[i].id==id)//找到后输出
{
printf(" 编号:%04d 姓名:%s :平均分%.2f \n",st[i].id,st[i].name,st[i].sum);
int j;
printf("十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
while(1)
{
int k;
printf("\n\t\t请输入要修改第几位评委的评分:") ;
scanf("%d",&k);
printf("\t\t请输入要新成绩:");
scanf("%lf",&st[i].score[k-1]);
printf("\t\t十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
printf("\t\t修改成功!\n");
printf("\t\t是否继续修改此人成绩 (y/n) : ");
int flag;
scanf("%d",&flag);
if(flag==0)
break;
//printf("gg");
}
// printf("kk");
double mi=0xffffff,ma=0;
for( j=0;j<10;j++)
{
if(mi>st[snum].score[j])
{
mi=st[snum].score[j];
}
if(ma<st[snum].score[j])
{
ma=st[snum].score[j];
}
st[snum].sum+=st[snum].score[j];
}
st[snum].sum=st[snum].sum-mi-ma;
st[snum].sum/=8;
break;
}
}
save();
return 0;
}

@ -0,0 +1,290 @@
#include<stdio.h> //编译预处理命令
#include<stdlib.h> //定义杂项函数及内存分配函数
#include<string.h> //字符串处理
#include <time.h> //用到了time函数
int main()
{
int num=0;
while(1)
{
system("cls");
load();
printf("|----歌唱比赛管理系统----\n");
printf("\n ----------------------\n");
printf("| [1] 参赛歌手信息录入 |\n");
printf("| [2] 参赛歌手信息显示 |\n");
printf("| [3] 查询参赛歌手信息 |\n");
printf("| [4] 修改评委打分 |\n");
printf("| [5] 查询出场次序 |\n");
printf("| [6] 比赛结果排序 |\n");
printf("| [7] 退出系统 |\n");
printf(" ----------------------\n");
printf("请选择要进行的操作:");
scanf("%d",&num);
switch(num)//菜单
{
case 1 : info_sign();break;//录入
case 2 : info_show();break;//显示
case 3 : info_find();break;//查找
case 4 : grade_modify();break;//修改
case 5 : find_order();break;
case 6 : result_sort();break;
case 7 : exit(0);
}
}
}
struct node{
int id;//编号
char name[20];//姓名
double score[11];//成绩
double sum;//平均分
}st[100],s;
int snum=0;
int load() /********************************************加载文件数据到内存 *************************************/
{
snum=0;
FILE *fp; //声明文件指针
fp=fopen("info.txt","r"); //以读的方式打开文件
if(fp==NULL)
{
printf("数据文件加载失败疑似info.dat文件丢失或者未导入数据\n");
}
else{
while(!feof(fp)){//遍历 文件数据
fread(&st[snum++],sizeof(struct node),1,fp); //snum是参赛选手的数量每读取一条数据加一次。
}
}
if(snum>0)
snum--;
else snum=0;
fclose(fp);
printf("数据条数:%d\n",snum);
return 0;
}
int save() /**********************************将内存数据写入文件******************************************/
{
FILE *fp;
int i,t=0;
fp=fopen("info.txt","w");//以写的方式打开参赛选手信息文件
for(i=0;i<snum;i++){
fwrite(&st[i],sizeof(struct node),1,fp);
//依次将数据读入st结构体
}
fclose(fp);
printf("保存成功!\n");
//printf("%d\n",snum);//输出保存后的参赛选手数目,和课程数目
return 0;
}
int info_sign() /*************************添加参赛选手信息 *********************/
{
printf("数据条数:%d\n",snum);
int i;
printf("编号:");
scanf("%d",&st[snum].id);
printf("姓名:");
scanf("%s",st[snum].name);
printf("依次输入十位评委成绩:\n");
st[snum].sum=0;
double mi=0xffffff,ma=0;
for( i=0;i<10;i++)
{
scanf("%lf",&st[snum].score[i]);
if(mi>st[snum].score[i])
{
mi=st[snum].score[i];
}
if(ma<st[snum].score[i])
{
ma=st[snum].score[i];
}
st[snum].sum+=st[snum].score[i];
}
st[snum].sum=st[snum].sum-mi-ma;
st[snum].sum/=8;//求平均分
snum++;
save();//由于结构体里的数据有新的添加 ,所有这里调用一下保存函数
getchar();getchar();
}
int info_show() //打印所有信息
{ int i;
for(i=0;i<snum;i++)
{
printf("\n---------------------------------------------------------------------------------------------\n");
printf("| 编号:%04d | 姓名:%s | 平均分%.2f |\n",st[i].id,st[i].name,st[i].sum);
int j;
printf("|十位评委成绩:");
for(j=0;j<10;j++)
{
printf("[%d]%4.2f ",j+1,st[i].score[j]);
}
printf("\n---------------------------------------------------------------------------------------------\n");
}
getchar();
getchar();
return 0;
}
int info_find() //检索信息
{
int i;
printf("请输入参赛编号\n");
int k;
scanf("%d",&k);
for(i=0;i<snum;i++)//遍历结构体数组course[]查找对应的 课程id
{
if(st[i].id==k)//找到后输出
{
printf(" 编号:%04d 姓名:%s :平均分%.2f \n",st[i].id,st[i].name,st[i].sum);
int j;
printf("十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
break;
}
}
getchar();getchar();
return 0;
}
int grade_modify()
{
int id,i;
printf("请输入参赛编号:");
scanf("%d",&id);
for(i=0;i<snum;i++)//遍历结构体数组course[]查找对应的 课程id
{
if(st[i].id==id)//找到后输出
{
printf(" 编号:%04d 姓名:%s :平均分%.2f \n",st[i].id,st[i].name,st[i].sum);
int j;
printf("十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
while(1)
{
int k;
printf("\n\t\t请输入要修改第几位评委的评分:") ;
scanf("%d",&k);
printf("\t\t请输入要新成绩:");
scanf("%lf",&st[i].score[k-1]);
printf("\t\t十个评委成绩:\n");
for(j=0;j<10;j++)
{
printf("[%d]%.2f ",j+1,st[i].score[j]);
}
printf("\n");
printf("\t\t修改成功!\n");
printf("\t\t是否继续修改此人成绩 (y/n) : ");
int flag;
scanf("%d",&flag);
if(flag==0)
break;
//printf("gg");
}
// printf("kk");
double mi=0xffffff,ma=0;
for( j=0;j<10;j++)
{
if(mi>st[snum].score[j])
{
mi=st[snum].score[j];
}
if(ma<st[snum].score[j])
{
ma=st[snum].score[j];
}
st[snum].sum+=st[snum].score[j];
}
st[snum].sum=st[snum].sum-mi-ma;
st[snum].sum/=8;
break;
}
}
save();
return 0;
}
int find_order()
{
int v[105]={0};
int i,number;
srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
for(i=0; i<snum; i++)
{
number = rand() % 100+1; //产生0-100的随机数
// printf("%d ", number);
if(v[i]==0)
{
v[number]=i+1;
}
else {
i--;
}
}
printf("随机出场次序是:\n");
printf("__________________\n");
printf("\n次序 | 编号 | 姓名\n\n");
int k=1;
for(i=0;i<101;i++)
{
if(v[i]!=0)
{
printf("[%02d] | %04d | %s \n",k,st[v[i]-1].id,st[v[i]-1].name);
k++;
}
}
getchar();getchar();
return 0;
}
result_sort() /**********************排序模块*********************************/
{
printf("冒泡排序\n");/****************两种选择************/
printf("选择排序方式:");
int k,i,j;
scanf("%d",&k);
if(k==1)
{
for(i=0;i<snum-1;i++) //冒泡排序
{
for(j=0;j<snum-1-i;j++)
{
if(st[j].sum<st[j+1].sum) //s为零时结构体变量
{
s=st[j];
st[j]=st[j+1];
st[j+1]=s;
}
}
}
}
else{
for(i=1;i<snum;i++)
{
s = st[i]; //将要比较的值先绶存起来留出一个空位,方便移动
j = i - 1;
while(j>=0 && st[j].sum<s.sum) //比较直到出现比s.sum大的值或向前找到头
{
st[j+1] = st[j]; //将前面的值往后移
j--;
}
st[j+1] = s; //插在st[j]的后面
}
}
for(i=0;i<snum;i++)
{
printf("\n---------------------------------------------|\n");
printf("| 编号:%04d | 姓名:%s | 平均分%.2f \n",st[i].id,st[i].name,st[i].sum);
}
getchar();
getchar();
}
Loading…
Cancel
Save