C语言练习题

有20个学生,学生信息包括:学号、姓名、性别、出生年月、第一学期计算机导论和C语言程序设计成绩及平均成绩。用结构体存储信息,其中成绩为一个结构体,它的变量作为学生信息结构体的成员。一个学生信息结构体如下图所示:

num

name

sex

Date

Score

year

month

Day

gui

Cla

ave

开发一个学生成绩管理系统,此系统具有以下功能:

(1)系统菜单(即先输出提示信息序号1、2、3….,分别实现什么功能,输入序号后,调用相应的功能函数)

(2)学生信息录入;

(3)学生信息浏览功能(能浏览所有、成绩及格或不及格等的学生信息等,一屏显示10行,大于10行的按空格键继续显示);

(3)修改学生信息,可以根据姓名查找到学生,然后可以修改学生姓名、成绩项;

(4)按学生平均成绩对信息进行排序。

(5)学生信息的添加

(6)信息统计,可以按平均成绩及格或不及格统计学生人数,计算出所占比例,并输出统计报表。

(7) 选取5个全班同学平均成绩最高的作为候选人,全班同学对候选人投票,选出一位推荐到系当学生班干部,输出其选票结果。

系统菜单用指向函数的指针变量作形参,根据输入的序号实现相应的功能。

发挥部分:

(1)通过学号查找某个学生,从而修改该学生的信息

(2)具有删除和插入功能

//头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


struct date{ //出生日期对应的结构体
	int year;
	int month;
	int day;
};

struct Score{
    float gui;//计算机导论成绩
    float Cla;//C语言程序设计成绩
    float ave;//平均成绩
};
//学生信息结构体
struct student
{
	char num[10];//学号
	char name[11];//名字
	char sex[2]; //性别
	struct date birthday;//出生日期
	struct Score grades;//成绩
	int votes;//票数
};

//主菜单
void showmenu()
{

	system("cls");
	printf("----------------------------------------*|\n");
	printf("|*\t 欢迎使用学生成绩管理系统   \t*|\n");
	printf("|*--------------------------------------*|\n");
	printf("|*\t 1: 学生信息录入 \t\t*|\n");
	printf("|*\t 2: 学生信息浏览 \t\t*|\n");
	printf("|*\t 3: 学生信息修改 \t\t*|\n");
	printf("|*\t 4: 删除学生信息 \t\t*|\n");
	printf("|*\t 5: 学生成绩排序 \t\t*|\n");
	printf("|*\t 6: 学生信息的添加 \t\t*|\n");
	printf("|*\t 7: 信息统计 \t\t\t*|\n");
	printf("|*\t 8: 投票选班干 \t\t*|\n");
	printf("|*\t 0: 保存信息并退出系统 \t*|\n");
	printf("|---------------------------------------*|\n");
	printf("|*\t 请输入操作数<0-8> \t\t*|\n");
    printf("|---------------------------------------*|\n");
	return;
}

//1录入学生信息
void input(int n)
 {
 	struct student stu[100];
 	FILE *fp;
 	fp=fopen("sj.txt","a+");
 	if(fp==NULL)
 	{

		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
 	printf("请分别输入学生的学号、姓名、性别、出生日期、成绩:\n");
 	int i;
 	for(i=0;i<n;i++)
 	{

 		printf("----第%d个学生----\n", i+1);
		printf("学号:");
		scanf("%s",&stu[i].num);
		printf("姓名:");
		scanf("%s",&stu[i].name);
		printf("性别:");
		scanf("%s",&stu[i].sex);
		printf("出生日期:\n");
		printf("年:\n");
		scanf("%d",&stu[i].birthday.year);
        printf("月:\n");
        scanf("%d",&stu[i].birthday.month);
        printf("日:\n");
        scanf("%d",&stu[i].birthday.day);
        printf("请输入该学生的各科成绩:\n");
        printf("计算机导论成绩:");
        scanf("%f",&stu[i].grades.gui);
		printf("C语言程序设计成绩:");
		scanf("%f",&stu[i].grades.Cla);
        stu[i].grades.ave=(stu[i].grades.gui+stu[i].grades.Cla)/2;

		//写入数据
		fprintf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
		}
	 	fclose(fp);
	 	printf("添加学生成功,请按任意键返回\n");
	 	getch();
 }


//2浏览菜单
void scanmenu()
{
	system("cls");
	printf("*----------------------------------------------------*\n");
	printf("* 学生信息浏览菜单 *\n");
	printf("*----------------------------------------------------*\n");
	printf("* 1: 浏览所有学生信息 *\n");
	printf("* 2: 成绩及格的学生信息 *\n");
	printf("* 3: 成绩不及格的学生信息 *\n");
	printf("* 0: 学生信息浏览系统,返回主系统 *\n");
	printf("*----------------------------------------------------*\n");
	printf("选择操作<0-3> \n");
}

void scan(int n){
int k;
	do
	{
		scanmenu();
		scanf("%d",&k);
		switch(k)
		{
			case 1:scanall(n);break;//浏览所有的学生信息
			case 2:scanqualified(n);break;//浏览合格的学生信息
			case 3:scanunqualified(n);break;//浏览不合格的学生信息
			case 0:break;
			default:printf("输入错误,请重新选择\n");getch();
		}
	}while(k!=0);
	return;
}

//2.1显示所有学生的信息
void scanall(int n)
{
	struct student stu[100];
	int i;
	printf("成绩信息如下:\n");
	FILE *fp;
	fp=fopen("sj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
printf("--------------------------------------------------------------------------------------------------------*|\n");
printf("学号\t姓名\t性别\t出生日期\t\t计算机导论成绩\t\tC语言程序设计成绩\t平均成绩*|\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
	int c = 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
	if(n!=0){
   //人数不为0
		for(i=0;i<c;i++)
		{
		    if(i!=0 && i%10==0){
                if(getch()== ' '){
                    continue;
                }
		    }

            printf("%s\t%s\t%s\t%d年%d月%d日\t\t%.2f\t\t\t%.2f\t\t\t%.2f\t*|\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
            printf("--------------------------------------------------------------------------------------------------------*|\n");
		}
	}
	fclose(fp);
	printf("显示完毕 ,请按任意键返回\n");
	getch();
	return;
}

//2.2显示合格的学生信息
void scanqualified(int n){
struct student stu[100];
	int i,sum=0;;
	printf("合格的学生信息:\n");
	FILE *fp;
	fp=fopen("sj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
printf("--------------------------------------------------------------------------------------------------------*|\n");
printf("学号\t姓名\t性别\t出生日期\t\t计算机导论成绩\t\tC语言程序设计成绩\t平均成绩*|\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
	int c = 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
	if(n!=0){
   //人数不为0
		for(i=0;i<c;i++)
		{
		    if(stu[i].grades.ave >=60){

               if(i!=0 && sum!=0 && sum%10==0){
                if(getch()== 'SPACE'){
                    continue;
                }
		    }
            printf("%s\t%s\t%s\t%d年%d月%d日\t\t%.2f\t\t\t%.2f\t\t\t%.2f\t*|\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
            printf("--------------------------------------------------------------------------------------------------------*|\n");
		    sum=sum+1;
		    }
        }
	}
	fclose(fp);
	printf("显示完毕 ,请按任意键返回\n");
	getch();
	return;
}

//2.3浏览不及格学生的信息
void scanunqualified(int n){
struct student stu[100];
	int i,sum=0;
	printf("不合格的学生信息:\n");
	FILE *fp;
	fp=fopen("sj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
printf("--------------------------------------------------------------------------------------------------------*|\n");
printf("学号\t姓名\t性别\t出生日期\t\t计算机导论成绩\t\tC语言程序设计成绩\t平均成绩*|\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
	int c = 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
	if(n!=0){
   //人数不为0
		for(i=0;i<c;i++)
		{
		    if(stu[i].grades.ave <60){
               if(i!=0&& sum!=0 && sum%10==0 && sum%10==0){
                if(getch()== 'SPACE'){
                    continue;
                }
		    }
            printf("%s\t%s\t%s\t%d年%d月%d日\t\t%.2f\t\t\t%.2f\t\t\t%.2f\t*|\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
            printf("--------------------------------------------------------------------------------------------------------*|\n");
		    sum=sum+1;
		    }
        }
	}
	fclose(fp);
	printf("显示完毕 ,请按任意键返回\n");
	getch();
	return;
}


//3.修改菜单
void reworkmenu()
{
	system("cls");
	printf("*----------------------------------------------------*\n");
	printf("* 修改学生信息菜单 \t\t*\n");
	printf("*----------------------------------------------------*\n");
	printf("* 1: 按姓名查询修改该学生信息 \t\t*\n");
	printf("* 2: 按学号查询修改该学生信息 \t\t*\n");
	printf("* 0: 学生信息浏览系统,返回主系统 \t\t*\n");
	printf("*----------------------------------------------------*\n");
	printf("选择操作<0-2> \n");
}

//3修改学生信息
void rework(int n){
int k;
	do
	{
		reworkmenu();
		scanf("%d",&k);
		switch(k)
		{
			case 1:reworkname(n);break;//按姓名查询修改该学生信息
			case 2:reworknum(n);break;//按学号查询修改该学生信息
			case 0:break;
			default:printf("输入错误,请重新选择\n");getch();
		}
	}while(k!=0);
	return;
}

//3.1按姓名查询修改该学生信息
void reworkname(int n)
{
	struct student stu[100];
 	FILE *fp;
 	char name[11];
 	int find=0;
 	printf("请输入要修改的学生姓名:");
 	scanf("%s",&name);
 	fp=fopen("sj.txt","r");
 	if(fp==NULL)
 	{
	  	printf("文件打开失败,请联系管理员\n");
	  	getch();
	  	return -1;
 	}
 	int c=0;
 	while(!feof(fp))
	{

	 	fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
	 	if(strcmp(name,stu[c].name)==0)
		{
		 	find=1;
		 	//修改操作
            printf("原学生姓名: %s\n新姓名为:",stu[c].name);
		 	scanf("%s",&stu[c].name);
            printf("原计算机导论成绩: %.2f\n新成绩为:",stu[c].grades.gui);
		 	scanf("%f",&stu[c].grades.gui);
		 	printf("原C语言程序设计成绩: %.2f\n新成绩为:",stu[c].grades.Cla);
		 	scanf("%f",&stu[c].grades.Cla);
		 	stu[c].grades.ave=(stu[c].grades.gui+stu[c].grades.Cla)/2;

 		}
  		c++;
 	}
	fclose(fp);
	if(find==0)
	{
		printf("没有找到该学生,请按任意键退出\n");
		getch();
	}else{
	  	fp=fopen("sj.txt","w");
	  	int i;
	   	for(i=0;i<c;i++)
	   	{
	   		//更新数据
		    fprintf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
	   	}
		fclose(fp);
		printf("姓名为%s同学的个人信息已经修改成功,请按任意键返回",name);
 		getch();
 	}
  	showmenu();
  	return ;
}


//3.2按学号查询修改该学生信息
void reworknum(int n){
	struct student stu[100];
 	FILE *fp;
 	char num[11];
 	int find=0;
 	printf("请输入要修改的学生学号:");
 	scanf("%s",&num);
 	fp=fopen("sj.txt","r");
 	if(fp==NULL)
 	{
	  	printf("文件打开失败,请联系管理员\n");
	  	getch();
	  	return -1;
 	}
 	int c=0;
 	while(!feof(fp))
	{

	 	fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
	 	if(strcmp(num,stu[c].num)==0)
		{
		 	find=1;
		 	//修改操作
            printf("原学生姓名: %s\n新姓名为:",stu[c].name);
		 	scanf("%s",&stu[c].name);
            printf("原学生性别: %s\n新性别为:",stu[c].sex);
		 	scanf("%s",&stu[c].sex);
            printf("原出生日期:%d年%d月%d日\n新出生日期为:",stu[c].birthday.year,stu[c].birthday.month,stu[c].birthday.day);
            printf("年:\n");
            scanf("%d",&stu[c].birthday.year);
            printf("月:\n");
            scanf("%d",&stu[c].birthday.month);
            printf("日:\n");
            scanf("%d",&stu[c].birthday.day);
            printf("原计算机导论成绩: %.2f\n新成绩为:",stu[c].grades.gui);
		 	scanf("%f",&stu[c].grades.gui);
		 	printf("原C语言程序设计成绩: %.2f\n新成绩为:",stu[c].grades.Cla);
		 	scanf("%f",&stu[c].grades.Cla);
		 	stu[c].grades.ave=(stu[c].grades.gui+stu[c].grades.Cla)/2;

 		}
  		c++;
 	}
	fclose(fp);
	if(find==0)
	{
		printf("没有找到该学生,请按任意键退出\n");
		getch();
	}else{
	  	fp=fopen("sj.txt","w");
	  	int i;
	   	for(i=0;i<c;i++)
	   	{
	   		//更新数据
		    fprintf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
	   	}
		fclose(fp);
		printf("学号为%s同学的个人信息已经修改成功,请按任意键返回",num);
 		getch();
 	}
  	showmenu();
  	return ;
}



//4删除学生信息
int delete(int n)
{
	struct student stu[100];
	struct student sub[99];//删除后的结构体数组
	char stnum[9];//学号
	int find=0;
	printf("请输入你要删除的学生学号:");
	scanf("%s", &stnum);
	FILE *fp;
	fp=fopen("sj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请联系管理员\n");
		getch();
		return -1;
	}
	int c=0;
	int index=0;//用于记录目标序号
	while(!feof(fp))//不为空
	{
        fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
	 	if(strcmp(stnum,stu[c].num)==0)
		{
			find = 1;//根据学号查找,找到赋值为1
			index = c;//记录编号
		}
		c++;
	}
	fclose(fp);
	if(n==0)
	{

		printf("已经没有学生成绩信息了,请按任意键返回\n");
		getch();
		showmenu();
		return n;
	}
	if(find==0)
	{

		printf("没有该学生成绩信息,请按任意键返回\n");
		getch();
		showmenu();
		return n;
	}
	else
	{

		int i;
		//删除
		for(i=0;i<c;i++)
		{

			if(i < index)
			{

				sub[i] = stu[i];
			}
			else
			{

				sub[i] = stu[i+1];
			}
		}

		fp=fopen("sj.txt","w");
		//写入数据
		for(i=0;i<c-1;i++)
		{
          fprintf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",sub[i].num,sub[i].name,sub[i].sex,sub[i].birthday.year,sub[i].birthday.month,sub[i].birthday.day,sub[i].grades.gui,sub[i].grades.Cla,sub[i].grades.ave);
	   	}
		fclose(fp);
		printf("学号为%s的学生成绩删除成功,请按任意键返回\n",stnum);
		getch();
		showmenu();
		return n-1;
	}
}


//5排序
int sort(int n){
struct student stu[100];
struct student t;
int i,j,k;//定义整型变量
FILE *fp;
fp=fopen("sj.txt","r");
if(fp==NULL){
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
int c = 0;
	while(!feof(fp)){
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
for(i=0;i<c;i++){
    k=i;//把i的值赋给k
    for(j=i+1;j<c;j++)//内层for循环
    {
      if(stu[j].grades.ave>stu[k].grades.ave)//挑出分数高的
      {
        k=j;//把相应的j赋值给k
      }
    }
    t=stu[k]; //把成绩高的放到前面
    stu[k]=stu[i];
    stu[i]=t;
  }
printf("--------------------------------------------------------------------------------------------------------*|\n");
printf("学号\t姓名\t性别\t出生日期\t\t计算机导论成绩\t\tC语言程序设计成绩\t平均成绩*|\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
for(i=0;i<c;i++)//循环输出所有人的成绩
  {
   printf("%s\t%s\t%s\t%d年%d月%d日\t\t%.2f\t\t\t%.2f\t\t\t%.2f\t*|\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
   printf("--------------------------------------------------------------------------------------------------------*|\n");
 }
 	fclose(fp);
    printf("由学生平均成绩对其信息进行排序成功显示,请按任意键返回\n");
	getch();
}


//6新增学生信息
int insert(int n)//指定位置插入学生信息
{
    struct student stu[100];
    struct student sub[101];//新增人数
    int find=0;
 	FILE *fp;
 	fp=fopen("sj.txt","a+");
 	if(fp==NULL)
 	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
	int c=0;
	int index=0;//用于记录插入目标序号位置
	while(!feof(fp))//不为空
	{
        fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
	fclose(fp);


	printf("请输入你要插入的位置(请输入1~%d的数字):",c);
	scanf("%d", &index);
	if(index>c || index <0){
        printf("输入的插入位置错误,请按任意键返回主菜单\n");
        getch();
		showmenu();
		return n;
	}
        index=index-1;
		printf("请分别输入要插入学生的学号、姓名、性别、出生日期、成绩信息:\n");
 	    int  i=0;
		printf("学号:");
		scanf("%s",&sub[index].num);
		printf("姓名:");
		scanf("%s",&sub[index].name);
		printf("性别:");
		scanf("%s",&sub[index].sex);
		printf("出生日期:\n");
		printf("年:\n");
		scanf("%d",&sub[index].birthday.year);
        printf("月:\n");
        scanf("%d",&sub[index].birthday.month);
        printf("日:\n");
        scanf("%d",&sub[index].birthday.day);
        printf("请输入该学生的各科成绩:\n");
        printf("计算机导论成绩:");
        scanf("%f",&sub[index].grades.gui);
		printf("C语言程序设计成绩:");
		scanf("%f",&sub[index].grades.Cla);
        sub[index].grades.ave=(sub[index].grades.gui+sub[index].grades.Cla)/2;

	for(i=c;i>=0;i--){
			if(i >= index)
			{
				sub[i+1] = stu[i];
			}
			else
			{
				sub[i] = stu[i];
			}
		}

     fp=fopen("sj.txt","w");
     for(i=0;i<c+1;i++){
		//写入数据
		fprintf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",sub[i].num,sub[i].name,sub[i].sex,sub[i].birthday.year,sub[i].birthday.month,sub[i].birthday.day,sub[i].grades.gui,sub[i].grades.Cla,sub[i].grades.ave);
		}
	 	fclose(fp);
	 	printf("插入学生信息成功,请按任意键返回\n");
	 	getch();
		showmenu();
		return n+1;
}

//7信息统计
void stat(int n){
    struct student stu[100];
	int i;
	int hege=0,bhege=0;
	float hegezhangb=0,bhegezhangb=0;
	printf("学生成绩信息统计如下:\n");
	FILE *fp;
	fp=fopen("sj.txt","r");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}

	int c = 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}
	if(n!=0){
   //人数不为0
		for(i=0;i<c;i++)
		{
		    if(stu[i].grades.ave >=60){
              hege++;
              hegezhangb++;
		    }else{
		     bhege++;
		     bhegezhangb++;
		    }
        }
    }
printf("------------------------------------------------------------------------*|\n");
printf("|\t|\t合格人数\t|\t不合格人数\t|\t总人数\t*|\n");
printf("------------------------------------------------------------------------*|\n");
printf("|\t|\t%d\t\t|\t%d\t\t|\t%d\t*|\n",hege,bhege,c);
printf("------------------------------------------------------------------------*|\n");
printf("|占比\t|\t%.0f%%\t\t|\t%.0f%%\t\t|\t \t*|\n",(hegezhangb/c)*100,(bhegezhangb/c)*100);
printf("------------------------------------------------------------------------*|\n");
	fclose(fp);
	printf("显示完毕 ,请按任意键返回\n");
	getch();
	return;

}

//8投票选班干
void vote(int n){
struct student stu[100];
struct student t;
int i,j,k;//定义整型变量
FILE *fp;
int find=0;
fp=fopen("sj.txt","r");
if(fp==NULL){
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
int c = 0;
	while(!feof(fp)){
		fscanf(fp,"%s\t%s\t%s\t%d\t%d\t%d\t%f\t%f\t%f\n",&stu[c].num,&stu[c].name,&stu[c].sex,&stu[c].birthday.year,&stu[c].birthday.month,&stu[c].birthday.day,&stu[c].grades.gui,&stu[c].grades.Cla,&stu[c].grades.ave);
		c++;
	}

for(i=0;i<c;i++){
    k=i;//把i的值赋给k
    for(j=i+1;j<c;j++)//内层for循环
    {
      if(stu[j].grades.ave>stu[k].grades.ave)//挑出分数高的
      {
        k=j;//把相应的j赋值给k
      }
    }
    t=stu[k]; //把成绩高的放到前面
    stu[k]=stu[i];
    stu[i]=t;
  }
printf("5名候选人学生信息名单如下:(投票时请输入该候选学生姓名)\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
printf("学号\t姓名\t性别\t出生日期\t\t计算机导论成绩\t\tC语言程序设计成绩\t平均成绩*|\n");
printf("--------------------------------------------------------------------------------------------------------*|\n");
for(i=0;i<5;i++)//循环输出5个人的成绩
  {
   printf("%s\t%s\t%s\t%d年%d月%d日\t\t%.2f\t\t\t%.2f\t\t\t%.2f\t*|\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].grades.gui,stu[i].grades.Cla,stu[i].grades.ave);
   printf("--------------------------------------------------------------------------------------------------------*|\n");
  }
char leader_name[11];//输入候选人名字
printf("请输入你要投的人姓名\n");
 	// for(i=0;i<(c-5);i++)//可以自己设置投票人数
 	 for(i=0;i<4;i++){
         stu[i].votes=0;
 	 }

    for(i=0;i<4;i++){
            scanf("%s",leader_name);
            for(j=0;j<5;j++)
            {
              if(strcmp(leader_name,stu[j].name)==0)
                {
                    stu[j].votes=stu[j].votes+1;
                }
            }
        find=1;
        }
  printf("\n投选结果:\n");
  printf("-----------------------------------------\n");
  printf("|\t学生姓名\t|\t票数\t|\n");
  printf("-----------------------------------------\n");
  for( i =0;i<5;i++){
        printf("|\t%s\t\t|\t%d\t|\n",stu[i].name,stu[i].votes);
        printf("-----------------------------------------\n");
    }
fclose(fp);

if(find==0)
	{
		printf("操作错误,请按任意键退出\n");
		getch();
	}else{
		printf("投选班干已结束,请按任意键返回\n");
 		getch();
 	}
  	showmenu();
  	return ;
}

//0保存信息并退出系统
void save()
{

	printf("感谢您的使用,欢迎下次使用!\n");
	getch();
	return;
}
//main函数
int main()
{

	int flag,n=0,count=0;//flag标志位,count计数,当前总人数
	//-------------判断文件里面有多少条记录--------------------//
	FILE *fp;
	fp=fopen("sj.txt","a+");
	if(fp==NULL)
	{
		printf("打开文件失败,请重试!\n");
		getch();
		fclose(fp);
		exit(0);
	}
	int c = 0;
	while(!feof(fp))
	{

		char cc = fgetc(fp);
		if(cc==EOF)
        {

        	break;
        }
		c++;
	}
	count = c/14;
	fclose(fp);
	//---------------------------------//
	do
	{
		showmenu();
		printf("请选择操作数:");
		scanf("%d",&flag);//选择操作
		switch(flag)
		{
			case 1: printf("请输入您要录入的人数:");
					scanf("%d",&n);
				    input(n);
					count += n;break;
			case 2: scan(count);break;
			case 3: rework(count);break;
			case 4: delete(count);break;
			case 5: sort(count);break;
			case 6: insert(count);break;
			case 7: stat(count);break;
			case 8: vote(count);break;
		    case 0: save();break;
		    default:printf("输入错误,请重试!\n");getch();
		}
	}while(flag!=0);
	getch();
	return 0;
}

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值