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

📄 cwy.cpp

📁 c++链表学籍管理系统, 适合作为期末作业哈
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	score *p1,*p2; 
	int number; 
	cout<<"输入要删除的学生的学号(输入0时退出):"; 
	cin>>number; 
	getchar(); 
	while(number!=0)/*输入学号为0时退出*/ 
	{ 
		
		if(head==NULL) 
		{ 
			cout<<"\n没有任何学生资料!\n"; 
			return(head); 
		} 
		p1=head; 
		while(number!=p1->number&&p1->next!=NULL) 
			/*p1指向的不是所要找的首结点,并且后面还有结点*/ 
		{ 
			p2=p1;p1=p1->next; 
		} /*p1后移一个结点*/ 
		if(number==p1->number)  
			/*找到了*/  
		{ 
			if(p1==head) 
				head=p1->next; 
			/*若p1指向的是首结点,把地二个结点地址赋予head*/ 
			else  
				p2->next=p1->next; 
			/*否则将下一个结点地址 赋给前一结点地址*/ 
			cout<<"删除:"<<number<<endl;
			n=n-1; 
		} 
		else 
			cout<<"%d不存在此学生!\n",number; 
		/*找不到该结点*/ 
		cout<<"输入要删除的学生的学号:"; 
		cin>>number; 
		getchar(); 
	} 
	cout<<"现在的学生数为:"<<n<<endl;
	return(head); 
}  
/*==============================================================================================*/ 
/*==============================================================================================*/ 
void printstudent(score *head) 
/*函数printstudent,功能:显示学生成绩*/ 
{ 
	score *p; 
	if(head==NULL)  
	{
		cout<<"\n没有任何学生资料!\n";
	} 
	else 
	{
		cout<<"-----------------------------------------\n"; 
		cout<<"|学号\t|姓名\t|语文\t|英语\t|数学\t|总分\n";
		cout<<"-----------------------------------------\n";/*打印表格域*/ 
		p=head; 
		do 
		{
			cout<<p->number<<"\t"<<p->name<<"\t"<<p->yuwen<<"\t"<<p->yingyu<<"\t"<<p->shuxue<<"\t"<<p->sum<<endl; 
			cout<<"-----------------------------------------\n";/*打印表格域*/ 
			p=p->next;
		}while (p!=NULL);/*打印完成了*/ 
	} 
} 
/*==============================================================================================*/ 
/*==============================================================================================*/ 

/*==============================================================================================*/ 
/*==============================================================================================*/ 
score *sortstudent(score *head)  
/*定义排序函数。此函数带回一个指向链表头的指针*/ 
{ 
	score *p,*max; 
	int i,j,x; 
	float fen; 
	char t[10]; 
	if(head==NULL) 
	{
	cout<<"\n没有任何学生资料,请先建立链表!\n";
	return(head);
	}/*链表为空*/ 
	max=p=head; 
	for(i=0;i<80;i++) 
		cout<<"*"; 
	cout<<"1按学生学号排序\t2按学生姓名排序\t3按语文成绩排序\n"; 
	cout<<"4按英语成绩排序\t5按数学成绩排序\t6按总分查询\n"; 
	for(i=0;i<80;i++) 
		cout<<"*"; 
	cout<<"请选择操作:"; 
	cin>>x;
	getchar(); 
	switch(x)
	{case 1 :  
	for(i=1;i<n;i++) 
	{ 
	for(j=i+1;j<=n;j++) 
	{ 
		max=p; 
		p=p->next; 
		if(max->number>p->number) 
		{ 
			k=max->number; 
			max->number=p->number; 
			p->number=k; 
			/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/ 
			strcpy(t,max->name); 
			strcpy(max->name,p->name); 
			strcpy(p->name,t); 
			/*交换前后结点中的姓名,使之与学号相匹配*/ 
			fen=max->yuwen; 
			max->yuwen=p->yuwen; 
			p->yuwen=fen; 
			/*交换前后结点中的语文成绩,使之与学号相匹配*/ 
			fen=max->yingyu; 
			max->yingyu=p->yingyu; 
			p->yingyu=fen; 
			/*交换前后结点中的英语成绩,使之与学号相匹配*/ 
			fen=max->shuxue; 
			max->shuxue=p->shuxue; 
			p->shuxue=fen; 
			/*交换前后结点中的数学成绩,使之与学号相匹配*/ 
		} 
	} 
	max=head;p=head;/*重新使max,p指向链表头*/ 
} 
printstudent(head);break;/*打印值排序后的链表内容*/ 
case 2 : for(i=1;i<n;i++) 
		 { 
			 for(j=i+1;j<=n;j++) 
			 { 
				 max=p; 
				 p=p->next; 
				 if(strcmp(max->name,p->name)>0)/*strcmp=>字符串比较函数*/ 
				 { 
					 strcpy(t,max->name);/*strcpy=>字符串复制函数*/ 
					 strcpy(max->name,p->name); 
					 strcpy(p->name,t); 
					 /*交换前后结点中的姓名,使得姓名字符串的值大者移到后面的结点中*/  
					 k=max->number; 
					 max->number=p->number; 
					 p->number=k; 
					 /*交换前后结点中的学号值,使之与姓名相匹配*/ 
					 fen=max->yuwen; 
					 max->yuwen=p->yuwen; 
					 p->yuwen=fen; 
					 /*交换前后结点中的语文成绩,使之与姓名相匹配*/ 
					 fen=max->yingyu; 
					 max->yingyu=p->yingyu; 
					 p->yingyu=fen; 
					 /*交换前后结点中的英语成绩,使之与姓名相匹配*/ 
					 fen=max->shuxue; 
					 max->shuxue=p->shuxue; 
					 p->shuxue=fen; 
					 /*交换前后结点中的数学成绩,使之与姓名相匹配*/ 
				 } 
			 } 
			 p=head; 
			 max=head; 
		 } 
	printstudent(head); 
	break; 
case 3 : for(i=1;i<n;i++) 
		 {
			 for(j=i+1;j<=n;j++) 
			 {
				 max=p; 
				 p=p->next; 
				 if(max->yuwen>p->yuwen) 
				 { 
					 fen=max->yuwen; 
					 max->yuwen=p->yuwen; 
					 p->yuwen=fen; 
					 /*交换前后结点中的语文成绩,使得语文成绩高者移到后面的结点中*/ 
					 k=max->number; 
					 max->number=p->number; 
					 p->number=k;  
					 /*交换前后结点中的学号,使之与语文成绩相匹配*/ 
					 strcpy(t,max->name); 
					 strcpy(max->name,p->name); 
					 strcpy(p->name,t); 
					 /*交换前后结点中的姓名,使之与语文成绩相匹配*/ 
					 fen=max->yingyu; 
					 max->yingyu=p->yingyu; 
					 p->yingyu=fen; 
					 /*交换前后结点中的英语成绩,使之与语文成绩相匹配*/ 
					 fen=max->shuxue; 
					 max->shuxue=p->shuxue; 
					 p->shuxue=fen; 
					 /*交换前后结点中的数学成绩,使之与语文成绩相匹配*/ 
				 } 
			 } 
			 p=head; 
			 max=head; 
		 } 
	printstudent(head); 
	break; 
case 4 : for(i=1;i<n;i++) 
		 {
			 for(j=i+1;j<=n;j++) 
			 {
				 max=p; 
				 p=p->next; 
				 if(max->yingyu>p->yingyu) 
				 { 
					 fen=max->yingyu; 
					 max->yingyu=p->yingyu; 
					 p->yingyu=fen; 
					 /*交换前后结点中的英语成绩,使得英语成绩高者移到后面的结点中*/ 
					 k=max->number; 
					 max->number=p->number; 
					 p->number=k; 
					 /*交换前后结点中的学号,使之与英语成绩相匹配*/ 
					 strcpy(t,max->name); 
					 strcpy(max->name,p->name); 
					 strcpy(p->name,t); 
					 /*交换前后结点中的姓名,使之与英语成绩相匹配*/ 
					 fen=max->yuwen; 
					 max->yuwen=p->yuwen; 
					 p->yuwen=fen; 
					 /*交换前后结点中的语文成绩,使之与英语成绩相匹配*/ 
					 fen=max->shuxue; 
					 max->shuxue=p->shuxue; 
					 p->shuxue=fen; 
					 /*交换前后结点中的数学成绩,使之与英语成绩相匹配*/ 
				 } 
			 } 
			 p=head; 
			 max=head; 
		 } 
	printstudent(head); 
	break; 
case 5 : for(i=1;i<n;i++) 
		 {
			 for(j=i+1;j<=n;j++) 
		
			 {
				 max=p; 
				 p=p->next; 
				 if(max->shuxue>p->shuxue) 
				 { 
					 fen=max->shuxue; 
					 max->shuxue=p->shuxue; 
					 p->shuxue=fen;  
					 /*交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中*/ 
					 k=max->number; 
					 max->number=p->number; 
					 p->number=k;  
					 /*交换前后结点中的学号,使之与数学成绩相匹配*/ 
					 strcpy(t,max->name); 
					 strcpy(max->name,p->name); 
					 strcpy(p->name,t);  
					 /*交换前后结点中的姓名,使之与数学成绩相匹配*/ 
					 fen=max->yuwen; 
					 max->yuwen=p->yuwen; 
					 p->yuwen=fen; 
					 /*交换前后结点中的语文成绩,使之与数学成绩相匹配*/ 
					 fen=max->yingyu; 
					 max->yingyu=p->yingyu; 
					 p->yingyu=fen; 
					 /*交换前后结点中的英语成绩,使之与数学成绩相匹配*/ 
				 } 
			 } 
			 p=head; 
			 max=head; 
		 } 
	printstudent(head); 
	break; 
case 6 : for(i=1;i<n;i++) 
		 {
			 for(j=i+1;j<=n;j++) 
		
			 {
				 max=p; 
				 p=p->next; 
				 if(max->sum>p->sum) 
				 { 
					 fen=max->sum; 
					 max->sum=p->sum; 
					 p->shuxue=fen;  
					 /*交换前后结点中的总成绩,使得总成绩高者移到后面的结点中*/ 
					 k=max->number; 
					 max->number=p->number; 
					 p->number=k;  
					 /*交换前后结点中的学号,使之与总成绩相匹配*/ 
					 strcpy(t,max->name); 
					 strcpy(max->name,p->name); 
					 strcpy(p->name,t);  
					 /*交换前后结点中的姓名,使之与总成绩相匹配*/ 
					 fen=max->yuwen; 
					 max->yuwen=p->yuwen; 
					 p->yuwen=fen; 
					 /*交换前后结点中的语文成绩,使之与总成绩相匹配*/ 
					 fen=max->yingyu; 
					 max->yingyu=p->yingyu; 
					 p->yingyu=fen; 
					 /*交换前后结点中的英语成绩,使之与总成绩相匹配*/ 
					 fen=max->shuxue; 
					 max->shuxue=p->shuxue; 
					 p->shuxue=fen; 
					 /*交换前后结点中的英语成绩,使之与总成绩相匹配*/ 
				 } 

			 } 
			 p=head; 
			 max=head; 
		 } 
	printstudent(head); 
	break; 
default :cout<<"输入错误,请重试! \n"; 
} 
 return (0);
} 
 
 /*==============================================================================================*/ 
 /*==============================================================================================*/ 
 int menustudent(int k)/*函数menustudent,功能:菜单选择界面*/ 
 { 
	 cout<<"************************************************"<<endl; 
	 cout<<"1输入学生的资料\t\t\t2查询学生的成绩\n"; 
	 cout<<"3删除学生的资料\t\t\t4删除学生的成绩\n";  
	 cout<<"5显示学生的成绩\t(按学号排序)\t6对成绩进行排序\n"; 
	 cout<<"************************************************"<<endl; 
	 cin>>k;/*选择操作*/ 
	 return (k);
 } 
 
 /*==============================================================================================*/ 
 /*==============================================================================================*/ 
 void main()
 {
	 score *head=0,*stu=0; 
     while(1) 
	 {
		 k=menustudent(k); 
         switch(k)
		 {
		 case 1: head=creatstudent();break;
		 case 2: head=searchstudent(head);break; 
		 case 3: head=delstudent(head); break;
		 case 4: head=addstudent(head,stu);break;
		 case 5: printstudent(head); break; 
		 case 6: sortstudent(head);break;
		 case 0: exit(0);
		 default: cout<<"输入错误,请重试!\n"; 
		 } 
	 } 
 } 

⌨️ 快捷键说明

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