📄 student2.cpp
字号:
int qstudent(Slink sl,Klink kl)//查询学生的资料
{
printf("\n按学生姓名查询按<2>按学生学号查询按<1>返回上级按<0>:");
int f;
scanf("%d",&f);
snode *s;
knode *k;
int i;
if(!f)
return 0;
else if (f==2)
{
char name[20];
printf("\n输入学生姓名:");
scanf("%s",name);
getchar();
s=findsname(sl,name);
}
else if(f==1)
{
int n;
printf("\n输入学生学号:");
scanf("%d",&n);
getchar();
s=findsnum(sl,n);
}
else
{
wrong();
return 1;
}
if(!s)
{
printf("\n\t\t\t======这名学生不存在=======\n");
return 1;
}
else
{
i=0;
printf("\n学生姓名:%s",s->data.name);
printf("\n学生学号:%d",s->data.xuehao);
printf("\n学生性别:%s",s->data.sex);
printf("\n学生电话:%d",s->data.phonum);
if(s->data.kecheng[0][0]==0)
{
printf("\n该生尚未选课!!!!\n");
return 1;
}
else
while(s->data.kecheng[i][0]&&i<5)
{
k=findtnum(kl,s->data.kecheng[i][0]);
printf("\n学生所选课程名称:%s",k->data.kechengm);
printf("\n学生所选课程编号:%d",k->data.bianhao);
printf("\n学生所选课程得分:%d",s->data.kecheng[i][1]);
i++;
}
return 1;
}
}
void checkinfor(Klink kl,int n)//查看教师资料
{
knode *k;
k=findtnum(kl,n);
if(!k)
{
printf("\n\t没有这位教师的信息!\n");
return;
}
printf("\n\t=============教师基本资料============\n");
printf("编号\t姓名\t教授课程名\t教师其它信息\n");
printf("%d\t%s\t%s\t\t%s\n",k->data.bianhao,k->data.teacher,k->data.kechengm,k->data.teacherinfor);
}
int qteacher(Klink kl)
{
printf("\n按教师姓名查询按<2>***按教师编号查询按<1>***返回上级按<0>:");
int f;
scanf("%d",&f);
getchar();
knode *k;
if(!f)
return 0;
else if (f==2)
{
char name[20];
printf("\n输入教师姓名:");
scanf("%s",name);
getchar();
k=findtname(kl,name);
}
else if(f==1)
{
int n;
printf("\n输入教师编号:");
scanf("%d",&n);
getchar();
k=findtnum(kl,n);
}
else
{
wrong();
return 1;
}
if(!k)
{
printf("\n\t\t\t======这名教师不存在=======\n");
return 1;
}
else
{
printf("\n\t\t=============教师基本资料============\n");
printf("编号\t姓名\t教授课程名\t教师其它信息\n");
printf("%d\t%s\t%s\t%s\n",k->data.bianhao,k->data.teacher,k->data.kechengm,k->data.teacherinfor);
return 1;
}
}
void save(Klink kl,Slink sl)
{
// if(!saveflag)
// return;
FILE *kp,*sp;
knode *k;
snode *s;
int flag=1,count=0;
kp=fopen("k.dat","wb");
if(kp==NULL)
{
printf("\n\n\t=========课程表文件丢失!==========\n\n");
}
else
{
int y=0;
while(pd[y]&&(y<20))//写入管理员的密码
{
fputc(pd[y],kp);y++;
}
fputc('\n',kp);
k=kl->next;
while(k)
{
if(fwrite(k,sizeof(knode),1,kp)==1)
{
k=k->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n课程表文件保存成功!有%d条记录已经保存\n",count);
}
fclose(kp);
}//接下来保存另一个文件
flag=1,count=0;//重置标志位
sp=fopen("s.dat","wb");
if(sp==NULL)
{
printf("\n\t=========学生表文件丢失!==========\n");
exit(1);
}
s=sl->next;
fputc(aflag,sp);//写入允许选课的标志
int x=0;
while(pd[x]&&(x<20))//写入管理员密码
{
fputc(pd[x],sp);x++;
}
fputc('\n',sp);
while(s)
{
if(fwrite(s,sizeof(snode),1,sp)==1)
{
s=s->next;
count++;//putchar('1');
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n学生表文件保存成功!有%d条记录已经保存\n",count);
}
fclose(sp);saveflag=0;
//return 0;
}
void axiugai()
{
char newpd[20];
printf("\n请输入你的新密码:");
scanf("%s",&newpd);
getchar();
strcpy(pd,newpd);
printf("\n密码修改成功!\n");
saveflag=1;
}
int stopxk()
{/*检查选课是否被允许*/
if(aflag)
printf("\n现在已经停止选课是否允许选课?(Y/N):");
else
printf("\n现在允许选课是否中止选课?(Y/N):");
char w[10];
scanf("%s",w);
getchar();
/*检查用户输入*/
if(!strcmp(w,"N")||!strcmp(w,"n"))
return 0;
else if(!strcmp(w,"Y")||!strcmp(w,"y"))
{//改变选课状态
if(aflag)
aflag=0;
else
aflag=1;
printf("\n修改成功\n");
saveflag=1;
//getchar();//getchar();
return 0;
}
else
wrong(); //错误输入
getchar();
return 1;
}
void admin(Slink sl,Klink kl)
{
int count=0;
int f=1;
while(1)
{
if(!adminload(pd))
{
pdwrong();
count++;
}
else
break;
if(count==3)
exit(0);
}
system("cls");
welcome();
achoice();
int flag;
while(1)
{
system("cls");
welcome();
achoice();
pleasechoice();
scanf("%d",&flag);
getchar();
f=1;
if(!flag)
{
exitx(kl,sl);//退出系统
}
else if(flag==1)
{
while(f)
{
f=addkecheng(kl);//增加课程
}
}
else if(flag==2)
{
while(f)
f=delkecheng(kl,sl);//删除课程
}
else if(flag==3)
{
while(f)
f=addstudent(sl);//增加学生;
}
else if(flag==4)
{
while(f)
f=delstudent(kl,sl);//删除学生
}
else if(flag==5)
{
while(f)
f=mstudent(sl);//修改学生资料
}
else if(flag==6)//修改教师基本资料
{
while(f)
f=mteacher(kl);
}
else if(flag==7)
{
while(f)
f=qstudent(sl,kl);//查询学生资料
}
else if(flag==8)
{
while(f)
f=qteacher(kl);//查询教师资料
}
else if(flag==9)
{
save(kl,sl);//保存文件
getchar();//getchar();
}
else if(flag==10)
{
axiugai();//修改管理员密码
getchar();//getchar();
}
else if(flag==11)
{
while(f)
f=stopxk();//停止选课
getchar();//getchar();
}
else
{
wrong();//输入错误
getchar();
}
}
}
void xiugai(snode &p)//学生修改密码
{
//Snode *p;
//p=findsnum(sl,num);
char temppd[20];
printf("请输入新密码:");
scanf("%s",temppd);
getchar();
strcpy(p.data.password,temppd);
saveflag=1;
printf("\n\t修改成功!");
}
void searchk(Klink kl)//查看课程
{
if(!kl)//空否?
{
printf("暂时没有课程数据库");
getchar();
return;
}
else
{
printf("课程名\t任课教师\t课程编号\n");
knode *p;
p=kl->next;
while(p)
{ //putchar('2');
printf("%s\t%s\t\t%d\n",p->data.kechengm,p->data.teacher,p->data.bianhao);
p=p->next;
}
getchar();//getchar();
}
}
void saddc(Snode &p,Klink kl)//学生选课,
{
//snode *p;
//p=findsnum(sl,n);
if(aflag)
{
printf("\n已经停止选课\n");
return;
}
int num,i=0,j=0;
printf("请输入课程编号:");
scanf("%d",&num);
getchar();
while(p.data.kecheng[i][0]!=NULL)
{
if(p.data.kecheng[i][0]==num)
{
printf("\n你已经选了这门课程\n");
return;
}
i++;
}
// printf("%d",i);
if((5-i)>0)
{
knode *k;
k=findtnum(kl,num);//找到节点返回给k,教师编号和课程编号一致
if(k)
{
while(k->data.xfen[j][0])j++;//计算有多少人选了这门课
if(j==100)
{
printf("这门课已经选完,请选其它的课程");
return;
}
k->data.xfen[j][0]=p.data.xuehao;
p.data.kecheng[i][0]=num;
saveflag=1;
printf("\n\t选课成功!");
}
else
printf("\n\t不存在这门课!");
}
else
printf("你已经选了五门课程,不能再选!");
}
void sdelc(Snode &p,Klink kl)
{
if(aflag)
{
printf("\n已经停止选课\n");
return;
}
int num,i=0,j=0;
while(p.data.kecheng[i][0]!=NULL)i++;
if(!i)
{
printf("\n%s同学:你还没有选修课程\n");
getchar();
return;
}
printf("\n%s同学:你已经选了%d门课程\n",p.data.name,i);
printf("\n请输入要删除课程的课程编号:");
scanf("%d",&num);
getchar();
i=0;knode *k;
while(p.data.kecheng[i][0]!=NULL&&i<5)
{
if(p.data.kecheng[i][0]==num)//找到学生表中的这门课程
{
k=findtnum(kl,num);
if(!k)
{
printf("\n数据库出错!\n");
getchar();
return;
}
while(k->data.xfen[j][0])//找到课程表中的相应项
{
if(k->data.xfen[j][0]==p.data.xuehao)
break;
j++;
}
while(k->data.xfen[j][0]&&j<100)//移动来达到删除课程表中的记录的目的
{
k->data.xfen[j][0]=k->data.xfen[j+1][0];
k->data.xfen[j][1]=k->data.xfen[j+1][1];
j++;
}
while(p.data.kecheng[i][0]!=NULL&&i<5)//删除学生表中的相应项
{
p.data.kecheng[i][0]=p.data.kecheng[i+1][0];
p.data.kecheng[i][1]=p.data.kecheng[i+1][1];
i++;
}
printf("\n删除成功!\n");
//getchar();
return;
}
i++;
}
printf("\n未找到这门课程!\n");
}
void schangename(Snode &p)//这儿学生能够改动的就只有电话号码
{
//snode *p;
//p=findsnum(sl,n);
int num;
printf("输入你的电话号码:");
scanf("%d",&num);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -