学生信息管理系统
最近做了一个学生管理系统,大部分功能都还可以实现,若有可应该进修改的地方,请多多指教!
可实现以下功能
学生:
姓名 性别 学号 密码 语文 数学 英语
1、第一次登录强制修改密码。
2、查询成绩
3、修改密码
4、查看个人信息
5、三次密码错误锁定帐号,由教师解锁
教师:
姓名 性别 工号 密码
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
批量导入
3、删除学生
输入两人次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、显示所有在校学生信息
9、显示所有退出学生信息
10、三次密码错误锁定帐号,由校长解锁
校长:
admin
1、第一次登录强制修改密码。
2、能重置自己的密码
3、能重置教师密码
4、添加教师
5、删除教师
6、显示所有在职教师
7、显示所有离职教师
主界面的头文件
interface.h
#ifndef INTERFACE_H
#define INTERFACE_H
//主界面
void interface_enum(void);
//教师界面
void teacher_enum(void);
//教师登录
void teacher_in(void);
//教师操作
void teacher_show(void);
//学生界面
void student_enum(void);
//学生登录
void student_in(void);
//学生操作
void student_show(void);
//管理员界面
void admin_enum(void);
//管理员登录
void admin_in(void);
//管理员操作
void admin_show(void);
#endif //INTERFACE_H
学生的头文件
student.h
#ifndef STUDENT_H
#define STUDENT_H
#define S_NAME 20 //学生姓名长度
#define S_NUMBER 20 //学生学号长度
#define S_PASS 20 //密码长度
#define S_COUNT 1000//学生人数
typedef struct Student //学生结构体
{
char name[S_NAME]; //姓名
char sex; //性别
char number[S_NUMBER]; //学号
char password[S_PASS]; //密码 数字、字母、不允许符号、长度20以内;
int chinese; //语文 判断数字
int math; //数学 判断数字
int english; //英语
int sum;//总分
int landing; //登陆的次数 第一次强制要求修改密码
int Account_status;//账号状态 1正常 0锁定
}Student;
extern Student stu[S_COUNT];
extern Student s;
extern int s_count;
extern int s_position;
void sorce(void);//成绩
void Pass(void);//更改密码
void Allmessage(void);//显示信息
#endif //STUDENT_H
教师的头文件
#ifndef TEACHER_H
#define TEACHER_H
#define T_COUNT 300
#define T_NAME 20//教师姓名长度
#define T_NUMBER 20 //教师工号长度
#define T_PASS 20 //密码长度
typedef struct Teacher
{
char name[T_NAME]; //姓名
char sex; //性别
char number[T_NUMBER];//工号
char password[T_PASS];//密码
int landing; //登陆次数
int Account_status; //登陆状态
}Teacher;
extern Teacher tea[T_COUNT];
extern Teacher t;
extern int t_count;
extern int t_position;
bool t_add_stu(); //添加学生,返回false失败,返回true成功
bool t_delete_stu();//删除学生 ,返回false 失败,返回true成功
bool t_search_stu();//查找学生,返回false 失败,返回true成功
bool t_modify_stu();//修改学生信息,返回false 失败,返回true成功
bool t_import_stu_score();//录入学生成绩,返回false 失败,返回true成功
bool t_reset_stu_pass();//重置学生密码,返回false 失败,返回true成功
void t_psearch_stu();//显示查找到的学生
void t_show_stu();//显示所有在校学生
void t_show_drop_stu();//显示退出学生
//void t_show_menu(); //显示教师菜单
void t_unlock(void);//给学生解锁
#endif//TEACHER_H
校长管理员的头文件
```c
#ifndef ADMIN_H
#define ADMIN_H
#define A_NAME 20 //管理员姓名长度
#define A_NUMBER 20 //管理员学号长度
#define A_PASS 20//管理员密码长度
//#define A_COUNT 10//管理员数量
typedef struct Admin //管理员结构体
{
char name[A_NAME]; //姓名
char sex; //性别
char number[A_NUMBER]; //工号
char password[A_PASS]; //密码 数字、字母、不允许符号、长度20以内;
int landing;//登陆的次数 第一次强制要求修改密码
}Admin;
extern Admin adm;
//修改自己的密码
void a_change_password_myself(void);
//重置自己的密码
//void a_reset_password_myself(void);
//重置教师密码
void a_reset_password_teacher(void);
//添加教师
void a_add_teacher(void);
//删除教师
void a_delete_teacher(void);
//显示所有在职教师
void a_show_in_teacher(void);
//显示所有离职教师
void a_show_down_teacher(void);
//给教师解锁
void a_unlock(void);
#endif//ADMIN_H
主界面选项的实现
#include<stdio.h>
#include<getch.h>
#include<stdbool.h>
#include<stdlib.h>
#include"tool.h"
#include "interface.h"
#include"teacher.h"
#include"admin.h"
void interface_enum(void)
{
printf("--------------主 界 面---------------\n\n");
printf(" 1.学 生 登 录 \n\n");
printf(" 2.教 师 登 录 \n\n");
printf(" 3.管 理 员 登 录 \n\n");
printf(" 4.退 出 系 统 \n\n");
printf("---------- -无敌工作室出品------------\n");
}
void student_enum(void)
{
printf("--------------同学您好,欢迎登录学生信息管理系统----------\n\n");
printf(" 1.查 询 成 绩 \n\n");
printf(" 2.修 改 密 码 \n\n");
printf(" 3.查看个人信息 \n\n");
printf(" 4.返回首页面 \n\n");
}
//学生登录
void student_in(void)
{
int miscount=0;
s_count=0;
FILE *fwwp = fopen("student.txt","r");
if(NULL==fwwp)
{
printf("文件打开失败!!!");
return;
}
while(!feof(fwwp))
{
fscanf(fwwp,"%s %c %s %s %d %d %d %d %d\n",stu[s_count].name,&stu[s_count].sex,stu[s_count].number,stu[s_count].password,&stu[s_count].chinese,&stu[s_count].math,&stu[s_count].english,&stu[s_count].landing,&stu[s_count].Account_status);
s_count++;
}
fclose(fwwp);
char number[T_NUMBER];
char password[T_PASS];
printf("请输入你的学号:");
scanf("%s",number);
for(int i=0;i<S_COUNT;i++)
{
if(strcmp(stu[i].number,number)==0&&stu[i].sex!=0)
{
if(stu[i].Account_status==0)
{
printf("账号已锁定,请联系老师解锁!!");
anykey_continue();
return;
}
while(true)
{
printf("请输入你的密码:");
scanf("%s",password);
if(strcmp(password,stu[i].password)==0)
{
printf("登录成功!!!!");
s=stu[i];
s.sum=s.chinese+s.math+s.english;
s_position=i;
anykey_continue();
if(s.landing==0)
{
printf("\n第一次登录请更改你的密码:");
while(true)
{
scanf("%s",password);
if(islegal_pass(password))
{
strcpy(s.password,password);
printf("修改成功!!");
s.landing=1;
anykey_continue();
break;
}
else
{
printf("输入有误请重新输入!!!\n");
anykey_continue();
}
}
}
student_show();
return;
}
else
{
miscount++;
if(miscount>=3)
{
stu[i].Account_status=0;
printf("密码错误超过3次,账号已锁定,请联系教师解锁!!");
FILE *fwp = fopen("student.txt","w");
if(NULL==fwp)
{
printf("文件打开失败!!!");
return;
}
for(int i=0;i<S_COUNT;i++)
{
if(stu[i].sex!=0)
{
fprintf(fwp,"%s %c %s %s %d %d %d %d %d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].password,stu[i].chinese,stu[i].math,stu[i].english,stu[i].landing,stu[i].Account_status);
}
}
fclose(fwp);
anykey_continue();
return;
}
}
}
}
}
}
//学生操作
void student_show(void)
{
system("clear");
while(true)
{
system("clear");
student_enum();
switch(getch())
{
case '1':sorce();
break;
case '2':Pass();
break;
case '3':Allmessage();
break;
case '4':
{
stu[s_position]=s;
FILE *fwp = fopen("student.txt","w");
if(NULL==fwp)
{
printf("文件打开失败!!!");
return;
}
for(int i=0;i<S_COUNT;i++)
{
if(stu[i].sex!=0)
fprintf(fwp,"%s %c %s %s %d %d %d %d %d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].password,stu[i].chinese,stu[i].math,stu[i].english,stu[i].landing,stu[i].Account_status);
}
fclose(fwp);
return;
}
default:printf("输入有误,请重新输入!!!");
break;
}
}
}
void teacher_enum(void)
{
printf("--------------尊敬的老师欢迎登录学生管理系统----------- \n\n");