学生信息管理系统源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#define STMAX 100//最大学生数
struct student//学生结构体
{
char id[10];//学号
char name[20];//名字
char sex[10];//性别
float sorc[3];//
float aver;//
float sum;//
};
FILE * fp = NULL;
char filename[]="d:\\学生信息表dat";
/*******************************函数声明****************************/
void showmenu();
void aboutinfo(struct student*);
void inputinfo(struct student*);
void allinfo(struct student*);
void delinfo(struct student*);
int existRec(struct student*);
/********************************主函数*****************************/
void main(void)
{
struct student studentinof[STMAX];
struct student * p_student;
int choice;
p_student=studentinof;
/****************************显示菜单***************************/
showmenu();//显示系统菜单
printf("\t\t请从下列选择你想要执行的操作:");
/*****************************输入选项***************************/
scanf("%d",&choice);
/******************************是否退出**************************/
while(choice!=5)
{
/**************************调用相应函数****************************/
switch(choice)
{
case 1: inputinfo(p_student);
break;
case 2: aboutinfo(p_student);
break;
case 3: allinfo(p_student);
break;
case 4: delinfo(p_student);
break;
case 5: break;
default:printf("\t\t\t请重新选择(1 ~ 5):");
scanf("%d",&choice);
continue;
}
showmenu();
printf("\t\t请选择操作:");
scanf("%d",&choice);
}
printf("\n\n\t\t退 出 系 统 !");
}
/******************************显示系统菜单***************************************/
void showmenu()
{
system("cls");//清屏
printf("\n\n\t\t——————————————————————————————\n");
printf("\t\t| 学生信息管理系统 |\n");
printf("\t\t|—————————————————————————————|\n");
printf("\t\t| 1.录入信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 2.查询信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 3.浏览信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 4.删除信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 5.退出系统 |\n");
printf("\t\t| |\n");
printf("\t\t———————————
———————————————————\n");
return;
}
/***************************计算文件中现有的记录数************************************/
int existRec(struct student * p_student)
{
int count;
system("cls");
//打开文件
//是否出错
if((fp=fopen(filename,"rb")) == NULL)
{
//报告错误
printf("不能打开文件,请确认磁盘未满或d:\\学生信息表.dat文件未损坏");
exit(0);
}
rewind(fp);
//读入一条记录
//是否成功
for(count=0;fread(&p_student[count],sizeof(struct student),1,fp)==1;count++);
//关闭文件
fclose(fp);
return count;
}
/************************************信息录入*********************************/
void inputinfo(struct student *p_student)
{
int count,j;
char ch;
float sum;
//打开文件
count = existRec(p_student);
//是否出错
if((fp == fopen(filename,"a+b"))==NULL)
{
//报告错误
printf("不能打开文件请确认文件存在!");
exit(0);
}
/*********************************录入学生信息**********************************/
printf("\n\t信息登记表\n");
printf("\n请输入第%d个学生的信息(请使用英文或拼音)\n",count+1);
printf("----------------------------------------------------------------------\n");
printf("学号:");
fflush(stdin);
/*********************用来清楚缓存,保证gets输入正确*********************/
/********************************学号为零****************************************/
while(count
printf("\n姓 名:");
gets(p_student[count].name);
printf("性 别:");
gets(p_student[count].sex);
printf("英语成绩:");
scanf("%f",&p_student[count].sorc[0]);
printf("高数成绩:");
scanf("%f",&p_student[count].sorc[1]);
printf("计算机成绩:");
scanf("%f",&p_student[count].sorc[2]);
printf("-----------------------------------------------\n");
/****************************计算成绩************************************/
sum=0;
for(j=0;j<3;j++)
sum+=p_student[count].sorc[j];//计算总分
p_student[count].sum=sum;
p_student[count].aver=sum/3.0;//计算平均分
/****************************存入数据文件**************************************/
fwrite(&p_student[count++],sizeof(struct student),1,fp);
printf("\n是否录入第%d个学生的信息(y/n)",count+1);
ch=getch();
if(ch=='y'||ch=='Y')
{
printf("%c\n------------------------------------------------",ch);
printf("\n学 号:");
fflush(stdin);
continue;
}
else
{
fclose(fp);
printf("\n输入有误,终止信息录入,按任意键返回!");
getch();
return;
}
}
}
/*****************************查询个人信息*************************************/
void aboutinfo(struct student * p_student)
{
int i;
int count;
char ch;
char * temp=NULL;
count=existRec(p_student);
if (
!count)
{
printf("\n文件记录为空!");
getch();
return;
}
temp=(char *)malloc(10 * sizeof(char));
printf("\n请输入要查询的学生学号:");
fflush(stdin);
while(gets(temp)!=NULL&&temp[0]!='\0')
{
for(i=0;i
if(!strcmp(temp,p_student[i].id))
{
printf("----------------------------------------\n");
printf("----\n姓名:%s\n",p_student[i].name);
printf("----\n性别:%s\n",p_student[i].sex);
printf("----\n英语:%.2f\n",p_student[i].sorc[0]);
printf("----\n高数:%.2f\n",p_student[i].sorc[1]);
printf("----\n计算分:%.2f\n",p_student[i].sorc[2]);
printf("----\n总分:%.2f\n",p_student[i].sum);
printf("----\n平均分:%.2f\n",p_student[i].aver);
printf("----------------------------------------\n");
break;
}
}
if(i==count)
printf("\n没有该学生!\n,ch");
printf("\n\n是否要查询下一个学生的信息(y/n)");
ch=getch();
if(ch=='Y'||ch=='y')
{
printf("%c\n\n请输入要查询的学生的学号:",ch);
fflush(stdin);
continue;
}
else
{
free(temp);
printf("%c\n\n查询结束,返回!",ch);
getch();
return;
}
}
free(temp);
printf("\n输入有误,按任意键返回菜单!");
getch();
return;
}
/*************************查询所有信息****************************************/
void allinfo(struct student * p_student)
{
int i;
int count;
count = existRec(p_student);
if(!count)
{
printf("\n\n文件记录为空!");
getch();
return;
}
printf("\n\t\t\t学生信息查询表\n\n");
printf("\t以下是本系统所以查询到所有学生的信息,如果表中的数据为空\n");
printf("请确认数据是否成功录入!");
printf("------------------------------------------------------------------");
for(i=0;i
printf("\n你正在查看的%d个学生的信息\n",i+1);
printf("----\n学号:%s\n",p_student[i].id);
printf("----\n姓名:%s\n",p_student[i].name);
printf("----\n性别:%s\n",p_student[i].sex);
printf("----\n英语:%.2f\n",p_student[i].sorc[0]);
printf("----\n高数:%.2f\n",p_student[i].sorc[1]);
printf("----\n计算分:%.2f\n",p_student[i].sorc[2]);
printf("----\n总分:%.2f\n",p_student[i].sum);
printf("----\n平均分:%.2f\n",p_student[i].aver);
printf("------------------------------------------------------------\n");
printf("按任意键继续浏览!\n");
getch();
}
printf("\n\n查询结束,按任意键返回!!");
getch();
return;
}
/********************************删除信息*****************************************/
void delinfo(struct student * p_student)
{
int i,j;
int count;
char ch;
char * temp=NULL;
count=existRec(p_student);
if(!count)
{
printf("\n不能读取数据,请确认已经正确录入的数据是否存在。");
getch();
return;
}
temp=(char*)malloc(10*
sizeof(char));
printf("请输入你要删除的学生的学号:");
fflush(stdin);
while(gets(temp)!=NULL&&temp[0]!='\0')
{
for(i=0;i
if(!strcmp(temp,p_student[i].id))
{
printf("\n\n确定要删除%s的信息吗?(y/n)",p_student[i].id);
ch=getch();
if(ch=='n'||ch=='N')
{
free(temp);
printf("%c\n\n该操作已取消,请按任意键返回");
getch();
return;
}
for(j=i;j
count--;
if((fp=fopen(filename,"w+b"))==NULL)
{
free(temp);
printf("\n不能打开文件,请确认磁盘已满或是文件是否存在!");
getch();
exit(1);
}
for(j=0;j
if(fwrite(&p_student[j],sizeof(struct student),1,fp)!=1)
break;
}
fclose(fp);
}
}
if(i==count)
printf("\n\n没有该学生!\n",ch);
else
printf("%c\n\n\n已成功删除该学生的信息\n",ch);
printf("\n删除下一个学生(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
printf("%c\n\n请输入您要删除的学生号:",ch);
fflush(stdin);
continue;
}
else
{
free(temp);
printf("%c\n\n删除结束,按任意键返回!",ch);
getch();
return;
}
}
free(temp);
printf("\n输入有误,请按任意键返回菜单,重新选择!");
getch();
return;
}