?? studinfomanager.cpp
字號:
// StudInfoManager.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "StudInfoManager.h"
#include "TypeDef.h"
#include "conio.h"
#include "Taxis.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
STUDINFO pStudInfo[10]; //學生信息
bool bIsLoaded=false; //是否已加載學生信息
bool GetStudInfo(FILENAME* pFile); //從文件中得到學生信息
void PrintStudInfo(STUDINFO studInfo,UINT uiSpecial);
//打印學生信息
UINT GetGrade(UINT uiStudNum); //從學號中得到年級
UINT HashSelect(UINT uiStudNum); //選擇哈希地址
void SelectError(); //選擇錯誤
void CoolBeep(UINT uiCbSort); //非常酷的蜂鳴聲
void AnimatePrint(char* pStr); //動態顯示
void LoadStudInfo(); //加載學生信息
void SearchStudInfo(); //查詢學生信息
void TaxisStudInfo(); //排序學生信息
void StatisticsStudInfo(); //統計學生信息
void DispHelpInfo();
void AboutMe();
void Exit(); //退出系統
void PressAnyKey(); //按任意鍵繼續
void DispAllStudInfo(UINT uiSpecial);
//顯示所有學生信息
void SearchByStudNum(); //按學號查找
void SearchByName(); //按姓名查找
void SearchBySex(); //按性別查找
void SearchByGradeCourse(); //按年級課程查找
void SearchByTeacher(); //按教師查找
void SearchByCourse(); //按課程查找
void TaxisByStudNum(); //按學號排序
void TaxisByAge(); //按年齡排序
void TaxisByAllMark(); //按總成績排序
void StatisticsBoyGirlCount(); //男女生人數
void StatisticsPersonAverageMark(); //個人平均成績
void StatisticsGradeAverageAge(); //年級平均年齡
void StatisticsCourseAverageMark(); //各門課得平均成績
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
UCHAR ucSelection;//選擇號
SetConsoleTitle("學生信息管理系統");//設置標題
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
MessageBox(NULL,"學生信息管理系統!!!","熱烈歡迎",MB_ICONINFORMATION);
Select:
cout<<" 學生信息管理系統"<<endl;
cout<<" 1-----------------學生信息加載系統"<<endl;
cout<<" 2-----------------學生信息查詢系統"<<endl;
cout<<" 3-----------------學生信息排序系統"<<endl;
cout<<" 4-----------------學生信息統計系統"<<endl;
cout<<" 5-----------------幫助主題"<<endl;
cout<<" 6-----------------關于作者"<<endl;
cout<<" 7-----------------退出系統"<<endl;
cout<<"請選擇:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
Input:
ucSelection=getch();
if(ucSelection<'1' || ucSelection>'7')
goto Input;
putchar(ucSelection);
getch();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
switch(ucSelection)
{
case '1':
LoadStudInfo();
break;
case '2':
SearchStudInfo();
break;
case '3':
TaxisStudInfo();
break;
case '4':
StatisticsStudInfo();
break;
case '5':
DispHelpInfo();
break;
case '6':
AboutMe();
break;
case '7':
Exit();
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
break;
default:
SelectError();
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
break;
}
goto Select;
return nRetCode;
}
//加載學生信息
void LoadStudInfo()
{
CString strStudInfoFile;
char* pStudInfoFile;
CFileDialog m_OpenDlg(TRUE,NULL,"學生信息\\StudInfo.txt",0,"任何文件(*.*)|*.*||");
if(m_OpenDlg.DoModal()==IDOK)
{
strStudInfoFile=m_OpenDlg.GetPathName();
pStudInfoFile=(LPSTR)(LPCTSTR)strStudInfoFile;
}
else
{
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl<<"你取消了打開文件!"<<endl;
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
return;
}
if(!GetStudInfo(pStudInfoFile))
{
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl<<"打開文件失敗!"<<endl;
CoolBeep(CB_ERROR);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
return;
}
bIsLoaded=true;
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl<<"學生信息加載成功!"<<endl;
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
}
void SearchStudInfo()
{
SetConsoleTextAttribute(hStdOut,0x0005);
if(!bIsLoaded)
{
cout<<endl<<endl<<"請先加載學生信息!"<<endl;
CoolBeep(CB_ERROR);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
return;
}
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
system("cls");
UCHAR ucSelection;//選擇號
Select:
cout<<" 學生信息查詢系統"<<endl;
cout<<" 1-----------------顯示所有學生信息"<<endl;
cout<<" 2-----------------按學號查找"<<endl;
cout<<" 3-----------------按姓名查找"<<endl;
cout<<" 4-----------------按性別查找"<<endl;
cout<<" 5-----------------按年級課程查找"<<endl;
cout<<" 6-----------------按教師查找"<<endl;
cout<<" 7-----------------按課程查找"<<endl;
cout<<" 8-----------------返回主菜單"<<endl;
cout<<" 9-----------------退出系統"<<endl;
cout<<"請選擇:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
Input:
ucSelection=getch();
if(ucSelection<'1' || ucSelection>'9')
goto Input;
putchar(ucSelection);
getch();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
switch(ucSelection)
{
case '1':
SetConsoleTextAttribute(hStdOut,0x0005);
DispAllStudInfo(SPECIAL_NONE);
CoolBeep(CB_OK);
break;
case '2':
SearchByStudNum();
break;
case '3':
SearchByName();
break;
case '4':
SearchBySex();
break;
case '5':
SearchByGradeCourse();
break;
case '6':
SearchByTeacher();
break;
case '7':
SearchByCourse();
break;
case '8':
system("cls");
return;
break;
case '9':
Exit();
CoolBeep(CB_OK);
break;
default:
SelectError();
break;
}
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
goto Select;
}
//學生信息排序系統
void TaxisStudInfo()
{
SetConsoleTextAttribute(hStdOut,0x0005);
if(!bIsLoaded)
{
cout<<endl<<endl<<"請先加載學生信息!"<<endl;
CoolBeep(CB_ERROR);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
return;
}
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
system("cls");
UCHAR ucSelection;//選擇號
Select:
cout<<" 學生信息排序系統"<<endl;
cout<<" 1-----------------按學號排序"<<endl;
cout<<" 2-----------------按年齡排序"<<endl;
cout<<" 3-----------------按總成績排序"<<endl;
cout<<" 4-----------------返回主菜單"<<endl;
cout<<" 5-----------------退出系統"<<endl;
cout<<"請選擇:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
Input:
ucSelection=getch();
if(ucSelection<'1' || ucSelection>'5')
goto Input;
putchar(ucSelection);
getch();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
switch(ucSelection)
{
case '1':
TaxisByStudNum();
break;
case '2':
TaxisByAge();
break;
case '3':
TaxisByAllMark();
break;
case '4':
system("cls");
return;
break;
case '5':
Exit();
break;
default:
SelectError();
break;
}
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
goto Select;
}
void TaxisByStudNum()
{
CTaxis taxis(pStudInfo,TAXISBY_STUDNUM);
DispAllStudInfo(SPECIAL_STUDNUM);
}
void TaxisByAge()
{
CTaxis taxis(pStudInfo,TAXISBY_AGE);
DispAllStudInfo(SPECIAL_AGE);
}
void TaxisByAllMark()
{
CTaxis taxis(pStudInfo,TAXISBY_ALLMARK);
DispAllStudInfo(SPECIAL_MARK);
}
void StatisticsStudInfo()
{
SetConsoleTextAttribute(hStdOut,0x0005);
if(!bIsLoaded)
{
cout<<endl<<endl<<"請先加載學生信息!"<<endl;
CoolBeep(CB_ERROR);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
return;
}
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
system("cls");
UCHAR ucSelection;//選擇號
Select:
cout<<" 學生信息統計系統"<<endl;
cout<<" 1-----------------男女生人數"<<endl;
cout<<" 2-----------------各人平均成績"<<endl;
cout<<" 3-----------------年級平均年齡"<<endl;
cout<<" 4-----------------各門課平均成績"<<endl;
cout<<" 5-----------------返回主菜單"<<endl;
cout<<" 6-----------------退出系統"<<endl;
cout<<"請選擇:";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED);
Input:
ucSelection=getch();
if(ucSelection<'1' || ucSelection>'6')
goto Input;
putchar(ucSelection);
getch();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
switch(ucSelection)
{
case '1':
StatisticsBoyGirlCount();
break;
case '2':
StatisticsPersonAverageMark();
break;
case '3':
StatisticsGradeAverageAge();
break;
case '4':
StatisticsCourseAverageMark();
break;
case '5':
system("cls");
return;
break;
case '6':
Exit();
break;
default:
SelectError();
break;
}
CoolBeep(CB_OK);
PressAnyKey();
SetConsoleTextAttribute(hStdOut,FOREGROUND_GREEN);
goto Select;
}
void StatisticsBoyGirlCount()
{
UINT i;
UINT uiBoyCount=0,uiGirlCount=0;
for(i=0;i<10;i++)
if(!strcmp(pStudInfo[i].pSex,"男") || !strcmp(pStudInfo[i].pSex,"M") || !strcmp(pStudInfo[i].pSex,"m"))
uiBoyCount++;
else
uiGirlCount++;
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
cout<<"男生數:"<<uiBoyCount<<endl;
cout<<"女生數:"<<uiGirlCount<<endl;
}
void StatisticsPersonAverageMark()
{
UINT i;
float uiTemp;
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
printf("%-10s%-8s\n","姓名","平均成績");
for(i=0;i<10;i++)
{
uiTemp=(pStudInfo[i].pCourseInfo->uiMark+pStudInfo[i].pCourseInfo->pNext->uiMark)*1.0/2;
printf("%-10s%-8f\n",pStudInfo[i].pName,uiTemp);
}
}
void StatisticsGradeAverageAge()
{
int pGrade[10]; //年級數組
UINT pGradeAllAge[10]={0}; //各年級總年齡
UINT pStudCount[10]={0}; //各年級人數
float pGradeAverageAge[10];//各年級平均年齡
UINT i,j,uiPos=0;
bool bIsFind;
UINT uiCount=0;
//初始化
for(i=0;i<10;i++)
pGrade[i]=-1;
for(i=0;i<10;i++)
{
bIsFind=false;
//分析該學生所在年級是否已在年級數組
for(j=0;j<10;j++)
if(GetGrade(pStudInfo[i].uiStudNum)==pGrade[j])
{
bIsFind=true;
break;
}
if(!bIsFind)
{
pGrade[uiPos]=GetGrade(pStudInfo[i].uiStudNum);
pGradeAllAge[uiPos]=pStudInfo[i].uiAge;
pStudCount[uiPos]=1;
uiPos++;
}
else
{
pStudCount[j]++;
pGradeAllAge[j]+=pStudInfo[i].uiAge;
}
}
for(i=0;i<uiPos;i++)
pGradeAverageAge[i]=pGradeAllAge[i]*1.0/pStudCount[i];
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
printf("%-8s%-8s\n","年級","平均年齡");
for(i=0;i<uiPos;i++)
if(pGrade[i]>9)
printf("%-8d%-8f\n",pGrade[i],pGradeAverageAge[i]);
else
printf("0%-7d%-8f\n",pGrade[i],pGradeAverageAge[i]);
}
void StatisticsCourseAverageMark()
{
UINT pCourseAllMark[20]={0}; //各門課總分
float pCourseAverageMark[20];//各門課平均分
UINT pStudCount[10]={0}; //各門課人數
char* pCourse[20]={NULL}; //各門課數組
UINT i,j;
bool bIsFind1,bIsFind2;
UINT uiPos=0;
for(i=0;i<10;i++)
{
bIsFind1=false;
bIsFind2=false;
//分析該學生的課程1是否已在課程數組
for(j=0;j<20;j++)
if(pCourse[j]!=NULL)
if(!strcmp(pCourse[j],pStudInfo[i].pCourseInfo->pCourse))
{
bIsFind1=true;
break;
}
if(!bIsFind1)
{
pCourse[uiPos]=pStudInfo[i].pCourseInfo->pCourse;
pCourseAllMark[uiPos]=pStudInfo[i].pCourseInfo->uiMark;
pStudCount[uiPos]=1;
uiPos++;
}
else
{
pStudCount[j]++;
pCourseAllMark[j]+=pStudInfo[i].pCourseInfo->uiMark;
}
//分析該學生的課程2是否已在課程數組
for(j=0;j<20;j++)
if(pCourse[j]!=NULL)
if(!strcmp(pCourse[j],pStudInfo[i].pCourseInfo->pNext->pCourse))
{
bIsFind2=true;
break;
}
if(!bIsFind2)
{
pCourse[uiPos]=pStudInfo[i].pCourseInfo->pNext->pCourse;
pCourseAllMark[uiPos]=pStudInfo[i].pCourseInfo->pNext->uiMark;
pStudCount[uiPos]=1;
uiPos++;
}
else
{
pStudCount[j]++;
pCourseAllMark[j]+=pStudInfo[i].pCourseInfo->pNext->uiMark;
}
}
for(i=0;i<uiPos;i++)
pCourseAverageMark[i]=pCourseAllMark[i]*1.0/pStudCount[i];
SetConsoleTextAttribute(hStdOut,0x0005);
cout<<endl<<endl;
printf("%-8s%-8s\n","課程","平均成績");
for(i=0;i<uiPos;i++)
printf("%-8s%-8f\n",pCourse[i],pCourseAverageMark[i]);
}
bool GetStudInfo(FILENAME* pFile)
{
COURSEINFO* pCourseInfo;
COURSEINFO* pNext;
FILE* fp;
UINT i;
UINT uiHashAddr; //哈希地址
char pName[10]; //姓名
UINT uiStudNum; //學號,規定為9位,如080210114
UINT uiAge; //年齡
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -