#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
#include<windows.h>
#define N 100
typedef struct student{
char num[13];//字符数组记录学号
char name[20];//
float math;
float english;
float cprogram;//c程序
float culture;//文化课成绩
float average;//平均成绩
float score[4];//用数组记录成绩,后面在函数中在看
}jibenxingxi;//定义结构体变量的类型名为jjibenxingxi
//
void mainprint();//打印主界面
void scoreInput();//成绩录入
void scoreStat();//成绩统计系统
void studentStatus();//学生管理功能界面
void bukao(); /*生成并打印补考通知单*/
void sortAnhao(); /*按学号排序*/
void jisuanPingjun();/*计算平均分并排序*/
void tongjiFenshu(); /*统计分数段*/
void outdanke(); //输出单科成绩
void qitafunction();//
void findstudent();//查找学生
//
void main()
{
char choose='\0',yes_no='\0';
do
{
system("color 4f");
system("cls");
mainprint();
printf(" ");
choose=getch();
switch(choose)
{
case '1':scoreInput(); break;//成绩录入
case '2':scoreStat(); break;
case '3':studentStatus(); break;
case '4':qitafunction(); break;
case '0': break;
default:printf(" 你所输入的选项非法\n");
}
if(choose=='0') break;
printf(" 即将进入主菜单,要继续选择吗(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
}while(yes_no=='Y'||yes_no=='y');
}
void mainprint()
{
printf(" |******************************************|\n");
printf(" | 欢迎使用学籍管理系统 |\n");
printf(" |******************************************|\n");
printf(" | 请输入选项编号(0~4) |\n");
printf(" |------------------------------------------|\n");
printf(" | 1--录入成绩 |\n");
printf(" | 2--统计成绩 |\n");
printf(" | 3--处理学籍 |\n");
printf(" | 4--创新功能 |\n");
printf(" | 0-- 退出 |\n");
printf(" |------------------------------------------|\n");
}
void scoreInput()
{
int i=0;
char yes_no='\0';//
jibenxingxi stu[N]={0};
FILE *fp=NULL;
system("color 5f");//头文件windows中的函数,调用DOS命令,5f,中间5代表设置背景颜色,f代表前景颜色(字体颜色)
system("cls");//头文件windows中的函数,清屏
fp=fopen("d:\\学生基本信息.txt","w");//以写入的方式打开文件d:\\学生基本信息.txt
if(fp==NULL)
{
printf(" 打开文件失败!\n");
return;
}
printf("\n欢迎进入成绩录入系统\n");
printf("请输入第%d个记录:\n",i+1);
puts("请输入学生学号:(用#结束程序)\n");
scanf("%s",stu[i].num);
puts("请输入学生姓名:(用#结束程序)\n");
scanf("%s",stu[i].name);
puts("请依次输入学生的数学、英语、编程、文化课成绩:\n");
scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
while(strcmp(stu[i].num,"#")&&strcmp(stu[i].name,"#"))//字符数组比较函数,如果字符相等,则返回0,即跳出循环
{
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu[i].num,stu[i].name,stu[i].math,
stu[i].english,stu[i].cprogram,stu[i].culture);//赋值给结构体变量,且把结构体变量写入文件
i++;
printf("请输入第%d个记录",i+1);
puts("请输入学生学号:(用#结束程序)\n");
scanf("%s",stu[i].num);
puts("请输入学生姓名:(用#结束程序)\n");
scanf("%s",stu[i].name);
puts("请依次输入学生的数学、英语、编程、文化课成绩:\n");
scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
}
fclose(fp);
}
//
void scoreStat()
{
char choose='\0',yes_no='\0';
system("color 6f");
do
{
system("cls");
printf("欢迎进入成绩统计系统\n");
printf("\n |------------------------|");
printf("\n | 请输入选项编号(0~4) |");
printf("\n |------------------------|");
printf("\n | 1--按学号排序 |");
printf("\n | 2--按平均分数排序 |");
printf("\n | 3--统计分数段 |");
printf("\n | 4--返回 |");
printf("\n | 0--退出系统 |");
printf("\n |------------------------|\n");
choose=getch();
switch(choose)
{
case '1':sortAnhao();
case '2':jisuanPingjun();
case '3':tongjiFenshu();
case '4':main();
case '0':break;
default:printf(" 这是一个非法选项!");break;
}
if(choose==0) break;
printf(" 要继续选择吗?(Y/N)");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='y'||yes_no=='Y');
}
//
void studentStatus()
{
char choose='\0',yes_no='\0';
jibenxingxi stu[N]={0};
FILE *fp=NULL;
fp=fopen("d:\\学生基本信息.txt","r");
if(fp==NULL)
{printf("文件打开失败!"); return; }
system("color 2f");
do
{
system("cls");
printf (" |---------------------------------------|\n");
printf (" | 请输入选项编号(0-3) |\n");
printf (" |---------------------------------------|\n");
printf (" | 1----------生成并打印补考通知单 |\n");
printf (" | 2----------查找学生 |\n");
printf (" | 3----------输出单科成绩 |\n");
printf (" | 4----------返回 |\n");
printf (" | 0----------退出系统 |\n");
printf (" |---------------------------------------|\n");
choose=getche();
while(choose!='0'&&choose!='1'&&choose!='2'&&choose!='3'&&choose!='4')
{
printf(" %c为非法选项!请重新输入:",choose);
choose=getchar();
}
switch(choose)
{
case '1':bukao(); break;
case '2':findstudent(); break;
case '3':outdanke(); break;
case '4':main(); break;
case '0':break;
}
if(choose==0)
{
printf("\n");
printf("感谢您的使用!\n");
break;
}
printf("要继续选择吗?(Y/N)\n");
do
{
yes_no=getch();
}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
}while(yes_no=='y'||yes_no=='Y');
}
void findstudent()
{
int i=0,j=0,count=0,n=0,t=0;
char ch[20]="",yes_no='\0';
struct student stu[N]={0};
FILE *fp=NULL;
fp=fopen("d:\\学生基本信息.txt","r");
if(fp==NULL)
{
printf("\n 打开文件失败!\n"); return;
}
while(feof(fp)==0)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu[i].num,
stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
i++;
n++;
}
fclose(fp);
do
{
system("color 8f");
system("cls");
printf("\n 欢迎进入查询学生系统!\n");
printf("\n请输入要查学的学生的姓名:");
scanf("%s",&ch);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,ch)==0)
{
printf("\n 您查询的是学号为%s的学生,他的成绩如下:",stu[i].num);
printf("\n 高数:%7.1f,英语:%7.1f,c语言编程:%7.1f,乱七八遭:%7.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
break;
}
if(i>=n)
printf("\n 查无此人.......\n");
printf("\n 要继续选择查询学生吗(Y/N)?\n");
do
{
yes_no=getche();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='y'||yes_no=='Y');
}
void sortAnhao()
{
int k,i=0,j=0,n=0,t=0;
jibenxingxi stu2[N]={0},temp={0};//temp是为了排序时与结构体变量值进行交换的中间变量
FILE *fp=NULL;
system("color 9f");
fp=fopen("d:\\学生基本信息.txt","r");
if(fp=NULL)
{printf("文件打开失败!\n"); return;}
printf("欢迎进入按学号排序系统\n");
for(i=0;feof(fp)==0;i++)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu2[i].num
,stu2[i].name,&stu2[i].math,&stu2[i].english,&stu2[i].cprogram,&stu2[i].culture);
}
fclose(fp);
for(j=0;j<i-2;j++)//选择法排序
{
k=j;
for(n=j+1;n<i-1;n++)
{
if(strcmp(stu2[j].num,stu2[n].num)>0)
k=n;
}
temp=stu2[j];
stu2[j]=stu2[k];
stu2[k]=temp;
}
fp=fopen("d:\\按学号排序.txt","w");
if(fp=NULL)
{printf("文件打开失败"); return;}
fprintf(fp,"序号 学号 姓名 高数 英语 C语言 乱七八糟\n");
for(j=0;j<i;j++)
{
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",j+1,stu2[j].num
,stu2[j].name,stu2[j].math,stu2[j].english,stu2[j].cprogram,stu2[j].culture);
}
printf(" 文件已保存至D:\\按学号排序.txt");
fclose(fp);
}
void jisuanPingjun()
{
int i,j=0,k,n;
jibenxingxi stu3[N]={0},temp={0};
FILE *fp=NULL;
system("color 9f");
fp=fopen("d:\\学生基本信息.txt","r");
if(fp==NULL)
{printf("文件打开失败\n"); return;}
printf("欢迎进入按平均成绩排序系统");
while(feof(fp)==0)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&i,stu3[i].num,
stu3[i].name,&stu3[i].math,&stu3[i].english,&stu3[i].cprogram,&stu3[i].culture);
i++;
}
for(j=0;j<i-1;j++)
stu3[j].average=(float)(stu3[j].math+stu3[j].english+stu3[j].cprogram+stu3[j].culture)/4;
//平均分不一定是整数,所以要强制转换为浮点型变量
for(i=0;i<j;i++)//选择法排序平均分,此时j记录了有多少个人
{
k=i;
for(n=i+1;n<=j;n++)
{
if(stu3[k].average>stu3[n].average)
k=n;
}
temp=stu3[k];
stu3[k]=stu3[i];
stu3[i]=temp;
}
fp=fopen("d:\\按平均成绩排序.txt","w");
if(fp==NULL)
{printf("文件打开失败\n"); return;}
fprintf(fp,"序号 学号 姓名 数学 英语 C语言 乱七八糟 平均分\n");
for(i=0;i<=j;i++)
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu3[i].num
,stu3[i].name,stu3[i].math,stu3[i].english,stu3[i].cprogram,stu3[i].culture,stu3[i].average);
printf(" 文件已保存至D:\\按平均成绩排序.txt\n");//把按平均成绩排序的信息写入文件
fclose(fp);
}
- 1 回答
- 0 关注
- 1527 浏览
添加回答
举报
0/150
提交
取消