C++课程设计报告(学生成绩管理系统)
更新时间:2024-06-02 22:50:01 阅读量: 综合文库 文档下载
学生成绩管理系统
说明:该课程设计包含两个部分,一个为纯dos系统下的控制台程序,用C++编写;另一个为有界面的MFC项目。
目录
纯dos系统下的控制台程序
1、设计要求...........................................3 2、设计分析...........................................3 3、调试说明...........................................4 4、源代码.............................................8 5、实验总结..........................................21 有界面的MFC项目
1、设计内容...........................................22 2、设计说明..........................................22 3、设计步骤..........................................22 4、运行演示..........................................27 5、实验总结..........................................29
1
纯dos系统下的控制台程序
1、设计要求
现有学生成绩信息,内容如下:
姓名 学号 语文 数学 英语 张明明 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)写出课程设计报告,具体要求见相关说明文档
2、设计分析
(1)需求分析:
该程序要能实现对学生成绩信息的增加、删除、修改,实现对学生按姓名查询,按学号查询显示,对任意一个课程名和分数段的学生人数进行输出并统计人数,最好还要根据用户的需求对学生成绩排序。 (2)系统性能要求:
a.系统安全、可靠; b.功能齐全;
c.操作方便、界面友好; d.易于维护和扩充。 (3)系统功能模块:
学生成绩管理系统包括:增加、删除、修改、显示、信息查询、成绩统计、排序几个部分构成。
2
(4)模块框架图 删除 增加 学生成绩管理系统 修改 显示 信息查询 成绩统计 排序 按学号查询 按姓名查询 输入课程名和分数段统计 输入课程名和升降序排序
3、调试说明
运行程序后,现出来一个简洁的主界面。
若没有学生信息,显示“这是一个新系统,无学生信息,请先输入。”若已存在学生信息,显示“读取学生信息成功!”
3
一秒钟后,自动切入主菜单界面。
首先选择1,增加学生信息。
录入学生信息后选择4,显示学生信息。
选择2,删除学生信息,输入要删除的学生姓名,这里我输入的是王露,显
4
示剩下几位同学的信息。
选择3,修改学生信息,输入要修改的学生姓名,然后输入新的学生信息,这里我修改的是张明明,显示修改后的学生信息。
将张明明和王露的信息重新输入。 输入5,信息查询,出来选择界面,“1、按学生姓名查找”、“2、按学生学号查找”,输入1,运行结果如下:
5
输入2,运行结果如下:
输入6,排序,显示选择界面,用户可根据需求选择科目和升降序,这里我是按语文成绩降序排序。
6
输入7,成绩统计,用户自行输入要统计的科目和分数段进行统计。这里我统计的是英语成绩在60—90的学生。
4、源程序代码
#include
#define HEADER1 \ -----------------------------学生成绩----------------------------\\n\
#define HEADER2 \姓名 | 学号 | 数学 | 语文 | 英语 | 总分 |\\n\#define HEADER3 \|----------|----------|----------|----------|----------|----------|\\n\
class Student //定义学生类 {
public:
char name[20] ; char id[20] ; int math ; int chinese ;
7
int english ; int sum ;
Student *next ; void input() ;
void ReadFile(istream & in) ; void show() ; } ;
void Student::input() //输入学生信息函数 {
cout<<\请输入:\ cout<<\姓名:\ cin>>name ;
cout<<\学号:\ cin>>id ;
cout<<\数学成绩:\ cin>>math ;
cout<<\语文成绩:\ cin>>chinese ;
cout<<\英语成绩:\ cin>>english ;
sum = math + chinese + english ; }
void Student::ReadFile(istream & in) //读取文件 {
in>>name>>id>>math>>chinese>>english>>sum ; }
void Student::show() //输出学生信息 {
cout<<\ |\ |\|\ |\|\ cout<<\
|----------|----------|----------|----------|----------|----------|\\n\}
class StudentMassage //定义学生信息类,包含各项处理功能 {
public:
StudentMassage() ; ~StudentMassage() ;
8
void ShowMenu() ; void Display() ; void AddItem() ; void Find() ; void save() ;
void ModifyItem() ; void RemoveItem() ;
void Swap(Student *p1 , Student *p2) ; void Sort() ; int ListCount() ; int Count() ; private:
Student *Head , *End ; ifstream in ; ofstream out ;
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)) return p ; return NULL ; }
Student *StudentMassage::FindId(char *id) {
Student *p ;
for(p = Head ; p->next != End ; p = p->next) if(!strcmp(p->next->id , id)) return p ; return NULL ; }
StudentMassage::StudentMassage() //构造函数 {
Head = new Student ;
Head->next = new Student ; End = Head->next ; in.open(\ if(!in)
9
cout<<\这是一个新系统,无学生信息,请先输入。\ else {
while(!in.eof()) {
End->ReadFile(in) ; if(End->name[0]=='\\0') break ;
End->next = new Student ; End = End->next ; }
in.close() ;
cout<<\读取学生信息成功!\ } }
StudentMassage::~StudentMassage() //析构函数 {
Student *temp ; save() ;
for(temp ; Head->next != End ; ) {
temp = Head->next ;
Head -> next = Head ->next->next ; delete temp ; }
delete Head , End ; }
void StudentMassage::ShowMenu() //显示菜单 {
cout<<\主菜单\
cout<<\; cout<<\、增加学生信息 2、删除学生信息\; cout<<\、修改学生信息 4、显示学生信息\; cout<<\、信息查询 6、排序\ cout<<\、成绩统计 0、安全退出\ cout<<\ cout<<\请选择:\} void StudentMassage::Display() //显示学生信息 { 10 Student *p ; cout< for(p = Head->next ; p != End ; p = p->next) p->show() ; cout<<\输入任意字符,继续......\ getch() ; } void StudentMassage::AddItem() //添加学生信息 { End->input() ; End->next = new Student ; End = End->next ; cout<<\添加成功!\ cout<<\输入任意字符,继续......\ getch() ; } void StudentMassage::Find() //查找函数 { char name[20] , id[20] ; int x ; Student *p = NULL ; cout<<\ cout<<\、按学生姓名查找\ cout<<\、按学生学号查找\ cout<<\请选择:\ cin>>x ; switch(x) { case 1: //按姓名查找 { cout<<\请输入要查找的学生的姓名:\ cin>>name ; if(p = FindItem(name)) { cout< cout<<\请输入任意字符,继续......\ getch() ; } else { 11 cout<<\没有找到该姓名的学生!\ cout<<\请输入任意字符,继续......\ getch() ; } } break ; case 2: //按学号查找 { cout<<\请输入要查找的学生的学号:\ cin>>id ; if(p = FindId(id)) { cout< cout<<\请输入任意字符,继续......\ getch() ; } else { cout<<\没有找到该学号的学生!\ cout<<\请输入任意字符,继续......\ getch() ; } } break ; } } void StudentMassage::ModifyItem() //修改学生信息 { char name[20] ; Student *p = NULL ; cout<<\请输入要修改的学生的姓名:\ cin>>name ; if(p = FindItem(name)) { cout<<\已找到该学生,请输入新的信息!\ p->next->input() ; cout<<\修改成功!\ Display() ; } else { cout<<\没有找到!\ cout<<\输入任意字符!继续.......\ getch() ; 12 } } void StudentMassage::RemoveItem() //删除学生信息 { char name[20] ; Student *p = NULL , *temp = NULL ; cout<<\请输入要删除的学生的姓名:\ cin>>name ; if(p = FindItem(name)) { temp = p->next ; p->next = p->next->next ; delete temp ; cout<<\删除成功!\ Display() ; } else { cout<<\没有找到!\ cout<<\输入任意字符!继续......\ getch() ; } } int StudentMassage::ListCount() //返回记录的学生总数 { Student *p ; int n = 0 ; if(!Head) return 0 ; for(p = Head->next ; p != End ; p = p->next) n ++ ; return n ; } int StudentMassage::Count() //成绩统计 { Student *p ; int x , m , n ,count = 0 ; if(!Head) { cout<<\没有资料可以统计!\ return 0 ; 13 } cout<<\ cout<<\、统计数学成绩\ cout<<\、统计语文成绩\ cout<<\、统计英语成绩\ cout<<\ cout<<\请选择:\ cin>>x ; switch(x) { case 1 : { cout<<\请输入分数段的起始分数和终止分数:\ cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->math >=m && p->math <= n) { count ++ ; if(count == 1) cout< cout<<\数学成绩在\的学生共有\人!\\n\ cout<<\输入任意字符,继续.......\ getch() ; } ; break ; case 2: { cout<<\请输入分数段的起始分数和终止分数:\ cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->chinese >=m && p->chinese <= n) { count ++ ; if(count == 1) cout< cout<<\语文成绩在\的学生共有\人!\\n\ cout<<\输入任意字符,继续.......\ 14 getch() ; } ; break ; case 3: { cout<<\请输入分数段的起始分数和终止分数:\ cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->english >=m && p->english <= n) { count ++ ; if(count == 1) cout< cout<<\英语成绩在\的学生共有\人!\\n\ cout<<\输入任意字符,继续.......\ getch() ; } ; break ; } } void StudentMassage::Swap(Student *p1 , Student *p2) //交p1,p2学生信息 { Student *temp = new Student ; 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 ; 15 p2->sum = temp->sum ; } void StudentMassage::Sort() //排序 { Student *p = NULL , *p1 = NULL , *k = NULL ; int n = StudentMassage::ListCount() , x , y ; if(n < 2) { cout<<\数据较少,无法排序!\ return ; } cout<<\ cout<<\、按数学成绩排序\ cout<<\、按语文成绩排序\ cout<<\、按英语成绩排序\ cout<<\、按总分排序\ cout<<\请选择:\ cin>>x ; switch(x) { case 1: { cout<<\ cout<<\、按降序排序\\n\\t\\t\\t 2、按升序排序\ cout<<\请选择:\ 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<<\排序完成!\ StudentMassage::Display() ; getch() ; } else { for(p = Head->next ; p != End ; p = p->next) 16 for(k = p->next ; k != End ; k = k->next) { if(p->math > k->math) StudentMassage::Swap(p , k) ; } cout<<\排序完成!\ StudentMassage::Display() ; getch() ; } } ; break ; case 2: { cout<<\ cout<<\、按降序排序\\n\\t\\t\\t 2、按升序排序\ cout<<\请选择:\ 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<<\排序完成!\ 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<<\排序完成!\ StudentMassage::Display() ; getch() ; } } ; break ; case 3: { 17 cout<<\ cout<<\、按降序排序\\n\\t\\t\\t 2、按升序排序\ cout<<\请选择:\ 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<<\排序完成!\ 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<<\排序完成!\ StudentMassage::Display() ; getch() ; } } ; break ; case 4: { cout<<\ cout<<\、按降序排序\\n\\t\\t\\t 2、按升序排序\ cout<<\请选择:\ 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) ; 18 } cout<<\排序完成!\ 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<<\排序完成!\ StudentMassage::Display() ; getch() ; } } ; break ; } } void StudentMassage::save() //存入文件 { out.open(\ for(Student *p=Head->next;p!=End;p=p->next) out< void main() { int x ; bool quit = false ; cout<<\ cout<<\ cout<<\欢迎使用学生成绩管理系统!\ cout<<\ StudentMassage Grade ; Sleep(1000) ; while(!quit) { system(\ 19 } } Grade.ShowMenu() ; cin>>x ; switch(x) { case 0:quit = true ; break ; case 1:Grade.AddItem() ; break ; case 2:Grade.RemoveItem() ; break ; case 3:Grade.ModifyItem() ; break ; case 4:Grade.Display() ; break ; case 5:Grade.Find() ; break ; case 6:Grade.Sort() ; break ; case 7:Grade.Count() ; break ; } 5、实验总结 通过编写这个纯dos系统下的控制台程序,加深了我对如何用C++编写一个简单的应用程序的理解。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的菜单界面,将各个功能集中出来按照程序编写原则,便于查询。 20 有界面的MFC项目 1、设计内容 以学生成绩管理系统为例,通过对简单应用软件系统的设计,编制、调试,实现简单的增加、删除、排序等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 2、设计说明 (1)包含的功能有:查看、增加、删除、排序、筛选等功能。 (2)通过access创建数据库并通过OD方式访问数据库。 (3)编辑界面上的不同按钮,创建消息映射,以完成相关的各种操作。 3、设计步骤 (1)创建数据库: 打开access,并创建一个新表“学生成绩管理表”,输入相关内容,选择类型,完成后保存。 (2)添加ODBC数据源 打开“ODBC数据源管理器” 添加 继续 21 (3)在MFC中创建相关按键并设置好属性及ID 为每个编辑框控件绑定数据源字段:选定一个编辑框控件,右键 | 建立类向导 | 成员变量标签 |class name列表下选CmySet(数据库的结果集)。 先将Member中不好记的值通过“Delete Variable”删除,再“Add Vairiables”添加,改为自己好记的的名字。 22 将编辑框(在CmyView视图类中)与上述变量绑定:Add Variable… 现在为功能键的实现进行操作 增加新的对话框(窗体)及创建类成员 在查询或过滤记录时,需要一个对话框,用于添加信息,增加对话框的方法: VC主菜单,“插入”|“资源”|“对话框(Dialog)类型”| 放一个“分组框控件”| 在分组框内按图设置编辑框和按钮: 建立类向导,分配好成员变量并绑定好 23 为其中的“确定”按钮添加代码: void CDlgADD::OnOK() { // TODO: Add extra validation here UpdateData(); if(m_id==0||m_name==\sum==0) { MessageBox(\请完整输入数据\ return; } CDialog::OnOK(); } 同理,添加查询条件的对话框: 24 建立类向导 添加功能键的代码: 双击向导中的“IDD_MY_FORM”,双击主界面的“增加记录”按钮 void CMyView::OnButton1Add() { // TODO: Add your control notification handler code here CDlgADD DlgAdd; if(DlgAdd.DoModal()==IDOK) { m_pSet->AddNew(); m_pSet->m_id=DlgAdd.m_id; m_pSet->m_name=DlgAdd.m_name; m_pSet->m_chinese=DlgAdd.m_chinese; m_pSet->m_math=DlgAdd.m_math; m_pSet->m_english=DlgAdd.m_english; m_pSet->m_sum=DlgAdd.m_sum; m_pSet->Update();//更新记录集 m_pSet->Requery();//重新提取数据 m_pSet->MoveLast();//移动下一条记录 UpdateData(FALSE); //更新视图 } } 此时需要在“学生信息管理系统View.cpp”中添加头文件“#include \” “删除记录”按钮: void CMyView::OnButtonDelete() { // TODO: Add your control notification handler code here try { m_pSet->Delete(); m_pSet->MoveNext(); if (m_pSet->IsEOF()) m_pSet->MoveLast(); if (m_pSet->IsBOF()) m_pSet->SetFieldNull(NULL); UpdateData(FALSE); } 25 catch (CDBException* e) { MessageBox(e->m_strError) ; } } “成绩查询”按钮: void CMyView::OnButtonFind() { // TODO: Add your control notification handler code here CDlgQuery Dlgquery; CString value; if (Dlgquery.DoModal()==IDOK) { value=\学号=+\ m_pSet->m_strFilter=value; m_pSet->Requery(); UpdateData(FALSE); } } 在这个代码文件头包含头文件“#include \”: “排序”按钮(排序代码默认按学号从小到大排序): void CMyView::OnButtonSort() { // TODO: Add your control notification handler code here m_pSet->m_strSort=\学号\ m_pSet->Requery(); UpdateData(FALSE); } 4、运行演示 26 添加功能 成绩查询 27 删除功能(删除对象即为刚刚添加的对象) 5、实验总结 这个设计是用MFC做的,但是在这之前我并没有接触过MFC,所以在得知题 28 目的前几天一直一筹莫展。但是为了完成这个课题,在图书馆和网上找了些资料,自己开始研究探索。开始在网上找到相关的课程设计资料,然后自己开始着手进行自己的设计。一切进行的并不顺利,中间遇到了很多困难,但很开心还是认真完成了自己的任务。虽然这个设计很短小,功能也不强大,但通过自己亲自动手,确实学到了很多东西。 29
正在阅读:
C++课程设计报告(学生成绩管理系统)06-02
(建筑手册) 常用结构计算106-24
数学教师基本功竞赛试题答案04-26
人教版八年级上册地理复习提纲07-17
限车令的是与非11-23
大学毛概考试题库07-27
2013案例作业:日常绩效考核与年度绩效考核如何兼得05-24
程益中04-18
保安领班岗位职责及任职条件09-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 管理系统
- 成绩
- 课程
- 报告
- 学生
- 设计
- 《小雨沙沙沙》-课堂实录
- 中考复读生三大复习阶段技巧
- 3.有机化学基础-学案- b4-教师版
- 2018年河北省邯郸市中考数学二模试卷
- 东师基础会计学16秋在线作业1
- 谈《雾凇》一课的多媒体教学-文档资料
- 《少儿声乐》宫本教材的实践研究 - 图文
- 人教版(2016)七年级语文下册同步练习第6课《 最后一课》(教师版
- 环境应急题(5)
- 中国大学校歌大全
- 刑诉法记忆口诀
- 2014年液晶显示主控板卡交互智能平板移动智能终端行业分析报告
- 网络资源在大学计算机教学中的应用探讨
- 营养师技能复习题2
- 项目管理部党建责任制自查和工作总结
- 幕墙计算书
- 计算机应用论文相关范文精选
- 中南财经政法大学金融学院研究生学业奖学金评定细则
- 机电技术应用专业课程管理制
- 机械制造技术基础考试总复习打印版