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

📄 cpp1.cpp

📁 用vc编的学生管理系统,可以导入
💻 CPP
📖 第 1 页 / 共 2 页
字号:
       n++; 
    if(head==NULL)
	{
		head=c_new;
		c_new->next=NULL;
		return;
	}
    if(chanumber==head->number)
	{
		c_new->next=head;
		head=c_new;
		return;
	}
	while(c_end->next->next!=NULL&&c_end->next->number!=chanumber)
		c_end=c_end->next;
	c_new->next=c_end->next;
	c_end->next=c_new;
	return;
}

/*修改*/
void xiugai()
{
	int xiunumber, p;
	Student *xiu_end;
	xiu_end=head;
	if(head==NULL)
	{
		printf("学生记录为空!\n\n");
		cout<<"请按回车继续!"<<endl;
    	getchar();
        getchar();
		return;
	}
	    
    printf("请输入要修改的学生记录的学号:");
	scanf("%d",&xiunumber);
	
    while(xiu_end!=NULL)
	{
		if(xiu_end->number==xiunumber)
		{
			cout << "原记录如下:";
			cout << "学号:" << xiu_end->number << endl;
			cout << "姓名:" << xiu_end->name << endl;
			cout << "平时成绩:" << xiu_end->pingshi << endl;
			cout << "期中成绩:" << xiu_end->qizhong << endl;
			cout << "期末成绩:" << xiu_end->qimo << endl;
			cout << "总分:" << xiu_end->zongfen << endl;

			cout <<endl<<endl<<endl;

			printf("修改学号按1\n");
    		printf("修改姓名按2\n");
    		printf("修改平时成绩按3\n");
	    	printf("修改期中成绩按4\n");
	    	printf("修改期末成绩按5\n");
	    	printf("退出按0\n");

			printf("请选择需要修改的信息:");
			scanf("%d",&p);

			switch(p)
			{
			case 0:
				break;
			case 1:
				cout << endl << "请输入新的学号:";
				cin >> xiu_end->number;
				break;
        	case 2:
				cout << endl << "请输入新的姓名:";
				cin >> xiu_end->name;
				break;
			case 3:
				cout << endl <<"请输入新的平时成绩:";
				cin >> xiu_end->pingshi;
				break;
			case 4:
				cout << endl << "请输入新的期中成绩:";
				cin >> xiu_end->qizhong;
				break;
			case 5:
				cout << endl <<"请输入新的期末成绩:";
				cin >> xiu_end->qimo;
				break;
			default:
				cout << endl <<"Sorry,您输入错误,请重新输入";
//				xiugai();
			}
			return;
		}
    xiu_end=xiu_end->next;
	}
	printf("\n要修改的记录不存在!\n");
}

/*计算总分*/
void jifen()
{
	Student *j_end;
	j_end=head;
	if(j_end==NULL)
		return;
	while(j_end!=NULL)
	{
		j_end->zongfen=j_end->pingshi*0.2+j_end->qizhong*0.2+j_end->qimo*0.6;
		j_end=j_end->next;
	}
    return;
}

/*排序*/
Student* paixu(Student *head)
{
	Student *p,*min;
	int i,j,k;
	float fen;
    char t[10];
	if(head==NULL)
	{
		printf("\n没有学生资料,请先建立\n");
		return (head);
	}
    p=min=head;
	printf("按总评分排序如下!\n");


	for(i=1;i<n;i++)
   {
       for(j=i+1;j<=n;j++)
       {
           min=p;
           p=p->next;
           if(min->zongfen<p->zongfen)
		   {
              fen=min->zongfen;
			  min->zongfen=p->zongfen;
			  p->zongfen=fen;
         /*交换前后结点中的总分,使得总分大者移到后面的结点中*/

              k=min->number;
              min->number=p->number;
              p->number=k;
     /*交换前后结点中的学号,使之与总分相匹配*/
        
			 strcpy(t,min->name);
			 strcpy(min->name,p->name);
			 strcpy(p->name,t);
     /*交换前后结点中的姓名,使之与总分相匹配*/
        fen=min->pingshi;
        min->pingshi=p->pingshi;
        p->pingshi=fen;
     /*交换前后结点中的平时成绩,使之与总分相匹配*/
      
        fen=min->qizhong;
        min->qizhong=p->qizhong;
        p->qizhong=fen;
    /*交换前后结点中的期中成绩,使之与总分相匹配*/
       
        fen=min->qimo;
        min->qimo=p->qimo;
        p->qimo=fen;
   /*交换前后结点中的期末成绩,使之与总分相匹配*/
			}

       }
		min=head;
		p=head;/*重新使max,p指向链表头*/
    }
    xianshi(head);
    return (0);/*打印值排序后的链表内容*/
}

void tongji(Student *head)
{
	int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
	Student *p;
	p=new Student;
	p=head;
	getchar();
	while (1)
	{
		if(p->zongfen>=0&&p->zongfen<60)
			sum1++;
		if(p->zongfen>=60&&p->zongfen<=69)
			sum2++;
		if(p->zongfen>=70&&p->zongfen<=79)
			sum3++;
		if(p->zongfen>=80&&p->zongfen<=89)
			sum4++;
		if(p->zongfen>=90&&p->zongfen<=100)
			sum5++;
		p=p->next;
		if (p==NULL)
			break;
		
	}
	printf("\n总分在60以下的人有%d个\n",sum1);
	printf("总分在60-69的人有%d个\n",sum2);
	printf("总分在70-79的人有%d个\n",sum3);
	printf("总分在80-89的人有%d个\n",sum4);
	printf("总分在90-100的人有%d个\n",sum5);

	Student *p_end;
	FILE *fp;
	p_end=head;
	fp=fopen("total.txt","wt+");
	fprintf(fp,"**************************************\n");
	fprintf(fp,"60以下  60-69   70-79   80-89   90-100\n");
	fprintf(fp,"**************************************\n");
	fprintf(fp,"%d\t%d\t%d\t%d\t%d\n",sum1,sum2,sum3,sum4,sum5);
	fclose(fp);
	printf("统计结果已保存到total.txt文件中!\n");
	return ;
}

void pjf(Student *head)
{
	Student *p_end;
	float j1=0,j2=0,j3=0,zong=0;
	int k=0;
	p_end=head;
	if(p_end==NULL)
	{
		printf("无学生记录,请先建立!");
		return;
	}
	
	printf("\n请输入各项加权!\n");
	printf("请输入平时成绩所占的比例:");
    scanf("%f",&j1);
	printf("\n请输入期中成绩所占的比例:");
    scanf("%f",&j2);
	printf("\n请输入期末成绩所占的比例:");
    scanf("%f",&j3);
		
	while(1)
	{
		p_end->zongfen=p_end->pingshi*j1+p_end->qizhong*j2+p_end->qimo*j3;
		zong=zong+p_end->zongfen;
		k++;
		p_end=p_end->next;
		if(p_end==NULL||p_end->number<0)
			break;

	
	}

	Student* x_end;
	x_end=head;
	printf("********************************************************************\n");
    printf("*学号  姓名     平时成绩       期中成绩       期末成绩        总分 *\n");
	printf("********************************************************************\n");
	while(1)
	{
        printf("%d\t%s\t%f\t%f\t%f\t%f",x_end->number,x_end->name,x_end->pingshi,x_end->qizhong,x_end->qimo,x_end->zongfen);
	    printf("\r\n");
		x_end=x_end->next;
		if(x_end==NULL||x_end->number<0)
			break;
	}

	zong=zong/k;
	printf("\n全班平均分为:%f\n",zong);

	
    return;
}


void main()
{
	int q;
	int k=0;
	for (;;)
	{
		printf("----------------------------------\n");
		printf("\t新建记录:       1\n");
		printf("\t从文件调入记录: 2\n");
		printf("\t显示数据:       3\n");
		printf("\t删除记录:       4\n");
		printf("\t查询记录:       5\n");
		printf("\t插入记录:       6\n");
		printf("\t修改记录:       7\n");
		printf("\t计算平均分       8\n");
		printf("\t统计学生成绩:   9\n");
		printf("\t保存输入资料:   10\n");
		printf("\t对成绩进行排序: 11\n");
		printf("\t退出:0\n");
		printf("----------------------------------\n");
		printf("请输入你想进行的操作:");
		scanf("%d", &q);
		switch(q)
		{
		case 0:
			exit(0);
		    break;
		case 1:
		//	system("cls");
			input();
     		jifen();
			printf("\n\n\n");
			break;
		case 2:
			head=loadfile(head);
			printf("\n\n\n");
			break;
		case 3:
			jifen();
			xianshi(head);
			printf("\n\n\n");
			break;
		case 4:
		//	system("cls");
			delet();
			printf("\n\n\n");
			break;
		case 5:
		//	system("cls");
			select(head);
			printf("\n\n\n");
			break;
		case 6:
			charu();
			jifen();
			printf("\n\n\n");
			break;
		case 7:
			xiugai();
			printf("\n\n\n");
			break;
		case 8:
			pjf(head);
			printf("\n\n\n");
			break;
		case 9:
            tongji(head);
			printf("\n\n\n");
			break;
		case 10:
			savefile();
			printf("\n\n\n");
			break;
		case 11:
			paixu(head);
			printf("\n\n\n");
			break;
        default: 
			printf("\n您输入错误,请重新输入\n");
		}
	}
}

⌨️ 快捷键说明

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