学生信息管理系统.docx
《学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
学生信息管理系统
#include
#include//使用清屏函数及光标定位
#include//包含使用strcmp的头文件
voidgotoxy(intx,inty);//光标定位
voidMenu();//主菜单
voidInfobase();//信息维护
voidFind();//信息查询
voidInfoStat();//成绩统计
voidComp();//成绩排序
voidFind_ID();//以学号查找
voidFind_name();//以姓名查找
voidInfobase_add();//录入信息
voidInfobase_amend();//修改信息
voidDelete();//删除信息
typedefstruct//重命名学生信息结构体
{
charname[10];//姓名
charsex[3];//性别
intage;//年龄
charbirthday[40];//生日
intID;//学号
chartel[40];//联系方式
charad[50];//地址
charmail[50];//邮箱
intmath;//数学成绩
intenglish;//英语成绩
intcomputer_C;//计算机C语言成绩
intsum;//成绩总和
}Student;
voidmain()
{
color2;
intchg=1,n;
gotoxy(10,5);
printf("**************************************************************");
gotoxy(30,6);
printf("欢迎使用本管理系统");
gotoxy(10,7);
printf("**************************************************************");
gotoxy(35,10);
printf("作者:
郭帅");
Sleep(3000);//停留3秒
system("cls");//清屏
while(chg)
{
Menu();
scanf("%d",&n);
switch(n)
{
case1:
Infobase();//信息维护
system("cls");
break;
case2:
Find();//信息查询
system("cls");
break;
case3:
InfoStat();//成绩统计
break;
case4:
Comp();//成绩排序
break;
case0:
chg=0;//退出菜单
system("cls");
printf("/t/t谢谢使用!
再见\n");
break;
default:
printf("/t/t选择错误(0~4)?
请重新输入\n");
system("cls");
}
}
getch();
}
/************************************主菜单画面***********************************************/
voidMenu()
{
printf("\t┌──────────────────────────────┐\n");
printf("\t│主菜单│\n");
printf("\t├─────┬──────┬─────┬─────┬─────┤\n");
printf("\t│1信息维护│2信息查询│3成绩统计│4成绩排序│0退出菜单│\n");
printf("\t└─────┴──────┴─────┴─────┴─────┘\n");
}
/*************************************信息维护***********************************************/
voidInfobase()
{
intn,chg=1;
while(chg)
{
system("cls");
printf("\t1添加学生信息2修改学生信息3删除学生信息0回到主菜单\n");
scanf("%d",&n);
switch(n)
{
case1:
Infobase_add();//录入信息
break;
case2:
Infobase_amend();//修改信息
break;
case3:
Delete();//删除信息
case0:
chg=0;//退回主菜单
break;
default:
printf("\t选择错误请重新输入\n:
");
}
}
}
/****************************光标定位函数*******************************/
voidgotoxy(intx,inty)
{
CONSOLE_SCREEN_BUFFER_INFOcsbiInfo;
HANDLEhConsoleOut;
hConsoleOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X=x;
csbiInfo.dwCursorPosition.Y=y;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
/*******************************录入信息*****************************************************/
voidInfobase_add()
{
Studentstu[1];//定义Student型数组变量
FILE*fp=NULL;//声明文件指针
fp=fopen("学生信息.txt","a");//以追加方式打开
system("cls");
printf("输入姓名性别年龄出生年月学号电话地址邮箱成绩(数学外语C语言)\n");
scanf("%s%s%d%s%d%s%s%s%d%d%d",//接收输入
stu[0].name,
stu[0].sex,
&stu[0].age,
stu[0].birthday,
&stu[0].ID,
stu[0].tel,
stu[0].ad,
stu[0].mail,
&stu[0].math,
&stu[0].english,
&stu[0].computer_C);
printf("\n\n");
stu[0].sum=stu[0].english+stu[0].computer_C+stu[0].math;//计算总分
if(fprintf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d\n",//写入磁盘防错处理
stu[0].name,
stu[0].sex,
stu[0].age,
stu[0].birthday,
stu[0].ID,
stu[0].tel,
stu[0].ad,
stu[0].mail,
stu[0].math,
stu[0].english,
stu[0].computer_C,
stu[0].sum)==0)
{
printf("写入失败");
}
fclose(fp);//关闭文件指针
}
/*********************************修改信息***************************************************/
voidInfobase_amend()
{
inti,j;
charch[10];//声明字符数组以保存需修改的姓名
Studentstu[50];//声明Student型数组
FILE*fp=NULL;//声明文件指针
system("cls");
printf("输入需修改学生的名字");//提示输入
scanf("%s",ch);//接收输入姓名
fp=fopen("学生信息.txt","rt+");//以可读写方式打开
for(i=0;;i++)
{
fscanf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d",//从磁盘读入内存
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C,
&stu[i].sum);
if(strcmp(stu[i].name,ch)==0)//判断是否查找所需
{
rewind(fp);//指针移到文件开头
system("cls");
printf("输入修改姓名性别年龄出生年月学号电话地址邮箱成绩(数学外语C语言)\n");
scanf("%s%s%d%s%d%s%s%s%d%d%d",//接收输入
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C);
printf("\n\n");
j=i;
stu[i].sum=stu[i].english+stu[i].computer_C+stu[i].math;
for(i=0;i{
fprintf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d\n",//原数据写入磁盘
stu[i].name,
stu[i].sex,
stu[i].age,
stu[i].birthday,
stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
stu[i].math,
stu[i].english,
stu[i].computer_C,
stu[i].sum);
}
fprintf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d",//将修改数据写入磁盘
stu[i].name,
stu[i].sex,
stu[i].age,
stu[i].birthday,
stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
stu[i].math,
stu[i].english,
stu[i].computer_C,
stu[i].sum);
fclose(fp);//关闭文件指针
break;
}
}
}
/**************************************删除信息********************************************/
voidDelete()
{
inti,j,k=0;
charch[10];//声明字符数组以保存需删除的姓名
Studentstu[50];//声明Student型数组
FILE*fp=NULL,*fp1=NULL;//声明文件指针
system("cls");
printf("输入需删除学生的名字");//提示输入
scanf("%s",ch);//接收输入姓名
fp=fopen("学生信息.txt","rt+");//以可读写方式打开
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d",//从磁盘读入内存
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C,
&stu[i].sum);
if(strcmp(stu[i].name,ch)==0)//判断是否查找所需
j=i;
}
rewind(fp);//指针移动到开头
for(;j{
stu[j]=stu[j+1];//覆盖需删除的后依次前移
}
for(i=0;ifprintf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d\n",//写入磁盘
stu[i].name,
stu[i].sex,
stu[i].age,
stu[i].birthday,
stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
stu[i].math,
stu[i].english,
stu[i].computer_C,
stu[i].sum);
}
fclose(fp);
/***************************************信息查询***********************************************/
voidFind()
{
intn,chg=1;//声明chg变量用以循环
while(chg)
{
printf("\t\t1按学号查询2按姓名查询0退回主菜单\n");
scanf("%d",&n);
switch(n)
{
case1:
Find_ID();//调用以学号查找的函数
break;
case2:
Find_name();//调用以姓名查找的函数
break;
case0:
chg=0;//退回主菜单
break;
default:
printf("\n选择错误请重新输入\n");
}
}
}
/*********************************按学号查找***************************************************/
voidFind_ID()
{
intn,i;
Studentstu[50];//声明Student型数组变量
FILE*fp=NULL;//声明文件指针
system("cls");
printf("请输入学号\n");//提示接收输入
scanf("%d",&n);//接收输入学号
fp=fopen("学生信息.txt","rt");//以只读方式打开
for(i=0;!
feof(fp);i++)
{
if(fscanf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d\n",//防止读入内存失败
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C,
&stu[i].sum)==0)
printf("读取失败");
if(stu[i].ID==n)//判断是否需查找学生
{
printf("查找到:
%s性别%s年龄%d出生日期%s学号%d电话%s\n\t地址%s邮箱%s数学%d外语%dC语言%d总分%d\n",//输出查找目标
stu[i].name,
stu[i].sex,
stu[i].age,
stu[i].birthday,
stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
stu[i].math,
stu[i].english,
stu[i].computer_C,
stu[i].sum);
printf("\n\n");
break;
}
if(feof(fp))//处理未找到情况
{
system("cls");
printf("无此学生信息\n");
}
}fclose(fp);//关闭文件指针
}
/******************************按姓名查找*****************************************************/
voidFind_name()
{
inti;
charch[10];//声明字符数组以储存查找姓名
Studentstu[50];//声明Student型数组变量
FILE*fp=NULL;//声明文件指针
system("cls");
printf("请输入姓名\n");//提示输入
scanf("%s",ch);//接收输入姓名
fp=fopen("学生信息.txt","rt");//以只读方式打开
for(i=0;!
feof(fp);i++)//循环,以文件指针到末尾结束循环
{
fscanf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d",//从磁盘读入内存
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C,
&stu[i].sum);
if(strcmp(stu[i].name,ch)==0)//判断是否查找学生
{
printf("查找到:
%s性别%s年龄%d出生日期%s学号%d电话%s\n\t地址%s邮箱%s数学%d外语%dC语言%d总分%d\n",//输出查找目标
stu[i].name,
stu[i].sex,
stu[i].age,
stu[i].birthday,
stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
stu[i].math,
stu[i].english,
stu[i].computer_C,
stu[i].sum);
printf("\n\n");
break;
}
if(feof(fp))//处理未找到情况
{
printf("无此学生信息\n");
}
}fclose(fp);//关闭文件指针
}
/*********************************信息统计*****************************************************/
voidInfoStat()
{
intn,m,i,count=0;
charch[15];//声明字符数组保存课程名
Studentstu[60];//声明Student型数组变量
FILE*fp=NULL;//声明文件指针
fp=fopen("学生信息.txt","rt");//以只读方式打开
system("cls");
printf("输入课程名(数学外语C)和分数段(格式:
数学x1-x2)\n");
scanf("%s",ch);//接收输入课程名
scanf("%d-%d",&n,&m);//接收输入分数段
for(i=0;!
feof(fp);i++)//以文件指针到文件末尾结束循环
{
if(fscanf(fp,"%s%s%d%s%d%s%s%s%d%d%d%d\n",//防止读入内存失败
stu[i].name,
stu[i].sex,
&stu[i].age,
stu[i].birthday,
&stu[i].ID,
stu[i].tel,
stu[i].ad,
stu[i].mail,
&stu[i].math,
&stu[i].english,
&stu[i].computer_C,
&stu[i].sum)==0)
printf("读取失败");
count++;
}
fclose(fp);//关闭文件指针
/****************************以下输出查找目标**********************************************/
system("cls");
printf("姓名\t性别\t%s\t总分\n",ch);
for(i=0;iif(strcmp(ch,"数学")==0&&stu[i].math>=n&&stu[i].math<=m)
{
printf("%s\t%s\t%d\t%d\n",
stu[i].name,
stu[i].sex,
stu[i].math,
stu[i].sum);
}
for(i=0;iif(strcmp(ch,"外语")==0&&stu[i].english>=n&&stu[i].english<=m)
{
printf("%s\t%s\t%d\t%d\n",
stu[i].name,
stu[i].sex,