c++学生管理系统.docx
- 文档编号:13391591
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:65
- 大小:33.36KB
c++学生管理系统.docx
《c++学生管理系统.docx》由会员分享,可在线阅读,更多相关《c++学生管理系统.docx(65页珍藏版)》请在冰点文库上搜索。
c++学生管理系统
//Student.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"console.h"
#include"student.h"
#include"studentui.h"
CStudentUItheUI;
CStudentFiletheFile("student.dat");
//定义命令函数
voidDoAddRec(void);
voidDoDelRec(void);
voidDoListAllRec(void);
voidDoFindRec(void);
voidmain()
{
constintnItemNum=7;
char*strItem[nItemNum]={"Addastudentdatarecord",
"Deleteastudentdatarecord",
"-",
"Listalldatarecords",
"Findastudentdatarecord",
"-",
"Exit"};
theUI._SetOptionsTitle("MainMenu");
for(;;){
intnIndex=theUI._GetOptions(strItem,0,0,nItemNum);
switch(nIndex){
case0:
//Addastudentdatarecord
DoAddRec();break;
case1:
//Deleteastudentdatarecord
DoDelRec();break;
case2:
//Listalldatarecords
DoListAllRec();break;
case3:
//Findastudentdatarecord
DoFindRec();break;
break;
case4:
//Exit
return;
}
}
}
voidDoAddRec(void)
{
CStudentRecrec;
if(theUI.InputStuRec(rec)){
theFile.Add(rec);
DoListAllRec();
}
}
voidDoDelRec(void)
{
CStudentRecrec;
charstrID[80],str[80]="Nofindtherecordof";
strcpy(strID,theUI._InputBox("InputDeletedStudentID",0,0));
if(strID){
intnIndex=theFile.Seek(strID,rec);
if(nIndex>=0){
theFile.Delete(strID);
DoListAllRec();
}else{
strcat(str,strID);
strcat(str,"!
");
theUI._MessageBox("Notice",str,1);
}
}
}
voidDoListAllRec(void)
{
intnCount=theFile.GetRecCount();
CStudentRec*stu;
stu=newCStudentRec[nCount];
theFile.GetStuRec(stu);
theUI.DispStuRecs(stu,nCount);
delete[nCount]stu;
}
voidDoFindRec(void)
{
CStudentRecrec;
charstrID[80],str[80]="Nofindtherecordof";
strcpy(strID,theUI._InputBox("InputFindedStudentID",0,0));
if(strID){
intnIndex=theFile.Seek(strID,rec);
if(nIndex>=0)
theUI.DispStuRecs(&rec,1);
else{
strcat(str,strID);
strcat(str,"!
");
theUI._MessageBox("Notice",str,1);
}
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#include
#include
#include
#include
classCStudentRec
{
public:
CStudentRec(){chFlag='N';};//默认构造函数
~CStudentRec(){};//默认析构函数
friendostream&operator<<(ostream&os,CStudentRec&stu);
friendistream&operator>>(istream&is,CStudentRec&stu);
CStudentRec&operator=(CStudentRec&stu)//赋值运算符重载
{
strncpy(strName,stu.strName,20);
strncpy(strID,stu.strID,10);
for(inti=0;i<3;i++)
fScore[i]=stu.fScore[i];
fAve=stu.fAve;
chFlag=stu.chFlag;
return*this;
}
charchFlag;//标志,'A'表示正常,'N'表示空
charstrName[20];//姓名
charstrID[10];//学号
floatfScore[3];//三门成绩
floatfAve;//总平均分
};
//CStudentRec类的实现
ostream&operator<<(ostream&os,CStudentRec&stu)
{
os.write(&stu.chFlag,sizeof(char));
os.write(stu.strName,sizeof(stu.strName));
os.write(stu.strID,sizeof(stu.strID));
os.write((char*)stu.fScore,sizeof(float)*3);
os.write((char*)&stu.fAve,sizeof(float));
returnos;
}
istream&operator>>(istream&is,CStudentRec&stu)
{
charname[20],id[10];
is.read(&stu.chFlag,sizeof(char));
is.read(name,sizeof(name));
is.read(id,sizeof(id));
is.read((char*)stu.fScore,sizeof(float)*3);
is.read((char*)&stu.fAve,sizeof(float));
strncpy(stu.strName,name,sizeof(name));
strncpy(stu.strID,id,sizeof(id));
returnis;
}
classCStudentFile
{
public:
CStudentFile(char*filename);
~CStudentFile();
voidAdd(CStudentRecstu);//添加记录
voidDelete(char*id);//删除学号为id的记录
voidUpdate(intnRec,CStudentRecstu);//更新记录号为nRec的内容,nRec从0开始
intSeek(char*id,CStudentRec&stu);//按学号查找,返回记录号,-1表示没有找到
intGetRecCount(void);//获取文件中的记录数
intGetStuRec(CStudentRec*data);//获取所有记录,返回记录数
private:
char*strFileName;//文件名
};
//CStudentFile类的实现
CStudentFile:
:
CStudentFile(char*filename)
{
strFileName=newchar[strlen(filename)+1];
strcpy(strFileName,filename);
}
CStudentFile:
:
~CStudentFile()
{
if(strFileName)delete[]strFileName;
}
voidCStudentFile:
:
Add(CStudentRecstu)
{
//打开文件用于添加
fstreamfile(strFileName,ios:
:
out|ios:
:
app|ios:
:
binary);
file< file.close(); } voidCStudentFile: : Delete(char*id) { CStudentRectemp; intnDel=Seek(id,temp); if(nDel<0)return; //设置记录中的chFlag为'N' temp.chFlag='N'; Update(nDel,temp); } voidCStudentFile: : Update(intnRec,CStudentRecstu) { fstreamfile(strFileName,ios: : in|ios: : out|ios: : binary);//二进制读写方式 if(! file){ cout<<"the"< \n"; return; } intnSize=sizeof(CStudentRec)-1; file.seekg(nRec*nSize); file< file.close(); } intCStudentFile: : Seek(char*id,CStudentRec&stu)//按学号查找 { intnRec=-1; fstreamfile(strFileName,ios: : in|ios: : nocreate);//打开文件用于只读 if(! file){ cout<<"the"< \n"; returnnRec; } inti=0; while(! file.eof()){ file>>stu; if((strcmp(id,stu.strID)==0)&&(stu.chFlag=='A')){ nRec=i;break; } i++; } file.close(); returnnRec; } intCStudentFile: : GetRecCount(void) { fstreamfile(strFileName,ios: : in|ios: : nocreate);//打开文件用于只读 if(! file){ cout<<"the"< \n"; return0; } intnRec=0; while(! file.eof()){//读出所有记录 CStudentRecdata; file>>data; if(data.chFlag=='A')nRec++; } file.close(); returnnRec; } intCStudentFile: : GetStuRec(CStudentRec*data) { fstreamfile(strFileName,ios: : in|ios: : nocreate);//打开文件用于只读 if(! file){ cout<<"the"< \n"; return0; } intnRec=0; while(! file.eof()){//读出所有记录 CStudentRecstu; file>>stu; if(stu.chFlag=='A'){ data[nRec]=stu; nRec++; } } file.close(); returnnRec; } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ //文件studentui.h中的内容 classCStudentUI: publicCConUI { public: CStudentUI(); boolInputStuRec(CStudentRec&stu);//通过键盘输入记录 voidDispStuRecs(CStudentRec*stu,intnNum);//显示nNum个记录 private: voidDispListHead(intnRow=0);//显示表头 }; CStudentUI: : CStudentUI() { _SetMainFrameTitle("ManagementForTheStudentScores"); _InitMainFrame(7); DispListHead(); } boolCStudentUI: : InputStuRec(CStudentRec&stu) { boolbRes=false; char*str[5]={"Name: ","StudentID: ","Score1: ","Score2: ","Score3: "}; _SetMultiInputTitle("Inputstudentrecorddata"); bRes=_InputMultiBox(str,0,0,20,str,5); if(bRes){ strncpy(stu.strName,str[0],20); strncpy(stu.strID,str[1],10); stu.fAve=(float)0.0; for(inti=0;i<3;i++){ stu.fScore[i]=(float)atof(str[i+2]); stu.fAve+=stu.fScore[i]; } stu.fAve=float(stu.fAve/3.0); stu.chFlag='A'; } returnbRes; } voidCStudentUI: : DispListHead(intnRow) { intnSizeX,nSizeY; _GetWindowSize(&nSizeX,&nSizeY);//获得窗口的大小 _SaveSettings(); _SetBackColor(15);//背景色为白色 _SetForeColor(0);//文本色为黑色 _FillBox(0,nRow,nSizeX-1,1,false);//画背景水平条 _SetCursorPos(0,nRow); cout.setf(ios: : left); cout< cout< cout<<"Average"< _LoadSettings(); _GetConwinSize(&nSizeX,&nSizeY);//获得控制台窗口的大小 _DefineWindow(1,3,nSizeX-2,nSizeY-3);//重新定义窗口 } voidCStudentUI: : DispStuRecs(CStudentRec*stu,intnNum) { //每屏显示nMaxLine个,若nNum>nMaxLine, //则可按PageUp和PageDown向上和向下翻页 //若nNum>nMaxLine,则按ESC键退出 constintnMaxLine=20; intnStart,nEnd,nPage=0,nMaxPages,nRow=0; nMaxPages=(nNum-1)/nMaxLine;//最大可显示的页数 unsignedintch; intnSizeX,nSizeY,nBkColor,nForeColor; for(;;){ nStart=nPage*nMaxLine; nEnd=nStart+nMaxLine; if(nEnd>=nNum)nEnd=nNum; nRow=0; _ClearWindow(); for(inti=nStart;i if(stu[i].chFlag=='A'){ _SetCursorPos(1,nRow);nRow++; cout.setf(ios: : left); cout< < cout< < < cout< cout.flush();//必须有这行代码,否则显示不出来 } } if(nMaxPages==0)break; else{ //显示提示信息,背景为黄色,前景色为黑色 nBkColor=_GetBackColor(); nForeColor=_GetForeColor(); _SetBackColor(14);//黄色 _SetForeColor(0);//黑色 _GetWindowSize(&nSizeX,&nSizeY); _FillBox(0,nSizeY-1,nSizeX,1,false); _SetCursorPos(1,nSizeY-1); cout<<"PAGE: "< "< cout.flush(); _SetForeColor(nBkColor); cout<<" <<"PAGEDOWNtochangepages,andESCtoexit...>"; cout.flush(); //恢复原来的颜色设置 _SetBackColor(nBkColor); _SetForeColor(nForeColor); for(;;){ ch=_GetKeyChar(); //当按下ESC退出 if(ch==VK_ESCAPE)return; if(ch==VK_PRIOR){//PAGEUP键 nPage--; if(nPage<0)nPage=0; break; } if(ch==VK_NEXT){//PAGEDOWN键 nPage++; if(nPage>nMaxPages)nPage=nMaxPages; break; } } } } } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ /* 用于控制台窗口界面设计,版本1.0 2002-2003 2006.5 (1)添加了控制台窗口的字体设计, (2)添加了边框型式, (3)添加主框架窗口的界面 */ #include #include #include #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 学生 管理 系统