VC实训学生信息管理系统DOC.docx
《VC实训学生信息管理系统DOC.docx》由会员分享,可在线阅读,更多相关《VC实训学生信息管理系统DOC.docx(18页珍藏版)》请在冰豆网上搜索。
VC实训学生信息管理系统DOC
信息科学与工程学院
报告书
专业:
计算机科学与技术
课程名称:
《VC++实训》
题目:
学生信息管理系统
班级:
设计者:
完成时间:
总成绩
教师签名
学生信息管理系统
一系统总体方案
系统基本实现了对学生信息的查询,添加,修改,删除,保存功能。
二设计思路和主要步骤
思路主要是设计一个单文档用来实现主界面,然后在菜单栏添加一个菜单项,下面包含录入学生基本信息,查询学生基本信息,和修改学生基本信息等多项子菜单,每项子菜单都对应一个对话框对数据进行处理。
在主对话框中添加列表控件用来显示学生的基本信息,以方便学生信息的修改,具体修改哪一项。
对于学生信息的录入,查询,修改,删除都用按钮控件,并为每个按钮添加消息响应函数用来处理学生的信息操作。
接下来就是要把学生的基本信息能够保存下来,因此要用到文件的操作,fstream可以满足要求。
综上所述,必须先掌握按钮控件,列表控件,新对话框的构建,编辑控件和消息的响应与处理原理!
三各功能模块和流程图
1.功能模块实现
主界面
对话框一
对话框2
对话框3
四设计代码
1.主体框架代码:
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CFrameWnd:
:
OnCreate(lpCreateStruct)==-1)
return-1;
if(!
m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||!
m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failedtocreatetoolbar\n");
return-1;//failtocreate
}
If(!
m_wndStatusBar.Create(this)||!
m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failedtocreatestatusbar\n");
return-1;//failtocreate
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return0;
}
voidCMainFrame:
:
OnMenuitemadd()
{
CMyDlgAdddlg1;
dlg1.DoModal();
}
voidCMainFrame:
:
OnMenuitemmodify()
{
CMyDlgModifydlg2;
dlg2.DoModal();
}
voidCMainFrame:
:
OnMenuitemseek()
{
CMyDlgSeekdlg3;
dlg3.DoModal();
}
2.录入消息对话框的消息映射:
HBRUSHCMyDlgAdd:
:
OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
{
HBRUSHhbr=CDialog:
:
OnCtlColor(pDC,pWnd,nCtlColor);if(nCtlColor==CTLCOLOR_BTN||nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkMode(TRANSPARENT);
}
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkMode(TRANSPARENT);
returnhbr;
}
voidCMyDlgAdd:
:
OnPaint()
{
CPaintDCdc(this);//devicecontextforpainting
LOGFONTlf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight=28;
lf.lfCharSet=GB2312_CHARSET;
strcpy((LPSTR)&(lf.lfFaceName),"华文新魏");
CFontcf;
cf.CreateFontIndirect(&lf);
m_Title.SetFont(&cf);
}
voidCMyDlgAdd:
:
OnOK()
{
UpdateData();
structRecord*re=per;
fstreamfile;
CFilefile1;
file.open("record.txt",ios:
:
in|ios:
:
out|ios:
:
app);
intnIndex=m_Speciality.GetCurSel();
inti=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);
constintsize=sizeof(structRecord);
if((re)->id==0||(re)->name==0||re->speciality==0||re->grade==0||i==0)
MessageBox("输入不完整,不能提交!
");
else
{
strcpy((re)->id,m_Num);
strcpy((re)->name,m_Name);
CStringstr;
inty,m,d;
y=m_Birth.GetYear();
m=m_Birth.GetMonth();
d=m_Birth.GetDay();
str.Format("%d-%d-%d",y,m,d);
strcpy(re->date,str);
if(i==IDC_RADIO1)
strcpy(re->sex,"男");
if(i==IDC_RADIO2)
strcpy(re->sex,"女");
if(nIndex==0)
strcpy(re->speciality,"计算机");
if(nIndex==1)
strcpy(re->speciality,"数学");
strcpy(re->grade,m_Grade);
file<id<<""<name<<""<sex<<""<speciality<<""<grade<<""<date<}
file.close();
CDialog:
:
OnOK();
MessageBox("添加成功!
",MB_OK,MB_ICONASTERISK);
}
2.学生信息修改对话框消息映射:
BOOLCMyDlgModify:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
UpdateData(false);
constintnColumns=6;
m_list1.InsertColumn(0,"学号");
m_list1.InsertColumn(1,"姓名");
m_list1.InsertColumn(2,"性别");
m_list1.InsertColumn(3,"专业");
m_list1.InsertColumn(4,"年级");
m_list1.InsertColumn(5,"出生日期");
CRectrect4;
m_list1.GetClientRect(rect4);
for(inti=0;im_list1.SetColumnWidth(i,rect4.Width()/nColumns);
fstreamfile;
structRecordper;
memset(&per,0,sizeof(structRecord));
file.open("record.txt",ios:
:
in|ios:
:
out);
if(!
file)
{
MessageBox("Openerror!
");
}
for(intj=0;!
file.eof();j++)
{
file>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
m_list1.InsertItem(j,per.id);
m_list1.SetItemText(j,1,per.name);
m_list1.SetItemText(j,2,per.sex);
m_list1.SetItemText(j,3,per.speciality);
m_list1.SetItemText(j,4,per.grade);
m_list1.SetItemText(j,5,per.date);
strcpy(per.id,"");
strcpy(per.name,"");
strcpy(per.sex,"");
strcpy(per.speciality,"");
strcpy(per.grade,"");
strcpy(per.date,"");
}
file.close();
ListView_SetExtendedListViewStyle(m_list1.m_hWnd,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//设置可以选整行
returnTRUE;
}
voidCMyDlgModify:
:
OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)
{
UpdateData();
structRecordper;
memset(&per,0,sizeof(structRecord));
CListCtrl*pListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
ASSERT(pListCtrl!
=NULL);
POSITIONpos=m_list1.GetFirstSelectedItemPosition();
if(pos!
=NULL)
{
nItem=m_list1.GetNextSelectedItem(pos);
m_Id=m_list1.GetItemText(nItem,0);
m_Name=m_list1.GetItemText(nItem,1);
if(m_list1.GetItemText(nItem,2)=="男")
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
else
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);
m_Speciality=m_list1.GetItemText(nItem,3);
m_Grade=m_list1.GetItemText(nItem,4);
m_Date=m_list1.GetItemText(nItem,5);
m_Num.Format("%d",nItem+1);
UpdateData(false);
}
*pResult=0;
}
voidCMyDlgModify:
:
OnOK()
{
if(IDNO==MessageBox("确定要修改吗?
","提问",MB_YESNO|MB_ICONQUESTION))
{
return;
}
UpdateData();
fstreamfile1,file2;
structRecordper;
file1.open("record.txt",ios:
:
in);
file2.open("record1.txt",ios:
:
out);
if(!
file1||!
file2)
{
MessageBox("Openerror!
");
return;
}
intn=0,m=0;
while(!
file1.eof())
{
n++;
file1>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
}
n--;m=n;
file1.close();
file1.open("record.txt",ios:
:
in);
intnIndex=m_list1.GetSelectionMark();
charid[20]="0";
strcpy(id,m_list1.GetItemText(nIndex,0));
memset(&per,0,sizeof(structRecord));
while(n)
{
file1>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
if(strcmp(per.id,id)!
=0)
{
file2<}
else//要修改的记录
{
strcpy(per.id,m_Id);
strcpy(per.name,m_Name);
inti=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);
if(i==IDC_RADIO1)
{
strcpy(per.sex,"男");
}
if(i==IDC_RADIO2)
{
strcpy(per.sex,"女");
}
strcpy(per.speciality,m_Speciality);
strcpy(per.grade,m_Grade);
strcpy(per.date,m_Date);
file2<}
n--;
}
file1.close();
file2.close();
remove("record.txt");
rename("record1.txt","record.txt");
m_Num="";
m_Name="";
m_Speciality="";
m_Grade="";
UpdateData(FALSE);
RefreshData(m);
}
voidCMyDlgModify:
:
RefreshData(intm)
{
structRecordper;
fstreamfile;
file.open("record.txt",ios:
:
in);
memset(&per,0,sizeof(structRecord));
m_list1.DeleteAllItems();
m_list1.SetRedraw(FALSE);
inti=0;
while(i{
file>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
m_list1.InsertItem(i,per.id);
m_list1.SetItemText(i,1,per.name);
m_list1.SetItemText(i,2,per.sex);
m_list1.SetItemText(i,3,per.speciality);
m_list1.SetItemText(i,4,per.grade);
m_list1.SetItemText(i,5,per.date);
i++;
}
file.close();
m_list1.SetRedraw(TRUE);
}
4.学生信息查找代码:
voidCMyDlgSeek:
:
OnButton1()
{
UpdateData();
fstreamfile1,file2;
structRecordper;
file1.open("record.txt",ios:
:
in);
file2.open("record1.txt",ios:
:
out);
if(!
file1||!
file2)
{
MessageBox("Openerror!
");
return;
}
intn=0;
while(!
file1.eof())
{
n++;
file1>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
}
n--;
file1.close();
file1.open("record.txt",ios:
:
in);
charid[20]="0";
strcpy(id,m_Num);
memset(&per,0,sizeof(structRecord));
while(n)
{file1>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
if(strcmp(per.id,id)!
=0)
{
file2<}
n--;
}
if(IDNO==MessageBox("确定要删除吗?
","提问",MB_YESNO|MB_ICONQUESTION))
{
return;
}
file1.close();
file2.close();
remove("record.txt");
rename("record1.txt","record.txt");
m_Num="";
m_Name="";
m_Speciality="";
m_Grade="";
m_Birth="";
UpdateData(FALSE);
}
voidCMyDlgSeek:
:
OnButton2()
{CDialog:
:
OnCancel();}
voidCMyDlgSeek:
:
OnOK()
{
UpdateData();
fstreamfile;
file.open("record.txt",ios:
:
in|ios:
:
out);
structRecordper;
intflag;
if(!
file)
{
MessageBox("Error!
");
return;
}
flag=0;
while(!
file.eof()&&!
flag)
{
file>>per.id>>per.name>>per.sex>>per.speciality>>per.grade>>per.date;
if(m_Num==per.id)
{
m_Name=per.name;
if(strcmp(per.sex,"男")==0)
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
else
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);
m_Speciality=per.speciality;
m_Grade=per.grade;
m_Birth=per.date;
flag=1;
}
}
if(flag==0)
MessageBox("查无此人!
");
file.close();
UpdateData(false);
}
五心得体会和参考资料
工程中还存在很多不足,不是很完善。
通过工程的构思,构建,到模块的实现,最后代码的编写,以及令人头痛的改错过程。
制作中不断遇到新问题,自己努力去看书,去图书馆查询资料,实在不会就去请教学的比较好的同学,大家一起思考怎么解决一个个难题,不断的错误,不断的更正,有点摸着石头过河的意思。
自己也发现了自己还存在许多问题,但是在工程的制作中,我觉得我很有收获,对各方面的知识有了新的认识,有了更加深刻的理解,增加了自己的构建工程能力,提高自己解决问题的能力。
在以后的生活中,要自己主动去做一些工程,因为我觉得在工程项目中可以学习到很多知识和经验,可以实实在在得提高自己的能力。
参考资料:
《VisualC++》郑阿奇主编清华大学出版社