版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生成绩管理系统说明:该课程设计包含两个部分,一个为纯dos系统下的控制台程序,用C++编写;另一个为有界面的MFC项目。目录纯dos系统下的控制台程序设计要求3设计分析3调试说明4源代码8实验总结21有界面的MFC项目1、设计内容222、设计说明223、设计步骤224、运行演示275、实验总结29纯dos系统下的控制台程序设计要求现有学生成绩信息,内容如下:
姓名
学号
语文
数学
英语
张明明
01
67
78
82
李成友
02
78
91
88
张辉灿
03
68
82
56
王露
04
56
45
77
陈东明
05
67
38
47请用C/C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
功能要求:
(1)
信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2)
信息查询:
要求:查询时可实现按姓名查询、按学号查询
(3)
成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4)
排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
设计分析(1)需求分析:该程序要能实现对学生成绩信息的增加、删除、修改,实现对学生按姓名查询,按学号查询显示,对任意一个课程名和分数段的学生人数进行输出并统计人数,最好还要根据用户的需求对学生成绩排序。(2)系统性能要求:
系统安全、可靠;
功能齐全;
c.操作方便、界面友好;
d.易于维护和扩充。系统功能模块:学生成绩管理系统包括:增加、删除、修改、显示、信息查询、成绩统计、排序几个部分构成。学生成绩管理系统(4)模块框架图
学生成绩管理系统排序成绩统计信息查询显示修改删除增加排序成绩统计信息查询显示修改删除增加输入课程名和升降序排序输入课程名和分数段统计按姓名查询按学号查询输入课程名和升降序排序输入课程名和分数段统计按姓名查询按学号查询调试说明运行程序后,现出来一个简洁的主界面。若没有学生信息,显示“这是一个新系统,无学生信息,请先输入。”若已存在学生信息,显示“读取学生信息成功!”一秒钟后,自动切入主菜单界面。首先选择1,增加学生信息。录入学生信息后选择4,显示学生信息。选择2,删除学生信息,输入要删除的学生姓名,这里我输入的是王露,显示剩下几位同学的信息。选择3,修改学生信息,输入要修改的学生姓名,然后输入新的学生信息,这里我修改的是张明明,显示修改后的学生信息。将张明明和王露的信息重新输入。输入5,信息查询,出来选择界面,“1、按学生姓名查找”、“2、按学生学号查找”,输入1,运行结果如下:输入2,运行结果如下:输入6,排序,显示选择界面,用户可根据需求选择科目和升降序,这里我是按语文成绩降序排序。输入7,成绩统计,用户自行输入要统计的科目和分数段进行统计。这里我统计的是英语成绩在60—90的学生。源程序代码#include<iostream>#include<fstream>#include<iomanip>#include<stdlib.h>#include<Windows.h>#include<conio.h>usingnamespacestd;#defineHEADER1"学生成绩\n"#defineHEADER2"|姓名|学号|数学|语文|英语|总分|\n"#defineHEADER3"|||||||\n"classStudent//定义学生类{public: charname[20]; charid[20]; intmath; intchinese; intenglish; intsum; Student*next; voidinput(); voidReadFile(istream&in); voidshow();};voidStudent::input()//输入学生信息函数{ cout<<"\n\t\t请输入:"<<endl<<endl; cout<<"\t\t姓名:"; cin>>name; cout<<"\t\t学号:"; cin>>id; cout<<"\t\t数学成绩:"; cin>>math; cout<<"\t\t语文成绩:"; cin>>chinese; cout<<"\t\t英语成绩:"; cin>>english; sum=math+chinese+english;}voidStudent::ReadFile(istream&in)//读取文件{ in>>name>>id>>math>>chinese>>english>>sum;}voidStudent::show()//输出学生信息{ cout<<"|"<<setw(8)<<name<<"|"<<setw(6)<<id<<"|"<<setw(6)<<math<<"|"<<setw(6)<<chinese<<"|"<<setw(6)<<english<<"|"<<setw(7)<<sum<<"|"<<endl; cout<<"|||||||\n";}classStudentMassage//定义学生信息类,包含各项处理功能{public: StudentMassage(); ~StudentMassage(); voidShowMenu(); voidDisplay(); voidAddItem(); voidFind(); voidsave(); voidModifyItem(); voidRemoveItem(); voidSwap(Student*p1,Student*p2); voidSort(); intListCount(); intCount();private: Student*Head,*End; ifstreamin; ofstreamout; Student*FindItem(char*name); Student*FindId(char*id);};Student*StudentMassage::FindItem(char*name){ Student*p; for(p=Head;p->next!=End;p=p->next) if(!strcmp(p->next->name,name)) returnp; returnNULL;}Student*StudentMassage::FindId(char*id){ Student*p; for(p=Head;p->next!=End;p=p->next) if(!strcmp(p->next->id,id)) returnp; returnNULL;}StudentMassage::StudentMassage()//构造函数{ Head=newStudent; Head->next=newStudent; End=Head->next; in.open("sort.txt"); if(!in) cout<<"\n\t\t这是一个新系统,无学生信息,请先输入。"<<endl; else { while(!in.eof()) { End->ReadFile(in); if(End->name[0]=='\0') break; End->next=newStudent; End=End->next; } in.close(); cout<<"\n\t\t读取学生信息成功!"<<endl; }}StudentMassage::~StudentMassage()//析构函数{ Student*temp; save(); for(temp;Head->next!=End;) { temp=Head->next; Head->next=Head->next->next; deletetemp; } deleteHead,End;}voidStudentMassage::ShowMenu()//显示菜单{ cout<<"\n\n\t\t\t\t主菜单"<<endl<<endl<<endl; cout<<"\t\t****************************************"<<endl<<endl; cout<<"\t\t1、增加学生信息2、删除学生信息"<<endl<<endl; cout<<"\t\t3、修改学生信息4、显示学生信息"<<endl<<endl; cout<<"\t\t5、信息查询6、排序"<<endl<<endl; cout<<"\t\t7、成绩统计0、安全退出"<<endl<<endl; cout<<"\t\t****************************************"<<endl<<endl<<endl; cout<<"\t\t请选择:";}voidStudentMassage::Display()//显示学生信息{ Student*p; cout<<endl<<HEADER1<<HEADER2<<HEADER3; for(p=Head->next;p!=End;p=p->next) p->show(); cout<<"\n\n输入任意字符,继续"; getch();}voidStudentMassage::AddItem()//添加学生信息{ End->input(); End->next=newStudent; End=End->next; cout<<"\n\t\t添加成功!"<<endl; cout<<"\n输入任意字符,继续"; getch();}voidStudentMassage::Find()//查找函数{ charname[20],id[20]; intx; Student*p=NULL; cout<<"\n\t\t****************************************\n"; cout<<"\t\t\t1、按学生姓名查找"<<endl; cout<<"\t\t\t2、按学生学号查找"; cout<<"\n\t\t****************************************\n\n\t\t请选择:"; cin>>x; switch(x) { case1://按姓名查找 { cout<<"\n\t\t请输入要查找的学生的姓名:"; cin>>name; if(p=FindItem(name)) { cout<<endl<<HEADER1<<HEADER2<<HEADER3; p->next->show(); cout<<"\n请输入任意字符,继续"; getch(); } else { cout<<"\t\t没有找到该姓名的学生!"<<endl<<endl; cout<<"请输入任意字符,继续"; getch(); } }break; case2://按学号查找 { cout<<"\n\t\t请输入要查找的学生的学号:"; cin>>id; if(p=FindId(id)) { cout<<endl<<HEADER1<<HEADER2<<HEADER3; p->next->show(); cout<<"\n请输入任意字符,继续"; getch(); } else { cout<<"\n\t\t没有找到该学号的学生!"<<endl<<endl; cout<<"请输入任意字符,继续"; getch(); } }break; }}voidStudentMassage::ModifyItem()//修改学生信息{ charname[20]; Student*p=NULL; cout<<"\n\t\t请输入要修改的学生的姓名:"; cin>>name; if(p=FindItem(name)) { cout<<"\n\t\t已找到该学生,请输入新的信息!"<<endl; p->next->input(); cout<<"\n\t\t修改成功!"<<endl; Display(); } else { cout<<"\n\t\t没有找到!"<<endl; cout<<"\n输入任意字符!继续"; getch(); }}voidStudentMassage::RemoveItem()//删除学生信息{ charname[20]; Student*p=NULL,*temp=NULL; cout<<"\n\t\t请输入要删除的学生的姓名:"; cin>>name; if(p=FindItem(name)) { temp=p->next; p->next=p->next->next; deletetemp; cout<<"\n\t\t删除成功!"<<endl; Display(); } else { cout<<"\t\t没有找到!"<<endl; cout<<"输入任意字符!继续"; getch(); }}intStudentMassage::ListCount()//返回记录的学生总数{ Student*p; intn=0; if(!Head) return0; for(p=Head->next;p!=End;p=p->next) n++; returnn;}intStudentMassage::Count()//成绩统计{ Student*p; intx,m,n,count=0; if(!Head) { cout<<"\n\t\t没有资料可以统计!"<<endl; return0; } cout<<"\n\t\t****************************************\n"; cout<<"\t\t\t1、统计数学成绩"<<endl; cout<<"\t\t\t2、统计语文成绩"<<endl; cout<<"\t\t\t3、统计英语成绩"; cout<<"\n\t\t****************************************\n"<<endl; cout<<"\t\t请选择:"; cin>>x; switch(x) { case1: { cout<<"\n\t\t请输入分数段的起始分数和终止分数:"; cin>>m; cin>>n; for(p=Head;p!=End;p=p->next) if(p->math>=m&&p->math<=n) { count++; if(count==1) cout<<endl<<HEADER1<<HEADER2<<HEADER3; p->show(); } cout<<"\n\t\t数学成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl; cout<<"输入任意字符,继续"; getch(); };break; case2: { cout<<"\n\t\t请输入分数段的起始分数和终止分数:"; cin>>m; cin>>n; for(p=Head;p!=End;p=p->next) if(p->chinese>=m&&p->chinese<=n) { count++; if(count==1) cout<<endl<<HEADER1<<HEADER2<<HEADER3; p->show(); } cout<<"\n\t\t语文成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl; cout<<"输入任意字符,继续"; getch(); };break; case3: { cout<<"\n\t\t请输入分数段的起始分数和终止分数:"; cin>>m; cin>>n; for(p=Head;p!=End;p=p->next) if(p->english>=m&&p->english<=n) { count++; if(count==1) cout<<endl<<HEADER1<<HEADER2<<HEADER3; p->show(); } cout<<"\n\t\t英语成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl; cout<<"输入任意字符,继续"; getch(); };break; }}voidStudentMassage::Swap(Student*p1,Student*p2)//交p1,p2学生信息{ Student*temp=newStudent; strcpy(temp->name,p1->name); strcpy(temp->id,p1->id); temp->math=p1->math; temp->chinese=p1->chinese; temp->english=p1->english; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->id,p2->id); p1->math=p2->math; p1->chinese=p2->chinese; p1->english=p2->english; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->id,temp->id); p2->math=temp->math; p2->chinese=temp->chinese; p2->english=temp->english; p2->sum=temp->sum;}voidStudentMassage::Sort()//排序{ Student*p=NULL,*p1=NULL,*k=NULL; intn=StudentMassage::ListCount(),x,y; if(n<2) { cout<<"数据较少,无法排序!"<<endl; return; } cout<<"\n\t\t**************************************\n"; cout<<"\t\t\t1、按数学成绩排序"<<endl; cout<<"\t\t\t2、按语文成绩排序"<<endl; cout<<"\t\t\t3、按英语成绩排序"<<endl; cout<<"\t\t\t4、按总分排序"; cout<<"\n\t\t**************************************\n\n\t请选择:"; cin>>x; switch(x) { case1: { cout<<"\n\t\t**************************************\n"; cout<<"\t\t\t1、按降序排序\n\t\t\t2、按升序排序"; cout<<"\n\t\t**************************************\n\n\t请选择:"; cin>>y; if(y==1) { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->math<k->math) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } else { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->math>k->math) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } };break; case2: { cout<<"\n\t\t**************************************\n"; cout<<"\t\t\t1、按降序排序\n\t\t\t2、按升序排序"; cout<<"\n\t\t**************************************\n\n\t请选择:"; cin>>y; if(y==1) { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->chinese<k->chinese) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } else { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->chinese>k->chinese) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } };break; case3: { cout<<"\n\t\t**************************************\n"; cout<<"\t\t\t1、按降序排序\n\t\t\t2、按升序排序"; cout<<"\n\t\t**************************************\n\n\t请选择:"; cin>>y; if(y==1) { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->english<k->english) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } else { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->english>k->english) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } };break; case4: { cout<<"\n\t\t**************************************\n"; cout<<"\t\t\t1、按降序排序\n\t\t\t2、按升序排序"; cout<<"\n\t\t**************************************\n\n\t请选择:"; cin>>y; if(y==1) { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->sum<k->sum) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } else { for(p=Head->next;p!=End;p=p->next) for(k=p->next;k!=End;k=k->next) { if(p->sum>k->sum) StudentMassage::Swap(p,k); } cout<<"\n\t\t排序完成!"<<endl; StudentMassage::Display(); getch(); } };break; }}voidStudentMassage::save()//存入文件{ out.open("sort.txt"); for(Student*p=Head->next;p!=End;p=p->next) out<<p->name<<"\t"<<p->id<<"\t"<<p->math<<"\t"<<p->chinese<<"\t"<<p->english<<"\t"<<p->sum<<'\n'; out.close();}voidmain(){ intx; boolquit=false; cout<<"\n\n\n\n\n\n\n\n"; cout<<"\t\t********************************************"<<endl; cout<<"\t\t欢迎使用学生成绩管理系统!"<<endl; cout<<"\t\t********************************************"<<endl; StudentMassageGrade; Sleep(1000); while(!quit) { system("cls"); Grade.ShowMenu(); cin>>x; switch(x) { case0:quit=true;break; case1:Grade.AddItem();break; case2:Grade.RemoveItem();break; case3:Grade.ModifyItem();break; case4:Grade.Display();break; case5:Grade.Find();break; case6:Grade.Sort();break; case7:Grade.Count();break; } }}实验总结通过编写这个纯dos系统下的控制台程序,加深了我对如何用C++编写一个简单的应用程序的理解。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的菜单界面,将各个功能集中出来按照程序编写原则,便于查询。
有界面的MFC项目设计内容以学生成绩管理系统为例,通过对简单应用软件系统的设计,编制、调试,实现简单的增加、删除、排序等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。
设计说明(1)包含的功能有:查看、增加、删除、排序、筛选等功能。
(2)通过access创建数据库并通过OD方式访问数据库。
(3)编辑界面上的不同按钮,创建消息映射,以完成相关的各种操作。3、设计步骤(1)创建数据库:
打开access,并创建一个新表“学生成绩管理表”,输入相关内容,选择类型,完成后保存。(2)添加ODBC数据源打开“ODBC数据源管理器”
添加继续(3)在MFC中创建相关按键并设置好属性及ID为每个编辑框控件绑定数据源字段:选定一个编辑框控件,右键
|
建立类向导
|
成员变量标签
|class
name列表下选CmySet(数据库的结果集)。
先将Member中不好记的值通过“Delete
Variable”删除,再“Add
Vairiables”添加,改为自己好记的的名字。将编辑框(在CmyView视图类中)与上述变量绑定:Add
Variable…现在为功能键的实现进行操作
增加新的对话框(窗体)及创建类成员在查询或过滤记录时,需要一个对话框,用于添加信息,增加对话框的方法:
VC主菜单,“插入”|“资源”|“对话框(Dialog)类型”|
放一个“分组框控件”|
在分组框内按图设置编辑框和按钮:建立类向导,分配好成员变量并绑定好为其中的“确定”按钮添加代码:voidCDlgADD::OnOK(){ //TODO:Addextravalidationhere UpdateData(); if(m_id==0||m_name==""||m_chinese==0||m_math==0||m_english==0||m_sum==0) { MessageBox("请完整输入数据"); return; } CDialog::OnOK();}同理,添加查询条件的对话框:建立类向导添加功能键的代码:
双击向导中的“IDD_MY_FORM”,双击主界面的“增加记录”按钮voidCMyView::OnButton1Add(){ //TODO:Addyourcontrolno
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年从江县带编教师招聘笔试备考试题及答案解析
- 2026年拜城县带编教师招聘笔试模拟试题及答案解析
- 日照市2026-2027学年中考猜题数学试卷(含答案解析)
- 2026年霍邱县带编教师招聘笔试模拟试题及答案解析
- 2026年浚县带编教师招聘考试模拟试题及答案解析
- 2026年祥云县带编教师招聘笔试参考题库及答案解析
- 2026年天全县带编教师招聘笔试参考题库及答案解析
- 合肥工业大学应用物理学评测
- 2026年巍山彝族回族自治县带编教师招聘考试参考题库及答案解析
- 2026年新平彝族傣族自治县带编教师招聘笔试参考题库及答案解析
- 广告牌制作安装工程施工方案
- 2026-2030中国钢渣粉市场营销状况与发展前景预测分析研究报告
- 2026年秋季新教材统编版九年级上册道德与法治全册知识点背诵提纲精简版
- 资产评估事务所内部制度
- 2025年苏州资产管理有限公司招聘笔试备考试题及答案解析
- 物流运输安全作业指导手册
- 安全管理AB角工作制度
- 放射科CT检查操作规范培训
- 电气设备操作说明书范本
- 2026年大学生人文知识竞赛题库及答案
- 学生营养知识
评论
0/150
提交评论