C++實現(xiàn)學(xué)生考勤信息管理系統(tǒng)
學(xué)生考勤信息管理系統(tǒng)記錄了學(xué)生的缺課情況,它包括:
缺課日期、第幾節(jié)課、課程名稱、學(xué)生姓名、學(xué)生學(xué)號、缺課類型(遲到、請假及曠課)。系統(tǒng)具有以下功能:
1)、錄入學(xué)生的缺課記錄;
2)、修改某個學(xué)生的缺課記錄;
3)、查詢某個學(xué)生的缺課情況;
4)、統(tǒng)計 曠課學(xué)生姓名及曠課次數(shù),按曠課次數(shù)由多到少排序;
5)、統(tǒng)計 有學(xué)生曠課的課程及曠課人次(每次課時累加),按曠課人次由多到少排序;
重新修改了下,之前的4,5功能未實現(xiàn)。
#include<iostream>
#include<fstream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
#define N 999
int n;
class STU
{
public:
STU() {}
void input(char d[],int X,string n,string sn,int sd,int cl)
{
strcpy(date,d);
ClassX=X;
ClassN=n;
stuN=sn;
stuID=sd;
ClassL=cl;
}
void print()
{
cout<<"缺課日期 課節(jié) 課程名稱 學(xué)生姓名 學(xué)生學(xué)號 缺課類型\t"<<endl;
cout<<date<<"\t"<<ClassX<<"\t"<<ClassN<<"\t"<<stuN<<"\t"<<stuID<<"\t"<<ClassL<<endl;
}
friend void Change(STU stu[]);
friend void Find(STU stu[]);
friend void chaxun1(STU stu[]);
friend void chaxun2(STU stu[]);
private:
string stuN;
int stuID;
char date[15];
int ClassX;
string ClassN;
int ClassL;
};
//主菜單
void meau()
{
cout<<endl;
cout<<endl;
cout<<"學(xué)生后勤管理系統(tǒng)"<<endl;
cout<<"1-錄入學(xué)生的缺課記錄"<<endl;
cout<<"2-修改某個學(xué)生的缺課記錄"<<endl;
cout<<"3-查詢某個學(xué)生的缺課情況"<<endl;
cout<<"4-統(tǒng)計曠課信息"<<endl;
cout<<"5-退出系統(tǒng)"<<endl;
cout<<endl;
cout<<endl;
}
//輸入學(xué)生的缺課記錄
void Input(STU stu[])
{
char date[15];
string stuN, ClassN;
int stuID,ClassX,ClassL;
while(1)
{
cout<<"請輸入記錄情況個數(shù)"<<endl;
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"請輸入第"<<i+1<<"種情況"<<endl;
cout<<"請輸入缺課日期\n";
cin>>date;
cout<<"請輸入第幾節(jié)課\n";
cin>>ClassX;
cout<<"請輸入課程名稱\n";
cin>>ClassN;
cout<<"請輸入學(xué)生姓名\n";
cin>>stuN;
cout<<"請輸入學(xué)生學(xué)號\n";
cin>>stuID;
cout<<"請輸入缺課類型,1代表請假,2代表曠課, 3代表遲到\n";
cin>>ClassL;
stu[i].input(date,ClassX,ClassN,stuN,stuID,ClassL);
}
cout<<"輸入信息完畢!是否繼續(xù)輸入?y是繼續(xù),n是停止:"<<endl;
char cc;
getchar();
cin>>cc;
if(cc=='n')
return ;
}
}
//修改某個學(xué)生的缺課記錄
void Change(STU stu[])
{
cout<<"請輸入將要修改的學(xué)生姓名或者學(xué)號,1代表姓名,2代表學(xué)號:"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"請輸入將要修改的學(xué)生姓名:"<<endl;
string name;
cin>>name;
for(int i=0; i<n; i++)
{
if(stu[i].stuN==name)
{
stu[i].print();
cout<<"是否對該學(xué)生信息進(jìn)行修改,y代表進(jìn)行,n代表不進(jìn)行:"<<endl;
getchar();
char cc;
cin>>cc;
if(cc=='n')
continue;
else if(cc='y')
{
cout<<"請選擇修改內(nèi)容:"<<endl;
cout<<"修改日期請按1:\n修改課節(jié)請按2:\n修改課程名稱請按3:\n修改缺課類型請按4:\n";
cin>>x;
switch(x)
{
case 1:
{
char date[20];
cout<<"請輸入正確日期"<<endl;
cin>>date;
strcpy(stu[i].date,date);
}
break;
case 2:
{
cout<<"請輸入正確課節(jié)"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"請輸入正確課程名稱"<<endl;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"請輸入正確缺課類型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,沒有該選項。"<<endl;
}
break;
cout<<"輸出修改后的學(xué)生信息:"<<endl;
stu[i].print();
}
else cout<<"抱歉,沒有該選項。"<<endl;
}
}
}
else if(x==2)
{
cout<<"請輸入要修改的學(xué)號:"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
{
cout<<"是否對該學(xué)生信息進(jìn)行修改,y代表進(jìn)行,n代表不進(jìn)行:"<<endl;
stu[i].print();
getchar();
char cc;
cin>>cc;
if(cc=='n')
continue;
else if(cc='y')
{
cout<<"請選擇修改內(nèi)容:"<<endl;
cout<<"修改日期請按1:\n修改課節(jié)請按2:\n修改課程名稱請按3:\n修改缺課類型請按4:\n";
cin>>x;
switch(x)
{
case 1:
{
cout<<"請輸入正確日期"<<endl;
char name[20];
cin>>name;
strcpy(stu[i].date,name);
}
break;
case 2:
{
cout<<"請輸入正確課節(jié)"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"請輸入正確課程名稱"<<endl;
string name;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"請輸入正確缺課類型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,沒有該選項。"<<endl;
}
break;
cout<<"輸出修改后的學(xué)生信息:"<<endl;
stu[i].print();
}
else
cout<<"抱歉,沒有該選項。"<<endl;
}
}
}
else
cout<<"抱歉,沒有該選項。"<<endl;
}
//查詢某個學(xué)生的缺課情況
void Find(STU stu[])
{
cout<<"請輸入將要查詢的學(xué)生姓名(1)或者學(xué)號(2)"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"請輸入將要查詢的學(xué)生姓名"<<endl;
string name;
cin>>name;
for(int i=0; i<n; i++)
{
if(stu[i].stuN==name)
stu[i].print();
}
}
else if(x==2)
{
cout<<"請輸入將要查詢的學(xué)生學(xué)號"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
stu[i].print();
}
}
else cout<<"抱歉,沒有該選項。"<<endl;
}
//統(tǒng)計曠課學(xué)生信息
void chaxun1(STU stu[])
{
map<string,int> A;
A.clear();
for(int s=0; s<n; s++)
{
if(stu[s].ClassL==2)
{
A[stu[s].stuN]++;
}
}
map<string,int>::iterator it;
int k=0,ant[N];
string sn[N];
for(it=A.begin(); it!=A.end(); it++)
{
sn[k]=(*it).first;
ant[k]=(*it).second;
k++;
}
for(int i=0; i<k-1; i++)
for(int j=i+1; j<k; j++)
{
if(ant[i]<ant[j])
{
int temp;
string ss;
temp=ant[i];
ant[i]=ant[j];
ant[j]=temp;
ss=sn[i];
sn[i]=sn[j];
sn[j]=ss;
}
}
for(int m=0; m<k; m++)
{
cout<<"學(xué)生姓名 曠課次數(shù)"<<endl;
cout<<sn[m]<<"\t"<<ant[m]<<endl;
}
}
//統(tǒng)計曠課課程信息
void chaxun2(STU stu[])
{
map<string,int> A;
A.clear();
for(int i=0; i<n; i++)
{
if(stu[i].ClassL==2)
{
A[stu[i].ClassN]++;
}
}
map<string,int>::iterator it;
for(it=A.begin(); it!=A.end(); it++)
{
cout<<"課程名稱 曠課總?cè)舜?<<endl;
cout<<(*it).first<<"\t"<<(*it).second<<endl;
}
}
int main()
{
STU stu[N];
while(1)
{
meau();
cout<<"請輸入對應(yīng)功能序號"<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
Input(stu);
break;
case 2:
{
if(n==0)
cout<<"錯誤,無信息!\n";
else
Change(stu);
}
break;
case 3:
{
if(n==0)
cout<<"錯誤,無信息!\n";
else
Find(stu);
}
break;
case 4:
{
if(n==0)
cout<<"錯誤,無信息!\n";
else
{
cout<<"\n查看學(xué)生曠課信息請按1:\n";
cout<<"\n查看課程曠課信息請按2:\n";
cin>>x;
if(x==1)
chaxun1(stu);
else if(x==2)
chaxun2(stu);
else
cout<<"抱歉,沒有該選項。"<<endl;
}
}
break;
case 5:
{
cout<<"退出該系統(tǒng)。"<<endl;
return 0;
break;
}
default:
cout<<"對不起,該項功能不存在."<<endl;
}
}
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實現(xiàn)
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實現(xiàn)的相關(guān)資料,這里提供實現(xiàn)實例,希望通過本文能幫助到大家,需要的朋友可以參考下2017-08-08
詳解C++的靜態(tài)內(nèi)存分配與動態(tài)內(nèi)存分配
內(nèi)存分配 (Memory Allocation) 是指為計算機(jī)程序或服務(wù)分配物理內(nèi)存空間或虛擬內(nèi)存空間的一個過程,本文主要介紹了C++的靜態(tài)內(nèi)存分配與動態(tài)內(nèi)存分配,感興趣的同學(xué)可以參考閱讀2023-06-06
C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解
TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層2022-09-09
C++自帶的sort函數(shù)如何對vector容器元素進(jìn)行排序
這篇文章主要介紹了C++自帶的sort函數(shù)如何對vector容器元素進(jìn)行排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Windows下VScode實現(xiàn)簡單回聲服務(wù)的方法
回聲服務(wù)端可以將客戶端傳來的信息,再原封不動地發(fā)送給客戶端,因而得名 epoch 服務(wù)。接下來通過本文給大家介紹Windows下VScode實現(xiàn)簡單回聲服務(wù)的方法,感興趣的朋友一起看看吧2021-08-08
Qt圖片繪圖類之QPixmap/QImage/QPicture詳解
這篇文章主要為大家詳細(xì)介紹了Qt圖片繪圖類中QPixmap、QImage和QPicture的使用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03

