资源描述
湖南科技学院
课程设计报告
课程名称:
计算机高级语言(C++)课程设计
课程设计题目:
学生通讯管理系统
系:
数学与计算科学系
专 业:
信息与计算科学
年级、班:
信计0801
姓 名:
谭鄱仑
学 号:
指导教师:
牛志毅
职 称:
讲师
2023年12月
目 录
课程实验报告--------------------------------3
一、需求分析---------------------------------------------3
二、概要设计---------------------------------------------3
三、程序实现思绪-----------------------------------------7
四、设计总结---------------------------------------------7
五、参考文献---------------------------------------------7
六、源代码-----------------------------------------------8
七、运营情况…………………………………………………………16
C++语言程序设计报告
一、 需求分析
用C++编写下面程序
学生成绩记录管理系统(*****)
规定实现如下功能:
①成绩的输入(学号、姓名、英语、数学、C++语言…)。
②成绩记录(各科平均成绩、各科成绩“优秀”、“良好”、“中档”、“及格”、“不及格”的人数及其所占比例)。
③总成绩记录(学生的总成绩、平均成绩及成绩排名)。
④成绩的记录结果显示。
⑤学生数据的添加、修改、与删除。
⑥学生数据的读取与存储。
二、 概要设计
重要数据定义以及各程序模块的功能:
Student类中:
class Student
{
private:
int id;//学号
string name;//姓名
double score[3];
int x;//指示是否存储了数据
double all;//总成绩
int rank;//名次
string dengji;//等级
public:
Student();//构造函数
void SetStudentID(int);//输入学生学号
int StudentID();//返回学生学号
void SetStudentName(string str);//输入学生姓名
string StudentName();//返回学生姓名
void SetStudentScore(double y,double s,double c);//输入学生成绩
double StudentYscore();//返回学生英语成绩
double StudentSscore();//返回学生数序成绩
double StudentCscore();//返回学生C++成绩
void SetStudentX(int n);//给鉴定学生数据存在与否的X赋值
void Getall();//计算学生总成绩
void SetRank();//给学生名次值加1
int Rank();//返回学生名次值
int StudentX();//返回鉴定X的值,鉴定是否修改
void RankClear();//给学生的名次赋值为1
void Setdengji(string dengji);//输入等级
double All();//返回学生总成绩
string StudentDengji();//返回学生等级值
};
Studentifo类中:
class Studentifo
{
private:
int num;//学生个数
Student *stu;//定义指向存储学生类的指针
public:
Studentifo(int n);//构造函数
void LoadID(int n);//输入学生学号
void LoadName(int ,string name);//输入学生姓名
void LoadScore(int ,double,double,double);//输入学生各科成绩
void Setifo();//插入学生数据
void Putifo();//输出所有学生数据
void Clear();//清除所有学生数据
void PutID();//输出指定学生数据
void ClearID();//删除指定学生数据
void MakeRank();//给所有学生排名
void ReSetifo();//修改指定学生数据
void ClearRank();//给指定学生的名次值赋为1
void MakeAll();//计算各个学生的总成绩
void PutifoRank();//按名次输出所有学生数据
int ID(int n);//返回学生学号
double Yscore(int);//返回学生英语成绩
double Sscore(int);//返回学生数学成绩
double Cscore(int);//返回学生C++成绩
double StudentAll(int n);//返回学生总成绩
int StudentRank(int n);//返回学生名次
string Name(int);//返回学生名次
int X(int);//指定X值,拟定是否有存储数据
string Dengji(int n);//返回学生等级
void Numadd();//num值加1
void Xfix(int);//将指定学生的X指示值赋为1
~Studentifo();//析构函数释放new创建的空间
};
类外:
void DoMenu(int n,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行
void Load(Studentifo *S);//从文献中载入学生信息
void Save(Studentifo *S);//将学生信息保存到文献
void ShowTip(); //显示操作提醒
void ShowMenu(); //显示菜单
主函数的程序流程图
开始
输出菜单及提醒信息
输入功能数字
1
N
2
Y
N
3
清除学生数据
Y
N
4
插入学生数据
N
N
Y
Y
5
删除指定学生数据
6
N
7
Y
Y
超找指定学生数据
修改指定学生数据
按名次输出学生信息
8
N
9
输出所有学生综合信息
载入数据
10
退出
保存
结束
三 程序实现思绪
本程序通过Studentifo类开辟一个Student的类数组用已储存学生数据。通过Studentifo类的公有函数和Student的公有函数进行关联,对Student类里的私有学生数据进行操作,达成输入,解决,输出学生数据的功能。同时运用文献输入输出流在项目文献夹中创建一个date.txt文档进行学生数据的保存与读取。
四 设计总结
(1)摆正心态,不心浮气躁
刚拿到题目,难免会觉得特别迷茫,无从下手,这时假如心浮气躁则会更加的觉得困难重重。但当我摆正心态,静小心来慢慢思考的时候,一个个的思绪不断的的冒出,头脑中的想法远比实践过的多。此时,困难已不是从何下手,而是如何下手会是程序更趋完美。
(2)一鼓作气,个个击破
一旦开始了编程后,就要一鼓作气的继续下去。选择个个击破,然后将所有的程序在组合起来,不久主程序的雏形就能展现出来,接下来的就只是一点点的修改关联是的小错误了。用不了多久任务即可完毕,特有成就感。但是假如断断续续的则会在每次编的时候被冗杂而繁多的定义弄糊涂,从而没有心情继续下去。
(3)有目的地修改、完善
运营时会出现一些错误,但我发现其实里面的参数并不复杂,只要跟着那个error的提醒,一个一个的改下去,其实很简朴的。结果事实也是如此,看完书后,只用了一个小时多一点,102个错误所有搞定了。错误几乎为以下三类:
1. 冒号,分号等符号打错了;
2. 大小写等导致的相应问题;
3. 变量的不完全修改。
改完以后,在执行时我发现界面不好看,于是我又将主界面略加修改了些。看上去美观了不少。再运营功能,前四个都能顺利运营,但对比例饼状图我傻眼了。不管我输入数据与否,输入了什么数据,结果都是同样的,相称离谱。我又糊涂了,搞不清是怎么回事。于是,又去问同学,在他们的帮助下,成功解决这个问题,在此真要好好谢谢他们!
终于大功告成!欣慰在这次实践中,我不仅填补了自己在C++课上所落下的内容,特别是指针那块部分,虽然现在概念搞的还不是很懂,但看见程序是可以理解的。这次C++实践是给我们这一学期来所学知识的一个总复习,总的实践。它让我们把所知道的知识点运用的更好,把不知道的知识点搞得明白了。实践出真知,通过这次实践,我也系统的把课本好好的回顾了下。猛然觉得,C++二级考试也有些把握了。
五 参考文献
谭浩强. C++程序设计. 清华大学出版社, 2023.5
六 源程序
main.cpp
/*****************************************
课程设计题目:学生信息管理系统
班级:0901
学号:
姓名:谭鄱仑
*****************************************/
#include"student.h"
int main()
{
int i=0;
char ok;
Studentifo stuifo;
Studentifo *ifo=&stuifo;
ShowMenu();
cout<<"选择相应数字进行操作:";
while(i!=9)
{
cin>>i;
system("cls");
ShowMenu();
DoMenu(i,ifo);
ShowTip();
}
if(flag)
cout<<"数据已改动,是否保存Y/N";
cin>>ok;
if(ok=='Y'||ok=='y')
{
ifo->MakeAll();
ifo->ClearRank();
ifo->MakeRank();
Save(ifo);
cout<<"数据已保存...按任意键安全退出";
}
else
cout<<"已安全退出...按任意键返回";
}
Student.h
#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED
#include<iostream>
#include<cstdlib>
#include<string>
#include<fstream>
#include<sstream>
#include<iomanip>
using namespace std;
class Student
{
private:
int id;//学号
string name;//姓名
double score[3];
int x;//指示是否存储了数据
double all;//总成绩
int rank;//名次
string dengji;//等级
public:
Student();//构造函数
void SetStudentID(int);//输入学生学号
int StudentID();//返回学生学号
void SetStudentName(string str);//输入学生姓名
string StudentName();//返回学生姓名
void SetStudentScore(double y,double s,double c);//输入学生成绩
double StudentYscore();//返回学生英语成绩
double StudentSscore();//返回学生数序成绩
double StudentCscore();//返回学生C++成绩
void SetStudentX(int n);//给鉴定学生数据存在与否的X赋值
void Getall();//计算学生总成绩
void SetRank();//给学生名次值加1
int Rank();//返回学生名次值
int StudentX();//返回鉴定X的值,鉴定是否修改
void RankClear();//给学生的名次赋值为1
void Setdengji(string dengji);//输入等级
double All();//返回学生总成绩
string StudentDengji();//返回学生等级值
};
class Studentifo
{
private:
int num;//学生个数
Student *stu;//定义指向存储学生类的指针
public:
Studentifo(int n);//构造函数
void LoadID(int n);//输入学生学号
void LoadName(int ,string name);//输入学生姓名
void LoadScore(int ,double,double,double);//输入学生各科成绩
void Setifo();//插入学生数据
void Putifo();//输出所有学生数据
void Clear();//清除所有学生数据
void PutID();//输出指定学生数据
void ClearID();//删除指定学生数据
void MakeRank();//给所有学生排名
void ReSetifo();//修改指定学生数据
void ClearRank();//给指定学生的名次值赋为1
void MakeAll();//计算各个学生的总成绩
void PutifoRank();//按名次输出所有学生数据
int ID(int n);//返回学生学号
double Yscore(int);//返回学生英语成绩
double Sscore(int);//返回学生数学成绩
double Cscore(int);//返回学生C++成绩
double StudentAll(int n);//返回学生总成绩
int StudentRank(int n);//返回学生名次
string Name(int);//返回学生名次
int X(int);//指定X值,拟定是否有存储数据
string Dengji(int n);//返回学生等级
void Numadd();//num值加1
void Xfix(int);//将指定学生的X指示值赋为1
~Studentifo();//析构函数释放new创建的空间
};
void DoMenu(int n,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行
void Load(Studentifo *S);//从文献中载入学生信息
void Save(Studentifo *S);//将学生信息保存到文献
void ShowTip(); //显示操作提醒
void ShowMenu(); //显示菜单
#include"studentifo.h"
#endif // STUDENT_H_INCLUDED
Studentifo.h
#ifndef STUDENTIFO_H_INCLUDED
#define STUDENTIFO_H_INCLUDED
bool flag=false ;//数据是否修改过的标志
Student::Student()
{
id=0;
name="";
score[0]=0;
score[1]=0;
score[2]=0;
x=2;
all=0;
rank=1;
dengji="";
}
void Student::SetStudentID(int n)
{
id=n;
}
void Student::SetStudentName(string str)
{
if(str=="\0")
{
string str1;
cout<<"输入姓名:";
cin>>str1;
this->name=str1;
}
else
this->name=str;
}
void Student::SetStudentScore(double y,double s,double c)
{
if(y!=0||s!=0||c!=0)
{
score[0]=y;
score[1]=s;
score[2]=c;
}
else
{
double a,b,c;
cout<<"输入英语成绩:";
cin>>a;
cout<<"输入数学成绩:";
cin>>b;
cout<<"输入C++成绩:";
cin>>c;
score[0]=a;
score[1]=b;
score[2]=c;
}
}
int Student::StudentID()
{
return id;
}
string Student::StudentName()
{
return name;
}
double Student::StudentYscore()
{
return score[0];
}
double Student::StudentSscore()
{
return score[1];
}
double Student::StudentCscore()
{
return score[2];
}
void Student::SetStudentX(int n)
{
x=n;
}
int Student::StudentX()
{
return x;
}
void Student::Getall()
{
this->all=0;
this->all=score[0]+score[1]+score[2];
double n;
n=all/3;
if(0<=n&&n<60)
this->dengji="不及格";
else if(60<=n&&n<70)
this->dengji="及格";
else if(70<=n&&n<80)
this->dengji="中档";
else if(80<=n&&n<90)
this->dengji="良好";
else
this->dengji="优秀";
}
double Student::All()
{
return all;
}
void Student::SetRank()
{
rank+=1;
}
int Student::Rank()
{
return rank;
}
void Student::RankClear()
{
rank=1;
}
void Student::Setdengji(string dengji)
{
this->dengji=dengji;
}
string Student::StudentDengji()
{
return dengji;
}
Studentifo::Studentifo(int n=100)
{
num=0;
stu=new Student[n];
}
Studentifo::~Studentifo()
{
delete stu;
}
void Studentifo::Numadd()
{
num+=1;
}
void Studentifo::LoadID(int n)
{
stu[n].SetStudentID(n);
}
void Studentifo::LoadName(int n,string name)
{
stu[n].SetStudentName(name);
}
void Studentifo::LoadScore(int n,double y,double s,double c)
{
stu[n].SetStudentScore(y,s,c);
}
void Studentifo::Setifo()
{
int n;
cout<<"输入学号:";
cin>>n;
if(stu[n].StudentX()==1||n<=0)
cout<<"该学号已有或者学号信息错误"<<endl;
else
{
stu[n].SetStudentID(n);
stu[n].SetStudentName("\0");
stu[n].SetStudentScore(0,0,0);
stu[n].SetStudentX(1);
num++;
cout<<endl;
}
}
void Studentifo::Putifo()
{
int i,s1=0,y1=0,c1=0,y2=0,s2=0,c2=0,y3=0,s3=0,c3=0,y4=0,s4=0,c4=0,y5=0,s5=0,c5=0;
double Y=0,S=0,C=0;
if(num==0)
cout<<"没有学生数据"<<endl;
else
{
cout<<" |***************************学生综合信息**************************|"<<endl;
cout<<" | 学号"<<"\t"<<"姓名"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"C++"<<"\t"<<"总成绩"<<"\t"<<"名次"<<"\t"<<"等级 |"<<endl;
cout<<" |*****************************************************************|"<<endl;
for(i=1; i<=100; i++)
{
if(stu[i].StudentX()==1)
{
Y+=stu[i].StudentYscore();
S+=stu[i].StudentSscore();
C+=stu[i].StudentCscore();
cout<<" | "<<stu[i].StudentID()<<'\t';
cout<<stu[i].StudentName()<<'\t';
cout<<stu[i].StudentYscore()<<'\t';
cout<<stu[i].StudentSscore()<<'\t';
cout<<stu[i].StudentCscore()<<'\t';
stu[i].Getall();
cout<<stu[i].All()<<'\t';
cout<<stu[i].Rank()<<'\t';
cout<<stu[i].StudentDengji();
cout<<"\t|"<<endl;
cout<<" |*****************************************************************|"<<endl;
}
if(stu[i].StudentX()==1)
{
if(stu[i].StudentYscore()>=0&&stu[i].StudentYscore()<60)
y1++;
else if(stu[i].StudentYscore()>=60&&stu[i].StudentYscore()<70)
y2++;
else if(stu[i].StudentYscore()>=70&&stu[i].StudentYscore()<80)
y3++;
else if (stu[i].StudentYscore()>=80&&stu[i].StudentYscore()<90)
y4++;
else
y5++;
if(stu[i].StudentSscore()>=0&&stu[i].StudentSscore()<60)
s1++;
else if(stu[i].StudentSscore()>=60&&stu[i].StudentSscore()<70)
s2++;
else if(stu[i].StudentSscore()>=70&&stu[i].StudentSscore()<80)
s3++;
else if (stu[i].StudentSscore()>=80&&stu[i].StudentSscore()<90)
s4++;
else
s5++;
if(stu[i].StudentCscore()>=0&&stu[i].StudentCscore()<60)
c1++;
else if(stu[i].StudentCscore()>=60&&stu[i].StudentCscore()<70)
c2++;
else if(stu[i].StudentCscore()>=70&&stu[i].StudentCscore()<80)
c3++;
else if (stu[i].StudentCscore()>=80&&stu[i].StudentCscore()<90)
c4++;
else
c5++;
}
}
cout<<" ___________________________________________________"<<endl;
cout<<" |********************各科成绩信息*******************|"<<endl;
cout<<"\t |\t"<<"\t"<<"英语"<<"\t\t"<<"数学"<<"\t\t"<<"C++\t |"<<endl;
cout<<"\t |平均成绩\t"<<Y/num<<"\t\t"<<S/num<<"\t\t"<<C/num<<"\t |"<<endl;
cout<<"\t |不及格\t"<<100*double(y1)/num<<"%"<<"\t\t"<<100*double(s1)/num<<"%"<<"\t\t"<<100*double(c1)/num<<"%"<<"\t |"<<endl;
cout<<"\t |及格\t"<<setprecision(4)<<100*double(y2)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s2)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c2)/num<<"%"<<"\t |"<<endl;
cout<<"\t |中档\t"<<setprecision(4)<<100*double(y3)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s3)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c3)/num<<"%"<<"\t |"<<endl;
cout<<"\t |良好\t"<<setprecision(4)<<100*double(y4)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s4)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c4)/num<<"%"<<"\t |"<<endl;
cout<<"\t |优秀\t"<<setprecision(4)<<100*double(y5)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s5)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c5)/num<<"%"<<"\t |"<<endl;
cout<<" |___________________________________________________|"<<"\n"<<endl;
cout<<"*********************************各等级人数*********************************"<<endl;
cout<<"成绩"<<"\t"<<"优秀"<<"\t"<<"良好"<<"\t"<<"中档"<<"\t"<<"及格"<<"\t"<<"不及格为"<<endl;
cout<<"英语"<<"\t "<<y5<<"\t "<<y4<<"\t "<<y3<<"\t "<<y2<<"\t "<<y1<<endl;
cout<<"数学"<<"\t "<<s5<<"\t "<<s4<<"\t
展开阅读全文