#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); }
慕粉1146083187
相关分类