c++课程设计
2014-06-20 08:02
513 查看
1、学校学生成绩管理
假设一个学校成绩管理要管理的学生信息包括:班级、学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的),对学生的成绩信息进行管理。
要求实现如下的功能:
实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。
⑴输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩
⑵显示全部学生各科成绩信息;
⑶对各科分班进行成绩统计分析(总分、平均分、最高分、最低分、及格率等);
⑷统计各科各分数段人数及班级信息;
⑸按学号或姓名查找并显示某个学生的各科成绩;
⑹按课程成绩或总分由高到低排序显示;
⑺更新某个学生的基本信息或课程成绩;
⑻设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。
开始界面
成绩录入后
学生信息修改后,且按总分排序
删除学生信息后,且按总分排序
平均分
假设一个学校成绩管理要管理的学生信息包括:班级、学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的),对学生的成绩信息进行管理。
要求实现如下的功能:
实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。
⑴输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩
⑵显示全部学生各科成绩信息;
⑶对各科分班进行成绩统计分析(总分、平均分、最高分、最低分、及格率等);
⑷统计各科各分数段人数及班级信息;
⑸按学号或姓名查找并显示某个学生的各科成绩;
⑹按课程成绩或总分由高到低排序显示;
⑺更新某个学生的基本信息或课程成绩;
⑻设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。
# include <iostream> # include <fstream> # include <string.h> /*#include<windows.h> //延迟 #include <dos.h> //清屏*/ #include <conio.h>//用getch(); using namespace std; class Student //定义学生类 { public: char name[20]; //姓名 char Class[20]; //班级 char Id[20]; //学号 float shudian; //数电成绩 float modian; //模拟成绩 float cchengxu; //C++成绩 float sum; //总分 Student * Next; void Input() //输入学生信息 { cout<<"********************************************************"<<endl; cout<<"* *"<<endl; cout<<"* 录入成绩! *"<<endl; cout<<"* *"<<endl; cout<<"********************************************************"<<endl; cout<<" 请输入学生的姓名:"; cin>>name; cout<<" 请输入学生的班级:"; cin>>Class; cout<<" 请输入学生的学号:"; cin>>Id; cout<<" 请输入数字电路成绩:"; cin>>shudian; cout<<" 请输入模拟电路成绩:"; cin>>modian; cout<<" 请输入C++程序设计成绩:"; cin>>cchengxu; sum=shudian+modian+cchengxu; } void ReadFile(istream & in) { in>>name>>Class>>Id>>shudian>>modian>>cchengxu>>sum; } void Show() { cout<<"********************************************************"<<endl; cout<<"* 该学生的成绩! *"<<endl; cout<<"* *"<<endl; cout<<"* 班级 姓名 学号 *"<<endl; cout<<"* "<<Class<<" "<<name<<" "<<Id<<" *"<<endl; cout<<"* *"<<endl; cout<<"* 科目 成绩 *"<<endl; cout<<"* 数字电路 "<<shudian<<" *"<<endl; cout<<"* 模拟电路 "<<modian<<" *"<<endl; cout<<"* C++程序设计 "<<cchengxu<<" *"<<endl; cout<<"* *"<<endl; cout<<"* 总分 "<<sum<<" *"<<endl; cout<<"* *"<<endl; cout<<"********************************************************"<<endl; /* cout<<"姓名"<<'\t'<<"班级"<<'\t'<<"学号"<<'\t'<<"数字电路"<<'\t'<<"模拟电路"<<'\t'<<"C++程序设计"<<'\t'<<"总成绩"<<'\t'<<"平均成绩"<<endl <<name<<'\t'<<Class<<'\t'<<Id<<'\t'<<shudian<<'\t'<<modian<<'\t'<<cchengxu<<'\t'<<sum<<'\t'<<sum/3<<endl; */ } }; class Studentmassage //定义学生信息类 { public: Studentmassage(); void ShowMenu(); //显示信息 void Find(); //查找信息 void Modify(); //修改信息 void Remove(); //删除信息 void Average(); //求平均数 void Swap(Student *,Student *); //交换两个结点的数据 void Sort(); //对当前链表进行排序 int ListCount(); //统计当前链表的记录总数 void uppassrate();//计算不及格率,优秀率 void Display() //输出学生信息 { Student * p=Head->Next; if (p==End) {cout<<"请先输入学生信息"<<endl<<endl;} else { for(;p!=End;p=p->Next) p->Show(); } cout<<"输入任意按键继续..."; getch(); } void Add() //添加学生信息 { End->Input(); End->Next=new Student; End=End->Next; cout<<"添加成功!"<<endl; cout<<"输入任意按键继续..."; getch(); } private: Student * Head,* End; ifstream in; ofstream out; Student *FindItem(char * name) { for(Student * p=Head;p->Next!=End;p=p->Next)//成功则返回上一个指针,不成功就返回空 if(!strcmp(p->Next->name,name))return p; return NULL; } Student *FindID(char * Id) { for(Student * 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("Studentmessage.txt"); if(!in) cout<<endl<<endl<<"请先录入信息"<<endl; else { End->Next=new Student; End=End->Next; } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::ShowMenu() { cout<<"********************************************************"<<endl; cout<<"* *"<<endl; cout<<"* 欢迎登陆学生成绩查询系统 *"<<endl; cout<<"* *"<<endl; cout<<"********************************************************"<<endl; cout<<"* *"<<endl; cout<<"* 1.录入学生信息 *"<<endl; cout<<"* 2.显示学生信息 *"<<endl; cout<<"* 3.学生成绩排序 *"<<endl; cout<<"* 4.查找学生信息 *"<<endl; cout<<"* 5.删除学生信息 *"<<endl; cout<<"* 6.修改学生信息 *"<<endl; cout<<"* 7.计算平均成绩 *"<<endl; cout<<"* 8.计算不及格率优秀率 *"<<endl; cout<<"* 0.退出系统 *"<<endl; cout<<"* *"<<endl; cout<<"********************************************************"<<endl; cout<<" 请选择:"; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::Find() { char name[20] ,Id[10]; int x; Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { Student * p=NULL; cout<<"1.按学生的姓名查找"<<endl<<"2.按学生学号查找"; cout<<endl<<"请选择:"; cin>>x; switch(x) { case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name; if(p=FindItem(name)) { p->Next->Show(); cout<<"输入任意按键继续..."; getch(); } else { cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl; cout<<"输入任意按键继续..."; getch(); } }break; case 2: { cout<<"\t\t请输入要查找的学生的学号:";cin>>Id; if(p=FindID(Id)) { p->Next->Show(); cout<<"输入任意按键继续..."; getch(); } else { cout<<"\t\t没有找到该学号的学生!"<<'\n'<<endl; cout<<"输入任意按键继续..."; getch(); } }break; } } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::Modify() //修改信息 { char name[20]; Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { Student * p=NULL; cout<<"\t\t请输入要修改的人的姓名:";cin>>name; if(p=FindItem(name)) { cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl; p->Next->Input(); cout<<"修改成功!"<<endl; cout<<"输入任意按键继续..."; getch(); } else { cout<<"\t\t没有找到!"<<endl; cout<<"输入任意按键继续..."; getch(); } } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::Remove() // 删除信息 { char name[20]; Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { Student * p=NULL,*temp=NULL; cout<<"\t\t请输入要删除的学生的姓名:"<<endl; cin>>name; if(p=FindItem(name)) { temp=p->Next; p->Next=p->Next->Next; delete temp; cout<<"\t\t删除成功!"<<endl; cout<<"输入任意按键继续..."; getch(); } else { cout<<"\t\t没有找到!"<<endl; cout<<"输入任意按键继续..."; getch(); } } } void Studentmassage::Average()//求平均成绩函数 { float aver;float b=0; Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { int n=Studentmassage::ListCount(); Student *p;p=Head->Next; for(;p!=End;p=p->Next) {b=b+p->sum;} aver=b/n; cout<<"共"<<n<<"位同学"<<endl<<"平均总成绩是:"<<aver<<endl; b=0;p=Head->Next; for(;p!=End;p=p->Next) {b=b+p->shudian;} aver=b/n; cout<<"数字电路平均成绩是:"<<aver<<endl; b=0;p=Head->Next; for(;p!=End;p=p->Next) {b=b+p->modian;} aver=b/n; cout<<"模拟电路平均成绩是:"<<aver<<endl; b=0;p=Head->Next; for(;p!=End;p=p->Next) {b=b+p->cchengxu;} aver=b/n; cout<<"C++程序设计平均成绩是:"<<aver<<endl; cout<<"输入任意按键继续..."; getch(); } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::Swap(Student *p1, Student *p2)//交换两个结点的数据 { Student *temp=new Student; strcpy(temp->name,p1->name); strcpy(temp->Class,p1->Class); strcpy(temp->Id,p1->Id); temp->shudian=p1->shudian; temp->modian=p1->modian; temp->cchengxu=p1->cchengxu; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->Class,p2->Class); strcpy(p1->Id,p2->Id); p1->shudian=p2->shudian; p1->modian=p2->modian; p1->cchengxu=p2->cchengxu; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->Class,temp->Class); strcpy(p2->Id,temp->Id); p2->shudian=temp->shudian; p2->modian=temp->modian; p2->cchengxu=temp->cchengxu; p2->sum=temp->sum; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ int Studentmassage::ListCount()//统计当前链表的记录总数 { if(! Head) return 0; int n=0; for(Student * p=Head->Next;p!=End;p=p->Next) { n++; } return n; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ void Studentmassage::Sort()//对当前链表进行排序 { Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { int X; cout<<"1.按总分排序"<<endl <<"2.按数字电路成绩排序"<<endl <<"3.按模拟电路成绩排序"<<endl <<"4.按C++程序设计成绩排序"<<endl <<"请输入数字1-4:"<<endl; cin>>X; cout <<"Sorting..."<<endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=Studentmassage::ListCount(); if(n<2) return; switch(X) { case 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 <<"排序完成!"<<endl; getch(); break; case 2: for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) { if(p->cchengxu<k->cchengxu) { Studentmassage::Swap(p,k); } } cout <<"排序完成!"<<endl; getch(); break; case 3: for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) { if(p->modian<k->modian) { Studentmassage::Swap(p,k); } } cout <<"排序完成!"<<endl; getch(); break; case 4: for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) { if(p->shudian<k->shudian) { Studentmassage::Swap(p,k); } } cout <<"排序完成!"<<endl; getch(); break; } } return; } void Studentmassage::uppassrate()//计算不及格率优秀率 { Student *p;p=Head->Next; if(p==End) { cout<<"请先输入学生信息"<<endl<<endl; cout<<"输入任意按键继续..."; getch(); } else { Student *p;p=Head->Next; float k=0;//不及格人数 float h=0;//优秀率 float uppassrateC; float uppassrateM; float uppassrateE;//不及格率 float ExcellentrateC; float ExcellentrateM; float ExcellentrateE;//优秀率 float n=Studentmassage::ListCount();//计算已经输入的学生总数 for(;p!=End;p=p->Next)//计算数字电路不及格率 { if(p->shudian<60) {k++;} else if(p->shudian>90) {h++;} } uppassrateC=k/n; ExcellentrateC=h/n; k=0; h=0; p=Head->Next; for(;p!=End;p=p->Next)//计算模拟电路不及格率 { if(p->modian<60) {k++;} else if(p->modian>90) {h++;} } uppassrateM=k/n; ExcellentrateM=h/n; k=0; h=0; p=Head->Next; for(;p!=End;p=p->Next)//计算C++程序设计不及格率 { if(p->cchengxu<60) {k++;} else if(p->cchengxu>90) {h++;} } uppassrateE=k/n; ExcellentrateE=h/n; cout<<"共"<<n<<"个学生"<<endl; cout<<"数字电路不及格率是:"<<uppassrateC<<" "<<"优秀率是:"<<ExcellentrateC<<endl; cout<<"模拟电路不及格率是:"<<uppassrateM<<" "<<"优秀率是:"<<ExcellentrateM<<endl; cout<<"C++程序设计不及格率是:"<<uppassrateE<<" "<<"优秀率是:"<<ExcellentrateE<<endl; cout<<"输入任意按键继续..."; getch(); } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ int main() { int x=0; bool quit=false; cout<<"**************************************************************"<<endl <<"* *"<<endl <<"* 学生成绩管理系统 *"<<endl <<"* *"<<endl <<"**************************************************************"<<endl; Studentmassage Grade; cout<<endl<<"按任意键开始……"; getch(); while(!quit) { system("cls"); Grade.ShowMenu(); cin>>x; switch(x) { case 0:quit=true;break; case 1:Grade.Add();break; case 2:Grade.Display();break; case 3:Grade.Sort();break; case 4:Grade.Find();break; case 5:Grade.Remove();break; case 6:Grade.Modify();break; case 7:Grade.Average();break; case 8:Grade.uppassrate();break; } } return 0; }
开始界面
成绩录入后
学生信息修改后,且按总分排序
删除学生信息后,且按总分排序
平均分
相关文章推荐
- C++课程设计指导书
- C++版数据结构课程设计(一元多项式)
- [设计] C++课程设计-ATM (纪念大一)
- c++课程设计之通讯录电话簿管理设计
- 关于c++ 课程设计(学生信息管理系统)
- c++程序课程设计的内容--职工工资管理系统
- c++课程设计的收获。
- c++ 课程设计 ——公司设备管理系统
- C++课程设计( 南阳康佳公司的设备管理系统 )
- C++课程设计报告——贪吃蛇和迷宫的设计及实现
- Linux下写的一个C++课程设计
- c++课程设计心得
- C/C++语言课程设计任务书
- [设计] C++课程设计-ATM (纪念大一)
- c++课程设计 对日期的基本运算 使用重载
- 课程设计C++
- c++课程设计题目--"信用卡帐户管理系统"
- C++课程设计小区物业管理系统
- c++课程设计
- C++课程设计 之 俄罗斯方块