C++實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)最新版
學(xué)生成績(jī)管理系統(tǒng),供大家參考,具體內(nèi)容如下
一、問(wèn)題描述及功能要求
(1)輸入同學(xué)的學(xué)號(hào),姓名,三門科成績(jī)(應(yīng)用數(shù)學(xué)、大學(xué)英語(yǔ)、計(jì)算機(jī)應(yīng)用基礎(chǔ))
(2)可以計(jì)算出每個(gè)學(xué)生三門課的平均成績(jī)。
(3)可通過(guò)輸入姓名、學(xué)號(hào)查詢成績(jī),也可通過(guò)姓名修改學(xué)生信息,也可通過(guò)主界面刪除學(xué)生信息,以及清楚所有信息
二、代碼實(shí)現(xiàn) 帶有注釋
廢話不說(shuō),直接代碼,歡迎指正。
大家CV可能有不兼容的情況,可以跟我滴滴,盡可能解決問(wèn)題地回復(fù)。
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
#define null NULL
class student
{
private:
friend class studentMessage;
student *next; //節(jié)點(diǎn)指針
string name; //學(xué)生姓名
int age; //年紀(jì)
int id; //學(xué)號(hào)
double score[3]; //三科成績(jī)
double total; //總分
double average; //平均成績(jī)
public:
student(string _name,int _age,int _id,double *_score)
{
name = _name;
age = _age;
id = _id;
score[0] = _score[0];
score[1] = _score[1];
score[2] = _score[2];
total = score[0]+score[1]+score[2];
average = total/3;
next = NULL;
}
student() //為studentMessage初始化頭結(jié)點(diǎn)用
{
name = "null";
age = 0;
id = 0;
score[0]=score[1]=score[2]=0;
total = 0;
average = 0;
next = NULL;
}
~student(){}
void swap(student*);
};
void student::swap(student *q)
{
string _name;
int _age,_id;
double _score[3],_total,_average;
_name = name;
name = q->name;
q->name = _name;
_age = age;
age = q->age;
q->age = _age;
_id = id;
id = q->id;
q->id = _id;
_score[0] = score[0];
score[0] = q->score[0];
q->score[0] = _score[0];
_score[1] = score[1];
score[1] = q->score[1];
q->score[1] = _score[1];
_score[2] = score[2];
score[2] = q->score[2];
q->score[2] = _score[2];
_total = total;
total = q->total;
q->total = _total;
_average = average;
average = q->average;
q->average = _average;
}
class studentMessage
{
private:
student *first; //頭指針
int num; //信息中的學(xué)生人數(shù)
public:
studentMessage()
{
num = 0; //初始化學(xué)生人數(shù)為0
first = new student; //初始化頭結(jié)點(diǎn)
}
~studentMessage(){delete first;}
/*管理系統(tǒng)常規(guī)操作*/
void Insret(void); //插入
void Display(void); //顯示
void Delete(void); //刪除
void Search(void); //搜索
void Change(void); //改動(dòng)
void sortByLesson1(void); //按成績(jī)一來(lái)排序
void sortByLesson2(void); //按成績(jī)二來(lái)排序
void sortByLesson3(void); //按成績(jī)?nèi)齺?lái)排序
void sortByTotal(void); //按總分來(lái)排序
void SearchByid(void); //按照學(xué)號(hào)查找
void SearchByname(void); //按照姓名查找
int menu(void); //初始的菜單
void clear(void); //清空列表
};
int studentMessage::menu(void)
{
int ch;
cout<<"**********************************************************************"<<endl;
cout<<"======================================================================"<<endl;
cout<<"***************************學(xué)生成績(jī)管理系統(tǒng)***************************"<<endl;cout<<endl;
cout<<"1.顯示所有學(xué)生成績(jī)"<<endl;
cout<<"2.添加學(xué)生信息"<<endl;
cout<<"3.查詢學(xué)生信息"<<endl;
cout<<"4.修改學(xué)生信息"<<endl;
cout<<"5.刪除最下面一個(gè)學(xué)生信息"<<endl;
cout<<"6.刪除所有信息"<<endl;
cout<<"0.退出系統(tǒng)"<<endl;cout<<endl;
cout<<"********************Copyright@ By Jeaven Wong**************************"<<endl;
cout<<"======================================================================="<<endl;
cout<<"***********************************************************************"<<endl;
cin >> ch;
cout<<"\n\n\n"<<endl;
return ch;
}
//插入
void studentMessage::Insret(void)
{
string name;
int age;
int id;
double score[3];
cout<<"請(qǐng)輸入學(xué)生姓名: ";
cin>>name;
cout<<"請(qǐng)輸入學(xué)生年齡: ";
cin>>age;
cout<<"請(qǐng)輸入學(xué)生學(xué)號(hào): ";
cin>>id;
cout<<"下面請(qǐng)輸入學(xué)生三門課程成績(jī): ";
cout<<endl;
cout<<"請(qǐng)輸入第一門課的成績(jī): ";cin>>score[0];
cout<<"請(qǐng)輸入第二門課的成績(jī): ";cin>>score[1];
cout<<"請(qǐng)輸入第三門課的成績(jī): ";cin>>score[2];
cout<<endl;
student *newstu = new student(name,age,id,score);
student *p = first;
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = null;
num++;
}
void studentMessage::Display(void)
{
if(num == 0)
{
cout<<"當(dāng)前記錄中無(wú)學(xué)生..."<<endl;
}
else
{
student *p = first->next;
while(p != null)
{
cout<<"姓名:"<<p->name<<" ";
cout<<"年齡:"<<p->age<<" ";
cout<<"學(xué)號(hào):"<<p->id<<" ";
cout<<"三門課程成績(jī): "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"總分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
p = p->next;
}
}
}
void studentMessage::Delete(void)
{
student *p = first;
student *pre = first;
while(p->next != NULL)
{
pre = p;
p = p->next;
}
pre->next = NULL;
delete p;
num--;
}
void studentMessage::Search(void)
{
int temp = 0;
cout<<"請(qǐng)輸入查找的條件,有如下選項(xiàng)..."<<endl;
cout<<"按照學(xué)號(hào)查找(請(qǐng)輸入【1】) 按照姓名查找(請(qǐng)輸入【2】)"<<endl;
cin>>temp;
switch(temp)
{
case 1: SearchByid(); break;
case 2: SearchByname(); break;
default: cout<<"輸入有誤..."<<endl;
}
}
void studentMessage::SearchByid(void)
{
int _id;
int flag = 0;
cout<<"請(qǐng)輸入待查找學(xué)生的學(xué)號(hào):";
cin >> _id;
student *p = first->next;
while(p != null)
{
if(p->id == _id)
{
flag = 1;
cout<<"下面是查找匹配結(jié)果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年齡:"<<p->age<<" ";
cout<<"學(xué)號(hào):"<<p->id<<" ";
cout<<"三門課程成績(jī): "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"總分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
}
if(flag == 0)
{
cout<<"抱歉,記錄中沒有查找匹配項(xiàng)..."<<endl;
}
}
void studentMessage::SearchByname(void)
{
string _name;
int flag = 0;
cout<<"請(qǐng)輸入待查找的學(xué)生姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = 1;
cout<<"下面是查找匹配結(jié)果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年齡:"<<p->age<<" ";
cout<<"學(xué)號(hào):"<<p->id<<" ";
cout<<"三門課程成績(jī): "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"總分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
}
if(flag == 0)
{
cout<<"抱歉,記錄中沒有查找匹配項(xiàng)..."<<endl;
}
}
void studentMessage::Change(void)
{
string _name;
int flag = 0,temp;
int _id,_age;
int course = 0;
cout<<"請(qǐng)輸入需要改動(dòng)信息的學(xué)生的姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = 1;
cout<<"該學(xué)生當(dāng)前信息如下:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年齡:"<<p->age<<" ";
cout<<"學(xué)號(hào):"<<p->id<<" ";
cout<<"三門課程成績(jī): "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"總分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
cout<<"請(qǐng)指明哪一項(xiàng)需要修改..."<<endl;
cout<<"修改學(xué)號(hào)(輸入【1】) 修改年齡(輸入【2】)修改成績(jī)(輸入【3】)"<<endl;
cin >> temp;
switch(temp)
{
case 1:
{
cout<<"請(qǐng)輸入新的學(xué)號(hào):";cin>>_id;
p->id = _id;
}
break;
case 2:
{
cout<<"請(qǐng)輸入新的年齡:";cin>>_age;
p->age = _age;
}
break;
case 3:
{
cout<<"請(qǐng)按指示修改課程成績(jī)..."<<endl;
cout<<"是否需要修改第一門課程成績(jī)?(需要輸入【1】不需要輸入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"請(qǐng)輸入修改后的第一門課的成績(jī):"; cin >> p->score[0];
}
course = 0;
cout<<"是否需要修改第二門課程成績(jī)?(需要輸入【1】不需要輸入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"請(qǐng)輸入修改后的第二門課的成績(jī):"; cin >> p->score[1];
}
course = 0;
cout<<"是否需要修改第三門課程成績(jī)?(需要輸入【1】不需要輸入【0】)"<<endl;
cin >> course;
if(course == 1)
{
cout<<"請(qǐng)輸入修改后的第三門課的成績(jī):"; cin >> p->score[2];
}
course = 0;
p->total = p->score[0]+p->score[1]+p->score[2];
p->average = p->total/3;
cout<<"修改后的信息如下: "<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年齡:"<<p->age<<" ";
cout<<"學(xué)號(hào):"<<p->id<<" ";
cout<<"三門課程成績(jī): "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<" ";
cout<<"總分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
break;
default: cout<<"輸入有誤..."<<endl;
}
}
p = p->next;
}
if(flag == 0)
cout<<"當(dāng)前記錄中沒有次學(xué)生..."<<endl;
}
/*排序我均采用冒泡排序法,均是從小到大排序*/
//按照科目一排序
void studentMessage::sortByLesson1(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[0] > q->score[0])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目二排序
void studentMessage::sortByLesson2(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[1] > q->score[1])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照科目三排序
void studentMessage::sortByLesson3(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[2] > q->score[2])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
//按照總成績(jī)排序
void studentMessage::sortByTotal(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->total > q->total)
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
}
void studentMessage::clear(void)
{
student *p = first->next;
while(p != null)
{
first->next = p->next;
p->next = null;
delete p;
p = first->next;
}
}
int main()
{
studentMessage stulist;
int ch;
while(ch = stulist.menu())
{
switch(ch)
{
case 1: stulist.Display(); break;
case 2: stulist.Insret(); break;
case 3: stulist.Search(); break;
case 4: stulist.Change(); break;
case 5: stulist.Delete(); break;
case 6: stulist.clear(); break;
default: cout<<"請(qǐng)按要求輸入..."<<endl;
}
}
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)
- C++實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
- C++實(shí)現(xiàn)簡(jiǎn)單班級(jí)成績(jī)管理系統(tǒng)
- C++實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)C++實(shí)現(xiàn)代碼
- C++課程設(shè)計(jì)之學(xué)生成績(jī)管理系統(tǒng)
- C++實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C++基于單鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
相關(guān)文章
C++詳細(xì)講解函數(shù)調(diào)用與Struct和CLass的區(qū)別
主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為函數(shù)調(diào)用。在C語(yǔ)言/C++中,只有在函數(shù)調(diào)用時(shí),函數(shù)體中定義的功能才會(huì)被執(zhí)行,下面讓我們?cè)敿?xì)來(lái)了解2022-05-05
詳解如何用alpine鏡像做一個(gè)最小的鏡像并運(yùn)行c++程序
這篇文章主要介紹了詳解如何用alpine鏡像做一個(gè)最小的鏡像并運(yùn)行c++程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
C++實(shí)現(xiàn)LeetCode(112.二叉樹的路徑和)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(112.二叉樹的路徑和),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
詳解c++11以正確的姿勢(shì)輸出enum class的值
這篇文章主要介紹了詳解c++11以正確的姿勢(shì)輸出enum class的值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單井字棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
c++打印封裝每次打印前面加上時(shí)間戳問(wèn)題
這篇文章主要介紹了c++打印封裝每次打印前面加上時(shí)間戳問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
這篇文章主要介紹了C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例,并且轉(zhuǎn)換后會(huì)統(tǒng)計(jì)二進(jìn)制1的個(gè)數(shù),實(shí)例簡(jiǎn)單明了,需要的朋友可以參考下2014-06-06

