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

📄 student2.cpp

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