#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define LEN sizeof(struct student)/*student 结构体所占字节数*/
#define DATA stu[i].num,stu[i].name,stu[i].c,stu[i].m,stu[i].sum/*设置显示内容*/
#define FORMAT "%d %s %.2lf %.2lf %.2lf %.2lf\n"/*设置显示格式*/
#define N 39
float Fc,Fm,Fe;/*全局变量:C 语言成绩,高数成绩,英语成绩*/ struct student
{ int num;/*学号*/ char name[39];/*姓名*/ double c;/*C 语言课程成绩*/ double m;/*高数课程成绩*/ double e;/*英语课程成绩*/ double sum;/*总分*/ }stu[N]; char mi[6]="123567";/*此变量用于存储登陆密码,后期可根据具体情况进行完善*/
void in();/*录入学生成绩信息*/ void color();/*设置界面颜色*/ void show();/*显示学生信息*/ void order();/*按总分排序*/ void del();/*删除学生成绩信息*/ void modify();/*修改学生成绩信息*/ void menu();/*主菜单*/ void total();/*计算总人数*/ void search();/*查找学生信息*/
void main() { int c,m;/*根据该变量选择主菜单的命令*/ char s[6]; /*获取输入的密码,用于验证和登陆密码是否相同*/ int flag=0; /*通过该变量判断是否达到指定的次数*/ int n=3; /*限定输入错误的次数是 3 次*/ do {
printf("请您输入界面登录密码:\n"); scanf("%s",&s); if(!strcmp(s,mi))/*若密码正确*/ { printf("恭喜你成功登陆了\n\n\n"); flag=1; break; /*密码正确登陆成功,退出循环*/ } else { printf("输入有错误请重新输入:\n"); n--; } }while(n>0);
if(!flag) /*判断 flag 标志判断是否超过指定的猜测次数*/ { printf("请与开发人联系!\n");
getch(); exit(0); }
color(); menu(); scanf("%d",&m);/*输入选择功能的编号*/ while(m) { switch(m) { case 1:in();break; case 2:search();break; case 3:del();break; case 4:modify();break; case 5:order();break; case 6:total();break; default:break; } menu();/*执行完成功能再次显示菜单界面*/ scanf("%d",&m); } }
void menu()/*自定义函数实现菜单功能*/
{ system("cls");/*清屏函数*/ system("title csj"); printf("\n\n\n\n\n"); printf("\t\t*****************学生管理系统****************\n"); printf("\t\t*\t1. 录入学生成绩信息 *\n"); printf("\t\t*\t2. 查询学生成绩信息 *\n"); printf("\t\t*\t3. 删除学生成绩信息 *\n"); printf("\t\t*\t4. 修改学生成绩信息 *\n"); printf("\t\t*\t5. 学生成绩排序 *\n"); printf("\t\t*\t6. 统计信息数量 *\n"); printf("\t\t*\t0. 退出 *\n"); printf("\t\t*********************************************\n\n"); printf("\t\t\t 请选择(0-6):"); }
void color()/*自定义函数实现颜色变化*/ { system("color 5E"); } void in()/*自定义函数实现录入学生成绩信息*/ { int i,m=0;/*m 是记录的条数*/ char ch[2]; FILE*fp;/*定义文件指针*/ if((fp=fopen("data","a+"))==NULL)/*打开指定文件*/ { printf("系统出错,请与开发人联系!\n"); return;\ } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) m++;/*统计当前记录条数*/ } fclose(fp); if(m==0) printf("无学生成绩记录!\n"); else
{ system("cls"); show();/*调用 show 函数,显示原有信息*/ } if((fp=fopen("data","a+"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } printf("是否录入学生成绩,请按(y/n):"); scanf("%s",ch); while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/ { printf("请输入学生学号:"); scanf("%d",&stu[m].num);/*输入学生学号*/ for(i=0;i<m;i++) if(stu[i].num==stu[m].num) { printf("您输入的学号已经存在!"); getch(); fclose(fp); return; } printf("请输入学生姓名:"); {getchar();} gets(stu[m].name);/*输入学生姓名*/ //scanf("s",stu[m].name ) printf("C 语言:"); scanf("%lf",&stu[m].c);/*输入 C 语言成绩*/ printf("高数:"); scanf("%lf",&stu[m].m);/*输入高数成绩*/ printf("英语:"); scanf("%lf",&stu[m].e);/*输入英语成绩*/ stu[m].sum=stu[m].c+stu[m].m+stu[m].e;/*计算出总成绩*/ if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/ { printf("系统出错,请与开发人联系!!"); } else { printf("%s 成绩录入成功!\n",stu[m].name); m++; }
printf("是否继续录入?(y/n):");/*询问是否继续*/ scanf("%s",ch); } fclose(fp); } void show()/*自定义函数实现显示学生成绩信息*/ { FILE *fp; int i,m=0; fp=fopen("data","r"); while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) m++; } fclose(fp); printf("学号 姓名 C 语言 高数 英语 总分\t\n"); for(i=0;i<m;i++) { printf(FORMAT,DATA);/*将信息按指定格式打印*/
} }
void del()/*删除学生成绩信息*/ { FILE *fp; int snum,i,j,m=0; char ch[2]; if((fp=fopen("data","a+"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("无记录!\n"); return; }
printf("请输入您要删除的学号:"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num) break; if(i==m) { printf("对不起,没有您要删除的学生信息!"); getchar(); return; } printf("find the student,delete?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/ { for(j=i;j<m;j++) stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/ m--;/*记录的总个数减 1*/ printf("删除成功!\n"); } if((fp=fopen("data","w"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("更新失败,请与开发人联系!\n"); getch(); } fclose(fp); } void modify()/*修改学生成绩信息*/ { FILE *fp; int i,j,m=0,snum; if((fp=fopen("data","a+"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("无记录!\n"); fclose(fp); return; } printf("请输入您要修改的学生学号\n"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/ break; if(i<m) { printf("姓名:\n"); scanf("%s",stu[i].name);/*输入名字*/ printf("\nC 语言成绩:"); scanf("%lf",&stu[i].c);/*输入 C 语言程序设计成绩*/ printf("\n 高数:"); scanf("%lf",&stu[i].m);/*输入高数成绩*/ printf("\n 英语"); scanf("%lf",&stu[i].e);/*输入英语成绩*/ stu[i].sum=stu[i].c+stu[i].m+stu[i].e; } else { printf("没有您要修改的学生信息!"); getchar(); return; } if((fp=fopen("data","w"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/ if(fwrite(&stu[j] ,LEN,1,fp)!=1) { printf("更新失败,请与开发人联系!!"); getch(); } fclose(fp); }
void search()/*自定义查找函数*/ { FILE *fp; int snum,i,m=0; char ch[2]; if((fp=fopen("data","r"))==NULL) { printf("系统出错,请与开发人联系!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("无记录\n"); return; } printf("请输入您要查询的学号:"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num)/*查找输入的学号是否在记录中*/ { printf("查询成功,是否显示?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { printf("学号 姓名 C 语言 高数 英语 总分\t\n"); printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/ break; } else return; } if(i==m) printf("未找到您要要查找的信息\n");/*未找到要查找的信息*/ getch(); } void order()/*自定义函数实现学生成绩排序*/ { FILE *fp; struct student t; int i=0,j=0,m=0;
if((fp=fopen("data","a+"))==NULL) { printf("系统出错,请与开发人联系!"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("无记录!\n"); getch(); return; } for(i=0;i<m-1;i++) for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/ if(stu[i].sum<stu[j].sum) { t=stu[i]; stu[i]=stu[j]; stu[j]=t; } if((fp=fopen("data","w"))==NULL) { printf("系统出错,请与开发人联系!"); getch(); return; } for(i=0;i<m;i++)/*将重新排号顺序的内容重新书写入指定的磁盘文件中*/ if(fwrite(&stu[i],LEN,1,fp)!=1) { printf("更新失败,请与开发人联系!\n"); } fclose(fp); show(); getch(); } void total() { FILE *fp; int m=0; if((fp=fopen("data","r"))==NULL) {
printf("系统出错,请与开发人联系!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++;/*统计记录个数即学生个数*/ if(m==0) { printf("无记录!\n"); fclose(fp); return; } printf("本系统有%d 条记录!\n",m);/*将统计的个数输出*/ getch(); fclose(fp); }