A-C/1.c

199 lines
4.8 KiB
C
Raw Normal View History

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
2022-03-06 08:20:25 +00:00
#include<string.h>
#define MAX 100
#define MAX_1 100
typedef struct singer{
int num; // 序号
char name[10]; // 姓名
char xb[10]; // 性别
float aver; // 平均分
int score[MAX_1]; // 原始成绩
}SING;
void inarray(SING sing[MAX], int *pnum){
// 输入歌手信息:序号、姓名、性别
int n=0;
printf("输入歌手人数:");
scanf("%d", &n);
printf("请输入%d个歌手的信息\n",n);
printf("序号\t姓名\t性别\n");
for(int i=0;i<n;i++){
scanf("%d%s%s",&sing[i].num,sing[i].name,sing[i].xb);
}
*pnum = n;
}
void outarrry(SING sing[MAX], int n){
// 输出歌手信息:序号、姓名、性别
printf("序号\t姓名\t性别\n");
for(int i=0;i<n;i++){
printf("%d\t%s\t%s\n",sing[i].num,sing[i].name,sing[i].xb);
}
}
void insert(SING sing[MAX], int *pnum){
// 新增歌手信息:序号、姓名、性别(增加到最后)
int n=*pnum;
2022-03-06 07:43:01 +00:00
printf("请输入第%d个歌手的信息\n",n+1);
printf("序号\t姓名\t性别\n");
scanf("%d%s%s",&sing[n].num,sing[n].name,sing[n].xb);
*pnum=n+1;
}
void save(SING sing[MAX], int num, int num_){
// 保存数据到文件
FILE *fp;
char filename[10];
printf("请输入文件名:");
scanf("%s", filename);
// 打开文件
if((fp=fopen(filename, "w"))==NULL){
printf("无法打开该文件,可能是文件名有误!\n");
return;
}
// 写入文件
fprintf(fp, "当前共有%d个歌手%d个评委\n",num,num_);
2022-03-06 07:43:01 +00:00
fprintf(fp, "序号\t姓名\t性别\t平均分\t原始成绩\n");
for(int i=0;i<num;i++){
2022-03-06 07:43:01 +00:00
fprintf(fp,"%d\t%s\t%s\t%.2f",sing[i].num,sing[i].name,sing[i].xb,sing[i].aver);
for(int n=0;n<num_;n++){
fprintf(fp,"\t%d",sing[i].score[n]);
}
fprintf(fp,"\n");
}
2022-03-06 07:43:01 +00:00
printf("导出完成\n");
// 关闭文件
fclose(fp);
}
void load(SING sing[MAX], int *num, int *num_){
// 从文件读取数据
FILE *fp;
char filename[10],temp[10];
printf("请输入文件名:");
scanf("%s", filename);
// 打开文件
if((fp=fopen(filename, "r"))==NULL){
printf("无法打开该文件,可能是文件名有误!\n");
return;
}
// 读取数据
fscanf(fp,"当前共有%d个歌手%d个评委",num,num_);
// 过滤多余文本
for(int i=0;i<5;i++){
fscanf(fp,"%s",temp);
}
// 读取歌手信息
for(int i=0;i<*num;i++){
fscanf(fp,"%d%s%s%f",&sing[i].num,sing[i].name,sing[i].xb,&sing[i].aver);
for(int n=0;n<*num_;n++){
fscanf(fp,"%d",&sing[i].score[n]);
}
}
printf("读取完成。\n");
// 关闭文件
fclose(fp);
}
2022-03-06 08:20:25 +00:00
void aver(SING sing[MAX], int num, int num_){
int temp,data[MAX_1];
for(int k=0;k<num;k++){
memcpy(data,sing[k].score,sizeof(int)*MAX_1);
// 对分数按从小到大排序
for(int i=0;i<num_-1;i++){
for(int j=0;j<num_-1-i;j++){
if(data[j]>data[j+1]){
// 交换元素
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
// 计算平均分
temp=0;
for(int j=1;j<num_-1;j++){
temp+=data[j];
}
sing[k].aver = temp / (float)(num_-2);
}
}
void mark(SING sing[MAX], int num, int *num_){
// 输入评委个数
printf("请输入评委个数:");
scanf("%d",num_);
// 逐个评分
for(int i=0;i<num;i++){
system("cls");
printf("当前正在对第 %d 个歌手进行评分:\n\n",i+1);
printf("歌手信息如下:\n");
printf("序号\t姓名\t性别\n");
printf("%d\t%s\t%s\n\n",sing[i].num,sing[i].name,sing[i].xb);
for(int n=0;n<*num_;n++){
printf("现在请第 %d 个评委进行评分(0-10分)",n+1);
scanf("%d",&sing[i].score[n]);
}
}
// 计算平均分
aver(sing,num,*num_);
printf("评分完成。\n");
}
int main(){
SING sing[MAX];
2022-03-06 07:43:01 +00:00
// num 为歌手数num_ 为评委数
int num=0,num_=0;
int choice;
while(1){
// 1.菜单
2022-03-06 08:20:25 +00:00
printf("\t1.输入歌手信息\n"); // 已完成
printf("\t2.输出歌手信息\n"); // 已完成
printf("\t3.新增一个歌手\n"); // 已完成
printf("\t4.查找歌手信息\n");
printf("\t5.修改歌手信息\n");
printf("\t6.删除歌手信息\n");
2022-03-06 08:20:25 +00:00
printf("\t7.排序歌手\n");
printf("\t8.评委评分\n");
printf("\t9.输出歌手成绩\n");
printf("\t10.保存歌手信息\n"); // 已完成
printf("\t11.加载歌手信息\n"); // 已完成
printf("\t0.退出\n"); // 已完成
// 2.输入
scanf("%d", &choice);
// 3.退出
if(choice==0) break;
// 4.调用子函数功能
switch (choice) {
case 1:
inarray(sing,&num);
break;
case 2:
outarrry(sing,num);
break;
case 3:
insert(sing,&num);
break;
2022-03-06 08:20:25 +00:00
case 8:
mark(sing,num,&num_);
break;
case 10:
2022-03-06 08:20:25 +00:00
save(sing,num,num_);
break;
case 11:
load(sing,&num,&num_);
break;
default:
printf("调用输入错误函数\n");
break;
}
// 5.清屏
printf("按任意键继续...\n");
getch();
system("cls");
}
printf("感谢使用,再见!\n");
return 0;
}