用c语言实现mfc系统,MFC实现学生选课系统

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

先上效果图:

711044f5c930fb62901f714de282695a.png

主要功能:

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

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

“确认输入”按键:

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);

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring 构造函数注入_Spring构造函数依赖注入示例

spring 构造函数注入欢迎使用Spring构造函数依赖注入示例指南。 基于构造器的依赖注入是Spring 依赖注入的一种 。 依赖注入的另一种类型是Setter注入和字段注入。 有关Spring依赖注入的更多信息&#xff1a; Spring二传手注射的例子 Spring田间注入 依赖注入–构造函数与现…

python用pip安装numpy mac_Mac下python安装numpy,pandas,matplotlib

numpy是数据分析的库&#xff0c;我的目的是分析股票的数据&#xff0c;Pandas 有两种自己独有的基本数据结构Series &#xff08;一维&#xff09;和 DataFrame&#xff08;二维&#xff09;&#xff0c;它们让数据操作更简单了。它也是 Python 的一个库&#xff0c;所以&…

IntelliJ IDEA for Mac工件包(artifact)中 Web facet resources 的模块名称有误,如何修改?

在工件管理界面中&#xff0c;如果某个工件包中 Web facet resources 的模块名称有误&#xff0c;如下图所示&#xff1a; 你可以在项目根目录下的 .idea/artifacts 目录下找到以工件名称命名的 xml 文件&#xff0c;找到其中含有 facet 属性的 element 标签&#xff0c;更正…

html dom 修改,HTML DOM - 修改

创建新的 HTML 元素如需向 HTML DOM 添加新元素&#xff0c;您首先必须创建该元素(元素节点)&#xff0c;然后把它追加到已有的元素上。实例This is a paragraph.This is another paragraph.var paradocument.createElement("p");var nodedocument.createTextNode(&q…

python数据处理常用函数_Python常用数据处理函数

java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.FileReader;im ... &lbrack;Android&rsqb; RelativeLayout&comma; LinearLayout&comma;FrameLayout Android RelativeLayout 属性 // 相对于给定ID控…

redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较

redis nosql1.什么是NoSql数据库&#xff1f; NoSql&#xff08;不仅是Sql&#xff09;数据库是可水平扩展&#xff0c;持久存储半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型&#xff0c;例如键值&#xff0c;文档&#xff0c;列族&#xf…

SVN更新数据和提交数据的几个疑问

有以下几个问题&#xff1a; 1.我检出一份副本到本地&#xff0c;修改了几个文件&#xff0c;然后我提交到SVN服务器中&#xff0c;此时服务器是如何更新有关的数据的呢&#xff1f;是不是把原来旧的文件数据删除了&#xff0c;保存最新提交的数据呢&#xff1f; 2.假设我修改…

html转pdf后 框会消失,html或其它文件转pdf弹出打开保存框

第一步&#xff1a;下载wkhtmktopdf软件&#xff0c;安装在指定的目录&#xff0c;如&#xff1a;C:\htmlToPdf\wkhtmltopdf&#xff0c;第二步&#xff1a;把安装好的wkhtmltopdf文件目录加到环境变量Path路径中&#xff0c;public void convertFile(){HttpURLConnection con …

SVN常见问题解答

参加&#xff1a;https://subversion.apache.org/faq.zh.html

用python画一只可爱的皮卡丘_用python画一只可爱的皮卡丘实例

效果图#!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import *绘制皮卡丘头部def face(x,y): """画脸""" begin_fill() penup() # 将海龟移动到指定的坐标 goto(x, y) pendown() # 设置海龟的方向 setheading(40) circle(-150, 69)…

heroku_将应用程序集成为Heroku附加组件

herokuHeroku是流行的“平台即服务”提供商&#xff0c;它为供应商提供了作为附件提供的选项。 Heroku客户可以以多种方式使用附加组件&#xff0c;但是典型的情况是“启动数据库”&#xff0c;“启动MQ”或“启动日志记录解决方案”。 将附加组件添加到您的帐户后&#xff0c;…

请把下面的列表转换为html,在python中将列表转换为HTML表的最简单方法是什么?...

我会把你的问题分成两部分&#xff1a;给定一个“平面列表”&#xff0c;生成一个子列表列表&#xff0c;其中子列表具有给定的长度&#xff0c;并且整个列表可以按“行主要”顺序(第一个和第三个示例)或“列主要”(第二个示例)排列给定一个包含字符串项的子列表列表&#xff0…

MySQL命令之mysqldump -- 数据库备份程序

文章目录命令介绍常用选项参考示例将指定数据表的数据导出为 SQL 脚本文件和文本文件将指定的多个数据表的数据导出为 SQL 脚本文件和文本文件将指定数据库导出到脚本文件中将指定的多个数据库导出到脚本文件中将指定的表导出到脚本文件中将指定数据库中的多个表的数据导出到指…

vivado 仿真_提高Vivado效率一种自研工具介绍

在之前本公众号写过两篇关于工具更新对仿真调试提高效率的文章&#xff0c;《【干货】推荐一款FPGA仿真调试鸟枪换炮的工具&#xff01;》以及《NCVerilogSimVisionVivado仿真环境搭建》&#xff0c;详细描述了Linux环境下仿真环境搭建可以缩短五倍以上的仿真时间。本文仍是实验…

spark应用程序_Sparklens:Spark应用程序优化工具

spark应用程序Sparklens是带有内置Spark Scheduler模拟器的Spark分析工具&#xff1a;它使您更容易理解Spark应用程序的可扩展性限制。 它有助于了解给定Spark应用程序使用提供给它的计算资源的效率。 它已在Qubole实施并维护。 它是开源的&#xff08; Apache License 2.0 &am…

html图片自适应浏览器高度,css如何高度自适应浏览器高度?

高度自适应就是高度能跟随浏览器窗口的大小改变而改变&#xff0c;典型的运用在一些后台界面中上面一栏高度固定用作菜单栏或导航栏&#xff0c;下面一栏高度自适应用于显示内容。在IE7及chrome、firefox等浏览器中&#xff0c;高度自适应可以利用绝对定位来解决。但一个元素是…

Windows下Maven的下载、安装及IntelliJ IDEA集成配置

文章目录下载和安装 Maven创建本地仓库配置本地仓库路径配置环境变量IDEA 中配置 Maven 的本地仓库解决IntelliJ IDEA 创建Maven项目速度慢问题下载和安装 Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi 压缩包下载后&#xff0c;将压缩包解压到合适的位置…

gis里创建要素面板怎么打开_【从零开始学GIS】ArcGIS中的绘图基本操作(二)

大家好&#xff0c;我是肝教程肝到熊猫眼的三三。本系列教程的发布&#xff0c;受到了很多同学的鼓励&#xff0c;大家在后台或微信上表达出对教程的喜爱&#xff0c;这便是更新教程的最大动力。上回教程讲解了“GIS基本操作”、“创建文档&#xff06;加载数据”、“创建GIS数…

openjdk 编译_使用OpenJDK 11运行JAXB xjc编译器

openjdk 编译如文章“ 要从Java 11中删除的API ”所述&#xff0c;JDK 11不再包括 JAXB实现。 在本文中&#xff0c;我将结合使用JAXB &#xff08; 用于XML绑定的Java体系结构 &#xff09; 参考实现提供的xjc编译器和OpenJDK 11&#xff0c;将XML模式文件编译成Java类。 在J…

四川巴中中学2021高考成绩查询,巴中市高中排名(2021巴中市中学前十排名)

四川省的巴中市在我国全部革命史上面拥有超逸影响力&#xff0c;而且这所大城市也有着着悠长的历史时间。大城市内创立的普通高中不计其数&#xff0c;在其中四所普通高中成绩显著。而且这四所普通高中全是省部级示范性初中。1、通江中学在四川省巴中市漂亮的通江县&#xff0c…