教务管理系统
一、设计教务管理系统的思路
- 设计功能
首先思考要做一个学生管理系统,要具备哪些功能- 打开程序最开始应该将原有的信息加载到链表中
- 注册账户并录入相关信息(分为老师和同学)
- 登录系统
- 老师对学生的相关操作
- 学生选课系统
- 老师和学生对信息修改、删除
- 显示信息,等等
二、对教务管理系统分步解决
设计完功能,我们对系统以功能划分为不同函数,为了使函数更简单,主要变量我们使用全局变量。
void jiazai() //从文件中加载信息
int denglu() //登录界面
void zhuce() //注册账号
int jiaoshijiemian()//教师界面
int xueshengjiemian()//学生界面
在教师界面和学生界面中,我们要有更加细致的功能
int jiaoshijiemian()//教师界面
{
int i;
printf("\n ********老师欢迎您来到信息管理系统********\n");
printf(" 请选择功能:\n");
printf(" 1、查看我的个人信息;\n");
printf(" 2、查看授课班级学生信息;\n");
printf(" 3、查看选课学生信息;\n");
printf(" 4、添加学生(同时注册相应账号);\n");
printf(" 5、删除学生信息;\n");
printf(" 6、修改我的个人信息;\n");
printf(" 7、退出登录。\n");
scanf("%d",&i);
return i;
}
int xueshengjiemian()//学生界面
{
int i;
printf("\n ********同学欢迎来到信息管理系统********\n");
printf(" 请选择功能:\n");
printf(" 1、查看我的个人信息;\n");
printf(" 2、选课系统;\n");
printf(" 3、退课系统;\n");
printf(" 4、修改我的个人信息;\n");
printf(" 5、注销账号;\n");
printf(" 6、退出登录。\n");
scanf("%d",&i);
return i;
}
首先完成函数,在此之前,我们要创建相关信息的结构体。
typedef struct teachers{ //老师信息
int num; //工号(账号)
char password[20]; //密码
char name[20]; //姓名
char college[20]; //学院
char subject1[20]; //教授学科1
char subject2[20]; //教授学科2
char class[20]; //教授班级
struct teachers *next;
}LNodet;
typedef struct students{ //学生信息
int num; //学号(账号)
char password[20]; //密码
char name[20]; //学生姓名
char college[10]; //学院
char major[20]; //专业
char class[20]; //班级
int year; //入学年份
char teacher[20]; //专业老师
char subject1[20]; //所学学科1
char subject2[20]; //所学学科2
struct students *next;
}LNodes;
定义全局变量
LNodet *ht,*rt,*pt,*mt,*dt;
LNodes *hs,*rs,*ps,*ms,*m1s,*ds;//建立链表的相关指针
FILE *ft;//老师文件
FILE *fs;//学生文件
int tcnt;//老师人数(可以选择去掉)
int scnt;//学生人数(可以选择去掉)
三、全部代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define It "d:\\学习\\C C++\\teacher.txt"
#define Is "d:\\学习\\C C++\\student.txt"
typedef struct teachers{ //老师信息
int num; //工号(账号)
char password[20]; //密码
char name[20]; //姓名
char college[20]; //学院
char subject1[20]; //教授学科1
char subject2[20]; //教授学科2
char class[20]; //教授班级
struct teachers *next;
}LNodet;
typedef struct students{ //学生信息
int num; //学号(账号)
char password[20]; //密码
char name[20]; //学生姓名
char college[10]; //学院
char major[20]; //专业
char class[20]; //班级
int year; //入学年份
char teacher[20]; //专业老师
char subject1[20]; //所学学科1
char subject2[20]; //所学学科2
struct students *next;
}LNodes;
LNodet *ht,*rt,*pt,*mt,*dt;
LNodes *hs,*rs,*ps,*ms,*m1s,*ds;
FILE *ft;//老师文件
FILE *fs;//学生文件
int tcnt;//老师人数
int scnt;//学生人数
void jiazai()//从文件中加载信息
{
int i,j;
printf("正在加载信息...\n");
ft=fopen(It,"rb");
i=0;
rt=ht;
while(!feof(ft))
{
pt=(LNodet*)malloc(sizeof(LNodet));
fscanf(ft,"%d %s %s %s %s %s %s\n",&pt->num,pt->password,pt->name,pt->college,pt->subject1,pt->subject2,pt->class);
pt->next=NULL;
rt->next=pt;
rt=pt;
i++;
}
fclose(ft);
fs=fopen(Is,"rb");
j=0;
rs=hs;
while(!feof(fs))
{
ps=(LNodes*)malloc(sizeof(LNodes));
fscanf(fs,"%d %s %s %s %s %s %d %s %s %s\n",&ps->num,ps->password,ps->name,ps->college,ps->major,ps->class,&ps->year,ps->teacher,ps->subject1,ps->subject2);
ps->next=NULL;
rs->next=ps;
rs=ps;
j++;
}
fclose(fs);
tcnt = i;
scnt = j;
printf("加载信息完毕\n");
}
int denglu()//登录界面
{
int num;
char mima[20];
int i=0;
int f=0;
printf("\n ******************欢迎来到信息管理系统******************\n");
printf(" 您是否已经注册过账号\n");
printf(" 已经注册请输入“1”;没有注册请输入“0”;退出系统请输入“2”\n");
scanf("%d",&i);
if(i==1)
{
printf(" 请输入账号:");
scanf("%d",&num);
printf(" 请输入密码:");
scanf("%s",mima);
dt=ht->next;
while(dt!=NULL)
{
if(dt->num==num&&strcmp(dt->password,mima)==0)
{
f=1;
break;
}
dt=dt->next;
}
if(f==1)return 1;
ds=hs->next;
while(ds!=NULL)
{
if(ds->num==num&&strcmp(ds->password,mima)==0)
{
f=2;
break;
}
ds=ds->next;
}
if(f==2)return 2;
if(f==0)
{
printf(" 您输入的账号或密码错误\n");
return 0;
}
}
if(i==0)return 3;
if(i==2)return 4;
}
void zhuce()//注册账号
{
int num;
char mima[20];
int year;
int f;
printf(" ************注册账号***********\n");
printf(" 请输入您的学号(工号)作为账号:");
scanf("%d",&num);
printf(" 请输入您的密码(不超过20位):");
scanf("%s",mima);
printf(" 您是老师请输入“1”;是学生请输入“0”\n");
scanf("%d",&f);
if(f==1)
{
printf(" 下面将进行信息完善\n");
pt=(LNodet*)malloc(sizeof(LNodet));
pt->num=num;
strcpy(pt->password,mima);
printf(" 请输入您的姓名:");
scanf("%s",pt->name);
printf(" 请输入您的学院:");
scanf("%s",pt->college);
printf(" 请输入您教授的学科1:");
scanf("%s",pt->subject1);
printf(" 请输入您教授的学科2:");
scanf("%s",pt->subject2);
printf(" 请输入您教授的班级(例:class2):");
scanf("%s",pt->class);
pt->next=NULL;
rt->next=pt;
rt=pt;
ft=fopen(It,"ab");
fprintf(ft,"%d %s %s %s %s %s %s\n",pt->num,pt->password,pt->name,pt->college,pt->subject1,pt->subject2,pt->class);
fclose(ft);
tcnt++;
}
if(f==0)
{
printf(" 下面将进行信息完善\n");
ps=(LNodes*)malloc(sizeof(LNodes));
ps->num=num;
strcpy(ps->password,mima);
printf(" 请输入您的姓名:");
scanf("%s",ps->name);
printf(" 请输入您的学院:");
scanf("%s",ps->college);
printf(" 请输入您的专业:");
scanf("%s",ps->major);
printf(" 请输入您的入学年份:");
scanf("%d",&ps->year);
printf(" 请输入您的班级:");
scanf("%s",ps->class);
printf(" 请输入你的专业导师:");
scanf("%s",ps->teacher);
ps->subject1[0]='0';
ps->subject1[1]='\0';
ps->subject2[0]='0';
ps->subject2[1]='\0';
ps->next=NULL;
rs->next=ps;
rs=ps;
fs=fopen(Is,"ab");
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ps->num,ps->password,ps->name,ps->college,ps->major,ps->class,ps->year,ps->teacher,ps->subject1,ps->subject2);
fclose(ft);
scnt++;
}
printf(" 您已成功注册账号\n");
}
int jiaoshijiemian()//教师界面
{
int i;
printf("\n ********老师欢迎您来到信息管理系统********\n");
printf(" 请选择功能:\n");
printf(" 1、查看我的个人信息;\n");
printf(" 2、查看授课班级学生信息;\n");
printf(" 3、查看选课学生信息;\n");
printf(" 4、添加学生(同时注册相应账号);\n");
printf(" 5、删除学生信息;\n");
printf(" 6、修改我的个人信息;\n");
printf(" 7、退出登录。\n");
scanf("%d",&i);
return i;
}
void tea1()//输出教师个人信息
{
printf(" 您的个人信息:工号:%d 密码:%s 姓名:%s 学院:%s 教授学科1:%s 教授学科2:%s 教授班级:%s\n",dt->num,dt->password,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
printf(" 回车键返回\n");
getchar();
getchar();
}
void tea2()//查看班级学生信息
{
ms=hs->next;
printf(" %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
while(ms!=NULL)
{
if(strcmp(ms->class,dt->class)==0)
{
printf(" %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
}
ms=ms->next;
}
printf(" 回车键返回\n");
getchar();
getchar();
}
void tea3()//查看教授科目学生信息
{
printf(" 教授学科1:\n");
ms=hs->next;
printf(" %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
while(ms!=NULL)
{
if(strcmp(ms->subject1,dt->subject1)==0||strcmp(ms->subject2,dt->subject1)==0)
{
printf(" %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
}
ms=ms->next;
}
printf(" 教授学科2:\n");
ms=hs->next;
printf(" %s %s %s %s %s %s %s\n","学号","姓名","学院","专业","班级","入学年份","专业导师");
while(ms!=NULL)
{
if(strcmp(ms->subject1,dt->subject2)==0||strcmp(ms->subject2,dt->subject2)==0)
{
printf(" %d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
}
ms=ms->next;
}
printf(" 回车键返回\n");
getchar();
getchar();
}
void tea4()//添加学生信息
{
int i,n;
char mima[20];
printf(" 请输入您要添加的学生个数:");
scanf("%d",&n);
printf(" 注意:您录入的学生将自动创建账号\n");
printf(" 您希望账号密码默认为:");
scanf("%s",mima);
printf(" 下面请按照如下格式输入您要录入的学生信息\n");
printf(" 学号 姓名 学院 专业 班级 入学年份 专业导师\n");
for(i=0;i<n;i++);
{
ps=(LNodes*)malloc(sizeof(LNodes));
strcpy(ps->password,mima);
scanf("%d %s %s %s %s %d %s",&ps->num,ps->name,ps->college,ps->major,ps->class,&ps->year,ps->teacher);
ps->subject1[0]='0';
ps->subject1[1]='\0';
ps->subject2[0]='0';
ps->subject2[1]='\0';
ps->next=NULL;
rs->next=ps;
rs=ps;
scnt++;
}
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(ft);
printf(" 已成功录入\n");
printf(" 回车键返回\n");
getchar();
getchar();
}
void tea5()//删除学生
{
int num,f;
printf(" 请输入您要删除的学生学号(退出删除系统请输入“0”):");
scanf("%d",&num);
if(num!=0)
{
m1s=hs;
ms=hs->next;
while(ms!=NULL)
{
if(ms->num==num)break;
m1s=m1s->next;
ms=ms->next;
}
printf(" 所要删除的学生信息:%d %s %s %s %s %d %s\n",ms->num,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher);
printf(" 是否确认删除?\n 确认请输入“1”;重新输入学号请输入“2”\n");
scanf("%d",&f);
if(f==2)tea5();
if(f==1)
{
m1s->next=ms->next;
free(ms);
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(fs);
printf(" 您已成功删除该学生信息\n");
printf(" 回车键返回\n");
getchar();
getchar();
}
}
}
void tea6()//修改个人信息
{
int f;
printf("如果您仅修改密码请输入“1”;修改其他信息请输入“2”\n");
scanf("%d",&f);
if(f==2)
{
printf("您的个人信息:工号:%d 姓名:%s 学院:%s 教授学科1:%s 教授学科2:%s 教授班级:%s\n",dt->num,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
printf("按照如下格式输入您修改后的个人信息:\n");
printf("工号 姓名 学院 教授学科1 教授学科2 教授班级\n");
scanf("%d %s %s %s %s %s",&dt->num,dt->name,dt->college,dt->subject1,dt->subject2,dt->class);
}
if(f==1)
{
printf("请输入您要修改的密码:");
scanf("%s",dt->password);
}
ft=fopen(It,"wb");
mt=ht->next;
while(mt!=NULL)
{
fprintf(ft,"%d %s %s %s %s %s %s\n",mt->num,mt->password,mt->name,mt->college,mt->subject1,mt->subject2,mt->class);
mt=mt->next;
}
fclose(ft);
printf(" 信息已修改完成\n");
printf(" 回车键返回\n");
getchar();
getchar();
}
int xueshengjiemian()//学生界面
{
int i;
printf("\n ********同学欢迎来到管理系统********\n");
printf(" 请选择功能:\n");
printf(" 1、查看我的个人信息;\n");
printf(" 2、选课系统;\n");
printf(" 3、退课系统;\n");
printf(" 4、修改我的个人信息;\n");
printf(" 5、注销账号;\n");
printf(" 6、退出登录。\n");
scanf("%d",&i);
return i;
}
void stu1()//输出学生个人信息
{
printf(" 您的个人信息:学号:%d 密码:%s 姓名:%s 学院:%s 专业:%s 班级:%s 入学年份:%d 专业导师:%s 选课1:%s 选课2:%s\n",ds->num,ds->password,ds->name,ds->college,ds->major,ds->class,ds->year,ds->teacher,ds->subject1,ds->subject2);
printf(" 回车键返回\n");
getchar();
getchar();
}
void stu2()//选课系统
{
int cnt=0;
char subject[20];
printf(" 你已经选择的课程:");
if(ds->subject1[0]!='0')
{
printf(" %s ",ds->subject1);
cnt++;
}
if(ds->subject2[0]!='0')
{
printf(" %s ",ds->subject2);
cnt++;
}
printf("\n 注意:每人最多选择两门课程,当已经选择两门课程后无法选课\n");
printf(" 你已经选择%d门课程,",cnt);
if(cnt==2)
{
printf(" 无法选课。\n");
}
else
{
printf("\n");
printf(" 所有开课信息如下:\n");
printf(" 课程名称 开课教师\n");
mt=ht->next;
while(mt!=NULL)
{
if(mt->subject1[0]!='0')
{
printf(" %s %s\n",mt->subject1,mt->name);
}
if(mt->subject2[0]!='0')
{
printf(" %s %s\n",mt->subject2,mt->name);
}
mt=mt->next;
}
printf(" 请在以上课程中选择\n");
printf(" 你选择的课程名称:");
scanf("%s",subject);
if(ds->subject1[0]=='0')
{
strcpy(ds->subject1,subject);
}
else
{
strcpy(ds->subject2,subject);
}
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(fs);
printf(" 选课完成\n");
}
printf(" 回车键返回\n");
getchar();
getchar();
}
void stu3()//退课系统
{
char subject[20];
printf(" 你已经选择的课程:");
if(ds->subject1[0]!='0')
{
printf(" %s ",ds->subject1);
}
if(ds->subject2[0]!='0')
{
printf(" %s ",ds->subject2);
}
printf("\n 请输入您要退出的课程名称:");
scanf("%s",subject);
if(strcmp(ds->subject1,subject)==0)
{
ds->subject1[0]='0';
ds->subject1[1]='\0';
}
if(strcmp(ds->subject2,subject)==0)
{
ds->subject2[0]='0';
ds->subject2[1]='\0';
}
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(fs);
printf(" 您已退出的该课程\n");
printf(" 回车键返回\n");
getchar();
getchar();
}
void stu4()//修改个人信息
{
int f;
printf(" 如果您仅修改密码请输入“1”;修改其他信息请输入“2”\n");
scanf("%d",&f);
if(f==2)
{
printf(" 您的个人信息:学号:%d 姓名:%s 学院:%s 专业:%s 班级:%s 入学年份:%d 专业导师:%s\n",ds->num,ds->name,ds->college,ds->major,ds->class,ds->year,ds->teacher);
printf(" 按照如下格式输入您修改后的个人信息:\n");
printf(" 学号 姓名 学院 专业 班级 入学年份 专业导师\n");
scanf("%d %s %s %s %s %d %s",&ds->num,ds->name,ds->college,ds->major,ds->class,&ds->year,ds->teacher);
}
if(f==1)
{
printf(" 请输入您修改后的密码:");
scanf("%s",ds->password);
}
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(fs);
printf(" 修改信息成功\n");
printf(" 回车键返回\n");
getchar();
getchar();
}
void stu5()//注销账号
{
int f;
printf(" 是否确认注销?\n确认请输入“1”;推出注销请输入“0”\n");
scanf("%d",&f);
if(f==1)
{
m1s=hs;
ms=hs->next;
while(ms!=NULL)
{
if(ms->num==ds->num)
{
break;
}
ms=ms->next;
m1s=m1s->next;
}
m1s->next=ms->next;
free(ms);
fs=fopen(Is,"wb");
ms=hs->next;
while(ms!=NULL)
{
fprintf(fs,"%d %s %s %s %s %s %d %s %s %s\n",ms->num,ms->password,ms->name,ms->college,ms->major,ms->class,ms->year,ms->teacher,ms->subject1,ms->subject2);
ms=ms->next;
}
fclose(fs);
printf(" 您已成功注销\n");
}
}
int main()
{
ht=(LNodet*)malloc(sizeof(LNodet));
ht->next=NULL;
hs=(LNodes*)malloc(sizeof(LNodes));
hs->next=NULL;
int f=0,ft,fs;
jiazai();
f=denglu();
while(f!=4)
{
if(f==0)f=denglu();
if(f==3)//注册
{
zhuce();
f=0;
}
if(f==1)//进入教师界面
{
do{
ft=jiaoshijiemian();
if(ft==1)tea1();
if(ft==2)tea2();
if(ft==3)tea3();
if(ft==4)tea4();
if(ft==5)tea5();
if(ft==6)tea6();
}while(ft!=7);
f=0;
}
if(f==2)//进入学生界面
{
do{
fs=xueshengjiemian();
if(fs==1)stu1();
if(fs==2)stu2();
if(fs==3)stu3();
if(fs==4)stu4();
if(fs==5)stu5();
}while(fs!=6&&fs!=5);
f=0;
}
}
if(f==4)return 0;
}