本文实例为大家分享了MFC实现学生选课系统的具体代码,供大家参考,具体内容如下

先上效果图:

主要功能:

输入学号,从数据库中查找学号,若找到相匹配的学号,则显示数据库中姓名、学历、导师,同时将所有可选课程显示出来。输入课程类型和课程名称查询课程进行选课,选课之后相应的选课门数、学分、学费、已选门数都会进行刷新。换个学号输入,选课总人数就会刷新,还有一些小功能就在代码里解释了。

我就只把按键的代码贴出来,完整工程下面有链接。

“确认输入”按键:

void Cversion02Dlg::OnBnClickedButton1()

{

UpdateData(true);

printmenshu=0;//将显示的选课门数、已选学分、学费清零

yixuanxf=0;

xuefei=0;

yixuanms=0;//printmenshu是用来显示在MFC上,程序里处理的是yixuanms,最后将yxuanms赋给printmenshu,其实可以不用yixuanms,将yixuanms全部替换为printmenshu也可以

if(yixuan.GetItemCount()!=0){//如果yixuan列表不为空,则选课总人数加1。

xuankezrs++;

}

while ( yixuan.DeleteItem (0));//yixuan列表清空

int i=0,j=0;

for(i=0;i<30;i++){

if(ugs[i].chaxunxuehao(xuehao)){

CString edit1,edit2,edit3;

edit1=ugs[i].printname();

edit2=ugs[i].printban();

edit3=ugs[i].printxue();

SetDlgItemText(IDC_EDIT2,edit1);//这里也可以直接在控件上添加变量,直接赋给它。就像printxueli=edit3

SetDlgItemText(IDC_EDIT3,edit2);

//SetDlgItemText(IDC_EDIT3,edit3);

printxueli=edit3;

break;

}

}

for(j=0;j<15;j++){

if(gs[j].chaxunxuehao(xuehao)){

CString edit1,edit2,edit3;

edit1=gs[j].printname();

edit2=gs[j].printdao();

edit3=gs[j].printxue();

SetDlgItemText(IDC_EDIT2,edit1);

SetDlgItemText(IDC_EDIT3,edit2);

//SetDlgItemText(IDC_EDIT3,edit3);

printxueli=edit3;

break;

}

}

if(i==30&&j==15){

INT_PTR nRes;

nRes=MessageBox(_T("请输入正确的学号"),_T("错误"),MB_OK|MB_ICONERROR);

return; //这里不写return会直接运行下面的程序

}else{

yixuannum[k]=xuehao;//将找到的学号存在数组里,用来判断后面输入的学号是否前面输入过

k++;

}

if(k>1){ //这里的k是从1开始的,即当k=1时,只输入了第一个学号,不用判断是否已经选过课

for(int q=0;q

if(xuehao==yixuannum[q]){

MessageBox(_T("该学生已经选过课了"),_T("错误"),MB_OK|MB_ICONERROR);

break;//这里如果写成return,不知道为什么选课总人数不会刷新了

}

}

}

while ( kexuan.DeleteItem (0));

for(int p=0;p<12;p++){

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

UpdateData(false);

}

“查询”按键:

void Cversion02Dlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);

while ( kexuan.DeleteItem (0));//首先将kexuan清空,否则后面产生的列表都会加在原来的列表后面。这里只需循环清掉第一行就可以,因为清掉一行下面一行会自动上来

if(inputkmc.IsEmpty()){//判断输入课程名称是否为空

int q=0,k=0;

for(q=0;q<12;q++){

if(inputklx==c[q].klx()){

CString kmc,kxh,kxf,krs;//下面SetItemText中参数是CString类型,必须将各个参数转为CString

kmc=c[q].kmc();

krs.Format(_T("%d"),yixuankrs[q]); //正常应该写成krs.Format("%d",yixuankrs[q]);但是会报错,前面加上_T就可以了

kxh.Format(_T("%d"),c[q].kxh());

kxf.Format(_T("%d"),c[q].kxf());

kexuan.InsertItem(k,kxh);

kexuan.SetItemText(k,1,inputklx);

kexuan.SetItemText(k,2,kmc);

kexuan.SetItemText(k,3,kxf);

kexuan.SetItemText(k,4,krs);

k++;

}

}

if(k==0){

MessageBox(_T("请输入正确的课程类型"),_T("错误"),MB_OK|MB_ICONERROR);

for(int p=0;p<12;p++){ //前面已经将列表清空,这里提示错误信息之后,将所有课程显示出来

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

}

}

else if(inputklx.IsEmpty()){//判断输入课程类型是否为空

int l=0;

for(l=0;l<12;l++){

if(inputkmc==c[l].kmc()){

CString klx,kxh,kxf,krs;

klx=c[l].klx();

krs.Format(_T("%d"),yixuankrs[l]);

kxh.Format(_T("%d"),c[l].kxh());

kxf.Format(_T("%d"),c[l].kxf());

kexuan.InsertItem(0,kxh);

kexuan.SetItemText(0,1,klx);

kexuan.SetItemText(0,2,inputkmc);

kexuan.SetItemText(0,3,kxf);

kexuan.SetItemText(0,4,krs);

break;

}

}

if(l==12){

MessageBox(_T("请输入正确的课程名称"),_T("错误"),MB_OK|MB_ICONERROR);

for(int p=0;p<12;p++){

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

}

}

else{

int m=0;

for(m=0;m<12;m++){

if(inputkmc==c[m].kmc()&&inputklx==c[m].klx()){//如果输入课程类型和课程名称都不为空,判断课程类型和课程名称是否匹配

CString kxh,kxf,krs;

krs.Format(_T("%d"),yixuankrs[m]);

kxh.Format(_T("%d"),c[m].kxh());

kxf.Format(_T("%d"),c[m].kxf());

kexuan.InsertItem(0,kxh);

kexuan.SetItemText(0,1,inputklx);

kexuan.SetItemText(0,2,inputkmc);

kexuan.SetItemText(0,3,kxf);

kexuan.SetItemText(0,4,krs);

break;

}

}

if(m==12){

MessageBox(_T("请输入正确的课程类型和课程名称"),_T("错误"),MB_OK|MB_ICONERROR);

for(int p=0;p<12;p++){

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

}

}

UpdateData(false);

}

“选课”按键:

这里有一个关键的地方,就是假如用户选了两门相同的课,采用的是先添加后删掉的方法

void Cversion02Dlg::OnBnClickedButton3()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);

if(printxueli!="本科生"&&printxueli!="研究生"){//防止没输学号直接点选课导致程序错误

MessageBox(_T("请选输入学号"),_T("错误"),MB_OK|MB_ICONERROR);

return;

}

if(yixuanms<5){ //yixuanms是从0开始的

CString krs;

yixuankrs[chosexh-1]++;//这里不能用chosehanghao,要用chosexh-1。因为如果不经过查询,chosehanghao=chosexh-1,但是如果查询成功之后,这里chosehanghao不一定等于chosexh-1

krs.Format(_T("%d"),yixuankrs[chosexh-1]);

kexuan.SetItemText(chosehanghao,4,krs);

int n=0;

for(n=0;n<12;n++){ //在这个循环里即使选择的是同一门课也会添加进yixuan,若是想在这里不添加同一门课,不易做到

if(chosexh==c[n].kxh()){

CString klx,kmc,kxf,kxh;

klx=c[n].klx();

kmc=c[n].kmc();

kxf.Format(_T("%d"),c[n].kxf());

kxh.Format(_T("%d"),chosexh);

yixuan.InsertItem(yixuanms,kxh);

yixuan.SetItemText(yixuanms,1,klx);

yixuan.SetItemText(yixuanms,2,kmc);

yixuan.SetItemText(yixuanms,3,kxf);

yixuanxf=yixuanxf+c[n].kxf();

if(printxueli=="本科生"&&n>=0&&n<=3){

xuefei=xuefei+200*c[n].kxf();

}

else if(printxueli=="本科生"&&n>=4&&n<=7){

xuefei=xuefei+150*c[n].kxf();

}

else if(printxueli=="本科生"&&n>=8&&n<=11){

xuefei=xuefei+100*c[n].kxf();

}

else if(printxueli=="研究生"&&n>=0&&n<=3){

xuefei=xuefei+200*c[n].kxf();

}

else if(printxueli=="研究生"&&n>=4&&n<=7){

xuefei=xuefei+180*c[n].kxf();

}

else if(printxueli=="研究生"&&n>=8&&n<=11){

xuefei=xuefei+150*c[n].kxf();

}

yixuanms++;

break;

}

}

}

else{

MessageBox(_T("最多选择5门课"),_T("错误"),MB_OK|MB_ICONERROR);

}

for(int i=0;i<=yixuanms;i++){ //在这里判断选择的是否是同一门课,若是同一门课则将其删掉。相应的学分、选课人数和学费也要减掉

for(int j=i+1;j<=yixuanms;j++){

if(yixuan.GetItemText(i,0)==yixuan.GetItemText(j,0)){

CString str,str1,krs;

int strnum=0,strnum1=0;

str=yixuan.GetItemText(i,3);

strnum=_ttoi(str);

yixuanxf=yixuanxf-strnum;

str1=yixuan.GetItemText(i,0);

strnum1=_ttoi(str1)-1;

yixuankrs[chosexh-1]--;

krs.Format(_T("%d"),yixuankrs[chosexh-1]);

kexuan.SetItemText(chosehanghao,4,krs);

if(printxueli=="本科生"&&strnum1>=0&&strnum1<=3){

xuefei=xuefei-200*c[strnum1].kxf();

}

else if(printxueli=="本科生"&&strnum1>=4&&strnum1<=7){

xuefei=xuefei-150*c[strnum1].kxf();

}

else if(printxueli=="本科生"&&strnum1>=8&&strnum1<=11){

xuefei=xuefei-100*c[strnum1].kxf();

}

else if(printxueli=="研究生"&&strnum1>=0&&strnum1<=3){

xuefei=xuefei-200*c[strnum1].kxf();

}

else if(printxueli=="研究生"&&strnum1>=4&&strnum1<=7){

xuefei=xuefei-180*c[strnum1].kxf();

}

else if(printxueli=="研究生"&&strnum1>=8&&strnum1<=11){

xuefei=xuefei-150*c[strnum1].kxf();

}

yixuan.DeleteItem(j);

MessageBox(_T("已经选过该门课"),_T("错误"),MB_OK|MB_ICONERROR);

yixuanms--;

break;

}

}

}

printmenshu=yixuanms;

while ( kexuan.DeleteItem (0));

for(int p=0;p<12;p++){

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

UpdateData(false);

}

“退课”按键:

这里要弄清楚列表项里的行号和序号

void Cversion02Dlg::OnBnClickedButton4()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);

if(yixuanms>0){

yixuanms--;//点击退课之后,选课门数-1

CString str,str1,krs;

int tuixf=0,tuixh=0;

str=yixuan.GetItemText(tuihanghao,3);

tuixf=_ttoi(str);//CString转为int

yixuanxf=yixuanxf-tuixf;//已选学分减掉相应的学分

str1=yixuan.GetItemText(tuihanghao,0);

tuixh=_ttoi(str1)-1;//这里要注意课程序号是从1开始的,而对象数组和每门课已选人数数组是从0开始的

yixuankrs[tuixh]--;//每门课已选人数-1

if(printxueli=="本科生"&&tuixh>=0&&tuixh<=3){//两个列表控件属性已经设置为只能单选一行,所以点击一次这里只需减一次

xuefei=xuefei-200*c[tuixh].kxf();

}

else if(printxueli=="本科生"&&tuixh>=4&&tuixh<=7){

xuefei=xuefei-150*c[tuixh].kxf();

}

else if(printxueli=="本科生"&&tuixh>=8&&tuixh<=11){

xuefei=xuefei-100*c[tuixh].kxf();

}

else if(printxueli=="研究生"&&tuixh>=0&&tuixh<=3){

xuefei=xuefei-200*c[tuixh].kxf();

}

else if(printxueli=="研究生"&&tuixh>=4&&tuixh<=7){

xuefei=xuefei-180*c[tuixh].kxf();

}

else if(printxueli=="研究生"&&tuixh>=8&&tuixh<=11){

xuefei=xuefei-150*c[tuixh].kxf();

}

printmenshu=yixuanms;

yixuan.DeleteItem(tuihanghao);

while ( kexuan.DeleteItem (0));

for(int p=0;p<12;p++){

CString klx,kmc,kxh,kxf,krs;

klx=c[p].klx();

kmc=c[p].kmc();

krs.Format(_T("%d"),yixuankrs[p]);

kxh.Format(_T("%d"),c[p].kxh());

kxf.Format(_T("%d"),c[p].kxf());

kexuan.InsertItem(p,kxh);

kexuan.SetItemText(p,1,klx);

kexuan.SetItemText(p,2,kmc);

kexuan.SetItemText(p,3,kxf);

kexuan.SetItemText(p,4,krs);

}

}

else{

MessageBox(_T("已经退完全部课程"),_T("错误"),MB_OK|MB_ICONERROR);

}

UpdateData(false);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

用c语言实现mfc系统,MFC实现学生选课系统相关推荐

  1. java选课系统_java实现学生选课系统

    本文为大家分享了java实现学生选课系统的具体代码,供大家参考,具体内容如下 案例要求: 学生(学号,姓名,专业,所选课程{<3}) 老师(工号,姓名,所教课程{<3}) 课程(课程号,课 ...

  2. html学生选课系统源码,学生选课系统

    [实例简介] 用SSM框架写的学生选课系统,学生查看选课情况,选课,退选,修改信息,教师可以查看自己所教课程,查看所教课程学生信息等 [实例截图] [核心代码] ssm_student └── ssm ...

  3. (附源码)mysql+ssm学生选课系统 毕业设计 170920

     摘 要 本论文主要论述了如何使用JAVA语言开发一个学生选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述学生选课系统的当前 ...

  4. ssm+mysql+ssm学生选课系统 毕业设计-附源码170920

    摘 要 本论文主要论述了如何使用JAVA语言开发一个学生选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述学生选课系统的当前背 ...

  5. 基于JavaWeb的学生选课系统

    随着社会的发展和进步,教育领域也在不断探索新的培养方法和途径.选课作为学生在大学期间必须要面对的一项重要任务,其管理方式也在不断改善和完善.基于JavaWeb技术的学生选课系统就是这样一种不断发展的先 ...

  6. 选课系统java源文件_学生选课系统 - WEB源码|JSP源码/Java|源代码 - 源码中国

    压缩包 : 选课系统代码+论文.rar 列表 选课系统代码+论文\test\AddClass.jsp 选课系统代码+论文\test\Addcourse.jsp 选课系统代码+论文\test\addst ...

  7. 学生选课系统可以如何优化

    学生选课系统可以通过以下几个方面进行优化: 界面优化:学生选课系统的界面应该简洁易懂,符合学生使用习惯,操作流程顺畅,便于学生快速完成选课. 功能优化:学生选课系统应该提供多种选课方式,如按照学期.课 ...

  8. 基于php语言的 选课系统,基于C语言实现学生选课系统

    鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统. 思路比较简单: 1.回滚显示各种提示信息或操作信息 2.链表操作. 代码中有管理员部分功能没有实现,学生和老师的功能基 ...

  9. c语言p1-melepeo,学生选课系统c语言程序代码

    学生选课系统c语言程序代码 (25页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 #include #includestruct cou ...

最新文章

  1. 不生效 设置了viewport_有限责任公司股权转让何时生效?
  2. java8 环境变量设置
  3. 速读训练软件_记忆力训练:如何提高注意力呢?
  4. ipv6正则表达式 java,用正则表达式解析IPv4跟IPv6地址字符串
  5. python中的threading_python中threading的用法
  6. FileInputStreamFileOutputStream
  7. K3 WISE修改单据表头字段默认值
  8. ADATA威刚S102未安全退出导致U盘无法识别的软件修复教程
  9. 集成运算放大器的应用——放大、加减、跟随、(滞回)比较器、阻抗匹配
  10. 构建分布式系统——技术考量
  11. Oracle 12c 数据库可插拔体系结构
  12. 【菠萝狗四足机器人】二次开发教程--第一章 【简介与开发环境搭建】
  13. 安Linux基础入门教程
  14. 【竞品分析】Android音乐播放器的竞品分析
  15. 钉钉小程序获取用户信息
  16. void指针(void *)是什么?如何使用它
  17. Android App签名(证书)校验过程源码分析
  18. Android应会的网络基本知识
  19. IFNULL()函数、CONCAT()函数、IF()函数、YEAR()函数、DATE_FORMAT()函数、LENGTH()函数、NOW()函数、CURDATE()函数、CURTIME()函数基本使用
  20. 练习作业5: 韩信点兵 , 统计方案 , 出现最频的数

热门文章

  1. 编码器测距离使用外部中断计脉冲
  2. java 列表数据List通过模板导出excel表和word表
  3. python严格使用缩进来体现代码的逻辑从属关系_Python 全国考级二级
  4. 特写|巨头造车:一场生死存亡的跨界战争
  5. RC滤波器、时域、频域分析笔记A
  6. scheme心得(1) continuation与阴阳谜题
  7. 这5句话不能乱说,说了容易遭人排…
  8. 工厂应该如何批量打印送货单和产品标签
  9. 区分处理器的字,字长和汇编中的字,双字,四字
  10. asciidoc转换html,Word文档到Asciidoc转换