📄 student2.cpp
字号:
getchar();
p.data.phonum=num;
saveflag=1;
printf("\n\t修改成功!");
}
void mode(Klink kl,snode *s)//生成.html文件
{
char *str[54];
str[0]="<html>";
str[1]="<head>";
str[2]="<meta http-equiv=\"Content-Type\" content=\"text/html\;charset=gb2312\">";
str[3]="<title>个人课表</title>";
str[4]="<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\">";
str[5]="<LINK href=\"../../../Css/style.css\" rel=stylesheet type=\"text/css\">";
str[6]="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">";
str[7]="</head>";
str[8]="<BODY leftMargin=0 topMargin=0 background=\"../../../Images/wbg.gif\" >";
str[9]="<div align=\"center\">";
str[10]=" <center>";
str[11]="<table>";
str[12]=" ";
str[13]=" <tr> ";
str[14]=" <td width=50 align=center></td>";
str[15]=" ";
str[16]=" </tr> ";
str[17]="<TABLE class=wrui borderColor=#dee9fe cellSpacing=0 cellPadding=0 width=782 align=center bgColor=white border=1>";
str[18]="<tr><td width=\"778\">";
str[19]=" ";
str[20]="<div align=\"center\">";
str[21]=" <table border=0 cellspacing=\"0\" width=\"696\" bordercolorlight=\"#0099CC\" bordercolordark=\"#FFFFFF\" cellpadding=\"2\">";
str[22]=" <tr>";
str[23]=" ";
str[24]=" <td width=\"100\" align=left > </td>";
str[25]=" <td width=496 align=center><b><font color=\"red\" size=3>选课情况</font></b></td>";
str[26]=" <td width=100 align=right>";
str[27]="</td>";
str[28]=" ";
str[29]=" </tr>";
str[30]=" </table>";
str[31]=" ";
str[32]=" <table border=\"1\" cellspacing=\"0\" width=\"750\" bordercolorlight=\"#0099CC\" bordercolordark=\"#FFFFFF\" cellpadding=\"2\">";
str[33]=" <tr> ";
str[34]=" ";
str[35]=" <td width=\"50\" height=\"20\">序号</td>";
str[36]=" <td width=\"200\" height=\"20\">课程</td>";
str[37]=" <td width=\"200\" height=\"20\">课程编号</td>";
str[38]=" ";
str[39]=" <td width=\"100\" height=\"20\">教师</td>";
str[40]=" ";
str[41]=" <td width=\"100\" height=\"20\">上课时间</td>";
str[42]="<td width=\"50\" height=\"20\">周次</td>";
str[43]=" ";
str[44]=" <td width=\"150\" height=\"20\">教室</td>";
str[45]=" ";
str[46]=" </tr>";
str[47]="</table>";
str[48]="</form>";
str[49]=" ";
str[50]="<p align=center style=\"FONT-SIZE: 12px\" ></p>";
str[51]=" ";
str[52]="</table>";
str[53]="</html>";
char *str1[11];
str1[0]="<tr>\n";
str1[1]=" <td width=50 align=center>";
str1[2]="</td>\n";
str1[3]="<td width=200>";
str1[4]=" \; </td>\n";
str1[5]="<td width=100>";
str1[7]="<br>";
str1[8]="<td width=50>";
str1[9]="<td width=150>";
str1[10]="</tr>\n";
FILE *op;
// op=fopen("kechengbiao.htm","w");
int j=0;knode *k;
if(!s->data.kecheng[j][0])
{
printf("你没有选课!");
getchar();
return;
}
printf("\n%s\t %s\t%s\t%s\t%s\t\t%s\n","课程名","课程编号","教师","上课时间","周次","教室");
op=fopen("kechengbiao.htm","w");
for(int i=0;i<46;i++)
{
fprintf(op,"%s\n",str[i]);
}
while(s->data.kecheng[j][0]&&j<5)
{
k=findtnum(kl,s->data.kecheng[j][0]);
if(!k)
{
printf("数据出错!");
getchar();
break;
}
//printf("")
printf("%s\t%d\t%s\t%s\t%s\t%s\n",k->data.kechengm,k->data.bianhao,k->data.teacher,k->data.ctime,k->data.weeks,k->data.croom);
j++;
fprintf(op,"%s",str1[0]);
fprintf(op,"%s",str1[1]);
fprintf(op,"%d",j);//??
fprintf(op,"%s",str1[2]);
fprintf(op,"%s",str1[3]);
fprintf(op,"%s",k->data.kechengm);
//??
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[3]);
fprintf(op,"%d",k->data.bianhao);//??
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[5]);
fprintf(op,"%s",k->data.teacher);
//??
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[5]);
fprintf(op,"%s",k->data.ctime);
//????
fprintf(op,"%s",str1[7]);
//????
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[9]);
fprintf(op,"%s",k->data.weeks);
//?
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[8]);
fprintf(op,"%s",k->data.croom);
//??
fprintf(op,"%s",str1[4]);
fprintf(op,"%s",str1[10]);
}
for(i=46;i<53;i++)
{
fprintf(op,"%s\n",str[i]);
}
printf("\n在你的目录下已经生成一个名为kechengbiao.htm的文件,内有你的选课情况\n");
getchar();
fclose(op);
}
/*void result(Klink kl,snode *s)
{
int i=0;knode *k;
while(s->data.kecheng[i][0]&&i<5)
{
k=findtnum(kl,s->data.kecheng[i][0]);
printf("%s\t%d%s%s%s%s\n",k->data.kechengm,k->data.bianhao,k->data.teacher,k->data.ctime,k->data.weeks,k->data.croom);
}
}*/
void student(Klink kl,Slink sl)//学生模块功能的实现
{
int choiceflag=0;
Snode *s;
int num;
char pd[20];
printf("请输入学号:");
scanf("%d",&num);
getchar();
printf("请输入密码:");
scanf("%s",&pd);
getchar();
s=findsnum(sl,num);
if(!s)
return;
if(strcmp(s->data.password,pd))
{
return;
}
while(1)
{
system("cls");
welcome();
schoice();
pleasechoice();
scanf("%d",&choiceflag);
getchar();
switch(choiceflag)
{
case 3:xiugai(*s);getchar();break;//修改自己的密码
case 1:searchk(kl);break;//查看课程
case 2:saddc(*s,kl);getchar();break;//选修课程
case 4:schangename(*s);getchar();break;//修改个人信息
case 7:save(kl,sl);getchar();break;//保存数据
case 5:mode(kl,s);getchar();break;//查看已选课程并打印课表
case 6:sdelc(*s,kl);getchar();break;//删除课程
case 0:exitx(kl,sl);
default:wrong();getchar();break;
}
}
}
int changestudentgrade(knode &k,Slink sl)//对两个表同时操作,改变学生的成绩
{
bg:
int i=0,flag=0,j=0,num,grade;
printf("\n请输入学生学号按<0>退出:");
scanf("%d",&num);
if(!num)
{
return 0;
}
while(k.data.xfen[i][0])//查看该学生是否选了这门课
if(k.data.xfen[i][0]==num)
{
flag=1;
break;
}
else
i++;
if(!flag)
{
printf("\n你输入的学生没有选修这门课\n");
getchar();
getchar();
goto bg;
}
else
{
printf("\n输入的学生成绩:");
scanf("%d",&grade);
Snode *s;s=findsnum(sl,num);
while(s->data.kecheng[j][0])//找到学生表的相应课程项
{
if(s->data.kecheng[j][0]==k.data.bianhao)
break;
j++;
}
s->data.kecheng[j][1]=grade;//修改学生表
k.data.xfen[i][1]=grade;//修改课程表
saveflag=1;//保存标志位置位
goto bg;
}
}
int dankesort(Knode &k,Slink sl)//单科排序,双表操作
{
// Knode *k;
// k=findtnum(kl,n);
int i=0,j,count=0;
int temp[100][2];
while(k.data.xfen[i][0])//同时计算有多少学生选修这门课
{
temp[i][0]=k.data.xfen[i][0];//学号
temp[i][1]=k.data.xfen[i][1];//学分
i++;
}
if(i==0)
{
printf("没有学生选这门课程\n");
return 0;
}
printf("\t正在排序中..................\n");//排序开始
int flag=1;//双向冒泡排序
int x=0,y;
int t[2];
while(flag==1)
{
flag=0;//标志位的设置
for(y=i-x-1;y>=x+1;y--)//反向遍厉找最小值
if(temp[y][1]<temp[y-1][1])
{
flag=1;
t[0]=temp[y][0];t[1]=temp[y][1];//注意赋值时学号要和学分同时交换
temp[y][0]=temp[y-1][0];temp[y][1]=temp[y-1][1];
temp[y-1][0]=t[0];temp[y-1][1]=t[1];
}
for(y=x+1;y<i-1;y++)//正向遍厉找最大值
if(temp[y][1]>temp[y+1][1])
{
flag=1;
t[0]=temp[y][0];t[1]=temp[y][1];
temp[y][0]=temp[y+1][0];temp[y][1]=temp[y+1][1];
temp[y+1][0]=t[0];temp[y+1][1]=t[1];
}
x++;
}
printf("学生姓名\t学生学号\t学分\t\t名次\n");
for(j=i-1;j>=0;j--)
{
Snode *s;
s=findsnum(sl,temp[j][0]);count++;
printf("%s\t\t%d\t\t%d\t\t%d\n",s->data.name,temp[j][0],temp[j][1],count);
}
printf("共有%d位同学选修这门课\n",count);return 0;
}
void chagetpd(knode &k)//修改教师密码
{
//knode *k;
//k=findtnum(kl,n);
char temppd[20];
printf("请输入新密码:");
scanf("%s",temppd);
getchar();
strcpy(k.data.password,temppd);
saveflag=1;
printf("\n\t密码修改成功!");
}
void changetinfor(Knode &k)//修改教师资料
{
//knode *k;
//k=findtnum(kl,n);
char tempinfor[50];
printf("请输入新资料:");
scanf("%s",tempinfor);
strcpy(k.data.teacherinfor,tempinfor);
saveflag=1;
printf("\n\t资料修改成功!");
}
void teacher(Slink sl,Klink kl)//教师模块的功能的实现
{
int choiceflag;
int num;
char pd[20];
Knode *p;
printf("请输入教师编号:");
scanf("%d",&num);
printf("请输入教师密码:");
scanf("%s",&pd);
p=findtnum(kl,num);
if(!p)
return;
if(strcmp(p->data.password,pd))
return;
while(1)
{
system("cls");
welcome();
tchoice();
pleasechoice();
scanf("%d",&choiceflag);
getchar();
switch(choiceflag)
{
case 1:changestudentgrade(*p,sl);getchar();break;//修改学生成绩
case 2:dankesort(*p,sl);getchar();break;//对学生成绩排序
case 3:chagetpd(*p);getchar();break;//修改自己的密码
case 4:changetinfor(*p);getchar();break;//修改个人信息(由于是课程设计不是实用软件所以教师信息不多)
case 5:checkinfor(kl,num);getchar();break;//查看个人信息
case 6:save(kl,sl);getchar();break;//保存数据
case 0:exitx(kl,sl);
default:wrong();break;
}
}
}
void main()
{
int notinit=0;
int f=1,er=0;
// char pd[20];
welcome();
Slink sl;
Klink kl;
FILE *sf,*kf; //定义两个文件指针
Snode *rs,*ps;//定义一个尾指针和一个临时指针(学生)
Knode *rk,*pk;//定义一个尾指针和一个临时指针(教师)
sl=(Snode*)malloc(sizeof(Snode));
sl->next=NULL;
rs=sl;//给尾指针赋值
sf=fopen("s.dat","r");
if(!sf)//未打开文件说明用户是第一次使用这个程序让用户初始化密码
{
printf("\n\t这是你第一次使用本程序,请初始化参数\n");
printf("\n请输入密码:");
scanf("%s",&pd);
getchar();
notinit=1;
saveflag=1;
//getchar();
}
else
{
aflag=fgetc(sf);
int y=0;
char tempc;
tempc=fgetc(sf);
while(!feof(sf)&&(tempc!='\n')&&(y<20))//不添加小于20就会产生溢出
{
pd[y]=tempc;//读取密码
tempc=fgetc(sf);
y++;
}
while(!feof(sf))
{
ps=(Snode*)malloc(sizeof(Snode));
if(fread(ps,sizeof(Snode),1,sf)==1) //将文件的内容放入接点中
{
ps->next=NULL;
rs->next=ps;
rs=ps; //将该接点挂入连中
}
}
fclose(sf); //关闭文件
}
kl=(Knode*)malloc(sizeof(Knode));
kl->next=NULL;
rk=kl;
kf=fopen("k.dat","r");
if(kf==NULL)
{
printf("\n\t!!!!!!!!!!还没有课程数据库存在,请以管理员身份登录!!!!!!!!!!!\n");
getchar();
goto ad;
}
else
{
int z=0;
char tem,tempd[20];
tem=fgetc(kf);
while(!feof(kf)&&(tem!='\n')&&(z<20))
{
tempd[z]=tem;//putchar(tem);//读取密码
tem=fgetc(kf);
z++;tempd[z]='\0';
}
//puts(pd);
//puts(tempd);
if(strcmp(pd,tempd))//校验密码的同时检查文件的完整性
{
printf("\n文件出错,有可能已经损坏,请联系管理员\n");
getchar();
er=1;
}
else
while(!feof(kf))
{
pk=(Knode*)malloc(sizeof(Knode));
if(fread(pk,sizeof(Knode),1,kf)==1) //将文件的内容放入临时接点中
{
pk->next=NULL;//尾赋值为空
rk->next=pk;
rk=pk; //把刚刚的节点连接到链中
}
}
fclose(kf);
}
while(f)
{
if(notinit)
goto ad;
if(er)
goto end;
system("cls");//调用dos命令清屏
welcome();
load();
char loadflag[20];//存放选择
pleasechoice();
scanf("%s",&loadflag);
getchar();//接受回车符
if((strlen(loadflag)<2)&&(loadflag[0]=='Q'||loadflag[0]=='q'))//输入大于2这说明用户输入出错
end: exit(0);//退出
else if((strlen(loadflag)<2)&&(loadflag[0]=='A'||loadflag[0]=='a'))
{
ad: admin(sl,kl);//管理员
}
else if((strlen(loadflag)<2)&&(loadflag[0]=='T'||loadflag[0]=='t'))
teacher(sl,kl);//教师
else if((strlen(loadflag)<2)&&(loadflag[0]=='S'||loadflag[0]=='s'))
student(kl,sl);//学生
else
{
wrong();
getchar();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -