有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;
}