📄 studinfomanager.cpp
字号:
char pSex[2]; //性别
char pCourse1[10]; //课程名
UINT uiMark1; //成绩
char pTeacher1[10];//教师
char pCourse2[10]; //课程名
UINT uiMark2; //成绩
char pTeacher2[10];//教师
fp=fopen(pFile,"r");
if(fp==NULL)
return false;
//学号全清零,以便哈希查找
for(i=0;i<10;i++)
pStudInfo[i].uiStudNum=0;
for(i=0;i<10;i++)
{
fscanf(fp,"%9d%11s%3d%2s%11s%4d%11s%11s%4d%6s",&uiStudNum,pName,&uiAge,pSex,pCourse1,&uiMark1,pTeacher1,pCourse2,&uiMark2,pTeacher2);
uiHashAddr=HashSelect(uiStudNum);
pCourseInfo=(COURSEINFO*)malloc(sizeof(COURSEINFO));
pNext=(COURSEINFO*)malloc(sizeof(COURSEINFO));
pCourseInfo->pNext=pNext;
strcpy(pStudInfo[uiHashAddr].pName,pName);
pStudInfo[uiHashAddr].uiStudNum=uiStudNum;
pStudInfo[uiHashAddr].uiAge=uiAge;
strcpy(pStudInfo[uiHashAddr].pSex,pSex);
strcpy(pCourseInfo->pCourse,pCourse1);
strcpy(pCourseInfo->pTeacher,pTeacher1);
pCourseInfo->uiMark=uiMark1;
strcpy(pNext->pCourse,pCourse2);
strcpy(pNext->pTeacher,pTeacher2);
pNext->uiMark=uiMark2;
pStudInfo[uiHashAddr].pCourseInfo=pCourseInfo;
}
fclose(fp);
return true;
}
void PrintStudInfo(STUDINFO studInfo,UINT uiSpecial)
{
char* pName; //姓名
UINT uiStudNum; //学号,规定为9位,如080210114
UINT uiAge; //年龄
char* pSex; //性别
char* pCourse1; //课程名
UINT uiMark1; //成绩
char* pTeacher1; //教师
char* pCourse2; //课程名
UINT uiMark2; //成绩
char* pTeacher2; //教师
pName=studInfo.pName;
uiStudNum=studInfo.uiStudNum;
uiAge=studInfo.uiAge;
pSex=studInfo.pSex;
pCourse1=studInfo.pCourseInfo->pCourse;
uiMark1=studInfo.pCourseInfo->uiMark;
pTeacher1=studInfo.pCourseInfo->pTeacher;
pCourse2=studInfo.pCourseInfo->pNext->pCourse;
uiMark2=studInfo.pCourseInfo->pNext->uiMark;
pTeacher2=studInfo.pCourseInfo->pNext->pTeacher;
switch(uiSpecial)
{
case SPECIAL_NONE:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
else
printf("%-10s%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_NAME:
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-10s",pName);
SetConsoleTextAttribute(hStdOut,0x0005);
if(uiStudNum/100000000==0)
printf("0%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s",uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
else
printf("%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s",uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_STUDNUM:
printf("%-10s",pName);
SetConsoleTextAttribute(hStdOut,0x0003);
if(uiStudNum/100000000==0)
printf("0%-9d",uiStudNum);
else
printf("%-9d",uiStudNum);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-5d%-5s%-11s%-5d%-11s%-11s%-5d%-6s",uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_AGE:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d",pName,uiStudNum);
else
printf("%-10s%-9d",pName,uiStudNum);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-5d",uiAge);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-5s%-11s%-5d%-11s%-11s%-5d%-6s",pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_SEX:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d",pName,uiStudNum,uiAge);
else
printf("%-10s%-9d",pName,uiStudNum,uiAge);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-5s",pSex);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-11s%-5d%-11s%-11s%-5d%-6s",pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_COURSE1:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s",pName,uiStudNum,uiAge,pSex);
else
printf("%-10s%-9d%-5d%-5s",pName,uiStudNum,uiAge,pSex);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-11s",pCourse1);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-5d%-11s%-11s%-5d%-6s",uiMark1,pTeacher1,pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_TEACHER1:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s%-11s%-5d",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1);
else
printf("%-10s%-9d%-5d%-5s%-11s%-5d",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-11s",pTeacher1);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-11s%-5d%-6s",pCourse2,uiMark2,pTeacher2);
break;
case SPECIAL_COURSE2:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s%-11s%-5d%-11s",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1);
else
printf("%-10s%-9d%-5d%-5s%-11s%-5d%-11s",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-11s",pCourse2);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-5d%-6s",uiMark2,pTeacher2);
break;
case SPECIAL_TEACHER2:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2);
else
printf("%-10s%-9d%-5d%-5s%-11s%-5d%-11s%-11s%-5d",pName,uiStudNum,uiAge,pSex,pCourse1,uiMark1,pTeacher1,pCourse2,uiMark2);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-6s",pTeacher2);
SetConsoleTextAttribute(hStdOut,0x0005);
break;
case SPECIAL_MARK:
if(uiStudNum/100000000==0)
printf("%-10s0%-9d%-5d%-5s%-11s",pName,uiStudNum,uiAge,pSex,pCourse1);
else
printf("%-10s%-9d%-5d%-5s%-11s",pName,uiStudNum,uiAge,pSex,pCourse1);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-5d",uiMark1);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-11s%-11s",pTeacher1,pCourse2);
SetConsoleTextAttribute(hStdOut,0x0003);
printf("%-5d",uiMark2);
SetConsoleTextAttribute(hStdOut,0x0005);
printf("%-6s",pTeacher2);
break;
default:
break;
}
cout<<endl;
}
//退出系统
void Exit()
{
if(MessageBox(NULL,"你真的要退出吗?","退出系统",MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2)==IDYES)
{
MessageBox(NULL,"谢谢使用本系统!","谢谢使用",MB_ICONINFORMATION);
exit(0);
}
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl<<"你取消了退出!"<<endl;
}
void PressAnyKey()
{
cout<<endl<<"请按任意键继续...";
getch();
cout<<endl<<endl;
}
//关于我
void AboutMe()
{
char pAuthorInfo[]="作者:陶善文\n学号:080210114\nEMail:ahei080210114@hotmail.com\n个人主页:http://earth.prohosting.com/ahei\n";
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
AnimatePrint(pAuthorInfo);
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
}
//显示帮助信息
void DispHelpInfo()
{
char pHelpInfo[]="\n\n本系统启动后,会显示如下信息:\n 学生信息管理系统\n 1-----------------学生信息加载系统\n 2-----------------学生信息查询系统\n 3-----------------学生信息排序系统\n 4-----------------学生信息统计系统\n 5-----------------帮助主题\n 6-----------------关于作者\n 7-----------------退出系统\n请选择:\n";
SetConsoleTextAttribute(hStdOut,0x0005);
AnimatePrint(pHelpInfo);
SetConsoleTextAttribute(hStdOut,0x0005);
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
}
void DispAllStudInfo(UINT uiSpecial)
{
UINT i;
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
printf("%-10s%-10s%-5s%-5s%-11s%-5s%-11s%-11s%-5s%-6s","姓名","学号","年龄","性别","课程","成绩","教师","课程","成绩","教师");
cout<<endl;
for(i=0;i<10;i++)
PrintStudInfo(pStudInfo[i],uiSpecial);
}
void SearchByStudNum()
{
UINT uiStudNum;
cout<<endl<<endl<<"请输入你要查找的学号:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>uiStudNum;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
UINT uiAddr=(uiStudNum-uiStudNum/1000*1000)%11;
UINT uiAddrBkUp=uiAddr;
bool bIsFind=true;
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl;
if(pStudInfo[uiAddr].uiStudNum==uiStudNum)
{
PrintStudInfo(pStudInfo[uiAddr],SPECIAL_STUDNUM);
CoolBeep(CB_OK);
return;
}
else
while(pStudInfo[uiAddr].uiStudNum!=uiStudNum)
{
uiAddr=(uiAddr+1)%10;
if(uiAddr==uiAddrBkUp)
{
bIsFind=false;
break;
}
}
if(!bIsFind)
{
cout<<"查无此人!"<<endl;
CoolBeep(CB_ERROR);
return;
}
PrintStudInfo(pStudInfo[uiAddr],SPECIAL_STUDNUM);
CoolBeep(CB_OK);
}
void SearchByName()
{
UINT i;
char pInName[10];
char pNameTemp[10];
bool bIsFind=false;
cout<<endl<<endl<<"请输入你要查找的学生姓名:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>pInName;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl;
for(i=0;i<10;i++)
{
strcpy(pNameTemp,pStudInfo[i].pName);
if(!strcmp(strupr(pNameTemp),strupr(pInName)))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_NAME);
}
}
if(!bIsFind)
{
cout<<"查无此人!"<<endl;
CoolBeep(CB_ERROR);
}
else
CoolBeep(CB_OK);
}
void SearchBySex()
{
char pInSex[2];
char pSexTemp[2];
UINT i;
bool bIsFind=false;
cout<<endl<<endl<<"请输入你要查找的性别:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>pInSex;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
SetConsoleTextAttribute(hStdOut,0x0005);
if(!strcmp(pInSex,"男") || !strcmp(strupr(pInSex),"M"))
strcpy(pInSex,"M");
else
if(!strcmp(pInSex,"女") || !strcmp(strupr(pInSex),"F"))
strcpy(pInSex,"F");
else
{
cout<<endl<<"好像世界上没有这种性别的人吧!"<<endl;
CoolBeep(CB_ERROR);
return;
}
cout<<endl;
for(i=0;i<10;i++)
{
strcpy(pSexTemp,pStudInfo[i].pSex);
if(!strcmp(strupr(pSexTemp),pInSex))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_SEX);
}
}
CoolBeep(CB_OK);
if(!bIsFind)
{
cout<<endl<<"没有找到此种性别的学生!"<<endl;
CoolBeep(CB_ERROR);
}
}
void SearchByGradeCourse()
{
UINT i,j;
UINT uiGrade; //要查找的年级
char* pCourse[20]={NULL};//该年级课程
bool bIsFind1,bIsFind2;
UINT uiCount=0;
UINT uiPos=0;
bool bIsFind=false;
cout<<endl<<endl<<"请输入你要查找的年级:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>uiGrade;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
SetConsoleTextAttribute(hStdOut,0x0005);
for(i=0;i<10;i++)
{
bIsFind1=false;
bIsFind2=false;
if(GetGrade(pStudInfo[i].uiStudNum)!=uiGrade)
continue;
//----------该学生符合所输入的年级----------
bIsFind=true;
for(j=0;j<20;j++)
if(pCourse[j]!=NULL)
if(!strcmp(pStudInfo[i].pCourseInfo->pCourse,pCourse[j]))
{
bIsFind1=true;
break;
}
if(!bIsFind1)
{
pCourse[uiPos]=pStudInfo[i].pCourseInfo->pCourse;
uiPos++;
}
for(j=0;j<20;j++)
if(pCourse[j]!=NULL)
if(!strcmp(pStudInfo[i].pCourseInfo->pNext->pCourse,pCourse[j]))
{
bIsFind2=true;
break;
}
if(!bIsFind2)
{
pCourse[uiPos]=pStudInfo[i].pCourseInfo->pNext->pCourse;
uiPos++;
}
//------------------------------------------
}
if(!bIsFind)
{
cout<<endl<<"没有该年级的学生!"<<endl;
CoolBeep(CB_ERROR);
return;
}
cout<<endl<<"该年级课程有:"<<endl;
for(i=0;i<uiPos;i++)
cout<<pCourse[i]<<endl;
CoolBeep(CB_OK);
}
void SearchByCourse()
{
char pInCourse[10];
char pCourseTemp1[10];
char pCourseTemp2[10];
UINT i;
bool bIsFind=false;
cout<<endl<<endl<<"请输入你要查找的课程:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>pInCourse;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl;
for(i=0;i<10;i++)
{
strcpy(pCourseTemp1,pStudInfo[i].pCourseInfo->pCourse);
strcpy(pCourseTemp2,pStudInfo[i].pCourseInfo->pNext->pCourse);
if(!strcmp(strupr(pCourseTemp1),strupr(pInCourse)))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_COURSE1);
}
if(!strcmp(strupr(pCourseTemp2),strupr(pInCourse)))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_COURSE2);
}
}
if(!bIsFind)
{
cout<<"没有学生选修该门课程!"<<endl;
CoolBeep(CB_ERROR);
}
else
CoolBeep(CB_OK);
}
void SearchByTeacher()
{
UINT i;
bool bIsFind=false;
char pTeacher[10];
char pTeacherTemp1[10];
char pTeacherTemp2[10];
cout<<endl<<endl<<"请输入教师姓名:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
cin>>pTeacher;
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl;
for(i=0;i<10;i++)
{
strcpy(pTeacherTemp1,pStudInfo[i].pCourseInfo->pTeacher);
strcpy(pTeacherTemp2,pStudInfo[i].pCourseInfo->pNext->pTeacher);
if(!strcmp(strupr(pTeacherTemp1),strupr(pTeacher)))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_TEACHER1);
}
if(!strcmp(strupr(pTeacherTemp2),strupr(pTeacher)))
{
bIsFind=true;
PrintStudInfo(pStudInfo[i],SPECIAL_TEACHER2);
}
}
if(!bIsFind)
{
cout<<"没有学生听该教师的课!"<<endl;
CoolBeep(CB_ERROR);
}
else
CoolBeep(CB_OK);
}
UINT GetGrade(UINT uiStudNum)
{
return (uiStudNum/100000)%100;
}
UINT HashSelect(UINT uiStudNum)
{
UINT uiAddr=(uiStudNum-uiStudNum/1000*1000)%11;
if(!pStudInfo[uiAddr].uiStudNum)
return uiAddr;
else
{
while(pStudInfo[uiAddr].uiStudNum)
uiAddr=(uiAddr+1)%10;
return uiAddr;
}
}
void SelectError()
{
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl<<"选择错误!"<<endl;
CoolBeep(CB_ERROR);
}
void CoolBeep(UINT uiCbSort)
{
switch(uiCbSort)
{
case CB_ERROR:
Beep(410,150);
break;
case CB_OK:
//声音1
Beep(2000,30);
Sleep(100);
Beep(2000,30);
Sleep(100);
Beep(2000,30);
//声音2
/* Beep(3000,150);
Sleep(50);
Beep(3000,150);*/
break;
default:
break;
}
}
void AnimatePrint(char* pStr)
{
UINT i;
for(i=0;i<strlen(pStr);i++)
{
cout<<pStr[i];
Sleep(20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -