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

📄 fina.cpp

📁 本作品为一简单的数据库引擎,用于简单的学生成绩管理,包括班级课程设置、学分设置、学生成绩入录、总成绩计算和综合测评成绩.可以实时添加删除班级、删除添加同学,也可实时更改信息,自动保存和刷新.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			(HMENU)NULL,
			hInst,
			NULL);

		hgSubjectScoreWnd[i]=CreateWindowEx(0L,
			"edit",
			"0",
			WS_VISIBLE|WS_CHILD|ES_LEFT,
			250,35+(i+1)*25,30,15,
			hParentWnd,
			(HMENU)NULL,
			hInst,
			NULL);
	}

	return 1;
}

BOOL CALLBACK SaveData(HTREEITEM hParentItem,HTREEITEM hChildItem)
{
	char cClassNameSaving[21];
	char cSubjectNameSaving[6][21];
	char cSubjectScoreSaving[6][3];
	float fSubjectScoreSaving[6];

	char cStudentNameSaving[11];
	char cStudentScoreSaving[6][5];
	char cStudentNumSaving[10];
	float fStudentScoreSaving[6];

	BOOL bIsFaceAddItem=0;
	int i,j,k;
	char str[21];

//the prev item not exist!
	if(hParentItem==hRootItem)
	{
		Edit_GetText(hgClassNameWnd,cClassNameSaving,21);
		for(i=0;i<6;i++)
		{
			Edit_GetText(hgSubjectNameWnd[i],cSubjectNameSaving[i],21);
			Edit_GetText(hgSubjectScoreWnd[i],cSubjectScoreSaving[i],3);
		}
		
		for(i=0;i<6;i++)
		{
			fSubjectScoreSaving[i]=String2Float(cSubjectScoreSaving[i]);
/*?????*/	wsprintf(str,"%d",(int)fSubjectScoreSaving[i]);/*???????????????*/
		}
		
/*hClassAddItem*/
		if((lstrcmp(cClassNameSaving,"ClassNameWnd")!=0)&&hChildItem==hClassAddItem)
		{
        	hDataFile=_lopen("fina.hui",OF_WRITE);
        	if(hDataFile==HFILE_ERROR)
	        	return 0;

			lstrcpy(classroom[iClassNumber].cClassName,cClassNameSaving);
	    	for(i=0;i<6;i++)
	    	{
		    	lstrcpy(classroom[iClassNumber].classsubject[i].cSubjectName,cSubjectNameSaving[i]);
    			classroom[iClassNumber].classsubject[i].fSubjectScore=fSubjectScoreSaving[i];
	    	}
    		if(_llseek(hDataFile,iClassNumber*sizeof(struct classinfo),0)==HFILE_ERROR)
	    	{
		    	MessageBox(NULL,"Error Seek","Information",MB_OK);
    		}

	    	if(_lwrite(hDataFile,(LPSTR)&classroom[iClassNumber],sizeof(struct classinfo))==HFILE_ERROR)
	    	{
		    	MessageBox(NULL,"Error Write","Information",MB_OK);
    		}
			iClassNumber++;

			_lclose(hDataFile);

			ReflashTreeWnd();//fine
		}
    	else if(hChildItem!=hClassAddItem)//class
		{
        	hDataFile=_lopen("fina.hui",OF_WRITE);
        	if(hDataFile==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Open Fina.hui","Warning...",MB_OK);
	        	return 0;
			}

			i=GetClassItemNum(hChildItem);

			lstrcpy(classroom[i].cClassName,cClassNameSaving);
	    	for(j=0;j<6;j++)
	    	{
		    	lstrcpy(classroom[i].classsubject[j].cSubjectName,cSubjectNameSaving[j]);
    			classroom[i].classsubject[j].fSubjectScore=fSubjectScoreSaving[j];
	    	}
    		if(_llseek(hDataFile,i*sizeof(struct classinfo),0)==HFILE_ERROR)
	    	{
		    	MessageBox(hwnd,"Error Seek Changing Class","Warning...",MB_OK);
    		}

	    	if(_lwrite(hDataFile,(LPSTR)&classroom[i],sizeof(struct classinfo))==HFILE_ERROR)
	    	{
		    	MessageBox(NULL,"Error Write","Warning...",MB_OK);
    		}

			if(_lclose(hDataFile)==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Close Fina.hui","Warning...",MB_OK);
			}

//			ReflashTreeWnd();
		}
	}
	else//student
	{
		for(i=0;i<20;i++)
		{
			if(hChildItem==hFaceAddItem[i])
			{
				bIsFaceAddItem=1;
				break;
			}
		}

		Edit_GetText(hgStudentNameWnd,cStudentNameSaving,11);
		Edit_GetText(hgStudentNumWnd,cStudentNumSaving,10);
		for(i=0;i<6;i++)
		{
			Edit_GetText(hgStudentScoreWnd[i],cStudentScoreSaving[i],5);
		}

		for(i=0;i<6;i++)
		{
			fStudentScoreSaving[i]=String2Float(cStudentScoreSaving[i]);
/*?????*/	wsprintf(str,"%d",(int)fStudentScoreSaving[i]);/*???????????????*/
    	}
//deal with adding student
		if((lstrcmp(cStudentNameSaving,"姓 名")!=0)&&bIsFaceAddItem)
		{
			hDataFile=_lopen("fina.hui",OF_WRITE);
			if(hDataFile==HFILE_ERROR)
				return 0;

			i=GetClassItemNum(hParentItem);
			j=iStudentNumber[i];//total amount of student in one class
			iStudentNumber[i]++;

			lstrcpy(classroom[i].student[j].cStudentName,cStudentNameSaving);
			for(k=0;k<6;k++)
			{
				classroom[i].student[j].fScore[k]=fStudentScoreSaving[k];
    		}
			lstrcpy(classroom[i].student[j].cStudentNum,cStudentNumSaving);
//			if(_llseek(hDataFile,i*sizeof(struct classinfo)+6*sizeof(struct subjectinfo)+sizeof(str)+j*sizeof(struct studentinfo)+3,0)==HFILE_ERROR)
			if(_llseek(hDataFile,i*sizeof(struct classinfo),0)==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Seek","Student Add",MB_OK);
			}

			if(_lwrite(hDataFile,(LPSTR)&classroom[i],sizeof(struct classinfo))==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Write Student Info","Warning...",MB_OK);
			}

			if(_lclose(hDataFile)==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Close File Adding Student","Warning...",MB_OK);
			}
			bIsFaceAddItem=0;

			hFaceOnItem[i][j]=AddOneItem(hTree,hClassItem[i],TVI_FIRST,classroom[i].student[j].cStudentName,idFaceOn);

/*			struct classinfo a;
			hDataFile=_lopen("fina.hui",OF_READ);
			_llseek(hDataFile,i*sizeof(struct classinfo),0);
			_lread(hDataFile,&a,sizeof(struct classinfo));
			MessageBox(NULL,a.cClassName,"file",MB_OK);
			MessageBox(NULL,a.student[j-1].cStudentName,"file",MB_OK);
			MessageBox(NULL,a.student[j].cStudentName,"file",MB_OK);
			_lclose(hDataFile);
*/
//			ReflashTreeWnd();
		}
		
		else if(lstrcmp(cStudentNameSaving,"姓 名")!=0)//deal with changing of the content of any student item
		{
			hDataFile=_lopen("Fina.hui",OF_WRITE);
			if(hDataFile==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Open Fina.hui","Warning...",MB_OK);
				return 0;
			}

			i=GetClassItemNum(hParentItem);
			j=GetStudentItemNum(i,hChildItem);

			lstrcpy(classroom[i].student[j].cStudentName,cStudentNameSaving);
			lstrcpy(classroom[i].student[j].cStudentNum,cStudentNumSaving);
			for(k=0;k<6;k++)
			{
				classroom[i].student[j].fScore[k]=fStudentScoreSaving[k];
			}

//			if(_llseek(hDataFile,i*sizeof(struct classinfo)+6*sizeof(struct subjectinfo)+sizeof(str)+j*sizeof(struct studentinfo)+3,0)==HFILE_ERROR)
			if(_llseek(hDataFile,i*sizeof(struct classinfo),0)==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Seek Changing Student","Warning...",MB_OK);
			}

			if(_lwrite(hDataFile,(LPSTR)&classroom[i],sizeof(struct classinfo))==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Write Student Info","Warning...",MB_OK);
				return 0;
			}

			if(_lclose(hDataFile)==HFILE_ERROR)
			{
				MessageBox(hwnd,"Error Close File Changing Info Of Student","Warning...",MB_OK);
				return 0;
			}

		}
		else
		{
		}

	}

	return 1;
}

void SetClassInfoWndContent(int iClassItemNum)
{
	int k;

	SetWindowText(hgClassNameWnd,classroom[iClassItemNum].cClassName);
	for(k=0;k<6;k++)
	{
		SetWindowText(hgSubjectNameWnd[k],classroom[iClassItemNum].classsubject[k].cSubjectName);
		wsprintf(cTmpBuff,"%d",(int)classroom[iClassItemNum].classsubject[k].fSubjectScore);
		SetWindowText(hgSubjectScoreWnd[k],cTmpBuff);
	}
}

void SetStudentInfoWndContent(int iClassItemNum,int iStudentItemNum)//parameters are array pos
{
	int k;
	float fTotalScoreInfoValue;
	float fFinaScoreInfoValue;
	float fScoreInfoValue;
	float fTotalSubjectScoreInfoValue;
	char str[21];

	SetWindowText(hgStudentNameWnd,classroom[iClassItemNum].student[iStudentItemNum].cStudentName);
	SetWindowText(hgStudentNumWnd,classroom[iClassItemNum].student[iStudentItemNum].cStudentNum);
	for(k=0;k<6;k++)
	{
		SetWindowText(hgStudentSubjectWnd[k],classroom[iClassItemNum].classsubject[k].cSubjectName);
		wsprintf(cTmpBuff,"%d",(int)classroom[iClassItemNum].student[iStudentItemNum].fScore[k]);
		SetWindowText(hgStudentScoreWnd[k],cTmpBuff);
		fTotalScoreInfoValue=fTotalScoreInfoValue+classroom[iClassItemNum].student[iStudentItemNum].fScore[k];
		fScoreInfoValue=fScoreInfoValue+classroom[iClassItemNum].student[iStudentItemNum].fScore[k]*classroom[iClassItemNum].classsubject[k].fSubjectScore;
	}

	for(k=0;k<6;k++)
	{
		fTotalSubjectScoreInfoValue=fTotalSubjectScoreInfoValue+classroom[iClassItemNum].classsubject[k].fSubjectScore;
	}
	fFinaScoreInfoValue=fScoreInfoValue/fTotalSubjectScoreInfoValue;
	wsprintf(str,"%d",(int)fTotalScoreInfoValue);
	SetWindowText(hgStudentTotalScoreWnd,str);
	wsprintf(str,"%d",(int)fFinaScoreInfoValue);
	SetWindowText(hgStudentFinaScoreWnd,str);
}

int GetClassItemNum(HTREEITEM hChildItem)
{
	int i;
	for(i=0;i<20;i++)
	{
		if(hChildItem==hClassItem[i])
		{
			break;
		}
	}

	return i;//arrary pos
}

int GetStudentItemNum(int iParentNum,HTREEITEM hChildItem)
{
	int i;

	for(i=0;i<50;i++)
	{
		if(hChildItem==hFaceOnItem[iParentNum][i])
		{
			break;
		}
	}

	return i;//arrary pos
}

float String2Float(char cString[21])
{
	char cDot='.';
	BOOL bIsDot=0;
	int iTmpNum=1;
	float fResult;

	for(iTmpCount=0;iTmpCount<21;iTmpCount++)
	{
		if(cString[iTmpCount]=='\0')
			break;
	}
	
	for(iTmpCount1=0;iTmpCount1<iTmpCount-1;iTmpCount1++)
	{
		if(cString[iTmpCount1]==cDot)
		{
			bIsDot=1;
			break;
		}
	}

	if(!bIsDot)
		iTmpCount1++;

	for(iTmpCount2=0;iTmpCount2<iTmpCount1;iTmpCount2++)
	{
		for(iTmpCount3=0;iTmpCount3<iTmpCount1-iTmpCount2-1;iTmpCount3++)
		{
			iTmpNum=iTmpNum*10;
		}
		fResult=fResult+(cString[iTmpCount2]-'0')*iTmpNum;
		iTmpNum=1;

	}

	if(!bIsDot)
	{
		for(iTmpCount2=0;iTmpCount2<iTmpCount-iTmpCount1-1;iTmpCount2++)
		{
			for(iTmpCount3=0;iTmpCount3<iTmpCount2+1;iTmpCount3++)
			{
				iTmpNum=iTmpNum*10;
			}
			fResult=fResult+(cString[iTmpCount1+iTmpCount2]-'0')/iTmpNum;
			iTmpNum=1;
		}
	}

	bIsDot=0;
	
	return fResult;
}

BOOL ReflashTreeWnd()
{
	int i,j;

	iClassNumber=0;

	for(i=0;i<20;i++)
	{
		iStudentNumber[i]=0;
		hFaceAddItem[i]=NULL;
	}

	hDataFile=_lopen("fina.hui",OF_READ);
	if(hDataFile==HFILE_ERROR)
	{
		MessageBox(hwnd,"Error Reading Fina.hui","Warning...",MB_OK);
		return 0;
	}

	if(_llseek(hDataFile,0,0)==HFILE_ERROR)
	{
		MessageBox(hwnd,"Error Seek Reading Fina.hui","Warning...",MB_OK);
		return 0;
	}

	for(i=0;i<20;i++)
	{
		if(hClassItem[i]!=0)
		{
			DelOneItem(hTree,hClassItem[i]);
		}
	}

	for(i=0;i<20;i++)
	{
		_lread(hDataFile,&classroom[i],sizeof(struct classinfo));
		if(lstrcmp(classroom[i].cClassName,"")==0||lstrcmp(classroom[i].cClassName,"班 名")==0)
			break;
		iClassNumber++;
		lstrcpy(cTmpBuff,classroom[i].cClassName);
		hClassItem[i]=AddOneItem(hTree,hRootItem,TVI_FIRST,cTmpBuff,idClass);
		for(j=0;j<50;j++)
		{
			if(lstrcmp(classroom[i].student[j].cStudentName,"")==0||lstrcmp(classroom[i].student[j].cStudentName,"姓 名")==0)
				break;
			iStudentNumber[i]++;
			lstrcpy(cTmpBuff,classroom[i].student[j].cStudentName);
			hFaceOnItem[i][j]=AddOneItem(hTree,hClassItem[i],TVI_FIRST,cTmpBuff,idFaceOn);
		}
		LoadString(hInst,IDS_FACEADD,cTmpBuff,sizeof(cTmpBuff));
		hFaceAddItem[i]=AddOneItem(hTree,hClassItem[i],TVI_LAST,cTmpBuff,idFaceAdd);
	}

	_lclose(hDataFile);

	return 1;
}


BOOL CALLBACK CreateStudentInfoWnd(HWND hParentWnd,HDC hParentDC)
{
	int i;

	SetBkMode(hParentDC,TRANSPARENT);
	SetTextColor(hParentDC,RGB(0,0,0));
	
	TextOut(hParentDC,3,5,"学生姓名",lstrlen("学生姓名"));
	hgStudentNameWnd=CreateWindowEx(0L,
		"edit",
		"姓 名",
		WS_CHILD|WS_VISIBLE|ES_LEFT,
		73,5,90,15,
		hParentWnd,
		(HMENU)NULL,
		hInst,
		NULL);

	TextOut(hParentDC,170,5,"学号",lstrlen("学号"));
	hgStudentNumWnd=CreateWindowEx(0L,
		"edit",
		"学 号",
		WS_VISIBLE|WS_CHILD|ES_LEFT,
		205,5,80,15,
		hParentWnd,
		(HMENU)NULL,
		hInst,
		NULL);

	TextOut(hParentDC,65,35,"学科名称",lstrlen("学科名称"));
	TextOut(hParentDC,230,35,"成绩",lstrlen("成绩"));
	for(i=0;i<6;i++)
	{
		hgStudentSubjectWnd[i]=CreateWindowEx(0L,
			"edit",
			"课 程",
			WS_VISIBLE|WS_CHILD|ES_RIGHT|ES_READONLY,
			15,35+(i+1)*25,170,15,
			hParentWnd,
			(HMENU)NULL,
			hInst,
			NULL);
		hgStudentScoreWnd[i]=CreateWindowEx(0L,
			"edit",
			"0",
			WS_CHILD|WS_VISIBLE|ES_CENTER,
			225,35+(i+1)*25,40,15,
			hParentWnd,
			(HMENU)NULL,
			hInst,
			NULL);
	}

	TextOut(hParentDC,15,210,"总分",lstrlen("总分"));
	hgStudentTotalScoreWnd=CreateWindowEx(0L,
		"edit",
		"0",
		WS_VISIBLE|WS_CHILD|ES_CENTER|ES_READONLY,
		55,210,50,15,
		hParentWnd,
		(HMENU)NULL,
		hInst,
		NULL);

	TextOut(hParentDC,120,210,"综合测评成绩",lstrlen("综合测评成绩"));
	hgStudentFinaScoreWnd=CreateWindowEx(0L,
		"edit",
		"0",
		WS_VISIBLE|WS_CHILD|ES_CENTER|ES_READONLY,
		225,210,40,15,
		hParentWnd,
		(HMENU)NULL,
		hInst,
		NULL);

	return 1;
}

⌨️ 快捷键说明

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