#include "student.h"
#include "teacher.h"
#include "menu.h"
int main(int argc, const char *argv[])
{
struct student a[300];
struct teacher b[200];
a[0].id=1001;
strcpy(a[0].name,"zhangsan");
strcpy(a[0].pin,"123");
a[0].age=20;
a[0].class1=211;
a[0].s->math=50;
a[0].s->c=85;
a[0].s->chinese=71;
b[0].id=101;
strcpy(b[0].name,"lihua");
strcpy(b[0].pin,"123");
b[0].class1=211;
a[1].id=1002;
strcpy(a[1].name,"lisi");
strcpy(a[1].pin,"123");
a[1].age=21;
a[1].class1=211;
a[1].s->math=45;
a[1].s->c=92;
a[1].s->chinese=84;
b[1].id=102;
strcpy(b[1].name,"lilei");
strcpy(b[1].pin,"123");
b[1].class1=211;
struct student *p=a;
struct teacher *q=b;
int n=2, m=2;
ranking(p,n);
login(p,q,&n,&m);
return 0;
}
//菜单程序,实现登录功能
#include "student.h"
#include "teacher.h"
#include "menu.h"
void login(struct student *p, struct teacher *q, int *n, int *m)
{
int choice;
printf("1.学生登录\t2.教师登录\n");
scanf (" %d", &choice);
if (choice == 1)
{
stulogin(p, n);
}
else
{
tealogin(q,p,m,n);
}
}
void stulogin(struct student *p, int *n)
{
char account[32];
char pin[32];
for (int i=2; i>=0; i--)
{
printf("学生的账户:");
scanf (" %s", account);
putchar(10);
printf("学生的密码:");
scanf (" %s", pin);
for (int j=0; j<*n; j++)
{
if (strcmp(account, (p+j)->name) == 0 && strcmp(pin, (p+j)->pin) == 0)
{
printf("登录成功\n");
printf("欢迎%s同学登录\n", account);
featurestu(p, n);
return;
}
}
printf("账户密码输入错误,请重新输入,你还有机会%d\n", i);
}
}
void tealogin(struct teacher *p, struct student *q, int *n, int *m)
{
char account[32];
char pin[32];
for (int i=2; i>=0; i--)
{
printf("教师的账户:");
scanf (" %s", account);
putchar(10);
printf("教师的密码:");
scanf (" %s", pin);
for (int j=0; j<*n; j++)
{
if (strcmp(account, (p+j)->name) == 0 && strcmp(pin, (p+j)->pin) == 0)
{
printf("登录成功\n");
printf("欢迎%s老师登录\n", account);
featuretec(p,q,n,m);
return;
}
}
printf("账户密码输入错误,请重新输入,你还有机会%d\n", i);
}
}
//学生功能选择
void featurestu(struct student *p, int *n)
{
int choice;
printf("————————学生端————————\n");
printf("1.添加学生信息\n");
printf("2.删除学生信息\n");
printf("3.修改学生信息\n");
printf("4.查找学生信息\n");
printf("5.显示所有学生信息\n");
printf("6.退出系统\n");
while(1)
{
ranking(p,*n);
printf("请输入你的选择:");
scanf(" %d", &choice);
putchar(10);
switch (choice)
{
case 1:
inputstu(p,n);
break;
case 2:
delstu(p,n);
break;
case 3:
revstu(p,*n);
break;
case 4:
findstu(p,*n);
break;
case 5:
outputstu(p,*n);
break;
case 6:
printf("系统已退出!\n");
return;
default:
printf("无效输入!\n");
break;
}
}
}
//教师功能选择
void featuretec(struct teacher *p, struct student *q, int *n, int *m)
{
int choice;
printf("————————教师端————————\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");
while(1)
{
ranking(q, *m);
printf("请输入你的选择:");
scanf(" %d", &choice);
putchar(10);
switch (choice)
{
case 1:
inputtec(p,n);
break;
case 2:
deltec(p,n);
break;
case 3:
revtec(p,*n);
break;
case 4:
findtec(p,*n);
break;
case 5:
outputtec(p,*n);
break;
case 6:
tec_f_stu(q,*m);
break;
case 7:
tec_rev_stu(q,*m);
break;
case 8:
printf("已退出系统!\n");
return;
default:
printf("无效输入!\n");
break;
}
}
}
#ifndef __MENU_C__
#define __MENU_C__
#include
#include
void login(struct student *p, struct teacher *q, int *n, int *m);
void stulogin(struct student *p, int *n);
void tealogin(struct teacher *p, struct student *q, int *n, int *m);
void featurestu(struct student *p, int *n);
void featuretec(struct teacher *p, struct student *q, int *n, int *m);
#endif
#ifndef __STUDENT_H__
#define __STUDENT_H__
#include
#include
struct score
{
int math;
int c;
int chinese;
int rank;
};
struct student
{
int id;
char name[128];
char pin[32];
int age;
int class1;
struct score s[4];
};
void inputstu(struct student *p, int *n);
void subjectrank(struct student *p, int n);
void outputstu(struct student *p, int n);
void ranking(struct student *p, int n);
void delstu(struct student *p, int *n);
void revstu(struct student *p, int n);
void findstu(struct student *p, int n);
#endif
//学生端
#include "student.h"
#include "teacher.h"
#include "menu.h"
//实现对学生信息基本信息的录入,学号不能重复
void inputstu(struct student *p, int *n)
{
int a;
(*n)++;
printf("请输入学生信息\n");
printf("学号:");
scanf(" %d", &a);
for (int i=0; i<*n; i++)
{
if(a==(p+i)->id)
{
printf("学号重复!\n");
return;
}
}
(p+(*n)-1)->id=a;
putchar(10);
printf("姓名:");
scanf(" %s", (p+(*n)-1)->name);
putchar(10);
printf("密码:");
scanf(" %s", (p+(*n)-1)->pin);
putchar(10);
printf("年龄:");
scanf(" %d", &(p+(*n)-1)->age);
putchar(10);
printf("班级:");
scanf(" %d", &(p+(*n)-1)->class1);
putchar(10);
printf("数学成绩:");
scanf(" %d", &(p+(*n)-1)->s->math);
putchar(10);
printf("C语言成绩:");
scanf(" %d", &(p+(*n)-1)->s->c);
putchar(10);
printf("语文成绩:");
scanf(" %d", &(p+(*n)-1)->s->chinese);
putchar(10);
ranking(p,*n);
}
//按某学科(可选)成绩顺序显示,并在最后显示出此科平均分
void subjectrank(struct student *p, int n)
{
int choice;
int num;
printf("1.按数学成绩 2.按C语言成绩 3.按语文\n");
scanf(" %d", &choice);
if (choice==1)
{
num=0;
for (int i=1; is->math<(p+j+1)->s->math)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("年龄:%d ", (p+i)->age);
printf("班级:%d ", (p+i)->class1);
printf("数学成绩:%d ", (p+i)->s->math);
printf("C语言成绩:%d ", (p+i)->s->c);
printf("语文成绩:%d ", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
num+=(p+i)->s->math;
}
printf("%.2f\n", (double)num/n);
}
else if(choice==2)
{
num=0;
for (int i=1; is->c<(p+j+1)->s->c)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("年龄:%d ", (p+i)->age);
printf("班级:%d ", (p+i)->class1);
printf("数学成绩:%d ", (p+i)->s->math);
printf("C语言成绩:%d ", (p+i)->s->c);
printf("语文成绩:%d ", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
num+=(p+i)->s->c;
}
printf("%.2f\n", (double)num/n);
}
else if(choice==3)
{
num=0;
for (int i=1; is->chinese<(p+j+1)->s->chinese)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("年龄:%d ", (p+i)->age);
printf("班级:%d ", (p+i)->class1);
printf("数学成绩:%d ", (p+i)->s->math);
printf("C语言成绩:%d ", (p+i)->s->c);
printf("语文成绩:%d ", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
num+=(p+i)->s->chinese;
}
printf("%.2f\n", (double)num/n);
}
else if(choice==4)
{
return;
}
else
{
printf("无效的输入!\n");
}
}
//显示所有学生信息列表
void outputstu(struct student *p, int n)
{
int choice;
printf("1.按学号显示 2.按名次显示 3.按学科显示\n");
scanf(" %d", &choice);
//按学号顺序显示
if (choice==1)
{
for (int i=1; iid>(p+j+1)->id)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("年龄:%d ", (p+i)->age);
printf("班级:%d ", (p+i)->class1);
printf("数学成绩:%d ", (p+i)->s->math);
printf("C语言成绩:%d ", (p+i)->s->c);
printf("语文成绩:%d ", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
}
}
//按名次显示
else if(choice==2)
{
for (int i=1; is->rank>(p+j+1)->s->rank)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("年龄:%d ", (p+i)->age);
printf("班级:%d ", (p+i)->class1);
printf("数学成绩:%d ", (p+i)->s->math);
printf("C语言成绩:%d ", (p+i)->s->c);
printf("语文成绩:%d ", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
}
}
//按某学科(可选)成绩顺序显示
else if(choice==3)
{
subjectrank(p,n);
}
//退出
else if(choice==4)
{
return;
}
//无效输入
else
{
printf("无效的输入!\n");
return;
}
}
//名次根据成绩自动计算(添加)
void ranking(struct student *p, int n)
{
for (int i=1; is->math+(p+j)->s->c+(p+j)->s->chinese < (p+j+1)->s->math+(p+j+1)->s->c+(p+j+1)->s->chinese)
{
struct student t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; is->rank = i+1;
}
}
//删除学生信息
void delstu(struct student *p, int *n)
{
char a[128];
printf("请输入你要删除的学生姓名:\n");
scanf(" %s", a);
for (int i=0; i<*n; i++)
{
if(strcmp(a, (p+i)->name) == 0)
{
for (int j=i; j<*n-1; j++)
{
*(p+j)=*(p+j+1);
}
(*n)--;
}
}
}
//修改学生信息
void revstu(struct student *p, int n)
{
char a[128];
printf("请输入你要修改的学生姓名:\n");
scanf(" %s", a);
for (int i=0; iname) == 0)
{
printf("学号:");
scanf(" %d", &(p+i)->id);
putchar(10);
printf("姓名:");
scanf(" %s", (p+i)->name);
putchar(10);
printf("密码:");
scanf(" %s", (p+i)->pin);
putchar(10);
printf("年龄:");
scanf(" %d", &(p+i)->age);
putchar(10);
printf("班级:");
scanf(" %d", &(p+i)->class1);
putchar(10);
printf("数学成绩:");
scanf(" %d", &(p+i)->s->math);
putchar(10);
printf("C语言成绩:");
scanf(" %d", &(p+i)->s->c);
putchar(10);
printf("语文成绩:");
scanf(" %d", &(p+i)->s->chinese);
putchar(10);
}
}
}
//查找学生信息
void findstu(struct student *p, int n)
{
int choice;
int id1;
char name1[128];
int class2;
printf("1.根据学号查找 2.根据姓名查找 3.根据班级查找 4.退出\n");
scanf(" %d", &choice);
if (choice==1)
{
printf("请输入要查找的学生学号:\n");
scanf(" %d", &id1);
for (int i=0; iid==id1)
{
printf("学号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("年龄:%d\n", (p+i)->age);
printf("班级:%d\n", (p+i)->class1);
printf("数学成绩:%d\n", (p+i)->s->math);
printf("C语言成绩:%d\n", (p+i)->s->c);
printf("语文成绩:%d\n", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
}
}
}
else if(choice==2)
{
printf("请输入要查找的学生姓名:\n");
scanf(" %s", name1);
for (int i=0; iname) == 0)
{
printf("学号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("年龄:%d\n", (p+i)->age);
printf("班级:%d\n", (p+i)->class1);
printf("数学成绩:%d\n", (p+i)->s->math);
printf("C语言成绩:%d\n", (p+i)->s->c);
printf("语文成绩:%d\n", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
}
}
}
else if(choice==3)
{
printf("请输入要查找的班级:\n");
scanf(" %d", &class2);
for (int i=0; iclass1==class2)
{
printf("学号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("年龄:%d\n", (p+i)->age);
printf("班级:%d\n", (p+i)->class1);
printf("数学成绩:%d\n", (p+i)->s->math);
printf("C语言成绩:%d\n", (p+i)->s->c);
printf("语文成绩:%d\n", (p+i)->s->chinese);
printf("排名:%d\n", (p+i)->s->rank);
}
}
}
else if(choice==4)
{
return;
}
else
{
printf("无效的输入!\n");
}
}
#ifndef __TEACHER_H__
#define __TEACHER_H__
#include
#include
#include "student.h"
struct teacher
{
int id;
char name[128];
char pin[32];
int class1;
};
void inputtec(struct teacher *p, int *n);
void deltec(struct teacher *p, int *n);
void revtec(struct teacher *p, int n);
void outputtec(struct teacher *p, int n);
void findtec(struct teacher *p, int n);
void tec_f_stu(struct student *p, int n);
void tec_rev_stu(struct student *p, int n);
#endif
//教师端
#include "teacher.h"
#include "student.h"
#include "menu.h"
//添加老师信息,教员序号不能重复
void inputtec(struct teacher *p, int *n)
{
int a;
(*n)++;
printf("请输入教师信息\n");
printf("序号:");
scanf(" %d", &a);
for (int i=0; i<*n; i++)
{
if(a==(p+i)->id)
{
printf("序号重复!\n");
return;
}
}
(p+(*n)-1)->id=a;
putchar(10);
printf("姓名:");
scanf(" %s", (p+(*n)-1)->name);
putchar(10);
printf("密码:");
scanf(" %s", (p+(*n)-1)->pin);
putchar(10);
printf("班级:");
scanf(" %d", &(p+(*n)-1)->class1);
putchar(10);
}
//删除教师信息
void deltec(struct teacher *p, int *n)
{
char a[128];
printf("请输入你要删除的教师姓名:\n");
scanf(" %s", a);
for (int i=0; i<*n; i++)
{
if(strcmp(a, (p+i)->name) == 0)
{
for (int j=i; j<*n-1; j++)
{
*(p+j)=*(p+j+1);
}
(*n)--;
}
}
}
//修改教师信息
void revtec(struct teacher *p, int n)
{
char a[128];
int b;
printf("请输入你要修改的教师姓名:\n");
scanf(" %s", a);
for (int i=0; iname) == 0)
{
printf("序号:");
scanf(" %d", &b);
if(b==(p+i)->id)
{
printf("序号重复!\n");
break;
}
else
{
(p+i)->id=b;
putchar(10);
printf("姓名:");
scanf(" %s", (p+i)->name);
putchar(10);
printf("密码:");
scanf(" %s", (p+i)->pin);
putchar(10);
printf("班级:");
scanf(" %d", &(p+i)->class1);
putchar(10);
}
}
}
}
//显示教师信息
void outputtec(struct teacher *p, int n)
{
for (int i=1; iid>(p+j+1)->id)
{
struct teacher t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i=0; iid);
printf("姓名:%s ", (p+i)->name);
printf("密码:%s ", (p+i)->pin);
printf("班级:%d ", (p+i)->class1);
putchar(10);
}
}
//查找教师信息
void findtec(struct teacher *p, int n)
{
int choice;
int id1;
char name1[128];
int class2;
printf("1.根据序号查找 2.根据姓名查找 3.根据班级查找 4.退出\n");
scanf(" %d", &choice);
if (choice==1)
{
printf("请输入要查找的老师序号:\n");
scanf(" %d", &id1);
for (int i=0; iid==id1)
{
printf("序号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("班级:%d\n", (p+i)->class1);
}
}
}
else if(choice==2)
{
printf("请输入要查找的老师姓名:\n");
scanf(" %s", name1);
for (int i=0; iname) == 0)
{
printf("序号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("班级:%d\n", (p+i)->class1);
}
}
}
else if(choice==3)
{
printf("请输入要查找的班级:\n");
scanf(" %d", &class2);
for (int i=0; (p+i)->class1==class2; i++)
{
printf("序号:%d\n", (p+i)->id);
printf("姓名:%s\n", (p+i)->name);
printf("密码:%s\n", (p+i)->pin);
printf("班级:%d\n", (p+i)->class1);
}
}
else if(choice==4)
{
return;
}
else
{
printf("无效的输入!\n");
return;
}
}
//教师查看学生信息
void tec_f_stu(struct student *p, int n)
{
findstu (p,n);
}
//教师修改学生成绩
void tec_rev_stu(struct student *p, int n)
{
char a[128];
printf("请输入你要修改的学生姓名:\n");
scanf(" %s", a);
for (int i=0; iname) == 0)
{
printf("学号:");
printf("%d", (p+i)->id);
putchar(10);
printf("姓名:");
printf("%s", (p+i)->name);
putchar(10);
printf("班级:");
printf("%d", (p+i)->class1);
putchar(10);
printf("数学成绩:");
scanf(" %d", &(p+i)->s->math);
putchar(10);
printf("C语言成绩:");
scanf(" %d", &(p+i)->s->c);
putchar(10);
printf("语文成绩:");
scanf(" %d", &(p+i)->s->chinese);
putchar(10);
}
}
}
EXE=system
OBJ=$(patsubst *.c,*.o,$(wildcard *.c))
CC=gcc
CFLAGS=-c -o
ALL:$(EXE)
$(EXE):$(OBJ)
$(CC) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) $@ $^
clean:
rm $(EXE) $(OBJ)
学生管理系统