#include
#include
#include
//宏定义
#define FUNC_NEW 1 /* 建立新的班级学生数据*/
#define FUNC_SAVE 2 /*把数据写入文件并保存*/
#define FUNC_OPEN 3 /*打开文件并从里读入数据*/
#define FUNC_INSERT 4 /*插入一个学生的信息*/
#define FUNC_SEARCH 5 /*查找学生的信息*/
#define FUNC_CHANGE 6 /*修改学生的信息*/
#define FUNC_DELETE 7 /*删除学生的信息*/
#define FUNC_DISPLAY 8 /*展示学生的信息*/
#define FUNC_CENSUS 9 /*分段统计学生总分人数并打印*/
#define FUNG_EXIT 10/*结束程序*/
#define FUNC_CLOSE 10
#define MAX_NUM 45
#define MAX_NAME_STRLEN 25
//用户定义的类型声明
struct _student{
int id;
char name[MAX_NAME_STRLEN];
int AdMath;
int English;
int Chinese;
int OS;
int C_Language;
float averScore;
int sum;
};
typedef struct _student STUD;
struct _studTb{
STUD stud[MAX_NUM];
int length;
};
//函数声明
void Greeting();
void DoSave();
void DoOpen();
void DoNew();
void DoInsert();
void DoDisplay();
void DoDelete();
void DoSearch();
void DoChange();
void Docensus();
void DoExit();
//全局变量的定义
struct _studTb si;
char strClassId[15];
//函数定义
int main()
{
int iUserSelect;
int MainMenu();
system("color 18");
Greeting();
for(;;)
{
iUserSelect = MainMenu();
if(FUNC_CLOSE == iUserSelect)
break;
switch(iUserSelect)
{
case FUNC_NEW:
DoNew();
break;
case FUNC_OPEN:
DoSave();
break
;case FUNC_SAVE:
DoOpen();
break;
case FUNC_INSERT:
DoInsert();
break;
case FUNC_SEARCH:
DoSearch();
break;
case FUNC_CHANGE:
DoChange();
break;
case FUNC_DELETE:
DoDelete();
break;
case FUNC_DISPLAY:
DoDisplay();
break;
case FUNC_CENSUS:
Docensus();
break;
case FUNC_CLOSE :
DoExit();
break;
default:
break;
}
}
}
/********************************************************************************/
int MainMenu()
{
int iUserSelect;
system("cls");
printf("Main function menu of MIS\n");
printf("1> 新建学生信息\n");
printf("2> 保存学生信息\n");
printf("3> 打开学生信息\n");
printf("4> 插入学生信息\n");
printf("5> 查找学生信息\n");
printf("6> 修改学生信息\n");
printf("7> 删除学生信息\n");
printf("8> 展示学生信息的成绩排名\n");
printf("9> 分段统计学生信息\n");
printf("10> 退出学生系统\n");
printf("Please select a function id(1..9) to execute:");
scanf("%d",&iUserSelect);
return iUserSelect;
}
/*************************************************************************************/
void Greeting()
{
int i;
printf(" -------------------------------------------- \n");
printf(" | | \n");
printf(" | Welcome to MIS of Student | \n");
printf(" | 王章伟 徐小利 | \n");
printf(" -------------------------------------------- \n");
printf(" Please input a number(0..9) to continue!");
scanf("%d",&i);
}
/************************************************************************************/
void DoNew()
{
int number,i;
system("cls");
//printf("Do new!\n");
printf("\t\tFUNCION: 新建一个班级:\n");
printf("\t\t请输入班级序号(string):");
scanf("%s",strClassId);
printf("\t\t请输入这个班有多少人:");
scanf("%d",&number);
for (i = 0; i < number; i++)
{
// 从键盘读入各个学生的信息
printf("\t\t请输入学生学号:");
scanf("%d",&si.stud[i].id);
printf("\t\t请输入学生姓名:");
scanf("%s",si.stud[i].name);
printf("\t\t请输入学生成绩:\n");
printf("\t\tAdMath English Chinese OS C_Language\n");
scanf("%4d %4d %4d %4d %4d",& si.stud[i].AdMath, & si.stud[i].English, & si.stud[i].Chinese,
& si.stud[i].OS, & si.stud[i].C_Language);
}
si.length = number;
}
/*****************************************************************************************/
//保存学生信息
void DoSave()
{
FILE *fp;
int i;
system("cls");
if((fp=fopen("stu-list.txt","wb"))==NULL)
{
printf("打开文件失败\n");
return;
}
for(i=0;i
if(fwrite(&si.stud[i],sizeof(si),1,fp)==1)
printf("保存成功\n");
}
fclose(fp);
}
/**********************************************************************************************/
//开文件读取学生信息
void DoOpen()
{
FILE *fp;
int i=0;
system("cls");
if((fp=fopen("stu-list.txt","ab+"))==NULL)
{
printf("打开文件失败\n");
return;
}
while(!feof(fp))
{
if(fread(&si.stud[i],sizeof(si),1,fp)==1)
i++;
}
fclose(fp);
for(i=0;i
si.stud[i].OS, si.stud[i].C_Language);
}
/**********************************************************************************************/
//插入学生信息
void DoInsert()
{
FILE *fp;
int j,INid,sid;
int m=0,i=0,k=0;
system("cls");
if((fp=fopen("stu-list.txt","ab+"))==NULL)
{ printf("\t文件打开失败!");
getchar();
return;
}
while(!feof(fp)){
if(fread(&si.stud[i],sizeof(si),1,fp)==1)
m++;
i++;}
/*if(m==0)
{
printf("没有学生记录!");
fclose(fp);
return;
}*/
printf("\t请输入要插入信息在那个学号之后:\n");
scanf("%d",&INid);
for(i=0;i
break;
for(j=m-1;j>i;j--)
si.stud[j+1]=si.stud[j];
stare1:
printf("\t请输入要插入的学生的信息:\n");
printf("\t请输入要插入的学号");
scanf("%d",&sid);
while(k
if(si.stud[k].id==sid)
{
printf("\t 该学号已经存在,不允许重复插入!\n");
goto stare1;
}
k++;}
si.stud[i+1].id=sid;
printf("\t请输入你想输入的姓名");
scanf("%s",si.stud[i+1].name);
printf(" AdMath English Chinese OS C_Language\n");
scanf("%d %d %d %d %d",& si.stud[i+1].AdMath,
& si.stud[i+1].English,
& si.stud[i+1].Chinese,
& si.stud[i+1].OS,
& si.stud[i+1].C_Language);
si.length=si.length+1;
DoSave();
}
/**********************************************************************************************/
//在文件中查找学生信息,支持姓名学号查找
void DoSearch()
{
int i=0,choice,Sid;
char sname[MAX_NAME_STRLEN];
int flag=0;
system("cls");
DoOpen();
printf("\n1按姓名查找:\n2按学号查找:");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("请你输入要查找的姓名");
scanf("%s",sname);
while(i
if(strcmp(si.stud[i].name,sname)==0)
{
flag=1;
printf("学号:%d 姓名:%s 数学成绩:%d 英语成绩:%d 语文成绩:%d OS成绩:%d C语言成绩:%d\n",si.stud[i].id,
si.stud[i].name ,
si.stud[i].AdMath,
si.stud[i].English,
si.stud[i].Chinese,
si.stud[i].OS,
si.stud[i].C_Language);}
i++;
}
if(flag==0)
printf("你输入的姓名不存在,请确认后再输入");
break;
case 2: printf("请你输入要查找的学号");
scanf("%d",&Sid);
while(i
{
if(Sid==si.stud[i].id)
{
flag=1;
printf("学号:%d 姓名:%s 数学成绩:%d 英语成绩:%d 语文成绩:%d OS成绩:%d C语言成绩:%d\n",si.stud[i].id,
si.stud[i].name ,
si.stud[i].AdMath,
si.stud[i].English,
si.stud[i].Chinese,
si.stud[i].OS,
si.stud[i].C_Language);
}
i++;
}
if(flag==0)
printf("你输入的学号不存在,请确认后再输入");
break;
}
printf(" Please input a number to continue!");
scanf("%d",&i);
return;
}
/**********************************************************************************************/
//对学生信息进行修改
void DoChange()
{
int choice1;
int i=0;
int onum;
char choice2;
system("cls");
DoOpen();
printf("你想对那个学生进行操作,请输入学号\n");
scanf("%d",&onum);
while(onum!=si.stud[i].id)
i++;
if(onum==si.stud[i].id)
{
printf("\n你要修改哪一项");
printf("1学号\t2姓名\n3数学成绩\n4英语成绩\n5汉语成绩\n6电分成绩\n7C程序成绩");
printf("请选择");
scanf("%d",&choice1);
switch(choice1)
{
case 1: printf("\n请输入修改后的学号");
scanf("%d",&si.stud[i].id);
break;
case 2: printf("\n输入你要修改的姓名");
scanf("%s",&si.stud[i].name);
break;
case 3: printf("\n请输入要修改的成绩");
scanf("%d",&si.stud[i].AdMath);
break;
case 4: printf("\n请输入要修改的成绩");
scanf("%d",&si.stud[i].Eng
lish);
break;
case 5: printf("\n请输入要修改的成绩");
scanf("%d",&si.stud[i].Chinese);
break;
case 6: printf("\n请输入要修改的成绩");
scanf("%d",&si.stud[i].OS);
break;
case 7: printf("\n请输入要修改的成绩");
scanf("%d",&si.stud[i].C_Language);
break; }
}
else
printf("没有该同学信息");
printf(" Please input a number(0..9) to continue!");
scanf("%d",&i);
}
/**********************************************************************************************/
//删除学生信息
void DoDelete()
{
int i,id;
char fname[MAX_NAME_STRLEN];
system("cls");
DoOpen();
printf("请输入学生学号");
scanf("%d",&id);
i=0;
while(si.stud[i].id!=id)
i++;
if(si.stud[i].id==id)
{
while(i
si.stud[i]=si.stud[i+1];
i++;
}
si.length=si.length-1;
for(i=0;i
si.stud[i].OS, si.stud[i].C_Language);
}
else
printf("没有该同学信息");
printf(" Please input a number(0..9) to continue!");
scanf("%d",&i);
}
/**********************************************************************************************/
//展示学生信息
void DoDisplay()
{
struct _studTb m;
int i,j,n;
system("cls");
DoOpen();
printf("请选择\n1.数学排名 2.英语排名 3.语文排名 4.OS排名 5.C语言排名 6.学生总分并排序 7.学生平均分并排序\n");
scanf("%d",&n);
if(n==1)
{
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
else if(n==2)
{
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
else if(n==3)
{
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
else if(n==4)
{
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
else if(n==5)
{
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
printf("学号:%d 姓名:%s C语言成绩排名:%d\n", si.stud[i].id, si.stud[i].name,si.stud[i].C_Language);
}
else if(n==6)
{
for(i=0;i
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
else if(n==7)
{
for(i=0;i
si.stud[i].sum=si.stud[i].AdMath+si.stud[i].English+si.stud[i].Chinese+si.stud[i].OS+si.stud[i].C_Language;
si.stud[i].averScore=(float)si.stud[i].sum/si.length;
}
for(j=0;j
for(i=0;i
m.stud[1]=si.stud[i];
si.stud[i]=si.stud[i+1];
si.stud[i+1]=m.stud[1];
}
}
for(i=0;i
}
printf(" Please input a number(0..9) to continue!");
scanf("%d",&i);
}
/**********************************************************************************************/
//统计学生信息
void Docensus()
{
struct _studTb sen;
int mark;
int sum=0;
int i=0;
system("cls");
DoOpen();
printf("请输入要统计多少分以上的学生信息");
scanf("%d",&mark);
while(i
{
sen.stud[sum]=si.stud[i];
sum++;
}
i++;
}
printf("一共有:%d人\n",sum);
for(i=0;i
%4d C语言成绩%4d\n ",sen.stud[i].id,sen.stud[i].name,sen.stud[i].AdMath,sen.stud[i].English,sen.stud[i].Chinese,
sen.stud[i].OS,sen.stud[i].C_Language);
printf(" Please input a number(0..9) to continue!");
scanf("%d",&i);
}
/**********************************************************************************************/
void DoExit()
{ //结束程序
printf("\t\t 谢谢使用,祝您好运,再见!\n");
printf("\t\t");
system("pause");
exit(0);
}