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

📄 student2.cpp

📁 这是一个运用C语言编写的功能相对强大的学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*
程序修改说明:新增学生删除已选课程功能,
增添学生查看选课情况并生成.htm格式的课程表功能,
设标志位aflag来实现管理员中止选课或允许学生选课。
在课程表中新添上课教室,上课时间,上课周次三个数据项
程序修改时间:11.12
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
int saveflag=0;//保存标志位
int aflag=0;//允许选课标志位
char pd[20];//管理员密码
struct student
{
	char name[20];
	int  xuehao;//学号必须唯一
	int kecheng[5][2];//存储学生所选课程的编号和得分
	char password[20];
	char sex[4];
	int phonum;//电话号码
};
struct kecheng
{
	char croom[50];//上课教室
	char ctime[50];//上课时间
	char weeks[10];//上课周次
	char teacherinfor[50];
	char password[20];//密码不超过20位
	char teacher[20];//任课教师名字
	char kechengm[25];//存放课程名
	int bianhao;//课程编号必须唯一,以便作为查询条件
	int xfen[100][2];//存储选了这门课的学生的学号和得分
};
typedef struct snode
{
 struct student data;
 struct snode *next;
}Snode,*Slink;//建立学生链
typedef struct knode
{
 struct kecheng data;
 struct knode *next;
}Knode,*Klink;//建立课程链
int delkecheng(Klink kl,Slink sl);//删除课程
int addstudent(Slink sl);//增加学生
void save(Klink kl,Slink sl);

void welcome()
{
    printf("*******************************************************************************\n");
    printf("*************************欢迎试用宝宝学生成绩管理系统**************************\n");  
	printf("*******************************************************************************\n");
    printf("****************************-----YYY农大学生信息管理系统模仿版*****************\n");
    printf("*******************************************************************************\n");
    printf("***************计算机科学与技术02级2班  YYYYYY*******************************\n");
    printf("*********************************************************YYYYYYYY**************\n");
    printf("*******************************************************************************\n");
}
void load()
{
	printf("\n\n\t*************************************************************\n");
	printf("\t***                                                       ***\n");
	printf("\t***  身份选择:                                           ***\n");
	printf("\t***         (A)管理员   (T)教师    (S)学生   (Q)退出   ***\n");
	printf("\t***                                                       ***\n");
	printf("\t*************************************************************\n");
}
void schoice()
{
	printf("  \t* * * * * * * * * *学 生 登 录* * * * * * * * * * * * * * * * * *\n");
    printf("  \t*\t             * * * * * * * * * * * * * * *                 *\n");
    printf("  \t*\t            *                             *                *\n");
    printf("  \t*\t           *           1.查看课程          *               *\n");
    printf("  \t*\t          *                                 *              *\n");
    printf("  \t*\t         *           2.选修课程              *             *\n");
    printf("  \t*\t        *                                     *            *\n");
    printf("  \t*\t       *          3.修改自己的密码             *           *\n");
    printf("  \t*\t      *                                         *          *\n");
    printf("  \t*\t     *        4.修改个人信息                   *         *\n");
    printf("  \t*\t    *      ****        ****        ****         *        *\n");
    printf("  \t*\t     *                                           *         *\n");
    printf("  \t*\t      *        5.查看已选课程                   *          *\n"); 
	printf("  \t*\t       *                                       *           *\n");
	printf("  \t*\t        *         6.删除已选课程              *            *\n");
    printf("  \t*\t         *                                   *             *\n"); 
    printf("  \t*\t          *          7.保存数据             *              *\n");
    printf("  \t*\t           *                               *               *\n");
    printf("  \t*\t            *          0.退出系统         *                *\n");
    printf("  \t*\t             *                           *                 *\n");
    printf("  \t*\t              * * * * * * * * * * * * * *                  *\n");
    printf("  \t* * * * * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * *\n");
}
void tchoice()
{      
	printf("\t\t**********************************************\n");
	printf("\t\t**************  教 师 登 录 ******************\n");
    printf("\t\t**********************************************\n");
    printf("\t\t*************(1)修改学生成绩   ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(2)对学生成绩排序 ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(3)修改自己的密码 ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(4)修改个人信息   ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(5)查看个人信息   ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(6)保存修改信息   ***************\n");
    printf("\t\t*************                  ***************\n");
    printf("\t\t*************(0)退出系统       ***************\n");
    printf("\t\t**********************************************\n");
}
void wrong()
{
   printf("\n\n\t\t!!!!!!!!输入错误!!!!!!!!\n");
}
void pleasechoice()
{
	printf("\n请输入你的选择:");
}
void pdwrong()
{
   printf("\n\n\t\t!!!!!!!!密码错误!!!!!!!!\n");

}
void achoice()
{
    printf("\n\t管理员登录:");
    printf("\n\t**************************************************************\n");
    printf("\t*******(1)增加课程                (2)删除课程         ********\n");
    printf("\t********                                              ********\n");
    printf("\t*******(3)增加学生                (4)删除学生         ********\n");
    printf("\t*******                                               ********\n");
    printf("\t*******(5)修改学生基本资料        (6)修改教师基本资料 ********\n");
    printf("\t********                                              ********\n");
	printf("\t*******(7)查询学生资料            (8)查询教师资料     ********\n");
    printf("\t*******                                               ********\n");
    printf("\t*******(9)保存已修改资料          (10)修改密码        ********\n");  
	printf("\t*******                                               ********\n"); 
	printf("\t*******(11)改变选课状态           (0)退出系统         ********\n"); 
	printf("\t**************************************************************\n");

}
void exitx(Klink kl,Slink sl)

{	char sure[20];	
	printf("\n你确定要退出系统吗?(Y):");
	scanf("%s",&sure);
	getchar();
	if((sure[0]!='Y'&&sure[0]!='y'&&sure[0]!=10)&&(strlen(sure)<2))//输入大于2这说明用户输入出错
	{
		return;
	}
	
	if(!saveflag)
	{
		printf("\n\t*************谢谢使用YY农大学生信息管理系统模仿版!**************\n");
		exit(0);
	}
	else
	{
		char ch[20];
a:
		printf("\n你已经修改了数据库的数据,是否保存数据?(Y/N):");
	    scanf("%s",&ch);
        getchar();
		if((ch[0]=='Y'||ch[0]=='y')&&(strlen(ch)<2))//输入大于2这说明用户输入出错
		{
			save(kl,sl);
			printf("\n\t数据保存完毕!");
			printf("\n\t*************谢谢使用YY农大学生信息管理系统模仿版!**************\n");
			getchar();
			getchar();
			exit(0);
		}
		else if((strlen(ch)<2)&&(ch[0]=='N'||ch[0]=='n'))//输入大于2这说明用户输入出错
		{		
			printf("\n\t*************谢谢使用Y农大学生信息管理系统模仿版!**************\n");
			exit(0);
		}
		else
		{
			wrong();
			goto a;
		}

	}
}
int adminload(char *pd)
{
    printf("*******************************************************************************\n");
	printf("********密码:");
	char password[20];
	scanf("%s",password);getchar();
	if(!strcmp(password,pd))
		return 1;//管理员登录成功代号为1
	return 0;
}

Snode* findsnum(Slink sl,int num)//用学号查找学生返回找到的整个节点
{
	Snode *temps;
	temps=sl->next;
  while(temps)//下一个指针不为空
  {
   if(temps->data.xuehao==num)
    return temps;//返回找到的上一个节点,便于以后的删除操作
   temps=temps->next;
  }
  return NULL;
}
Snode* findsname(Slink sl,char name[20])//用学生姓名查找学生返回找到的整个节点
{
	Snode *temps;
	temps=sl->next;
  while(temps)
  {
	  if(!strcmp(temps->data.name,name))
        return temps;
     temps=temps->next;
  }
  return NULL;
}
Knode* findtnum(Klink kl,int num)//查找教师,用教师的编号找返回整个节点
{
	Knode *tempk;
	tempk=kl->next;
  while(tempk)
  {
	  if(tempk->data.bianhao==num)
        return tempk;//返回找到的上一个节点,便于以后的删除操作
     tempk=tempk->next;
  }
  return NULL;
}
Knode* findtname(Klink kl,char name[20])//用教师姓名查找教师返回找到的整个节点
{
	Knode *tempk;
	tempk=kl->next;
  while(tempk)
  {
	  if(!strcmp(tempk->data.teacher,name))
        return tempk;
     tempk=tempk->next;
  }
  return NULL;
}

int addkecheng(Klink kl)//增加课程
{
	int num;
	Knode *k,*p,*kp;
	printf("\n请输入课程编号(<0>回到上级菜单):");
	scanf("%d",&num);getchar();
	if(num==0)
		return 0;
	kp=findtnum(kl,num);
	if(kp)//增加课程时检查课程存在否
	{
		printf("\n这门课已经存在,请输入其它的课程编号!\n");
	}
	else
	{
		k=(Knode*)malloc(sizeof(Knode));
		printf("\n请输入课程名:");
		scanf("%s",k->data.kechengm);
		getchar();
		printf("\n请输入任课教师姓名:");
		scanf("%s",k->data.teacher);
		getchar();
		printf("\n请初始化任课教师密码:");
		scanf("%s",k->data.password);
		getchar();
        printf("\n每周上课时间:");
		gets(k->data.ctime);
		//getchar();
		printf("\n上课周次:");
		gets(k->data.weeks);
		//getchar();
		printf("\n上课教室:");
		gets(k->data.croom);
		//getchar();

		k->data.bianhao=num;
		//scanf("%s",k->data.ctime);
		strcpy(k->data.teacherinfor ,"\0");
		for(int i=0;i<100;i++)
		{
			k->data.xfen[i][0]=0;k->data.xfen[i][1]=0;
		}
		p=kl;
    	while(p->next!=NULL)p=p->next;
	     k->next=NULL;
	     p->next=k;
		 p=k;
		 saveflag=1;
	}
	return 1;

}

int delkecheng(Klink kl,Slink sl)//删除课程
{
	int num;int i=0,j=0;
	knode *p,*kp;
	snode *s;
	printf("\n请输入课程编号(<0>回到上级菜单):");
	scanf("%d",&num);
	//getchar();
	if(num==0)
		return 0;
	kp=findtnum(kl,num);
	//kp=p->next;//真正的节点
	if(kp)
	{
		i=0;
		while(kp->data.xfen[i][0]&&(i<100))//取完所有的学号
		{
			j=0;//putchar('o');
			s=findsnum(sl,kp->data.xfen[i][0]);
		    while((s->data.kecheng[j][0]!=kp->data.xfen[i][0])&&(j<5))//找到这门课
		        j++;
		    while((s->data.kecheng[j][0])&&(j<4))//逐个前移
			{
			    s->data.kecheng[j][0]=s->data.kecheng[j+1][0];
			    s->data.kecheng[j][1]=s->data.kecheng[j+1][1];
			    j++;
			}
			    s->data.kecheng[j][0]=0;//尾置0
			    s->data.kecheng[j][1]=0;
				i++;
		}
		   p=kl;
        while(p->next!=kp)//找到前一节点
            p=p->next;
       p->next=kp->next;
       free(kp);//释放节点
	   saveflag=1;
        printf("\t\n=====该课程已经成功删除!======\n");//p->next=kp->next;free(kp);
		return 1;
	}//if
	else
	{
		printf("\n\t\t\t======这门课不存在=======\n");return 1;
	}
}

int addstudent(Slink sl)//增加学生
{
	int num;
	Snode *s,*p,*sp;
	printf("\n请输入学生学号(<0>回到上级菜单):");
	scanf("%d",&num);getchar();
	if(num==0)
		return 0;
	sp=findsnum(sl,num);
	if(sp)//查看这个学号是否已被分配
	{
		printf("\n\t已经有学生占有此学号!\n");
	}
	else
	{
		s=(Snode*)malloc(sizeof(Snode));
		printf("\n请输入学生名:");
		scanf("%s",s->data.name);
		getchar();
		printf("\n请初始化学生密码:");
		scanf("%s",s->data.password);
		getchar();
	    printf("\n请输入性别:");
	    scanf("%s",s->data.sex);
		getchar();
		s->data.xuehao=num;
		s->data.phonum=0;
		for(int i=0;i<5;i++)
		{
			s->data.kecheng[i][0]=0;s->data.kecheng[i][1]=0;
		}
		p=sl;
    	while(p->next!=NULL)p=p->next;
	     s->next=NULL;
	     p->next=s;
		 p=s;
		 saveflag=1;
	}
	return 1;
}

int delstudent(Klink kl,Slink sl)//删除学生
{
	int num;int i=0,j=0;
	Snode *p,*sp;
	knode *k;
	printf("\n请输入学生学号(<0>回到上级菜单):");
	scanf("%d",&num);getchar();
	if(num==0)
		return 0;
	
	sp=findsnum(sl,num);
	//kp=p->next;//真正的节点
	if(sp)
	{
		i=0;
		while(sp->data.kecheng[i][0]&&(i<5))//取完所有的可能的课程号
		{
			j=0;
			k=findtnum(kl,sp->data.kecheng[i][0]);
			if(k)
			{
		        while((k->data.xfen[j][0]!=sp->data.kecheng[i][0])&&(j<100))//在这门课中找到此学号并删除
		          j++;//putchar('s');
		       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++;
			   }
			       k->data.xfen[j][0]=0;//尾置零
			       k->data.xfen[j][1]=0;
			}
			i++;
		}
		   p=sl;
        while(p->next!=sp)//找到的节点
            p=p->next;
       p->next=sp->next;
       free(sp);//释放节点
	   saveflag=1;
        printf("\t\n=====这名学生资料已经成功删除!======\n");//p->next=kp->next;free(kp);
		return 1;
	}//if
	else
	{
		printf("\n\t\t\t======这名学生不存在=======\n");return 1;
	}
}

int mteacher(Klink kl)//修改教师资料
{
	knode *k;int n;
	printf("\n请输入教师编号(<0>回到上级菜单):");
	scanf("%d",&n);
	getchar();
	if(!n)
		return 0;
	k=findtnum(kl,n);
	if(!k)
	{
		printf("\n不存在这个编号!");
		return 1;
	}
	printf("\n请输入教师姓名:");
	scanf("%s",k->data.teacher);
	getchar();
	printf("\n请输入课程名:");
	scanf("%s",k->data.kechengm);
	getchar();
	saveflag=1;
	return 1;
}

int mstudent(Slink sl)//修改学生资料
{
	snode *s;int n;
	printf("\n请输入学生学号(<0>回到上级菜单):");
	scanf("%d",&n);
	getchar();
	if(!n)
		return 0;
	s=findsnum(sl,n);
	if(!s)
	{
		printf("\n不存在这个学号!");
		return 1;
	}
	printf("\n请输入学生姓名:");
	scanf("%s",s->data.name);
	getchar();
	printf("\n请输入性别:");
	scanf("%s",s->data.sex);
	getchar();
	saveflag=1;
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -