程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++編寫學生成績管理系統

C++編寫學生成績管理系統

編輯:C++入門知識

/* (程序頭部注釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙台大學計算機學院學生
* All rights reserved.
* 文件名稱: 《C++編寫 學生成績管理系統》
* 作 者: 劉江波
* 完成日期: 2012 年 6 月 26 日
* 版 本 號: v.626

* 對任務及求解方法的描述部分
* 問題描述:

用C++編寫一個學生成績管理系統

1、可以實現以下功能:

cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.顯示學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.排序統計成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.查找學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.刪除學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.修改學生信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系統 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;


2、用鏈表存儲信息

* 程序頭部的注釋結束
*/

[cpp]
<span style="font-size:16px;"># include <iostream> 
# include <fstream> 
# include <string.h> 
#include <conio.h>//用getch(); 
using namespace std; 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
class Student 

public: 
 char name[20]; 
 char Id[20]; 
 int Cnum;       //C++課程得分 
 int Mnum;       //匯編課程得分 
 int Enum;       //嵌入式操作系統課程得分 
 int sum;        //總分      
 Student * Next; 
 void Input() 
 { 
  cout<<"\t\t請輸入學生的姓名:";  cin>>name; 
  cout<<"\t\t請輸入學生的學號:";  cin>>Id; 
  cout<<"\t\t請輸入C++課程的成績:";  cin>>Cnum; 
  cout<<"\t\t請輸入匯編課程的成績:";  cin>>Mnum; 
  cout<<"\t\t請輸入嵌入式操作系統課程的成績:";  cin>>Enum; 
  sum=Cnum+Mnum+Enum; 
 } 
 void ReadFile(istream & in) 
 { 
  in>>name>>Id>>Cnum>>Mnum>>Enum>>sum; 
 } 
 void Show() 
 { 
  cout<<"姓名:"<<name<<endl<<"學號:"<<Id<<endl<<"C++:"<<Cnum<<endl 
   <<"匯編:"<<Mnum<<endl<<"嵌入式操作系統:"<<Enum<<endl<<"總成績:"<<sum<<endl<<endl<<endl; 
 } 
}; 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
class Studentmassage 

public: 
 Studentmassage(); 
 ~Studentmassage(); 
 void ShowMenu(); 
 void Find(); 
 void Save(); 
 void ModifyItem(); 
 void RemoveItem(); 
 void Swap(Student *,Student *); 
 void Sort(); 
 //void Unpass(); 
 int ListCount(); 
 //void Average(); 
 void Display() 
 { 
  for(Student * p=Head->Next;p!=End;p=p->Next) 
   p->Show(); 
  cout<<"輸入任意字符!繼續……"; 
  getch(); 
 } 
 void AddItem() 
 { 
  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("sort.txt"); 
 if(!in) 
  cout<<"這是一個新系統,無學生信息。請先輸入。"<<endl; 
 else 
 { 
  while(!in.eof()) 
  { 
   End->ReadFile(in); 
   if(End->name[0]=='\0')break; 
   End->Next=new Student; 
   End=End->Next; 
  } 
  in.close(); 
  cout<<"\t\t讀取學生信息成功!"<<endl; 
 } 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析構函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
Studentmassage::~Studentmassage() 

 Save(); 
 for(Student * temp;Head->Next!=End;) 
 { 
  temp=Head->Next; 
  Head->Next=Head->Next->Next; 
  delete temp; 
 } 
 delete Head,End; 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜單﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::ShowMenu()                   

  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<<"〓〓〓〓〓〓〓〓〓★  ☆          0.安全退出系統        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl; 
  
 cout<<"\n\t\t\n\t\t請選擇:"; 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Find() 

 char name[20] ,Id[10]; 
 int x; 
 Student * p=NULL; 
 cout<<"\n\t\t*********************************\n"; 
 cout<<"\t\t※ 1.按學生的姓名查找\n\t\t※ 2.按學生學號查找"; 
 cout<<"\n\t\t*********************************\n請選擇:"; 
 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::ModifyItem()     //修改信息 

 char name[20]; 
 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::RemoveItem()         // 刪除信息 

 char name[20]; 
 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::Swap(Student *p1, Student *p2)//交換兩個combox變量的數據域 

 Student *temp=new Student;  
 strcpy(temp->name,p1->name); 
 strcpy(temp->Id,p1->Id); 
 temp->Cnum=p1->Cnum; 
 temp->Mnum=p1->Mnum; 
 temp->Enum=p1->Enum; 
 temp->sum=p1->sum; 
  
 strcpy(p1->name,p2->name); 
 strcpy(p1->Id,p2->Id); 
 p1->Cnum=p2->Cnum; 
 p1->Mnum=p2->Mnum; 
 p1->Enum=p2->Enum; 
 p1->sum=p2->sum; 
  
 strcpy(p2->name,temp->name); 
 strcpy(p2->Id,temp->Id); 
 p2->Cnum=temp->Cnum; 
 p2->Mnum=temp->Mnum; 
 p2->Enum=temp->Enum; 
 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()//對當前鏈表進行排序 
{  
 cout <<"Sorting..."<<endl; 
 Student *p=NULL,*p1=NULL,*k=NULL; 
 int n=Studentmassage::ListCount(); 
 if(n<2)  
  return; 
 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(); 
 return; 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Save() 

 out.open("sort.txt"); 
 for(Student *p=Head->Next;p!=End;p=p->Next) 
  out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t" 
  <<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n'; 
 out.close(); 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
int main() 

 int x,i=0; 
 bool quit=false; 
 cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl; 
 for(i=0;i<3;i++) 
  cout<<"\t\t◎\t\t\t\t\t\t  ◎"<<endl; 
 cout<<"\t\t◎★★★★【  歡迎進入學生成績管理系統  】★★★★◎"<<endl; 
 for(i=0;i<3;i++) 
  cout<<"\t\t◎\t\t\t\t\t\t  ◎"<<endl; 
 cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl;; 
 Studentmassage Grade; 
 cout<<"按任意鍵開始……"; 
  getch(); 
 while(!quit) 
 { 
  system("cls"); 
  Grade.ShowMenu(); 
  cin>>x; 
  switch(x) 
  { 
  case 0:quit=true;break; 
  case 1:Grade.AddItem();break; 
  case 2:Grade.Display();break; 
  case 3:Grade.Sort();break; 
  case 4:Grade.Find();break; 
  case 5:Grade.RemoveItem();break; 
  case 6:Grade.ModifyItem();break; 
  } 
 } 
 return 0; 
}</span> 
 

作者:sdliujiangbo

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved