操作系统:Windows 7,Windows 10,Windows 11。
开发环境工具:Cfree,Dev C++,VC6++。
开发语言:C语言。
- 制作一个学生信息管理系统。
- 在制作的系统中,能录入学生信息、删除学生信息、修改学生信息,查询学生信息、排序学生信息。
- 系统使用方法便捷,简单,功能容易实现。
- 学生的信息包括:学号、姓名、班级、性别、英语成绩,C语言成绩,平均成绩,总成绩
- 避免系统bug的出现,优化系统。
录入学生信息:将学生的信息输入到学生信息管理系统中。
删除学生信息:将学生信息管理系统中不需要的学生信息删除。
修改学生信息:在学生信息管理系统中修改学生的部分信息。
查询学生信息:在学生信息管理系统中输入需求显示查询结果。
显示学生信息:在学生信息管理系统中按需求显示所有学生信息。
排序学生信息:按一定规律对学生信息进行排序。
显示最好成绩:显示所有学生中总成绩最高的同学。
分组统计成绩:按照总成绩进行分组统计。
清屏:清除以上操作结果。
1.构造功能框架
此步是将系统主要功能的算法框架建立出来(只是框架,不需要实现功能)
//学生信息结构体
struct student
{int num;
char name[20];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
float total;
float aver;
};
struct student stu[50];
//主函数
int main()
{
void menu(); //功能函数的调用声明
void in();
void delet();
void updet();
void select();
void print();
void sort();
void max();
void cut();
void clea();
menu();
int n;
printf("请选择功能(1-9):\n");
scanf("%d",&n);
while(n)
{
if(n>=1&&n<=9)
{
switch(n)
{
case 1:in();break;
case 2:delet();break;
case 3:updet();break;
case 4:select();break;
case 5:print();break;
case 6:sort();break;
case 7:max();break;
case 8:cut();break;
case 9:clea();break;
}
if(n==9)
{
menu();
}
printf("\n");
printf("请选择功能(1-9):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
//菜单界面
void menu()
{
}
//录入学生信息
void in()
{
}
//删除学生信息
void delet()
{
}
//查找学生信息
void updet()
{
}
//修改学生信息
void select()
{
}
//显示所有学生信息
void print()
{
}
//排序
void sort()
{
}
//显示最大值
void max()
{
}
//分组统计
void cut()
{
}
//清屏
void clea()
{
}
2.设计系统目录
按照学生信息管理系统的功能进行设计,将学生信息管理系统的功能呈现出来,供用户选择。
void menu()
{
printf("\n\n\n");
printf("\t\t-------------------------------------------------\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||**************学生信息管理系统***************||\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t|| ||\n");
printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
printf("\t\t|| ||\n");
printf("\t\t||*********************************************||\n");
}
运行结果
1. 录入学生信息:将学生的信息输入到学生信息管理系统中,并保存到文件中。
//录入学生信息
void in()
{
void print();
FILE *fp;
int i, m=0;
char ch[2];
if((fp=fopen("stu.txt","rb"))==NULL)//文件不存在先使用wb创建文件,再将其改为rb;反之使用直接使用rb。
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}//m指代文件中学生的数量。
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
}
else
{
print();
}
if((fp=fopen("stu.txt","ab+"))==NULL)
{
printf("文件打开失败\n");
return;
}
printf("输入学生信息(y/n);\n");
scanf("%s",ch);
while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
printf("number:\n");
scanf("%3d",&stu[m].num);
for(i=0;i
运行结果
2.删除学生信息:将学生信息管理系统中不需要的学生信息删除,在删除完成后需将学生人数进行减一。
//删除学生信息
void delet()
{
void print();
FILE *fp;
int num,m=0;
int i,j;
int flag=0;
char ch[2];
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要删除学生信息的学号:");
scanf("%d",&num);
}
for(i=0;i
运行结果
3.修改学生信息:在学生信息管理系统中修改学生的部分信息。
//修改学生信息
void updet()
{
void print();
int num;
char name[10];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
FILE *fp;
int m=0,a;
int i,j;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有学生信息\n");
}
else
{
print();
printf("请输入需要修改学生信息的学号:");
scanf("%d",&num);
}//通过学号找到需要修改信息的学生。
for(i=0;i
运行结果
4.查询学生信息:在学生信息管理系统中输入需求显示查询结果。
//查询学生信息
void select()
{
int num,m=0;
int i;
FILE *fp;
if((fp=fopen("stu.txt","rb"))==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",&num);//通过输入学号进行查找。
for(i=0;i
运行结果
5.显示学生信息:在学生信息管理系统中按需求显示所有学生信息。
//显示学生信息
void print()
{
int i,m=0;
FILE *fp;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)//将文件中的学生信息读取出来,并按照定义的结构体数组呈现。
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i
运行结果
6.排序学生信息:按一定规律对学生信息进行排序。
//排序
void sort()
{
int i,j,m=0;
int ch;
FILE *fp;
struct student temp;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
printf("请选择显示形式:");
scanf("%d",&ch);
switch (ch)
{
case 1:
for(i=0;istu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 2:
for(i=0;istu[j].Eng_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 3:
for(i=0;istu[j].C_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 4:
for(i=0;istu[j].total)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 5:
for(i=0;istu[j].aver)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
}
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i
运行结果
7.显示最好成绩:显示所有学生中总成绩最高的同学。
//最大值
void max()
{
int i,j=0;
FILE *fp;
int m=0;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
for(i=0;istu[j].total)
j=i;
}
printf("总成绩成绩最高的同学是:\n");
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
}
运行结果
8.分组统计成绩:按照总成绩进行分组统计。
//分组统计
void cut()
{
int i,j;
float n;
FILE *fp;
int m=0;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("请输入按总成绩分组的值:");
scanf("%f",&n);
printf("总成绩大于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i=n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
}
printf("总成绩小于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(j=0;j
运行结果
9.清屏:清除以上操作结果。
//清屏
void clea()
{
system("cls");
}
#include
#include
#include
#define LEN sizeof(struct student)
//学生信息结构体
struct student
{int num;
char name[20];
char clas[20];
char sex[5];
float Eng_score;
float C_score;
float total;
float aver;
};
struct student stu[50];
//系统操作
int main()
{
void menu();
void in();
void delet();
void updet();
void select();
void print();
void sort();
void max();
void cut();
void clea();
menu();
int n;
printf("请选择功能(1-9):\n");
scanf("%d",&n);
while(n)
{
if(n>=1&&n<=9)
{
switch(n)
{
case 1:in();break;
case 2:delet();break;
case 3:updet();break;
case 4:select();break;
case 5:print();break;
case 6:sort();break;
case 7:max();break;
case 8:cut();break;
case 9:clea();break;
}
if(n==9)
{
menu();
}
printf("\n");
printf("请选择功能(1-9):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
//目录
void menu()
{
printf("\n\n\n");
printf("\t\t-------------------------------------------------\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||**************学生信息管理系统***************||\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t|| ||\n");
printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
printf("\t\t|| ||\n");
printf("\t\t||*********************************************||\n");
}
//录入学生信息
void in()
{
void print();
FILE *fp;
int i, m=0;
char ch[2];
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件没有内容\n");
}
else
{
print();
}
if((fp=fopen("stu.txt","ab+"))==NULL)
{
printf("文件打开失败\n");
return;
}
printf("输入学生信息(y/n);\n");
scanf("%s",ch);
while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
{
printf("number:\n");
scanf("%3d",&stu[m].num);
for(i=0;istu[j].num)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 2:
for(i=0;istu[j].Eng_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 3:
for(i=0;istu[j].C_score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 4:
for(i=0;istu[j].total)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
case 5:
for(i=0;istu[j].aver)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
break;
}
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;istu[j].total)
j=i;
}
printf("总成绩成绩最高的同学是:\n");
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
}
//分组统计
void cut()
{
int i,j;
float n;
FILE *fp;
int m=0;
if((fp=fopen("stu.txt","rb"))==NULL)
{
printf("文件打开失败\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("文件中没有内容\n");
}
printf("请输入按总成绩分组的值:");
scanf("%f",&n);
printf("总成绩大于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(i=0;i=n)
printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
}
printf("总成绩小于%.2f的同学有:\n",n);
printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
for(j=0;j
以上就是使用C语言编写的学生信息管理系统,在制作系统的过程中也遇到过很多的问题。
可能在第一次制作系统的时候,很可能是没有头绪的,这个时候我们不要放弃,开始没有头绪是正常的,此时我们应该静下心来去分析系统的功能,将思路打开,画出流程图,将系统的基本框架算法编译出来,然后逐个功能去分析去实现,大胆的将自己想到的算法编译出来,然后再逐个优化,最后一定能制作出一个非常好的系统。
在制作学生管理系统时,各项功能的实现一定要在心中有一个大概的流程,然后再使用C语言进行编译,在进行文件的的读和写操作后都要记得关闭文件,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。