分管理端、教师端、学生端
具有打印、登记、添加、排序、查询、修改、删除学生信息等功能
其中排序能按总成绩排序或分各科目成绩排序
查询功能则能按照学号、姓名查询
#include
#include
#include
#include
int g=3; //登陆密码时允许输入的次数
char prefix_a[8]="asdf"; //管理员密码
char prefix_t[8]="asdf"; //教师密码
char prefix_s[8]="asdf"; //学生密码
int number; //全局变量学生人数
void menu(); //主界面函数
void administrator(); //管理端界面
void teachar(); //教师端界面
void student(); //学生端界面
void color(short x); //改变字体颜色
void password_a(); //管理端密码登陆
void password_t(); //教师端密码登陆
void password_s(); //学生端密码登陆
void input(); //登记学生成绩
void delete_(); //删除学生信息
void search(); //查询学生成绩
void change(); //修改学生成绩
void show(); //打印学生信息
void add(); //添加学生信息
void print_table(); //列表头
void read(); //从文件中读取信息
void back_a(); //管理端返回上一界面
void back_t(); //教师端返回上一界面
void back_s(); //学生端返回上一界面
void save(); //保存学生信息函数
void back_sort_a(); //管理端排序功能 返回界面
void back_sort_t(); //教师端排序功能 返回界面
void sort_a(); //管理端排序学生成绩
void sort_t(); //教师端排序学生成绩
void sort_sum(); //按总成绩排序
void sort_grade1(); //按数学成绩排序
void sort_grade2(); //按英语成绩排序
void sort_grade3(); //按物理成绩排序
void search_a(); //管理端查询学生成绩
void search_t(); //教师端查询学生成绩
void search_s(); //学生端查询学生成绩
void search_id(); //按学号查询
void search_name(); //按学号查询
void back_search_a(); //管理端查询功能 返回界面
void back_search_t(); //教师端查询功能 返回界面
void back_search_s(); //学生端查询功能 返回界面
struct student{
int id; //学号
char name[20]; //姓名
char sex[5]; //性别
float grade1; //高等数学
float grade2; //大学英语
float grade3; //大学物理
float avg; //平均分
float sum; //总分
}stu[100];
int main()
{
menu();
return 0;
}
void menu() //主界面
{
int l;
printf("\t欢迎使用学生信息系统\t\n");
printf("\t 1.管理端 \t\n");
printf("\t 2.教师端 \t\n");
printf("\t 3.学生端 \t\n");
printf("\t 4.退出 \n");
printf("=================================\n");
printf("请输入选择的登陆端: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
password_a();
break;
case 2:
system("cls");
password_t();
break;
case 3:
system("cls");
password_s();
break;
case 4:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
menu();
break;
}
}
void administrator() //管理端界面
{
read();
int l;
printf("\t欢迎使用管理端系统\t\n");
printf("\t 1.打印学生成绩 \t\n");
printf("\t 2.登记学生成绩 \t\n");
printf("\t 3.添加学生成绩 \t\n");
printf("\t 4.排序学生成绩 \t\n");
printf("\t 5.查询学生成绩\t\n");
printf("\t 6.修改学生信息 \n");
printf("\t 7.删除学生信息 \n");
printf("\t 8.返回 \n");
printf("\t 9.退出 \n");
printf("=================================\n");
printf("请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
show();
back_a();
break;
case 2:
system("cls");
input();
back_a();
break;
case 3:
system("cls");
add();//添加学生信息();
back_a();
break;
case 4:
system("cls");
sort_a();
back_a();
break;
case 5:
system("cls");
search_a();
back_a();
break;
case 6:
system("cls");
change();
back_a();
break;
case 7:
system("cls");
delete_();
back_a();
break;
case 8:
system("cls");
menu();
break;
case 9:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
administrator();
break;
}
}
void teachar() //教师端界面
{
read();
int l;
printf("\t欢迎使用教师端系统\t\n");
printf("\t 1.打印学生成绩 \t\n");
printf("\t 2.登记学生成绩 \t\n");
printf("\t 3.排序学生成绩 \t\n");
printf("\t 4.查询学生成绩\t\n");
printf("\t 5.修改学生信息 \n");
printf("\t 6.返回 \n");
printf("\t 7.退出 \n");
printf("=================================\n");
printf("请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
show();
back_t();
break;
case 2:
system("cls");
input();
back_t();
break;
case 3:
system("cls");
sort_t();
back_t();
break;
case 4:
system("cls");
search_t();
back_t();
break;
case 5:
system("cls");
change();
back_t();
break;
case 6:
system("cls");
menu();
break;
case 7:
printf("感谢您的使用,已退出!");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
teachar();
break;
}
}
void student() //学生端界面
{
read();
int l;
printf("\t欢迎使用学生端系统\t\n");
printf("\t 1.打印学生成绩 \t\n");
printf("\t 2.查询学生成绩\t\n");
printf("\t 3.返回 \n");
printf("\t 4.退出 \n");
printf("=================================\n");
printf("请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
show();
back_s();
break;
case 2:
system("cls");
search_s();
back_s();
break;
case 3:
system("cls");
menu();
break;
case 4:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
student();
break;
}
}
void color(short x) //改变字体颜色
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void password_a() //管理端密码登陆
{
char username[20];
char password[20];
int flag;
while(g--){
printf("\t管理员您好,欢迎使用登陆界面!\n");
printf("请输入账户: ");
scanf("%s",username);
printf("请输入密码: ");
scanf("%s",password);
flag=strcmp(prefix_a,password);
if(flag == 0)
{
color(2);
printf("[输入正确]请等待3秒!\n");
Sleep(3000);
system("cls");
color(7);
administrator();
break;
}
else
{
color(772);
if(g==0){
printf("[警告]您已输错三次,将自动退出系统!\n");
color(7);
exit(1);
}
printf("[输入错误]请3秒后重新输入正确密码!\n");
Sleep(3000);
system("cls");
color(7);
continue;
}
}
}
void password_t() //教师端密码登陆
{
char username[20];
char password[20];
int flag;
while(g--){
printf("\t老师您好,欢迎使用登陆界面!\n");
printf("请输入账户: ");
scanf("%s",username);
printf("请输入密码: ");
scanf("%s",password);
flag=strcmp(prefix_t,password);
if(flag == 0)
{
color(2);
printf("[输入正确]请等待3秒!\n");
Sleep(3000);
system("cls");
color(7);
teachar();
break;
}
else
{
color(772);
if(g==0){
printf("[警告]您已输错三次,将自动退出系统!\n");
color(7);
exit(1);
}
printf("[输入错误]请3秒后重新输入正确密码!\n");
Sleep(3000);
system("cls");
color(7);
continue;
}
}
}
void password_s() //学生端密码登陆
{
char username[20];
char password[20];
int flag;
while(g--){
printf("\t同学你好,欢迎使用登陆界面!\n");
printf("请输入账户: ");
scanf("%s",username);
printf("请输入密码: ");
scanf("%s",password);
flag=strcmp(prefix_s,password);
if(flag == 0)
{
color(2);
printf("[输入正确]请等待3秒!\n");
Sleep(3000);
system("cls");
student();
break;
}
else
{
color(772);
if(g==0){
printf("[警告]您已输错三次,将自动退出系统!\n");
color(7);
exit(1);
}
printf("[输入错误]请3秒后重新输入正确密码!\n");
Sleep(3000);
system("cls");
color(7);
continue;
}
}
}
void back_a() //管理端返回上一界面
{
int l;
printf("\n\t1.返回主界面");
printf("\n\t2.返回上一级");
printf("\n\t=========================");
printf("\n\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
menu();
break;
case 2:
system("cls");
administrator();
break;
default:
color(772);
printf("\t[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
back_a();
break;
}
}
void back_t() //教师端返回上一界面
{
int l;
printf("\n\t1.返回主界面");
printf("\n\t2.返回上一级");
printf("\n\t=========================");
printf("\n\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
menu();
break;
case 2:
system("cls");
teachar();
break;
default:
color(772);
printf("\t[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
back_t();
break;
}
}
void back_s() //学生端返回上一界面
{
int l;
printf("\n\t1.返回主界面");
printf("\n\t2.返回上一级");
printf("\n\t=========================");
printf("\n\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
menu();
break;
case 2:
system("cls");
student();
break;
default:
color(772);
printf("\t[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
back_s();
break;
}
}
void read() //从文件中读取信息
{
FILE *fp;
int i;
fp=fopen("学生信息.txt","r");
if(fp==NULL)
{
color(772);
printf("[警告]文件打开失败\n");
color(7);
}
else {
color(2);
printf("[tip]文件读取成功\n");
color(7);
fscanf(fp,"%d\n",&number);
for(i=0;i0){
fprintf(fp,"%d\n",number);
for(i=0;istu[max].sum)
max=i;
}
save();
print_table();
show();
printf("\t总分最高分: ");
printf("\t%-10d%-10s%-10s%-10.0f%-10.0f%-10.0f%-9.1f(%.0f)\n",
stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
printf("\t总分最低分: ");
printf("\t%-10d%-10s%-10s%-10.0f%-10.0f%-10.0f%-9.1f(%.0f)\n",
stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
printf("\t-------------------------------------------------------------------------------------------");
}
void sort_grade1() //按数学成绩排序
{
int k,j,min=0,max=0;
struct student temp;
for (k = 0; k< number ; k++)
{
for (j = 0; j < number - 1 - k; j++)
{
if (stu[j].grade1 < stu[j + 1].grade1)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
for(int i=0;istu[max].grade1)
max=i;
}
save();
print_table();
show();
printf("\t数学最高分: ");
printf("\t%-10d%-10s%-9s(%-3.0f)\t%-10.0f%-10.0f%-10.1f%-10.0f\n",
stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
printf("\t数学最低分: ");
printf("\t%-10d%-10s%-9s(%-3.0f)\t%-10.0f%-10.0f%-10.1f%-10.0f\n",
stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
printf("\t-------------------------------------------------------------------------------------------");
}
void sort_grade2() //按英语成绩排序
{
int k,j,min=0,max=0;
struct student temp;
for (k = 0; k< number ; k++)
{
for (j = 0; j < number - 1 - k; j++)
{
if (stu[j].grade2 < stu[j + 1].grade2)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
for(int i=0;istu[max].grade2)
max=i;
}
save();
print_table();
show();
printf("\t英语最高分: ");
printf("\t%-10d%-10s%-10s%-9.0f(%-3.0f)\t %-10.0f%-10.1f%-10.0f\n",
stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
printf("\t英语最低分: ");
printf("\t%-10d%-10s%-10s%-9.0f(%-3.0f)\t %-10.0f%-10.1f%-10.0f\n",
stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
printf("\t-------------------------------------------------------------------------------------------");
}
void sort_grade3() //按物理成绩排序
{
int k,j,min=0,max=0;
struct student temp;
for (k = 0; k< number ; k++)
{
for (j = 0; j < number - 1 - k; j++)
{
if (stu[j].grade3 < stu[j + 1].grade3)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
for(int i=0;istu[max].grade3)
max=i;
}
save();
print_table();
show();
printf("\t物理最高分: ");
printf("\t%-10d%-10s%-10s%-10.0f%-9.0f(%-3.0f)\t %-10.1f%-10.0f\n",
stu[max].id,stu[max].name,stu[max].sex,stu[max].grade1,stu[max].grade2,stu[max].grade3,stu[max].avg,stu[max].sum);
printf("\t物理最低分: ");
printf("\t%-10d%-10s%-10s%-10.0f%-9.0f(%-3.0f)\t %-10.1f%-10.0f\n",
stu[min].id,stu[min].name,stu[min].sex,stu[min].grade1,stu[min].grade2,stu[min].grade3,stu[min].avg,stu[min].sum);
printf("\t-------------------------------------------------------------------------------------------");
}
void search_a() //管理端查询学生成绩
{
int l;
printf("\t欢迎使用成绩查询系统\t\n");
printf("\t 1.按学号查询 \t\n");
printf("\t 2.按姓名查询 \t\n");
printf("\t 3.返回 \n");
printf("\t 4.退出 \n");
printf("\t=================================\n");
printf("\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
search_id();
back_search_a();
break;
case 2:
system("cls");
search_name();
back_search_a();
break;
case 3:
system("cls");
administrator();
break;
case 4:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
search_a();
break;
}
}
void search_t() //教师端查询学生成绩
{
int l;
printf("\t欢迎使用成绩查询系统\t\n");
printf("\t 1.按学号查询 \t\n");
printf("\t 2.按姓名查询 \t\n");
printf("\t 3.返回 \n");
printf("\t 4.退出 \n");
printf("\t=================================\n");
printf("\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
search_id();
back_search_t();
break;
case 2:
system("cls");
search_name();
back_search_t();
break;
case 3:
system("cls");
teachar();
break;
case 4:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
search_t();
break;
}
}
void search_s() //学生端查询学生成绩
{
int l;
printf("\t欢迎使用成绩查询系统\t\n");
printf("\t 1.按学号查询 \t\n");
printf("\t 2.按姓名查询 \t\n");
printf("\t 3.返回 \n");
printf("\t 4.退出 \n");
printf("\t=================================\n");
printf("\t请输入要执行的操作: ");
scanf("%d",&l);
switch(l){
case 1:
system("cls");
search_id();
back_search_s();
break;
case 2:
system("cls");
search_name();
back_search_s();
break;
case 3:
system("cls");
student();
break;
case 4:
printf("感谢您的使用,已退出!\n");
exit(0);
default:
color(772);
printf("[输入错误]请3秒后重新输入有效数字!\n");
Sleep(3000);
color(7);
system("cls");
search_s();
break;
}
}
void search_id() //按学号查询
{
int id3,i;
printf("\t学生的学号:");
scanf("%d",&id3);
for ( i =0;i 0){
do
{
flag = 1;
printf("\n\t请输入第%d位学生的信息:\n", i + 1);
while (flag)
{
flag = 0;
printf("\t学号: ");
scanf("%d", &stu[i].id);
for (j = 0; j < i; j++){
if (stu[i].id==stu[j].id){
color(772);
printf("\t[错误]已存在该学号学生,请重新输入!\n");
color(7);
flag = 1;
break;
}
}
}
printf("\t姓名: ");
scanf("%s",stu[i].name);
getchar();
printf("\t性别: ");
scanf("%s",stu[i].sex);
getchar();
printf("\t高等数学: ");
scanf("%f",&stu[i].grade1);
getchar();
printf("\t大学英语: ");
scanf("%f",&stu[i].grade2);
getchar();
printf("\t大学物理: ");
scanf("%f",&stu[i].grade3);
stu[i].sum= stu[i].grade1 +stu[i].grade2 + stu[i].grade3 ;
stu[i].avg = (stu[i].sum)/3;
if (0 == flag){
i++;
}
} while (i
文件素材:
5
9 李五 男 76 76 100 84.0 252
6 丝丝 女 9 100 98 69.0 207
2 李四 男 89 79 67 78.3 235
1 张三 男 35 43 67 48.3 145
7 苏苏 女 98 12 53 54.3 163