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

📄 mis_sms(finish).c

📁 学生信息管理系统 代码量在3000左右。原创作品。(内附程序流程图)
💻 C
📖 第 1 页 / 共 5 页
字号:
					break;
				}
			}
	}
			ClearDisplay(1,1);
			
		
			GoToXY(26,10);
			
				if(head==NULL || subgrade==1)	
				{
					if(var==1)
						printf(" Record sort fail !!!     ");
					else
						printf("Statistic grade fail !!!");
				}
				else
				{
					if(var==1)
					printf("  Record sort successful!!");
					else
						printf(" Statistic grade successful !!!");
				}												
			GoToXY(24,12);
			printf("    [1]. Show result!");
			GoToXY(24,13);
			printf("    [0]. Back to Menu");
			GoToXY(24,15);
			printf("please make a choise[0-1]");
			WhereXY(&s_x,&s_y);
			while(1)
				{	
					GoToXY(s_x,s_y);
					key=GetchKey();
					if (key == _1 || key == _0 || key == _ESC)
						break;
					else
					{
						PrintAlert(1);
						continue;
					}
				
				}
			if(key==_1)
			{
				if(subgrade==1 && key != _ESC)
				{
					PrintInfo(0);
					PrintTopBorder();
					return 0;
				}
				PrintInfo(sign);			
				statflag=0;
				PrintTopBorder();
				return 0;
			}
			else
			return 0;
}

/*
*************************************************************
* 函数描述:学生信息打印函数
* 输入参数:sign 显示分隔符的位置
* 返回值  :无
*************************************************************
*/

int PrintInfo(int sign)
{
	int pflag,k=0,count_i,i,j,key,count=0,page,y,r,xx,yy,tail_x,tail_y,flag=0,row=0,p_x,p_y;
	char **txt,pagecode[20];
	char str_avg[5],str_total[5],str_age[3];
	int exitflag,datacheck,k_x,k_y,data,t_x,t_y;
	Stu_Lnode *q,**pagecount,*printhead,*printtail;	
	ClearDisplay(1,1);	
	if (searchflag == 1 || statflag == 1)
	{
		printhead=temphead;
		printtail=temptail;
	}
	else
	{
		printhead=head;
		printtail=tail;
	}
	
	PrintRecordFrame(sign);
	if (printhead == NULL)
	{
		GoToXY(1,19);
		printf("not record,press any key to back");
		GetchKey();
		Clear(1,19);
		return -1;
	}
	q=printhead;		// q 指向第一个数据
	while(q!=printtail)
	{
		count++;	    //count 所有记录数 
		q=q->next;			
	}	
	txt=(char *)malloc(count*sizeof(char));
	page=(count-1)/10+1; 
	pagecount = (Stu_Lnode *)malloc(page*sizeof(Stu_Lnode));
	q=printhead->next;	
	for (i=0,j=0;i<count;i++)
	{
		if (i%10==0)
		{
			pagecount[j] = q;
			j++;
		}
		q=q->next;
		
	}
	q = pagecount[0];
	i=0;
//--------------------------------------
	StructSort(3);
//--------------------------------------
	while(1)
	{		
		ClearPrintDisplay();
		
		count=0;
		y=3;		
		yy=3;
		exitflag=0;
		while(count<10)
		{
			GoToXY(0,y);
			CalculateTotal(q,str_total);
			CalculateAvg(q,str_avg);
			
			PrintStudentRecord(q,str_total,str_avg,sign);
			tail_y=0;
			if (q==printtail)
			{
				WhereXY(&tail_x,&tail_y);
				break;
			}
			
			q=q->next;
			count++;
			y++;			
		}	
		q=pagecount[i];
		r = 0;
		while (r!=row)
		{
			q=q->next;
			r++;
		}
		GoToXY(1,14);
		printf("%d/%d",i+1,page);
		GoToXY(1,15);
		printf("Press [up]/[down]/[pageup]/[pagedown]/[enter]/[delete] operate");
		GoToXY(1,16);
		printf("Press [ESC] to back");
		GoToXY(1,row+3);
		printf("[");
		GoToXY(78,row+3);
		printf("]");
		q=pagecount[i];
		r = 0;				 // 计数器
		while (r!=row)		 //q 指向选中的元素	
		{
			q=q->next;
			r++;
		}	
		while(1)
		{
			WhereXY(&xx,&yy);
			key = GetchKey();
			if(key==_END)
			{
				i=page-1;
				q=pagecount[i];
				row=0;
				break;
			}			
			if(key==_HOME)
			{
				i=0;
				q=pagecount[0];
				row=0;
				break;
			}
			if(key==_INSERT && page>1)
			{
				Clear(1,15);
				Clear(1,16);
				
				GoToXY(1,15);
				printf("Change page---Please input a page_code:[");
				WhereXY(&p_x,&p_y);
				while(1)
				{					
					GoToXY(p_x,p_y);
					printf("%*s]",page/10+1," ");
					GoToXY(p_x,p_y);
					while(1)
					{
						datacheck=InputDataCheck(pagecode,page/10+1,p_x,p_y);
						if(datacheck==1)
							break;
						GoToXY(p_x,p_y);
					}
					i=atoi(pagecode)-1;
					if (i>page-1)
					{
						GoToXY(1,19);
						printf("Error,Please input a page_code between [1-%d]",page);
						GetchKey();
						Clear(1,19);
						continue;
					}
					break;
				}
				row=0;
				q=pagecount[i];
				break;
			}
			//------------------------------------------------------------
#ifdef DEBUG
			if (key == _DELETE)
			{																		
				Clear(1,15);
				Clear(1,16);
				GoToXY(10,15);
				printf("Delete Confirm:");
				GoToXY(28,15);
				printf(" Press [ENTER] to continue");
				GoToXY(28,16);
				printf(" Press [ESC] to back");
				while(1)
				{
					key=GetchKey();

					if (key == _ENTER || key == _ESC)
						break;
					else
					{
						PrintAlert(10);
						continue;
					}
				}
				Clear(1,15);
				Clear(1,16);
				if (key == _ESC)
				{
					r = 0;
					q=pagecount[i];
					while (r!=row)
					{
						q=q->next;
						r++;
					}	
					GoToXY(xx,yy);
					continue;
				}
				if (key == _ENTER)
				{
					q = pagecount[i];
					r = 0;
					while (r!=row)
					{
						q=q->next;
						r++;
					}
					
					strcpy(&txt[k],q->data.sno);
					k++;
					if (q==printtail)
					{
						if (printtail==pagecount[i])
						{
							if (printtail==printhead->next)
							{
								if (searchflag == 1)
								{
									temphead=NULL;

								}
								else
								{
									head=NULL;
									return 0;
								}
		//------------------------------------------------------
								q=head->next;
								while(q)
								{
									for (j=0;j<k;j++)
									{
										if (strcmp(q->data.sno,&txt[j])==0)
										{
											if (q==tail)
											{
												tail=tail->pre;							
											}
											else
											{
												q->pre->next=q->next;
												q->next->pre=q->pre;
											}							
										}	
									}
									q=q->next;
								}
								return 0;
		//------------------------------------------------------								
							}
							else
							{
								i--;
								page--;
								row=0;
								printtail=printtail->pre;
							}
						}						
						else
						{
							printtail=printtail->pre;
							row--;						
						}
					}				
					else
					{						
						q->pre->next=q->next;
						q->next->pre=q->pre;

					}
					q=printhead;
					count=0;
					while(q!=printtail)
					{
						count++;	
						q=q->next;			
					}
					q=printhead->next;
					
					for (count_i=0,j=0;count_i<count;count_i++)
					{
						if (count_i%10==0)
						{
							pagecount[j] = q;
							j++;
							page=j;

						}
						q=q->next;						
					}
					q=pagecount[i];
					savedatalabel = 1;
					filedatachange=1;
					break;
				}
				
			}
#endif
			//------------------------------------------------------------
			if (key == _PAGEDOWN && i==page-1)
			{
				GoToXY(1,19);
				printf("Alert ,This is last page");
				Sleep(500);
				Clear(1,19);
				GoToXY(xx,yy);
				continue;
			}
			if (key == _PAGEUP && i==0)
			{
				GoToXY(1,19);
				printf("Alert ,This is first page");
				Sleep(500);
				Clear(1,19);
				GoToXY(xx,yy);
				continue;
			}
			if (key == _PAGEDOWN && i<page-1)
			{
				q = pagecount[++i];
				row=0;
				flag=0;
				break;
			}
			if (key == _PAGEUP && i>0)
			{
				q = pagecount[--i];
				row=0;
				break;
			}
			
			if (key == KEY_UP && yy!=3)
			{
				row--;
				PrintSign("up",yy);
				WhereXY(&xx,&yy);
				continue;
			}
			
			if (key == KEY_UP && yy==3 && i>0)
			{
				row=9;
				q = pagecount[--i];
				flag=1;
				break;
			}
			
			if (key == KEY_DOWN )    
			{
				if (yy==tail_y-1 && i==page-1 )
				{
					GoToXY(1,19);
					printf("Alert ,This is last record");
					Sleep(500);
					Clear(1,19);
					GoToXY(xx,yy);
					continue;
				}
				if (yy!=12 && yy!=tail_y-1)
				{
					row++;
					PrintSign("down",yy);
					WhereXY(&xx,&yy);
					continue;
				}
				
				
			}
			if (key == KEY_UP && yy==3 && i==0)
			{
				GoToXY(1,19);
				printf("Alert ,This is first record");
				Sleep(500);
				Clear(1,19);
				GoToXY(xx,yy);
				continue;
			}
			
			
			if (key == KEY_DOWN && yy==12 && i<page-1)
			{
				q = pagecount[++i];
				row=0;
				flag=0;
				break;
			}
//-----------------------------------------------------			
			if (key == _ENTER)
			{
				data=0;
				q = pagecount[i];
				r = 0;
				while (r!=row)
				{
					q=q->next;
					r++;
				}																
				ClearPrintDisplayAll();
				PrintSubjectMenu(q->data.sno);
				GoToXY(48,6);
				printf("Total Score:");
				WhereXY(&p_x,&p_y);
				GoToXY(48,9);
				printf("  Avg Score:");
				
				while(1)
				{
					for (k=0;k<7;k++)
					{
						GoToXY(30,4+k);
						printf("              ");					
					}
					GoToXY(40,4);
					printf("               ");
					GoToXY(p_x,p_y);
					printf("     ");
					GoToXY(p_x,p_y+3);
					printf("     ");
					GoToXY(30,3);
					printf("%s",q->data.sno);
					GoToXY(30,4);
					printf("%s",q->data.sname);
					GoToXY(30,5);
					printf("%d",q->data.sage);
					GoToXY(30,6);
					printf("%s",q->data.schi);
					GoToXY(30,7);
					printf("%s",q->data.seng);
					GoToXY(30,8);
					printf("%s",q->data.smath);
					GoToXY(30,9);
					printf("%s",q->data.spho);
					GoToXY(30,10);
					printf("%s",q->data.sche);
					GoToXY(p_x,p_y);
					CalculateTotal(q,str_total);
					printf("%s",str_total);
					GoToXY(p_x,p_y+3);
					CalculateAvg(q,str_avg);
					printf("%s",str_avg);
					GoToXY(1,14);
					printf("Press  [up]  / [down]   to move \"->\" and Press [ENTER] to insert data");   
					GoToXY(1,15);
					printf("Press  [pageup]/ [pagedown] to next page");
					GoToXY(1,16);
					printf("Press  [ESC] to Back");	
					WhereXY(&t_x,&t_y);
					GoToXY(13,4);
					printf("->");
					WhereXY(&k_x,&k_y);
					GoToXY(t_x,t_y);
					while(1)
					{	
						key = GetchKey();	
						if(key==_ENTER)
						{
							switch(data)
							{
							case 0:
								do{
								pflag=InputName(q->data.sname);
								}while(pflag==-1);
								break;
							case 1:
								do{
								pflag=InputAge(str_age);
								}while(pflag==-1);
								q->data.sage= atoi(str_age);
								break;
							case 2:
								do{
								pflag=InputGrade(q->data.schi,  "chinese","",6);
								}while(pflag==-1);
								break;
							case 3:
								do{
								pflag=InputGrade(q->data.seng,  "english","",7);
								}while(pflag==-1);
								break;
							case 4:
								do{
								pflag=InputGrade(q->data.smath,"mathematics","",8);
								}while(pflag==-1);
								break;
							case 5:
								do{
								pflag=InputGrade(q->data.spho,  "Phogric","",9);
								}while(pflag==-1);
								break;
							case 6:
								do{
								pflag=InputGrade(q->data.sche,  "Chemical","",10);
								}while(pflag==-1);
								break;
							}
							CalculateTotal(q,str_total);
							CalculateAvg(q,str_avg);
							GoToXY(1,19);
							printf("Data change successful !!!          ");
								GoToXY(p_x,p_y);
								printf("     ");
								GoToXY(p_x,p_y);
								printf("%s",str_total);
								GoToXY(p_x,p_y+3);
								printf("     ");
								GoToXY(p_x,p_y+3);
								printf("%s",str_avg);
								

							Sleep(500);
							Clear(1,19);
						filedatachange=1;
								GoToXY(k_x-1,k_y);

							continue;
						}
						if(key==KEY_DOWN)
						{
							if(data<6)
							{
								GoToXY(13,k_y);
								printf("  ");
								k_y++;
								GoToXY(13,k_y);
								printf("->");
									GoToXY(k_x-1,k_y);
								data++;
								continue;
							}
							else
							{
								
								GoToXY(13,k_y);
								printf("  ");
								k_y=4;
								GoToXY(13,k_y);
								printf("->");
									GoToXY(k_x-1,k_y);
								data=0;
								
								continue;
							}
							
						}										
						if(key == KEY_UP )
						{
							if(data>0)
							{
								GoToXY(13,k_y);
								printf("  ");
								k_y--;
								GoToXY(13,k_y);
								printf("->");
									GoToXY(k_x-1,k_y);
								data--;
								
								continue;
							}
							else
							{
								GoToXY(13,k_y);
								printf("  ");
								k_y=10;
								GoToXY(13,k_y);
								printf("->");
									GoToXY(k_x-1,k_y);								
								data=6;									
								continue;
							}

⌨️ 快捷键说明

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