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

📄 cwy.cpp

📁 c++链表学籍管理系统, 适合作为期末作业哈
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <iostream.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
struct scorenode 
{
	int number;/*学号*/ 
    char name[10];/*姓名*/ 
    float yuwen;/*语文成绩*/ 
    float yingyu;/*英语成绩*/ 
    float shuxue;/*数学成绩 */ 
	float sum;
    struct scorenode *next; 
}; 
typedef struct scorenode score; 
int n,k;
/*==============================================================================================*/ 
score *creatstudent(void) 
/*函数creatstudent,功能:创建链表,此函数带回一个指向链表头的指针*/ 
{ 
	score*head; 
	score *p1,*p2,*p3,*sum,*max; 
	int i,j; 
	float fen; 
	char t[10]; 
	n=0; 
	p1=p2=p3=sum=new score;head=p3; /*开辟一个新单元*/ 
	cout<<"请输入学生资料,输0退出!\n"; 
repeat1: cout<<("请输入学生学号:");/*输入学号,学号应大于0*/ 
		 cin>>p1->number; 
		 while(p1->number<0) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入学生学号:"; 
			 cin>>p1->number;
		 }  
		 if(p1->number==0) 
			 goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/ 
		 else  
		 {  
			 p3=head; 
			 if(n>0) 
			 {
				 for(i=0;i<n;i++) 
				 {
					 if(p1->number!=p3->number) 
						 p3=p3->next; 
					 else  
					 {
						 cout<<"学号重复,请重输!\n"; 
						 goto repeat1; 
						 /*当输入的学号已经存在,程序报错,返回前面重新输入*/ 
					 } 
				 }  
			 }  
		 } 
		 cout<<"请输入学生姓名:"; 
		 cin>>p1->name;/*输入学生姓名*/ 
		 cout<<"请输入语文成绩:";/*输入语文成绩,成绩应在0-100*/ 
		 cin>>p1->yuwen; 
		 while(p1->yuwen<0||p1->yuwen>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入语文成绩";/*输入错误,重新输入语文成绩直到正确为止*/ 
			 cin>>p1->yuwen;
		 } 
		 cout<<"请输入英语成绩:";/*输入英语成绩,成绩应在0-100*/ 
		 cin>>p1->yingyu; 
		 while(p1->yingyu<0||p1->yingyu>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入英语成绩";/*输入错误,重新输入英语成绩直到正确为止*/ 
			 cin>>p1->yingyu;
		 } 
		 cout<<"请输入数学成绩:";/*输入数学成绩,成绩应在0-100*/ 
		 cin>>p1->shuxue; 
		 while(p1->shuxue<0||p1->shuxue>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入数学成绩"; 
			 cin>>p1->shuxue;
		 }/*输入错误,重新输入数学成绩直到正确为止*/ 
		 head=NULL; 
		 while(p1->number!=0) 
		 { 
			 n=n+1; 
			 if(n==1)  
				 head=p1; 
			 else 
				 
				 p2->next=p1; 
			 p2=p1; 
			 p1=new score; 
			 cout<<"请输入学生资料,输0退出!\n"; 
             repeat2:cout<<"请输入学生学号:"; 
		cin>>p1->number;/*输入学号,学号应大于0*/ 
		while(p1->number<0) 
		{
			getchar(); 
			cout<<"输入错误,请重新输入学生学号:"; 
			cin>>p1->number;
		}  
		/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/ 
		if(p1->number==0) 
			goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/ 
		else 
		{ 
			p3=head; 
			if(n>0) 
			{
				for(i=0;i<n;i++) 
				{
					if(p1->number!=p3->number) 
						p3=p3->next; 
					else  
					{
						cout<<"学号重复,请重输!\n"; 
						goto repeat2; 
			/*当输入的学号已经存在,程序报错,返回前面重新输入*/ 
					} 
				}  
			}  
			
		} 
		cout<<"请输入学生姓名:"; 
		cin>>p1->name;/*输入学生姓名*/ 
		cout<<"请输入语文成绩:"; 
		cin>>p1->yuwen;/*输入语文成绩,成绩应在0-100*/ 
		while(p1->yuwen<0||p1->yuwen>100) 
		{
			getchar(); 
			cout<<"输入错误,请重新输入语文成绩"; 
			cin>>p1->yuwen;
		}/*输入错误,重新输入语文成绩直到正确为止*/ 
		cout<<"请输入英语成绩:"; 
		cin>>p1->yingyu;/*输入英语成绩,成绩应在0-100*/ 
		while(p1->yingyu<0||p1->yingyu>100) 
		{
			getchar(); 
			cout<<"输入错误,请重新输入英语成绩"; 
			cin>>p1->yingyu;
		}/*输入错误,重新输入英语成绩直到正确为止*/ 
		cout<<"请输入数学成绩:"; 
		cin>>p1->shuxue;/*输入数学成绩,成绩应在0-100*/ 
		while(p1->shuxue<0||p1->shuxue>100) 
		{
			getchar(); 
			cout<<"输入错误,请重新输入数学成绩"; 
			cin>>p1->shuxue;
		}/*输入错误,重新输入数学成绩直到正确为止*/ 
		p1->sum =(p1->shuxue)+(p1->yingyu) +(p1->yuwen);
		 } 
end: p1=head; 
	 p3=p1; 
	 for(i=1;i<n;i++) 
	 { 
		 for(j=i+1;j<=n;j++) 
		 { 
			 max=p1; 
			 p1=p1->next; 
			 
			 if(max->number>p1->number) 
			 { 
				 k=max->number; 
				 max->number=p1->number; 
				 p1->number=k; 
				 strcpy(t,max->name); 
				 strcpy(max->name,p1->name); 
				 strcpy(p1->name,t); 
				 fen=max->yuwen; 
				 max->yuwen=p1->yuwen; 
				 p1->yuwen=fen; 
				 fen=max->yingyu; 
				 max->yingyu=p1->yingyu; 
				 p1->yingyu=fen; 
				 fen=max->shuxue; 
				 max->shuxue=p1->shuxue; 
				 p1->shuxue=fen; 
			 } 
		 } 
		 max=head;p1=head;/*重新使max,p指向链表头*/ 
	 }  
	 p2->next=NULL;/*链表结尾*/ 
	 return(head); 
} 
/*==============================================================================================*/ 
/*==============================================================================================*/ 
score *addstudent(score *head,score *stu) 
/*函数addstudent,功能:追加学生资料,并且将所有学生资料按学号排序*/ 
{ 
	score *p0,*p1,*p2,*p3,*max; 
	int i,j; 
	float fen; 
	char t[10]; 
	p3=stu=new score;/*开辟一个新单元*/ 
	cout<<"\n输入要增加的学生的资料!"; 
repeat4: cout<<"请输入学生学号:"; 
		 cin>>stu->number;  
		 
		 while(stu->number<0) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入学生学号:"; 
			 cin>>stu->number;
		 }
		 /******************************************************/ 
		 if(stu->number==0) 
			 goto end2;
		 else  
		 {  
			 p3=head; 
			 if(n>0) 
			 {
				 for(i=0;i<n;i++) 
				 {
					 if(stu->number!=p3->number) 
						 p3=p3->next; 
					 else  
					 {
						 cout<<"学号重复,请重输!\n"; 
			 goto repeat4; 
					 } 
				 }  
			 }  
		 } 
		 
		 /******************************************************/  
		 cout<<"输入学生姓名:"; 
		 cin>>stu->name;
		 cout<<"请输入语文成绩:"; 
		 cin>>stu->yuwen; 
		 while(stu->yuwen<0||stu->yuwen>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入语文成绩"; 
			 cin>>stu->yuwen;
		 } 
		 cout<<"请输入英语成绩:"; 
		 cin>>stu->yingyu;
		 while(stu->yingyu<0||stu->yingyu>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入英语成绩"; 
			 cin>>stu->yingyu;
		 }
		 cout<<"请输入数学成绩:"; 
		 cin>>stu->shuxue;
		 while(stu->shuxue<0||stu->shuxue>100) 
		 {
			 getchar(); 
			 cout<<"输入错误,请重新输入数学成绩"; 
			 cin>>stu->shuxue;
		 }
		 p1=head; 
		 p0=stu; 
		 if(head==NULL) 
		 {
			 head=p0;p0->next=NULL;
		 }
		 else
		 { 
			 if(p1->next==NULL)
			 { 
				 p1->next=p0; 
				 p0->next=NULL;
			 } 
			 else 
			 { 
				 while(p1->next!=NULL)/*还没找到末尾,继续找*/ 
				 { 
					 p2=p1;p1=p1->next; 
				 } 
				 p1->next=p0; 
				 p0->next=NULL; 
			 } 
		 } 
		 n=n+1; 
		 
		 p1=head; 
		 p0=stu; 
		 for(i=1;i<n;i++) 
		 { 
			 for(j=i+1;j<=n;j++) 
			 { 
				 max=p1; 
				 p1=p1->next; 
				 
				 if(max->number>p1->number) 
				 { 
					 k=max->number; 
					 max->number=p1->number; 
					 p1->number=k; 
					 strcpy(t,max->name); 
					 strcpy(max->name,p1->name); 
					 strcpy(p1->name,t); 
					 fen=max->yuwen; 
					 max->yuwen=p1->yuwen; 
					 p1->yuwen=fen; 					 
					 fen=max->yingyu; 
					 max->yingyu=p1->yingyu; 
					 p1->yingyu=fen; 
					 fen=max->shuxue; 
					 max->shuxue=p1->shuxue; 
					 p1->shuxue=fen; 
				 } 
			 } 
			 max=head;p1=head;/*重新使max,p指向链表头*/ 
		 } end2: 
		 return(head); 
} 
/*==============================================================================================*/ 
/*==============================================================================================*/ 
score *searchstudent(score *head) 
/*函数searchstudent,功能:查询学生成绩*/ 
{
	int number; 
	score *p1,*p2; 
	cout<<"输入要查询的学生的学号,"; 
	cin>>number; 
	while(number!=0) 
	{ 
		if(head==NULL) 
		{
			cout<<"\n没有任何学生资料!\n";return(head);
		} 
		cout<<"-----------------------------------------\n"; 
		cout<<"|学号\t|姓名\t|语文\t|英语\t|数学\t|总分\n"; 
		cout<<"-----------------------------------------\n";/*打印表格域*/ 
		p1=head; 
		while(number!=p1->number&&p1->next!=NULL) 
		{
			p2=p1;p1=p1->next;
		}  
		if(number==p1->number)  
		{
			cout<<p1->number<<"\t"<<p1->name<<"\t"<<p1->yuwen<<"\t"<<p1->yingyu<<"\t"<<p1->shuxue<<"\t"<<p1->sum<<endl; 
			cout<<"-----------------------------------------\n";
		}/*打印表格域*/ 
		else  
			cout<<number<<"%d不存在此学生!"<<endl; 
		cout<<"输入要查询的学生的学号,"; 
		cin>>number; 
	} 
	cout<<"已经退出了!\n"; 
	return(head);
} 
/*==============================================================================================*/ 
/*==============================================================================================*/ 
score *delstudent(score *head)/*函数delstudent,功能:删除学生资料*/ 
{ 

⌨️ 快捷键说明

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