⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 student2.cpp

📁 这是一个运用C语言编写的功能相对强大的学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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]="&nbsp\; </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 + -