大作业:学生管理系统

代码

main.c

#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;
}

menu.c

//菜单程序,实现登录功能

#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;
		}
	}
}

menu.h

#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

student.h

#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

student.c

//学生端

#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");
	}
}

teacher.h

#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

teacher.c

//教师端

#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);
		}
	}
}


Makefile

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)

视频

学生管理系统

你可能感兴趣的:(linux,服务器,c语言)