#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
char name[12];
char id[11];
int rank;
float subject[6];
float total;
float average;
}STU;
int main() {
int menu;//定义菜单选项
STU stu[30];//定义学生结构体数组
int subnum;//定义课程总数
int stunum;//定义学生人数
printf("1.Input record\n");
printf("2.Caculate total and average score of every course\n");
printf("3.Caculate total and average score of every student\n");
printf("4.Sort in descending order by total score of every students\n");
printf("5.Sort in ascending order by total score of every student\n");
printf("6.Sort in ascending order by number\n");
printf("7.Sort in ascending order by name\n");
printf("8.Search by number\n");
printf("9.Search by name\n");
printf("10.Statistic analysis for every course\n");
printf("11.List record\n");
printf("12.Write to a file\n");
printf("13.Read from a file\n");
printf("0.Exit\n");
while(1){
printf("-----------------------\nPlease enter your choice:");
scanf("%d", &menu);
while (menu < 0 || menu > 13) {
getchar();
printf("Order code error!Please input again:");
scanf("%d", &menu);
}
switch (menu) {
case 0:
exit(0);
case 1:
inputInfo(stu,&subnum,&stunum);
break;
case 2:
outputClassScore(stu,subnum,stunum);
break;
case 3:
outputPersonScore(stu,stunum);
break;
case 4:
scoreDescending(stu,stunum);
break;
case 5:
scoreAscending(stu,stunum);
break;
case 6:
idAscending(stu,stunum);
break;
case 7:
nameAscending(stu,stunum);
break;
case 8:
searchNumber(stu,subnum,stunum);
break;
case 9:
searchName(stu,subnum,stunum);
break;
case 10:
subjectResult(stu,subnum,stunum);
break;
case 11:
outputAll(stu,subnum,stunum);
break;
case 12:
writeInfo(stu,stunum);
break;
case 13:
outputFile(stu);
break;
}
}
}
// /将信息写入内存中 编号 1
void inputInfo(STU stu[],int *subnum,int *stunum){
int num,snum,i,j;//num:定义学生信息输入的数量 snum:定义科目数量 i,j:循环时使用
printf("Input the number of students:");
scanf("%d",stunum);
getchar();
printf("Input the number of subject:");
scanf("%d",subnum);
getchar();
for(i=0;i<*stunum;i++){
printf("Please input the %d student information:\n\n",i+1);
printf("Input student's name:");
scanf("%s",stu[i].name);
getchar();
printf("Input student's ID:");
scanf("%s",stu[i].id);
getchar();
printf("Input student's subject score:");
for(j=0;j<*subnum;j++){
scanf("%f",&stu[i].subject[j]);
}
}
getPersonScore(stu,*subnum,*stunum);
}
//被编号 1 获取 用于计算学生总分和平均分
void getPersonScore(STU stu[],int subnum,int stunum){
int i,j;
for(i=0;i<stunum;i++){
for(j=0;j<subnum;j++){
stu[i].total += stu[i].subject[j];
}
stu[i].average = stu[i].total/(subnum*1.0);
}
}
//输出科目总分 对饮编号 2
void outputClassScore(STU stu[],int subnum,int stunum){
int i,j;
float sum[6],ave[6];
for(i=0;i<stunum;i++){
sum[i]=0;
for (j=0;j<subnum;++j) {
sum[i] += stu[j].subject[i];
}
ave[i] = sum[i]/(stunum*1.0);
}
for(i=0;i<subnum;i++){
printf("The %d subject's total score is: %.1f \t average score is: %.1f\n",i+1,sum[i],ave[i]);
}
}
//输出学生成绩 编号 3
void outputPersonScore(STU stu[],int stunum){
int i;
printf("name \t total score \t average score\n");
for(i=0;i<stunum;i++){
printf("%4s%10.1f%12.1f\n",stu[i].name,stu[i].total,stu[i].average);
}
}
//总分降序排列 编号 4
void scoreDescending(STU stu[],int stunum){
int i,j;
STU copy[30],temp;
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
for(i=0;i<stunum-1;i++){
for(j=i+1;j<stunum;j++){
if(copy[i].total<copy[j].total){
temp = copy[j];
copy[j] = copy[i];
copy[i] = temp;
}
}
}
printf("rank \t name \t id \t total score \t average score\n");
for(i=0;i<stunum;i++){
printf("%2d%10s%14s%12.1f%12.1f\n",i+1,copy[i].name,copy[i].id,copy[i].total,copy[i].average);
}
}
//总分升序排列 编号 5
void scoreAscending(STU stu[],int stunum){
int i,j;
STU copy[30],temp;
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
for(i=0;i<stunum-1;i++){
for(j=i+1;j<stunum;j++){
if(copy[i].total>copy[j].total){
temp = copy[j];
copy[j] = copy[i];
copy[i] = temp;
}
}
}
printf("rank \t name \t id \t total score \t\t average score\n");
for(i=0;i<stunum;i++){
printf("%2d%10s%14s%11.1f%15.1f\n",i+1,copy[i].name,copy[i].id,copy[i].total,copy[i].average);
}
}
//按照学号升序排列 编号 6
void idAscending(STU stu[],int stunum){
int i,j;
STU copy[30],temp;
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
for(i=0;i<stunum-1;i++){
for(j=i+1;j<stunum;j++){
if(copy[i].id>copy[j].id){
temp = copy[j];
copy[j] = copy[i];
copy[i] = temp;
}
}
}
printf("rank \t id \t\t name \t total score \t average score\n");
for(i=0;i<stunum;i++){
printf("%2d%14s%10s%11.1f%15.1f\n",i+1,copy[i].id,copy[i].name,copy[i].total,copy[i].average);
}
}
//按照姓名升序排列 编号 7
void nameAscending(STU stu[],int stunum){
int i,j;
STU copy[30],temp;
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
for(i=0;i<stunum-1;i++){
for(j=i+1;j<stunum;j++){
if(strcmp(copy[i].name,copy[j].name)>0){
temp = copy[j];
copy[j] = copy[i];
copy[i] = temp;
}
}
}
printf("rank \t name \t id \t total score \t average score\n");
for(i=0;i<stunum;i++){
printf("%2d%10s%14s%11.1f%15.1f\n",i+1,copy[i].name,copy[i].id,copy[i].total,copy[i].average);
}
}
//按照学号信息查询 编号 8
void searchNumber(STU stu[],int subnum,int stunum){
STU copy[30];
int i,j;
char id[11];
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
rank(copy,subnum,stunum);
printf("input student's id:");
scanf("%s",id);
printf("rank \t id \t name \t total score \t average score\n");
for(i=0;i<stunum;i++){
if(strcmp(copy[i].id,id)==0){
printf("%2d%11s%10s%11.1f%15.1f\n",copy[i].rank,copy[i].id,copy[i].name,copy[i].total,copy[i].average);
}
}
}
//按照姓名信息查询 编号 9
void searchName(STU stu[],int subnum,int stunum){
STU copy[30];
int i,j;
char name[12];
for(i=0;i<stunum;i++){
copy[i]=stu[i];
}
rank(copy,subnum,stunum);
printf("input student's name:");
scanf("%s",name);
printf("rank \t name \t id \t total score \t average score\n");
for(i=0;i<stunum;i++){
if(strcmp(copy[i].name,name)==0){
printf("%2d%10s%14s%11.1f%15.1f\n",copy[i].rank,copy[i].name,copy[i].id,copy[i].total,copy[i].average);
}
}
}
//排名函数 适用于编号 8 9
void rank(STU copy[],
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论









资源评论

满庭枫
- 粉丝: 65
- 资源: 165

上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助

看过该资源的人还看了
安全验证
文档复制为VIP权益,开通VIP直接复制
