为您推荐:
精华内容
最热下载
问答
  • 5星
    578.92MB goodxianping 2021-07-26 13:35:05
  • 5星
    3.77MB GZXGYZ 2021-08-16 09:49:24
  • 5星
    44.24MB lj_70596 2021-01-10 11:34:28
  • 10.88MB guoruibin123 2021-04-24 08:52:12
  • 5星
    814KB qq_40757240 2021-03-26 11:01:15
  • 5星
    5.65MB guoruibin123 2021-04-24 08:40:01
  • 5星
    30.2MB u013522009 2021-04-22 17:25:47
  • 5星
    50.68MB xipengbozai 2021-05-25 21:11:57
  • 5星
    89.84MB qq_17695025 2021-07-06 22:16:17
  • 5星
    43.47MB goodxianping 2021-07-15 14:45:23
  • 588KB wodemaoheise 2019-01-23 17:55:33
  • 4星
    851KB u014532264 2014-07-04 18:44:54
  • 515KB haonanren875689554 2012-03-24 20:18:02
  • 对于初学者而言要想设计良好的面向对象程序具有较大的挑战,其主要表现在问题抽象能力不足、抽象方法不正确以及缺乏高质量的面向对象设计案例。其中案例式学习是提升面向对象设计能力的重要途径,案例式教学通过一个...

    引言

    由于现代软件的高度复杂性使得传统的面向过程程序设计已不能满足需要,取而代之的是面向对象程序设计,其难点在于需要将各类事物进行抽象形成类,然后利用封装、继承和多态的特性进行设计。对于初学者而言要想设计良好的面向对象程序具有较大的挑战,其主要表现在问题抽象能力不足、抽象方法不正确以及缺乏高质量的面向对象设计案例。其中案例式学习是提升面向对象设计能力的重要途径,案例式教学通过一个高质量的案例来详细阐述知识点是什么及如何应用,并带领学习者共同完成,因此具有良好的教学效果。然而,现有的面向对象程序设计案例如学生成绩管理系统大多存在代码命名不规范、代码编码随意性大缺乏严谨性,代码质量较为糟糕,尤其是并未充分体现面向对象的程序设计理念。因此迫切需要一个能够充分体现面向对象的设计理念、代码严谨规范的高质量的入门级学生成绩管理系统的案例,帮助初学者深入的理解面向对象程序设计。

    学生成绩管理系统是各类程序设计课程的一个常见的入门级课程设计项目,业务场景与学生密切相关,因此不需要太多额外的领域知识,系统包括了学生成绩信息的增删改查和排序功能。虽然学生成绩管理系统案例介绍互联网上随处可见,但是质量参差不齐,大多只是介绍了如何实现学生成绩管理系统,对于核心的系统设计部分尤其是如何进行面向对象的设计却很少提及。

    本系列文章针对上述问题进行深入分析和对案例进行充分设计,尤其是重点介绍如何利用面向对象的程序设计理念进行学生管理系统的设计和实现,是一份不可多得的面向对象程序设计的入门教学案例。首先介绍学生成绩管理系统的基本需求,然后以初学者的视角进行系统的设计与实现,接着分析这种设计方式存在的问题,逐步引出面向对象设计在解决这些问题的优势,采用需求驱动和问题驱动相结合的方式,多次迭代的介绍问题和知识点,通过和初学者一起发现问题、解决问题来深刻认识面向对象设计的强大之处。

    部分系统功能结构图

    部分系统截图

    部分系统代码

    学生成绩管理系统(Python版).7z-Python文档类资源-CSDN下载https://download.csdn.net/download/gschen_cn/32566870

    欢迎持续关注后续系列文章,和我们一起来感受面向对象设计的魅力!

    展开全文
    gschen_cn 2021-10-24 08:47:30
  • 题目:学生成绩管理系统 输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5) 要求 用户录入每个学生每门课程的分数; 能够计算每个学生的各门功课总分和平均分,并按总分...

    c++面向对象的课程设计

    题目:学生成绩管理系统
    输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5) 要求 用户录入每个学生每门课程的分数; 能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息; 显示每门科目中,成绩在90分以上的学生信息。另外还输出每门科目中不及格的学生信息; 能按姓名或者学号查找,增加,删除和保存各个学生的信息。
    程序基本功能
    1.能够连续的录入学生的基本信息(包括学号,姓名,性别,各科成绩)
    2能够计算出统计的每个学生的各门科目成绩的总分和平均分,并按总分排序
    3显示每门科目中成绩在90分以上同学的相关信息
    4显示每门科目中成绩在60分以下同学的相关信息
    5能够按照学号查找,增加,删除和保存各个学生的信息
    6.计算全班各门科目成绩的平均分,显示低于平均分同学的相关信息
    程序设计方案和原理
    1.设计student基类与science派生类,包含学号、姓名、性别,与各科成绩
    2.以菜单的形式呈现以上程序功能,输入命令能够连续执行。
    结构图如下:
    在这里插入图片描述
    详细代码如下

    #include <iostream>
    #include <string>
    #include <ctime>
    #include <windows.h>
    using namespace std;
    # define N 5	//班级原始人数
    # define increment 5 		//班级人数增量
    class Student
    {
    	protected:
    		int number;				//学号
    		string name;			//姓名
    		string sex;				//性别
    		int chinese;			//语文成绩
    		int math;				//数学成绩
    		int english;			//英语成绩
    		int Total_score;		//总分
    		int Total_score_order;	//总分顺序
    	public:
    		Student(int number=1705110001,string name="noname",string sex="nosex",int chinese=0,int math=0,int english=0,int Total_score=0)
    		{
    			this->number=number; this->name=name; this->sex=sex;
    			this->chinese=chinese; this->math=math; this->english=english;
    		}
    		Student(Student &s)
    		{
    			this->number=s.number; this->name=s.name; this->sex=s.sex;
    			this->chinese=s.chinese; this->math=s.math; this->english=s.english;
    		}
    		virtual ~Student(){}
    		virtual void display()
    		{
    			cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"性别:"<<sex<<endl<<"语文成绩:"<<chinese<<endl<<"英语成绩:"<<english<<endl;
    		}
    };//Student
    
    class Sscience:public Student
    {
    	protected:
    		int physics;		//物理成绩
    		int chemistry;		//化学成绩
    	public:
    		Sscience(){this->physics=0;this->chemistry=0;}
    		Sscience(int number,string name,string sex,int chinese,int math,int english,int Total_score,int physics,int chemistry):Student(number,name,sex,chinese,math,english,Total_score)
    			{this->physics=physics; this->chemistry=chemistry;}
    		Sscience(Sscience &s):Student(s)
    		{
    			this->physics=s.physics;
    			this->chemistry=s.chemistry; 
    		}
    		virtual ~Sscience(){}
    		void display()
    		{
    			cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"性别:"<<sex<<endl<<"语文成绩:"<<chinese<<endl<<"数学成绩:"<<math<<endl<<"英语成绩:"<<english<<endl<<"物理成绩:"<<physics<<endl<<"化学成绩:"<<chemistry<<endl;
    		}
    		void setall();
    		int getnumber()
    		{
    			return this->number;
    		}
    		string getname()
    		{
    			return this->name;
    		}
    		int getchinese()
    		{
    			return this->chinese;
    		}
    		int getmath()
    		{	
    			return this->math;
    		}
    		int getenglish()
    		{
    			return this->english;
    		}
    		int getphysics()
    		{
    			return this->physics;
    		}
    		int getchemistry()
    		{
    			return this->chemistry;
    		}
    		int getTotal_score()
    		{
    			this->Total_score=this->math+this->chinese+this->english+this->chemistry+this->physics;
    			return this->Total_score;
    		}
    		void resetname()
    		{
    			string n;
    			cout<<"请输入新的名字:"<<endl;
    			cin>>n;
    			this->name=n;
    		}
    		void findname()
    		{
    			string n;
    			cout<<"请输入需要查找的姓名:"<<endl;
    			cin>>n;
    			int flag = 0;		 // 0表示未找到 
    			if(n==this->name)
    			{
    				flag = 1;
    				cout << "该同学在成绩管理系统中存在" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该同学在成绩管理系统中不存在" << endl;
    			}			
    		}
    		void resetsex()
    		{
    			string s;
    			cout<<"请输入新的性别:"<<endl;
    			cin>>s;
    			this->sex=s;
    		}
    		void findsex()
    		{
    			string s;
    			cout<<"请输入需要查找的性别:"<<endl;
    			cin>>s;
    			int flag = 0;		 // 0表示未找到 
    			if(s==this->sex)
    			{
    				flag = 1;
    				cout << "该同学在成绩管理系统中存在" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该同学在成绩管理系统中不存在" << endl;
    			}			
    		}
    		void resetchinese()
    		{
    			int c;
    			cout<<"请输入新的语文成绩:"<<endl;
    			cin>>c;
    			this->chinese=c;
    		}
    		void findchinese()
    		{
    			int c;
    			cout<<"请输入需要查找的语文成绩:"<<endl;
    			cin>>c;
    			int flag = 0;		 // 0表示未找到 
    			if(c==this->chinese)
    			{
    				flag = 1;
    				cout << "该成绩与成绩管理系统中存在的语文成绩匹配" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该成绩与成绩管理系统中存在的语文成绩不匹配" << endl;
    			}			
    		}
    		void resetmath()
    		{
    			int m;
    			cout<<"请输入新的数学成绩:"<<endl;
    			cin>>m;
    			this->math=m;
    		}
    		void findmath()
    		{
    			int m;
    			cout<<"请输入需要查找的数学成绩:"<<endl;
    			cin>>m;
    			int flag = 0;		 // 0表示未找到 
    			if(m==this->math)
    			{
    				flag = 1;
    				cout << "该成绩与成绩管理系统中存在的数学成绩匹配" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该成绩与成绩管理系统中存在的数学成绩不匹配!" << endl;
    			}			
    		}
    		void resetenglish()
    		{
    			int e;
    			cout<<"请输入新的英语成绩:"<<endl;
    			cin>>e;
    			this->english=e;
    		}
    		void findenglish()
    		{
    			int e;
    			cout<<"请输入需要查找的英语成绩:"<<endl;
    			cin>>e;
    			int flag = 0;		 // 0表示未找到 
    			if(e==this->english)
    			{
    				flag = 1;
    				cout << "该成绩与成绩管理系统中存在的英语成绩匹配" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该成绩与成绩管理系统中存在的英语成绩不匹配" << endl;
    			}			
    		}
    		void resetchemistry()
    		{
    			int ch;
    			cout<<"请输入新的化学成绩:"<<endl;
    			cin>>ch;
    			this->chemistry=ch;
    		}
    		void findchemistry()
    		{
    			int ch;
    			cout<<"请输入需要查找的化学成绩:"<<endl;
    			cin>>ch;
    			int flag = 0;		 // 0表示未找到 
    			if(ch==this->chemistry)
    			{
    				flag = 1;
    				cout << "该成绩与成绩管理系统中存在的化学成绩匹配" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该成绩与成绩管理系统中存在的化学成绩不匹配" << endl;
    			}			
    		}
    		void resetphysics()
    		{
    			int p;
    			cout<<"请输入新的物理成绩:"<<endl;
    			cin>>p;
    			this->physics=p;
    		}
    		void findphysics()
    		{
    			int p;
    			cout<<"请输入需要查找的物理成绩:"<<endl;
    			cin>>p;
    			int flag = 0;		 // 0表示未找到 
    			if(p==this->physics)
    			{
    				flag = 1;
    				cout << "该成绩与成绩管理系统中存在的物理成绩匹配" << endl;
    			} 
    			// 判断是否未找到该元素 
    			if(flag==0)
    			{
    				cout << "该成绩与成绩管理系统中存在的物理成绩不匹配" << endl;
    			}			
    		}
    };//Sscience
    
    void Sscience::setall()
    {
    	cout<<"输入学号:"; cin>>number;
    	cout<<"输入姓名:"; cin>>name;
    	cout<<"输入性别:"; cin>>sex;
    	cout<<"输入语文成绩:"; cin>>chinese;
    	cout<<"输入数学成绩:"; cin>>math;
    	cout<<"输入英语成绩:"; cin>>english;
    	cout<<"输入物理成绩:"; cin>>physics;
    	cout<<"输入化学成绩:"; cin>>chemistry;
    }
    
    void informationentry(Sscience *headptr/*对象指针*/,int &count,int &capacity)
    {
    	if(count==capacity)
    	{
    		capacity+=increment;
    		Sscience *p=headptr;
    		Sscience *newheadptr = new Sscience[capacity];
    		Sscience *q=newheadptr;
    		for(int i=0;i<count;i++)
    		{
    			*q=*p;
    			p++;
    			q++;
    		}
    		p=headptr;
    		headptr=newheadptr;
    		delete[] p;
    	}
    	(headptr+count)->setall();
    	count++;
    }
    
    void informationmodify(Sscience *headptr,int count)
    {
    	int x=0,control=0;
    	cout<<"请输入所要修改学生信息的学号:"<<endl;
    	cin>>x;
    	for(int i=0;i<count;i++)
    	{
    		if((headptr+i)->getnumber()==x)
    		{
    			do
    			{
    				cout<<"选择要修改的信息编号:"<<endl
    					<<"\t1.姓名\n"<<"\t2.性别\n"<<"\t3.语文成绩\n"<<"\t4.数学成绩\n"<<"\t5.英语成绩\n"<<"\t6.物理成绩\n"<<"\t7.化学成绩\n"<<"\t0.放弃本次修改\n\t";
    				cout<<"请输入你的指令"<<endl;
    				cin>>control;
    				switch(control)
    				{
    					case 1:
    						(headptr+i)->resetname();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 2:
    						(headptr+i)->resetsex();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 3:
    						(headptr+i)->resetchinese();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 4:
    						(headptr+i)->resetmath();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 5:
    						(headptr+i)->resetenglish();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 6:
    						(headptr+i)->resetphysics();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 7:
    						(headptr+i)->resetchemistry();
    						cout<<"修改成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 0:
    						cout<<"放弃修改!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					default:
    						cout<<"输入错误!请重新输入:"<<endl;
    						Sleep(1000);
    						system("cls");
    				}
    			}
    			while(control==0);
    		}
    	}
    	cout<<"操作完成!"<<endl;
    	Sleep(1000);
    }
    
    void informationdelete(Sscience *headptr,int &count)
    {
    	int x=0,ctrl=0;
    	cout<<"请输入要删除学生信息的学号:";
    	cin>>x;
    	for(int i=0;i<count;i++)
    	{
    		if((headptr+i)->getnumber()==x)
    		{
    			for(int j=1;j<count-i;j++)
    			{
    				*(headptr+i+j-1)=*(headptr+i+j);
    			}
    			count--;
    			ctrl++;
    		}
    	}
    	if(ctrl==0)
    	{	
    		cout<<"没有找到该条信息!返回主界面";
    		Sleep(1000);
    		system("cls");
    	}
    	else
    		cout<<"删除成功!"<<endl;
    }
    
    void informationfind(Sscience *headptr,int count)
    {
    	int x=0,control=0;
    	cout<<"请输入所要查找学生信息的学号:"<<endl;
    	cin>>x;
    	for(int i=0;i<count;i++)
    	{
    		if((headptr+i)->getnumber()==x)
    		{
    			do
    			{
    				cout<<"选择要查找的信息编号:"<<endl
    					<<"\t1.姓名\n"<<"\t2.性别\n"<<"\t3.语文成绩\n"<<"\t4.数学成绩\n"<<"\t5.英语成绩\n"<<"\t6.物理成绩\n"<<"\t7.化学成绩\n"<<"\t0.放弃本次查找\n\t";
    				cout<<"请输入你的指令"<<endl;
    				cin>>control;
    				switch(control)
    				{
    					case 1:
    						(headptr+i)->findname();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 2:
    						(headptr+i)->findsex();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 3:
    						(headptr+i)->findchinese();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 4:
    						(headptr+i)->findmath();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 5:
    						(headptr+i)->findenglish();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 6:
    						(headptr+i)->findphysics();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 7:
    						(headptr+i)->findchemistry();
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					case 0:
    						cout<<"查找成功!一秒后返回主界面"<<endl;
    						Sleep(1000);
    						system("cls");
    						break;
    					default:
    						cout<<"查找错误!请重新输入:"<<endl;
    						Sleep(1000);
    						system("cls");
    				}//switch
    			}//do
    			while(control==0);
    		}//if
    	}//for
    	cout<<"操作完成!!"<<endl;
    	Sleep(1000);
    }
    void display_Total_score_ranking(Sscience *headptr,int count)
    {
    	int t[N],o[N];
    	int i,j,Temporary,Temporary_Total_score;	
    	for(i=0;i<count;i++)
    	{
    		t[i]=(headptr+i)->getTotal_score();
    		o[i]=i;
    	}
    	for(j=0;j<count-1;j++)
    	{
    		for(i=0;i<count-1;i++)
    		{
    			if(t[i]>t[i+1])
    			{
    				Temporary=t[i];
    				Temporary_Total_score=o[i];
    				t[i]=t[i+1];
    				o[i]=o[i+1];
    				t[i+1]=Temporary;
    				o[i+1]=Temporary_Total_score;
    			}
    		}
    	}
    	cout<<"以下是成绩管理系统中各同学的总分排序(从低到高)"<<endl;
    	for(i=0;i<count;i++)
        {     
    		cout<<(headptr+o[i])->getnumber()<<"  "<<(headptr+o[i])->getname()<<"  "<<t[i]<<endl;    
        }
        cout<< endl;
    }
    
    void display_Average_score(Sscience *headptr,int count)				//计算各科平均分并查看低于平均分学生信息
    {
    	float chinese_Average_score=0;
    	float math_Average_score=0;
    	float english_Average_score=0;
    	float physics_Average_score=0;
    	float chemistry_Average_score=0;
    	for(int i=0;i<count;i++)
    	{
    		chinese_Average_score+=(headptr+i)->getchinese();
    		math_Average_score+=(headptr+i)->getmath();
    		english_Average_score+=(headptr+i)->getenglish();
    		physics_Average_score+=(headptr+i)->getphysics();
    		chemistry_Average_score+=(headptr+i)->getchemistry();
    	}
    	cout<<"各位同学语文学科平均分为:"<<chinese_Average_score/count<<endl;
    	cout<<"各位同学数学学科平均分为:"<<math_Average_score/count<<endl;
    	cout<<"各位同学英语学科平均分为:"<<english_Average_score/count<<endl;
    	cout<<"各位同学物理学科平均分为:"<<physics_Average_score/count<<endl;
    	cout<<"各位同学化学学科平均分为:"<<chemistry_Average_score/count<<endl;
    	for(int j=0;j<count;j++)
    	{
    		if((headptr+j)->getchinese() < chinese_Average_score/count)
    		{
    			cout<<(headptr+j)->getname()<<"同学低于语文平均分,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;
    		}
    		if((headptr+j)->getmath() < math_Average_score/count)
    		{
    			cout<<(headptr+j)->getname()<<"同学低于数学平均分,该同学语文分数为:"<<(headptr+j)->getmath()<<endl;
    		}
    		if((headptr+j)->getenglish() < english_Average_score/count)
    		{
    			cout<<(headptr+j)->getname()<<"同学低于英语平均分,该同学语文分数为:"<<(headptr+j)->getenglish()<<endl;
    		}
    		if((headptr+j)->getphysics() < physics_Average_score/count)
    		{
    			cout<<(headptr+j)->getname()<<"同学低于物理平均分,该同学语文分数为:"<<(headptr+j)->getphysics()<<endl;
    		}
    		if((headptr+j)->getchemistry() < chemistry_Average_score/count)
    		{
    			cout<<(headptr+j)->getname()<<"同学低于化学平均分,该同学语文分数为:"<<(headptr+j)->getchemistry()<<endl;
    		}
    	}
    }
    
    void dispaly_90(Sscience *headptr,int count)
    {
    	for(int j=0;j<count;j++)
    	{
    		if((headptr+j)->getchinese() > 90)
    		{
    			cout<<(headptr+j)->getname()<<"同学语文高于90分值得鼓励,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;
    		}
    		if((headptr+j)->getmath() > 90)
    		{
    			cout<<(headptr+j)->getname()<<"同学数学高于90分值得鼓励,该同学数学分数为:"<<(headptr+j)->getmath()<<endl;
    		}
    		if((headptr+j)->getenglish() > 90)
    		{
    			cout<<(headptr+j)->getname()<<"同学英语高于90分指得鼓励,该同学英语分数为:"<<(headptr+j)->getenglish()<<endl;
    		}
    		if((headptr+j)->getphysics() > 90)
    		{
    			cout<<(headptr+j)->getname()<<"同学物理高于90分值得鼓励,该同学物理分数为:"<<(headptr+j)->getphysics()<<endl;
    		}
    		if((headptr+j)->getchemistry() > 90)
    		{
    			cout<<(headptr+j)->getname()<<"同学化学高于90分值得鼓励,该同学化学分数为:"<<(headptr+j)->getchemistry()<<endl;
    		}
    	}
    }
    
    void dispaly_60(Sscience *headptr,int count)
    {
    	for(int j=0;j<count;j++)
    	{
    		if((headptr+j)->getchinese() < 60)
    		{
    			cout<<(headptr+j)->getname()<<"同学语文低于60分需要加油,该同学语文分数为:"<<(headptr+j)->getchinese()<<endl;
    		}
    		if((headptr+j)->getmath() < 60)
    		{
    			cout<<(headptr+j)->getname()<<"同学数学低于60分需要加油,该同学数学分数为:"<<(headptr+j)->getmath()<<endl;
    		}
    		if((headptr+j)->getenglish() < 60)
    		{
    			cout<<(headptr+j)->getname()<<"同学英语低于60分需要加油,该同学英语分数为:"<<(headptr+j)->getenglish()<<endl;
    		}
    		if((headptr+j)->getphysics() < 60)
    		{
    			cout<<(headptr+j)->getname()<<"同学物理低于60分需要加油,该同学物理分数为:"<<(headptr+j)->getphysics()<<endl;
    		}
    		if((headptr+j)->getchemistry() < 60)
    		{
    			cout<<(headptr+j)->getname()<<"同学化学低于60分需要加油,该同学化学分数为:"<<(headptr+j)->getchemistry()<<endl;
    		}
    	}
    }
    
    void displayall(Sscience *headptr,int count)
    {
    	for(int i=0;i<count;i++)
    	{
    		(headptr+i)->display();
    	}
    }
    
    int count=0,capacity=5;//全局变量
    
    int main()
    {
    	time_t Time;
    	time(&Time);
    	int control;
    	Sscience *headptr = new Sscience[capacity];
    	do
    	{
    		cout << "欢迎进入武汉轻工大学数计学院成绩管理系统"<<endl;
    		cout <<  "当前系统时间是:" << ctime(&Time) <<endl;
    		cout<<"|========================学生成绩管理系统===========================|"<<endl
    			<<"|                        *1.学生信息录入	                    |"<<endl
    			<<"|                        *2.学生信息修改                            |"<<endl
    			<<"|                        *3.删除学生信息                            |"<<endl
    			<<"|                        *4.查找学生信息                            |"<<endl
    			<<"|                        *5.查看总分排名                            |"<<endl
    			<<"|                        *6.计算各科平均分并查看低于平均分学生信息  |"<<endl
    			<<"|                        *7.显示每门成绩在90分以上学生的信息	    |"<<endl
    			<<"|                        *8.显示每门成绩在60分以下学生的信息        |"<<endl
    			<<"|                        *9.显示所有学生信息                        |"<<endl
    			<<"|                        *0.退出                                    |"<<endl
    			<<endl;
    		cout<<"请输入你的指令:";
    		cin>>control;
    		switch(control)
    		{
    		case 1: 
    				system("cls");
    				cout<<"(信息录入函数)"<<endl;
    				informationentry(headptr,count,capacity);
    				break;
    		case 2: 
    				system("cls");
    				cout<<"(信息修改函数)"<<endl;
    				informationmodify(headptr,count);
    				break;
    		case 3: 
    				system("cls");
    				cout<<"(信息删除函数)"<<endl;
    				informationdelete(headptr,count);
    				break;
    		case 4: 
    				system("cls");
    				cout<<"(信息查找函数)"<<endl;
    				informationfind(headptr,count);
    				break;
    		case 5: 
    				system("cls");
    				cout<<"(总分排序函数)"<<endl;
    				display_Total_score_ranking(headptr,count);
    				break;
    		case 6: 
    				system("cls");
    				cout<<"(各门功课平均分函数)"<<endl;
    				display_Average_score(headptr,count);
    				break;
    		case 7: 
    				system("cls");
    				cout<<"(90分以上函数)"<<endl;
    				dispaly_90(headptr,count);
    				break;
    		case 8: 
    				system("cls");
    				cout<<"(显示不及格函数)"<<endl;
    				dispaly_60(headptr,count);
    				break;
    		case 9: 
    				system("cls");
    				cout<<"(显示所有信息)"<<endl;
    				displayall(headptr,count);
    				cout<<"已将所有信息显示完毕"<<endl;
    				break;
    		case 0: 
    				cout<<"                         感谢使用! 3秒后程序结束"<<endl;
    				Sleep(3000);
    				break;
    		default:
    				cout<<"                         输入错误!请重新输入:";
    				Sleep(1000);
    				system("cls");
    		}
    	}
    	while(control!=0);
    	delete[] headptr;
    	return 0;
    }
    
    
    展开全文
    qq_41430551 2019-01-24 20:54:36
  • 14KB m0_47618107 2021-09-16 19:52:07
  • 798KB chunyu2008 2020-10-03 12:30:38
  • 3.21MB qq_48496605 2021-03-15 17:50:19
  • 学生成绩管理系统分析设计-应用UML建模》由会员分享,可在线阅读,更多相关《学生成绩管理系统分析设计-应用UML建模(48页珍藏版)》请在人人文库网上搜索。1、第1章 系统需求学生成绩管理系统的域1描述如下...

    《学生成绩管理系统的分析及设计-应用UML建模》由会员分享,可在线阅读,更多相关《学生成绩管理系统的分析及设计-应用UML建模(48页珍藏版)》请在人人文库网上搜索。

    1、第1章 系统需求学生成绩管理系统的域1描述如下:在学生成绩管理系统中,要为每个学生建立一个帐户,并给学生发放帐户(帐户可以提供帐户号、帐户初始密码),帐户中存储学生的个人信息、选课信息以及课程成绩。持有帐户的学生可以登陆系统,只能查看本人的个人信息、选课信息、个人成绩。在登陆时,需要输入自己的账号和密码,系统验证学生是否有效(在系统中存在帐户),若有效,则登陆系统,否则重新输入,超过三次,则不允许再次输入。老师可以修改学生成绩信息,但仅限于学生选修的那门课程。老师也有自己的个人帐户,权限比学生高,可以浏览学生信息。学生成绩管理系统的管理员,可以编辑、添加、删除、学生信息。对上述学生成绩管理系统。

    2、的域描述进行分析,可以获得如下功能性需求:学生持有帐户 (帐户号和密码)。学生可以登陆系统。学生可以查看系统消息内的信息。学生可以查看个人信息,个人成绩信息和选课情况。在学期结束时,学生可以选课。学生可以给管理员发消息。老师可以修改选修自己课程的学生的成绩信息。老师可以浏览选修自己课程的学生的信息。学生成绩管理员可以创建新的学生帐户。学生成绩管理员可以修改学生的帐户信息。学生成绩管理员可以删除已存在的学生帐户。学生成绩管理员可以在系统中添加学生信息。学生成绩管理员可以编辑学生信息。学生成绩管理员可以删除学生信息。第2章 需求分析采用用例驱动的分析方法分析需求的主要任务是识别出系统中的参与者和用。

    3、例,并建立用例模型。2.1 识别参与者通过对系统需求的分析,可以确定系统中有三个参与者:StudentActor(学生)、TeacherActor(教师)、AdminerActor(管理员)。参与者的描述如下:(1) Student描述:学生可以登陆、选课、查看系统信息、个人信息、提出意见,还可以取消选课。示例:持有帐户的任何人或组织。(2) Teacher描述:可以修改学生部分信息,浏览学生信息。示例:持有帐户的任何人和组织。(3) Adminer描述:学生成绩管理员维护系统,可以创建、修改、删除学生的信息,可以添加、编辑、删除学生信息,即维护目录。示例:学生成绩管理员。2.2 识别用例前面。

    4、已经识别出了参与者,通过对需求的进一步分析,可以确定系统中有如下用例存在:(1) Reserve course(选课)本用例提供了选课的功能。(2)Cancel course(取消选课)本用例提供了取消选课的功能。(3)input score(输入成绩)本用例提供了教师上传学生成绩功能。(4)update score(更改成绩)本用例提供了修改成绩的功能。(5)Maintain student Info (维护学生信息)本用例提供了创建、修改以及取消学生帐户的功能。(6)Maintain teacher Info (维护教师信息)本用例提供了添加、修改、以及删除教师帐户的功能。(7)Maint。

    5、ain system Info (维护系统信息)本用例提供了添加、修改以及删除系统信息的功能。(8)Log In (登录)本用例描述了用户如何登录进入软件系统。在识别出参与者3和用例后,要想建立用例图,还需要识别出他们之间的关系。“Reserve course”(选课)“Cancel course” (取消选课) 这些动作是由“Student”执行的,“input score” (输入成绩)、“update score” (更、改成绩)是由“teacher”执行的,但是对于软件系统来说,这些操作是由“Adminer”通过系统赋予给他们的,也即以上操作实际上是操作者在允许条件下与系统的交互。“S。

    6、tudent”“teacher ”和参与者“Adminer”之间存在着依赖关系,即“Student”借助“Adminer”完成这些工作。用例“Maintain student Info” (维护学生信息)、“Maintain teacher Info” (维护教师信息)、“Maintain system Info”(维护物系统信息)也是与参与者“Adminer”交互。为了系统的安全性,系统还需要提供进行身份验证的功能,以确保只有具有权限的“Adminer”才可以使用系统的功能,所以“Adminer”必须与用例“登录”交互,也即“Adminer”在使用系统前,要使用用户名和密码进行登录,系统验证。

    7、用户的密码正确后,用户才可以执行进一步的操作。系统的用例图如下图所示:图2.1 系统用例图2.3 用例的事件流描述用例的事件流4是对完成用例行为所需的事件的描述。它描述系统应该做什么,而不是描述系统应该怎样做。开始,只是对执行用例的常规流所需的步骤的简单描述。随着分析的进行,通过添入更多的详细信息,步骤不断细化。最后,将例外流添加到用例的事件流描述中。学生成绩管理系统的用例事件流描述如下:2.3.1 选课在这个用例开始前,student必须登录到系统中。如果这个用例成功,在系统中建立并存储选课记录,否则,系统的状态没有变化。当学生选课时,用例启动。学生打开系统的选课系统,出现选课界面,支流S-。

    8、1:开课目录。支流S-2:选课情况。S-1:选课目录 (1) 提供学期分类。(2) 检索课程类别(kind) (E-1)(3) 检索要选课程名(coursename) (E-2), (4) 创建选课记录。(5) 存储选课记录。S-2: 选课情况(1) 提供是否要书。(2) 是否加权分。(3) 是否撤销。(4) 查看选课记录。E-1: 大方向总体分类。E-2: 具体课程名。2.3.2 取消选课在这个用例开始前,student必须登录到选课系统中。如果这个用例成功,系统删除该选课记录。否则,系统的状态没有变化。当学生取消选课时,用例启动。(1) 检索选课程名(E-1)。(2) 删除选课记录。E-1。

    9、: 若选课记录不存在,系统显示提示信息,用例终止。2.3.3 输入成绩在这个用例开始前,teacher必须登录到系统中。如果这个用例成功,系统建立输入成绩记录。否则,系统的状态没有变化。当teacher输入成绩时,用例启动。(1) 检索学生。(E-1)(2) 输入成绩。(3) 将选课成绩存储在系统中。E-1: 该学生不存在,系统显示提示信息,用例终止。E-2: 系统中不存在该学生,系统显示提示信息,用例终止。2.3.4 更改成绩在这个用例开始前,teacher必须登录到系统中。如果这个用例成功,系统修改选课成绩。否则,系统的状态没有变化。(1) 检索学生 (E-1)。(2) 修改成绩记录 。(。

    10、3) 将修改记录存入系统E-1: 该学生不存在,系统显示提示信息,用例终止。2.3.5 维护学生信息 在这个用例开始前,Adminer必须登录到系统中。如果这个用例成功,系统添加、修改或删除学生信息。否则,系统的状态没有变化。当Adminer想维护学生信息时,用例启动。系统要求Adminer选择所想执行的活动(添加学生、删除学生、修改学生)。如果所选的活动是“添加学生”,则执行分支流S-1:添加学生。如果所选的活动是“删除学生”,则执行分支流S-2:删除学生。如果所选的活动是“修改学生”,则执行分支流 S-3:修改学生。S-1: 添加学生(1) 提供学生的信息,如姓名、学号等。(2) 系统存储。

    11、学生信息 (E-1)。S-2: 删除学生(1) 提供学生的信息。(2) 查询学生 (E-2)。(3) 查询学生的记录 (E-3)。(4) 从系统中删除学生的信息,以及学生的选课记录。S-3:更改学生(1) 提供学生的信息。(2) 查询并显示学生的信息 (E-2),修改相应的信息。(3) 更新系统中学生的信息。E-1: 若学生已存在,系统显示提示信息,用例终止。E-2: 若查询不到学生,系统显示提示信息,用例终止。E-3: 若无记录,系统显示提示信息,用例终止。2.3.6 维护教师信息 在这个用例开始前,Adminer必须登录到系统中。如果这个用例成功,系统添加、修改或删除教师信息。否则,系统的。

    12、状态没有变化。当Adminer想维护教师信息时,用例启动。系统要求Adminer选择所想执行的活动(添加教师、删除教师、修改教师)如果所选的活动是“添加教师”,则执行分支流S-1:添加教师信息。如果所选的活动是“删除教师”,则执行分支流S-2:删除教师信息。如果所选的活动是“修改教师”,则执行分支流S-3:修改教师信息。S-1: 添加教师信息(1) 提供教师名字、所教课程名等信息。(2) 在系统中添加该教师信息 (E-1)。S-2: 删除教师生信息(1) 提供所要删除的教师信息。(2) 查询所要删除的教师 (E-2)。(3) 删除该教师的记录 (E-3)。(4) 从系统中删除教师信息,以及相关。

    13、的记录。S-3:更改教师信息(1) 提供教师信息。(2) 查询并显示教师信息 (E-2),并做相应修改。(3) 更新系统中的学生信息。E-1: 若教师信息已存在,系统显示提示信息,用例终止。E-2: 若查询不到该书老师,系统显示提示信息,用例终止。E-3:若无记录,系统显示提示信息,用例终止。2.3.7 维护系统信息在这个用例开始前,Adminer必须登录到系统中。如果这个用例成功,系统添加、修改或删除系统信息。否则,系统的状态没有变化。当Adminer想维护系统信息时,用例启动。系统要求Adminer选择所想执行的活动(添加信息、删除信息、修改信息)。如果所选的活动是“添加系统消息”,则执行。

    14、分支流S-1:添加系统信息。如果所选的活动是“删除系统信息”,则执行分支流S-2:删除系统信息。如果所选的活动是“修改系统信息”,则执行分支流S-3:修改系统信息。S-1: 添加系统信息(1) 提供添加信息种类。(2) 查询信息种类(kind),确定系统中已存在该书刊种类 (E-1)。(3) 创建信息名。(4) 将系统信息存储到系统中。S-2: 删除系统信息(1) 提供系统信息种类。(2) 查询信息名(newname) (E-2)。(3) 删除系统信息。(4) 从系统中删除系统信息后,并更新相关信息。S-3:修改物理学生信息(1) 提供系统信息种类。(2) 查询系统信息种类(kind)(E-1。

    15、)。(3) 查询并显示该系统信息的所有消息。(4) 选择信息名修改其信息。(5) 更新系统中系统信息的信息。E-1: 若系统中不存在该信息种类,添加该书刊种类信息E-2:若存在该信息,则删除。2.3.8 登录如果用例成功,参与者可以启动系统并使用系统所提供的功能。反之,系统的状态不变。当用户希望登录到系统中时,用例启动。(1) 系统提示用户输入用户名和密码。(2) 用户输入用户名和密码。(3) 系统验证输入的用户名和密码,若正确(E-1),则用户登录到系统中。E-1: 如果用户输入无效的用户名和/或密码,系统显示错误信息。用户可以选择返回基流6的起始点,重新输入正确的用户名和/或密码;或者取消。

    16、登录,用例结束。第3章 静态结构模型进一步分析系统需求,发现类以及类之间的关系,确定它们的静态结构和动态行为,是面向对象7分析的基本任务。系统的静态结构模型主要用类图和对象图描述。3.1 定义系统对象系统对象的识别可以通过寻找系统域8描述和需求描述中的名词来进行。从前述的系统需求描述中可以找到的名词有:学生(student)、教师(teacher)管理员(adminer),这些都是对象图中的候选对象。判断是否应该为这些候选对象创建类的方法是:是否有与该对象相关的身份和行为?(1) 学生(student)学生是有身份的,具有相同名字和不同账号的两个人也是不同的。在这个系统中,学生有相关的行为,学。

    17、生可以选课、取消选课,所以学生应该成为系统中的一个对象。(2) 教师(teacher)教师也有身份,具有相同名字和不同账号的两个人也是不同的。在这个系统中,教师有相关的行为,教师可以上传成绩、修改成绩,所以教师应该成为系统中的一个对象。(3) 选课记录(course load)选课记录也有身份,选课记录可以被彼此区别,不会被搞混。例如,同一个人关于不同课程的选课记录是不同的,同一门课程被不同学生的选课记录也是不同的。(4)成绩记录(score load)成绩记录也有身份的,成绩记录可以被彼此区别,不会被搞混。例如,同一个人关于不同课程的成绩记录是不同的,同一门课程被不同学生的成绩记录也是不同的。

    18、。上述4个类都是实体类,都是持久性的,需要存储在数据库中。本系统采用面向对象数据库9模型,为了便于从数据库文件中引用和检索对象,需要一个描述对象ID的类。另外,由于上述4个类都是持久性类,因此还可以抽象出一个代表持久性的父类,该类实现了面向对象数据库文件的读、写、存储、检索、删除、更新等操作。综上所述,系统中还应该有两个与数据库有关的类:对象ID(OID)和持久类(Persistent)(5)类Persistent类Persistent是类student、teacher、course load的父类。类Persistent为商业对象的持久存储提供了支持,它的子类必须实现从数据库文件中读、写对象。

    19、属性的操作。(6) 类OID实现了对象ID。类OID的对象可用来引用系统中的持久10对象,使得从数据库文件中引用和检索对象变得容易。抽象出系统中的类后,需要确定这些对象的属性和行为。可以根据前述的系统需求分析、用例图、用例的事件流描述和描述脚本的交互作用图,来确定并细化系统中的类、类的操作和属性。下面对系统中的类、类的属性及操作逐一进行描述。(未标注返回值类型的方法使用缺省返回类型void)。类student属性、方法见下图3.1类teacher属性、方法见下图3.2类course load属性、方法见下图3.3Score load属性、方法见下图3.4类Persistent属性、方法见下图3。

    20、.5类OID属性、方法见下图3.6图3.1、3.2、3.3类ScoreloadName :stringID:integerCID:integerTID:integerRead()Getscore()图36 类OID图3.5类Persistent在定义类、类的方法和属性时,建立动态模型的时序图是很有帮助的,类图和时序图的建立是相辅相成的,因为时序图中出现的消息基本上都会成为类中的方法,因此在设计阶段绘制系统的时序图时,要尽量使用类的已识别出的方法来描述消息11,若出现无法用类的已识别出的方法来描述的消息,就要考虑消息是否是类的一个待识别的方法,若是,就要将这个方法及时添加到类的操作类表中,并用这。

    21、个新方法来描述消息。3.2 定义用户界面类通过对系统的不断分析和细化,可识别出下述界面类、类的操作和属性。(1) 类MainWindowMainWindow是系统的主界面,不同的用户登陆界面不一样。系统的主界面具有菜单和菜单项,当选择不同的菜单项时,用户可以执行不同的操作。当程序退出时,主界面窗口关闭。(2) 类studentDialog界面类studentDialog是进行操作“添加学生”、“修改学生”或“删除学生”时所需的对话框。当选择主窗口中的菜单项“添加学生”时,对话框弹出,学生成绩管理员输入学生信息,然后单击按钮“添加”,系统创建学生账户并将之存储在系统中。当选择菜单项“修改学生”或。

    22、“删除学生”时,对话框FindSDialog弹出,学生成绩管理员输入要修改或删除的学生的studentID,单击按钮“OK”提交。系统查询数据库检索到学生信息后弹出对话框studentDialog,显示学生的详细信息,如若是“修改学生”,学生成绩管理员编辑修改学生的有关信息,然后单击按钮“更新”,更新系统中存储的学生信息;如若是“删除学生”,学生成绩管理员则单击按钮“删除”,系统删除所存储的该学生信息,当然,与该学生有关的其他信息业也一并删除。(3) 类FindSDialog界面类FindSDialog是用来根据学生ID号查找学生的对话框。当主窗口中的菜单项“删除学生”或“修改学生”被选择时,。

    23、该对话框弹出,学生成绩管理员输入学生ID,单击按钮“OK”,系统查询数据库中具有指定ID号的学生信息。(4) 类teacherDialog界面类teacherDialog是进行操作“添加教师”、“修改教师”或“删除教师”时所需的对话框。当选择主窗口中的菜单项“添加教师”时,对话框弹出,学生成绩管理员输入教师信息,然后单击按钮“添加”,系统创建教师帐户并将之存储在系统中。当选择菜单项“修改教师”或“删除教师”时,对话框FindTDialog弹出,学生成绩管理员输入要修改或删除的教师,单击按钮“OK”提交。系统查询数据库获取教师信息后弹出对话框teacherDialog,显示教师的详细信息,如若是。

    24、“修改书种”,学生成绩管理员编辑修改教师的有关信息,然后单击按钮“更新”,更新系统中存储的教师信息;如若是“删除教师”,学生成绩管理员则单击按钮“删除”,该教师信息从系统中删除,与该教师有关的其他信息也一并删除。(5) 类FindTDialog界面类FindTDialog是用来根据教师ID查找教师的对话框。当主窗口中的菜单项“删除教师”或“修改教师”被选择时,该对话框弹出,学生成绩管理员输入教师ID,单击按钮“OK”,系统查询数据库中具有指定ID号的教师信息。(6) 类InpUDialog界面类InpUDialog是进行输入成绩操作或更改成绩操作时所需的对话框。当主窗口中的菜单项“输入”被选择。

    25、时,该对话框弹出,教师输入分数,然后单击按钮“OK”,输入动作被确认,系统创建并保存成绩记录。当选择菜单项“更改成绩”时,也弹出该对话框,教师输入学号,修改相应信息,然后单击按钮“更改”,系统中的更新记录。(7) 类ResCDialog界面类ResCDialog是进行操作“选课”或“取消选课”时所需的对话框。当主窗口中的菜单项“选课”被选择时,该对话框弹出,学生输入要选课的信息,然后单击按钮“选课”,选课动作被确认,系统创建并保存选课记录。当选择菜单项“取消选课”时,也弹出该对话框,学生输入课程名及信息,然后单击按钮“取消选课”,系统中的选课记录被删除。(8) 类MessageWindow信息。

    26、窗口类LoginDialog是用来显示提示信息的对话框。(9) 类LoginDialog界面类LoginDialog是用来输入用户名和密码的对话框。类MainWindow属性及方法见下图3.8类StudentDialog属性及方法见下图3.9类FindSDialog属性及方法见下图3.10图3.10类FindBwrDialog图3.9类BorrowerDialog图3.8类MainWindow类TeacherDialog属性及方法见下图3.11类FindTDialog属性及方法见下图3.12类InpUDialog属性及方法见下图3.13类ResCDialog属性及方法见下图3.14类Messa。

    27、geWindow属性及方法见下图3.15类LoginDialog属性及方法见下图3.16图3.12类FindTDialog图3.11类TitleDialog图3.14类ResCDialog图3.13类InpUDialog图3.16类LoginDialog3.15类MessageWindow3.3 建立类图识别出了系统中的类后,还要识别出类间的关系,然后就可以建立类图了。可将系统中的类分为3个包:GUI包、adminer包和DB包。包GUI由界面类组成,包Adminer由实体类组成,包DB由与数据库有关的类组成。包GUI依赖于包Adminer和包DB,包Adminer依赖于包DB。图3.18 系。

    28、统包图3.3.1 包GUI中的界面类关系窗口MessageWindow和对话框studentDialog、FindSDialog、FindTDialog、teacherDialog、InpUDialog、ResCDialog是主窗口MainWindow的一部分。它们之间存在组合关系。类LoginDialog与类MainWindow之间存在“一对一”的关联关系。类FindSDialog与类studentDialog之间是“一对一”的关联关系。类FindTDialog与类teacherDialog之间的关系也是“一对一”的关联关系。3.3.2 包adminer中的实体类关系类student、类te。

    29、acher、类courseload、coreload都是永久类,它们都是包DB中的类Persistent的子类。类teacher与类student之间存在“多对多”的关联关系,每个teacher对象至少有一个student对象,每个student对象至少对应于一个teacher对象。类teacher与类courseload之间存在“一对多的关系,tudent与类courseload之间存在“一对多”的关联关系,每个student对象可以没有或可有多个courseload(选课),每个courseload(选课)可由多个student选课,学生与成绩之间是一对多的关系,一个学生可以有多门课的成绩。

    30、。3.3.3 类ResCDialog和其他类关系3.3.4 InpUDialog和其他类的关系图第4章 动态行为模型系统的动态行为模型由交互作用图(时序图和协作图)、状态图、活动图描述。4.1 建立交互作用图描述系统用例的主要场景的交互作用图如下所示。4.1.1 添加学生“添加学生”的过程是:学生成绩管理员选择菜单项“添加学生”,对话框弹出,学生成绩管理员输入学生信息,提交,系统根据学生ID号查询数据库,看数据库中是否已存在学生,若不存在,创建学生帐户,并存储学生信息。“添加学生”的时序图如图4.1所示,学生成绩管理员选择菜单项“添加学生”,类MainWindow的方法addstudent()。

    31、被调用,然后通过调用类studentDialog的方法createDialog()创建对话框,学生成绩管理员输入学生信息后,提交信息,类studentDialog的方法addstudentr()被调用,通过调用类student的findBorrower()方法来确定该学生的帐户是否已存在,若不存在,则调用类student的方法newstudent()为学生创建帐户,并调用类student的方法store()存储学生信息。图4.1 添加学生时序图4.1.2 删除学生“删除学生”的过程是:学生成绩管理员选择菜单项“删除学生”,查询对话框弹出,学生成绩管理员输入学生ID号,系统查询数据库,显示学生信。

    32、息(若学生信息不存在,显示提示信息,结束删除动作),按下删除按钮,系统确定是否存在与该学生相关的信息记录,若有,给出提示信息,结束删除动作;若没有,查询是否存在与该学生相关的选课记录,若有,删除选课记录。然后从系统中删除学生。“删除学生”的时序图如图4.2所示,学生成绩管理员选择菜单项“删除学生”,类MainWindow的方法delstudent()被调用,然后通过调用类FindSDialog的方法createDialog()创建对话框。学生成绩管理员输入学生ID号后,提交信息,类FindSDialog的findstudent()方法被调用,通过调用类student的方法findstudent。

    33、(id:String)来确定该学生的帐户是否存在,若存在,返回student对象的OID,然后调用类studentDialog的方法createDialog(OID)显示学生信息,在该方法执行期间,发送消息getstudent(OID)给类student获得学生信息。学生成绩管理员单击确认按钮删除(若学生记录非空,则该学生不能被删除),实现方法如下。类studentDialog的delstudent()方法被调用,发送消息getnewsLoans()判断学生是否有与他有关的记录信息。如果有,则显示提示信息,终止“删除学生”的活动(这个替代流未在图中示出);如果没有,类student的方法get。

    34、newsResC()被调用,返回学生的选课记录的数目,如果返回值等于0,则跳过下述循环,如果返回值非零对每个选课记录都要执行如下操作(也就是说此处是一个循环次数为选课记录数的循环,图4.2所示描述的是选课记录数为1的情况)。调用方法getcourseload()获得制定索引的选课记录,然后调用类Reservecourse的方法getkind()获得所选课的课程类kind对象,再调用类kind的方法delReserve course()删除“选课记录”,调用类Reserve course的方法delete()删除“选课记录”对象。最后调用类student的方法delete()删除学生信息。图4.。

    35、2 删除学生时序图4.1.3 添加教师“添加教师”的过程是:学生成绩管理员选择菜单项“添加教师”,对话框弹出,学生成绩管理员输入教师信息,提交,系统根据教师ID号查询数据库,看数据库中是否已存在该教师,若不存在,创建教师帐户,并存储教师信息。“添加教师”的时序图如图4.1所示,学生成绩管理员选择菜单项“添加教师”,类MainWindow的方法addteacher()被调用,然后通过调用类teacherDialog的方法createDialog()创建对话框,学生成绩管理员输入学生信息后,提交信息,类teacherDialog的方法addteacher()被调用,通过调用类teacher的fin。

    36、dteacher()方法来确定该教师的帐户是否已存在,若不存在,则调用类student的方法newteacher()为学生创建帐户,并调用类teacher的方法store()存储教师信息。4.1.4 删除教师“删除教师”的过程如下。“删除教师”的过程是:学生成绩管理员选择菜单项“删除教师”,查询对话框弹出,学生成绩管理员输入教师ID号,系统查询数据库,显示教师信息(若教师信息不存在,显示提示信息,结束删除动作),按下删除按钮,系统确定是否存在与该教师相关的信息记录,若有,给出提示信息,结束删除动作;若没有,查询是否存在与该教师相关的授课记录,若有,删除授课记录。然后从系统中删除学生。“删除教师。

    37、”的时序图如图4.2所示,学生成绩管理员选择菜单项“删除教师”,类MainWindow的方法delteacher()被调用,然后通过调用类FindTDialog的方法createDialog()创建对话框。学生成绩管理员输入教师ID号后,提交信息,类FindTDialog的findteacher()方法被调用,通过调用类teacher的方法findteacher(id:String)来确定该教师的帐户是否存在,若存在,返回教师对象的OID,然后调用类teacherDialog的方法createDialog(OID)显示教师信息,在该方法执行期间,发送消息getteacher(OID)给类tea。

    38、cher获得教师信息。学生成绩管理员单击确认按钮删除(若教师记录非空,则该教师不能被删除),实现方法如下。类教师Dialog的delteachert()方法被调用,发送消息getnewsLoans()判断教师是否有与他有关的记录信息。如果有,则显示提示信息,终止“删除教师”的活动(这个替代流未在图中示出);如果没有,类teacher的方法getnewsResC()被调用,返回教师的授课记录的数目,如果返回值等于0,则跳过下述循环,如果返回值非零对每个选课记录都要执行如下操作(也就是说此处是一个循环次数为授课记录数的循环,图4.2所示描述的是授课记录数为1的情况)。调用方法getcourselo。

    39、ad()获得制定索引的授课记录,然后调用类Reservecourse的方法getkind()获得所选课的课程类kind对象,再调用类kind的方法delReserve course()删除“授课记录”,调用类Reserve course的方法delete()删除“授课记录”对象。最后调用类teacher的方法delete()删除教师信息。图4.4 删除教师4.1.5 选课“选课”的过程是:学生选择菜单项“选课”,对话框弹出,学生输入要选课程名,提交。系统查询数据库,确定该课程否存在。若存在,查询学生信息,确定学生是否能选,若能,创建并存储选课记录,并将选课记录添加到学生信息中,若不能,提示信息。

    40、;若不存在,则显示提示信息,学生重新输入选课课程名或中止选课操作。“选课”的时序图如图4.7所示。学生选择菜单项“选课”,类MainWindow的reserve course()方法被调用,然后通过调用类ResDialog的方法reserve course()被调用,发送消息findcourse()、findstudent()给类courseload和student查询指定的课程信息和学生信息,返回满足条件的student对象的OID,接着调用方法getstudent()返回对应OID的student对象。发送消息给Reserve course,创建courseload对象,调用类Reserv。

    41、e course的方法store()将选课记录存储到数据库中。发送消息addcourse()给student,将选课记录添加到学生信息中,然后调用类student的方法update()更新数据库中的student对象。并存储更改信息。图如下:图4.7 预定书刊4.1.6 取消选课“取消选课”的过程是:学生选择菜单项“取消选课”,对话框弹出,学生输入要取消选课的课程名,提交。系统查询数据库,确定该课程否存在。若不存在,退出系统。查询与之相关的信息,若存在相关信息,弹出提示信息,删除相关信息或终止删除,退出系统。 学生选择菜单项“取消选课”,类MainWindow的cancel course()方。

    42、法被调用,然后通过调用类CanCDialog的方法cancel course()被调用,发送消息findcourse()和findstudent()给类courseload和student查询指定的课程信息和与之相关的学生信息,返回满足条件的student对象的OID,接着调用方法getstudent()返回对应OID的student对象。发送消息给cancel course,调用类cancel course的cancelNews()的方法删除相关信息,再调用cancel course的方法store()将删除记录存储到数据库中。然后调用类student的方法update()更新数据库中的st。

    43、udent对象。并存储更改信息。4.1.7输入成绩“输入成绩”的过程是:教师选择菜单项“输入成绩”,对话框弹出,教师输入要写成绩的学生名,提交。系统查询数据库,确定该学生是否存在。存在,输入成绩,更改相应信息,并将输入记录添加到学生信息中。若不存在,弹出提示信息。教师重新输入选课课程名或中止选课操作。“输入成绩”的时序图如下图所示。教师选择菜单项“输入成绩”,类MainWindow的inputscore()方法被调用,然后通过调用类InpUscore的方法inputscore()被调用,发送消息findstudent()给类student查询指定的学生信息,返回满足条件的student对象的O。

    44、ID,接着调用方法getstudent()返回对应OID的student对象。发送消息给inputscore(),创建scoreload对象,调用类inputscore的方法store()将选课记录存储到数据库中。发送消息addscore()给student,将成绩记录添加到学生信息中,然后调用类student的方法update()更新数据库中的student对象。并存储更改信息。4.1.8更新成绩“更改成绩”的过程是:教师选择菜单项“更改成绩”,对话框弹出,教师输入要更改成绩的学生名,提交。系统查询数据库,确定该学生是否存在。若不存在,退出系统。若存在,并查询与之相关的信息,若存在相关信息,。

    45、弹出提示信息,删除相关信息并更改信息或终止删除,退出系统。 教师选择菜单项“更改成绩”,类MainWindow的updata score()方法被调用,然后通过调用类InpUDialog的方法Updata score()被调用,发送消息findstudent()给类student查询指定学生的信息,返回满足条件的student对象的OID,接着调用方法getstudent()返回对应OID的student对象。发送消息给Updata score(),调用类updata score的方法store()将更改成绩记录存储到数据库中。然后调用类student的方法update()更新数据库中的stu。

    46、dent对象。并存储更改信并存储更改信息。4.1.9 登录“登录”的时序图如图4.11所示,管理员,教师和学生登陆系统的方式相同,只是所拥有的权限不同,所以,本登陆系统以管理员登陆为例说明。学生成绩管理员运行系统,类LoginDialog的方法createDialog()被调用,创建对话框。学生成绩管理员键入用户名和密码,提交,类LoginDialog的方法validate()被调用,验证用户名和密码是否正确,如若正确,发送消息createWindow()给类MainWindow,启动系统,显示系统主界面。4.2 建立状态图4.2.1 对象score的状态图对象score有两个状态:“exis。

    47、tence”(有成绩)状态和“Unexistence”(无成绩)状态。对象score开始处于“Unexistence”状态,当事件“input score()”(输入成绩)发生时,对象跃迁到“Loaned”状态,同时执行动作store()将成绩存储到数据库中。如果对象处于“Loaned”状态,事件“updata()”(更改)发生,同时执行动作store()将成绩存储到数据库中。4.2.2 对象course的状态图对象course有两个状态:“Reserved”(选中)和“Unreserved”(未选课)状态。对象开始处于“Unreserved”状态,事件“Reserved()”发生,对象跃迁到。

    48、“Reserved”状态,同时执行动作store()将选课记录存储到数据库中。当对象处于“Reserved”状态时,若有新的选课事件发生,自跃迁发生,同时执行动作store()将选课记录存储到数据库中;若有取消选课事件“delReservation()”发生,如果护卫条件NumofRsv(选课数)大于1成立,则发生自跃迁,同时执行动作reservatilon.delete()从数据库中删除选课记录,反之,如果护卫条件NumofRsv等于1成立,则跃迁到状态“unreserved”,同时执行动作reservation.delete()从数据库中删除最后一个选课记录。图4.13 course状态图。

    49、第5章 物理模型本系统是一个基于局域网和数据库的应用系统。配置图如下图所示,有4个节点:“Adminer Server”(学生成绩管理系统服务器)、“DB Server”(数据库服务器)、“PC”(学生成绩管理系统客户端PC)、“Printer”(打印机)。“Adminer Server”为学生提供了选课、取消选课、查看成绩和浏览系统信息的服务,为教师提供了输入成绩、修改成绩、浏览学生信息和系统信的服务;为学生成绩管理员提供了维护学生帐户、教师帐户和系统信息的服务。“DB Server”保存系统中的所有持久数据,它是一个旧系统,因此原型为,“DB Server”与“Adminer Server。

    50、”通过学校局域网连接。学生成绩管理员通过“PC”进行系统中的各种操作,并维护学生、教师帐户系统信息,“PC”也通过校园局域网与“Adminer Server” 连接。“Printer”用来学生成绩、选课等信息,它与“Adminer Server”也是通过校园局域网连接。Dr3uhd3uhd3u断喉弩好多年课代表卡不都快递吧4坤角儿4进而34就可4蛕?D脙#軟媁?vo滂焜?蔣 鳄N-P-觞?F瀢?鷲2SXWJ扱;$E锴?咼?wb,O?hW芀嚙C八?迎q?&锃?.楧D峘?wB賛装 綄?衈瞹?嘁?尥?b袦20?箻yF邴?詑攗檢锟袥匏=憌?&丹?鐘w鲽毨G艟*鍚揝?剾貀窴*権?K猞i?僗野x.?=萙S。

    51、?穊堺e崖?*g繍Y犡cn*唇?竟瘡缀頎y?挤lo睈y軩%q1?r?.鍼t滜?jMR=cZ?X?Pox邦漺癬c荵挜FQ?yF邴?詑攗檢锟袥匏=憌?&丹?鐘w鲽毨G艟*鍚揝?剾貀窴*権?K猞i?僗野x.?=萙S?穊堺e崖?*g繍Y犡cn*唇?竟瘡缀頎y?挤lo睈y軩%q1?r?.鍼t滜?jMR=cZ?X?Pox邦漺癬c荵挜FQ?yF邴?詑攗檢锟袥匏=憌?&丹?鐘w鲽毨G艟*鍚揝?剾貀窴*権?K猞i?僗野x.?=萙S?穊堺e崖?*g繍Y犡cn唇?竟瘡缀頎y?挤lo睈y軩%q1?r?.鍼t滜?jMR=cZ?X?Pox邦漺癬c荵挜FQ?*鍚揝?剾貀窴*権?K猞i?僗野x.?=萙S?穊堺e崖?*g繍Y犡。

    52、cn唇?竟瘡缀頎y?挤lo睈y軩%q1?r?.鍼t滜?jMR=cZ?X?Pox邦漺癬c荵挜FQ?yF邴?詑攗檢锟袥匏=憌?&丹?鐘w鲽毨G艟熋H?&鰢Z?L?&?;.z刧绗鰀畬拃Szl4-榌m Y朗k?儤v?+犢Hmu鏸tn褛 埈蕛癤當? m%犔?QVP?0蜈_?绹?爔豴t纴餚?鉙?hte候R?D檘堑?乒h齊?砱蜮陾巁?g?硃?硘敍橼Z?G贒?IJw谆揚?+u醸?羛?;H?豋H(r8v?崂)y|?铰=吮野m擪楋?岠?8.呫諜S啿jgy圕蜽褘0s燅?晳r?羀矤?厎?v?;騴捃?鶁R?脅一痯譊噼?阜z?;O?婗妸_兼譫烴H树畲门V?深奨劇,臕!?鮥?!荳|呜?b踱4b羾?右檉骽曜RbY?梯魏%鳊;?D?蘞V咉M?.?U噎丂fZJY竖莈;6q蝚 q?f谵僉聒涒鏼(3?輋uUEmScc俚F?哘拒頤僛?捚?薲爐e箍x 滟|嶦?绯?+担擷擾卯?懕aQ捠挧e嘞腕%锂?啰h?.逌uE廇.W9衢o踺隗?峥抙e?4囪W壶%俒資? Y胘Wje樽碜3鈊Q?L?搓#4袂刍窖?A畔/7q?誐棏誄斛Z?X喗Ks轠揋?剬W駒?p鹺j惯?堒j飮鰌?胆?烲?:什听揯t瑽坂:?閕粸?pWd;=vM?z衡$z謘澢辑x鞫獐昃O獳?n瘾h餰蜰z73|庽鮵擶ow:缀e?材儍杊咁舰ep?m)?沟。

    展开全文
    weixin_31967485 2021-04-23 21:13:24
  • 课程设计纸 共 39 页 第 13 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 目 录 1 设计题目.........................................

    课程设计纸 共 39 页 第 13 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 目 录 1 设计题目.........................................................1 2 设计目的........................................................2 3设计分析 ........................................................ 3 4 概念结构设计 .................................................... 6 5 逻辑结构设计 ................................................... 11 6 表结构设计 ..................................................... 13 7 具体功能实现 ................................................. .15 8 总结...........................................................26 9 附录 (27)

    展开全文
    weixin_32428571 2021-03-07 21:35:33
  • weixin_40228600 2021-05-27 20:29:30
  • weixin_31002509 2021-05-19 03:07:59
  • qq_40160605 2018-07-26 21:12:55
  • qq_16856917 2019-05-20 23:26:22
  • aitaozi11 2020-12-02 13:37:39
  • 3星
    14KB sun5208 2008-10-13 17:00:17
  • Ainwa 2021-08-03 19:53:12
  • 2.32MB zxt1484675627 2019-12-31 16:54:19
  • 1.41MB m0_52957036 2020-07-15 02:15:49
  • 5星
    120KB chris242 2009-07-07 19:26:49
  • weixin_39603050 2020-11-24 07:27:39
  • weixin_29164497 2021-04-26 13:34:55
  • 4星
    4.11MB q6603653 2011-05-11 17:22:57
  • weixin_39822629 2021-02-01 05:54:53
  • 5星
    606KB liling88111 2009-10-13 11:39:46
  • weixin_39573781 2020-12-08 17:21:21
  • weixin_28718793 2021-04-17 09:56:05
  • 7.75MB weixin_40228600 2021-10-27 13:13:53
  • VVV_VVV_vvv_vvv 2018-05-10 23:19:50

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,580
精华内容 2,632
关键字:

学生成绩管理系统面向对象设计分析