C++實(shí)現(xiàn)學(xué)生考勤信息管理系統(tǒng)
學(xué)生考勤信息管理系統(tǒng)記錄了學(xué)生的缺課情況,它包括:
缺課日期、第幾節(jié)課、課程名稱、學(xué)生姓名、學(xué)生學(xué)號(hào)、缺課類型(遲到、請(qǐng)假及曠課)。系統(tǒng)具有以下功能:
1)、錄入學(xué)生的缺課記錄;
2)、修改某個(gè)學(xué)生的缺課記錄;
3)、查詢某個(gè)學(xué)生的缺課情況;
4)、統(tǒng)計(jì) 曠課學(xué)生姓名及曠課次數(shù),按曠課次數(shù)由多到少排序;
5)、統(tǒng)計(jì) 有學(xué)生曠課的課程及曠課人次(每次課時(shí)累加),按曠課人次由多到少排序;
重新修改了下,之前的4,5功能未實(shí)現(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é)號(hào) 缺課類型\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-修改某個(gè)學(xué)生的缺課記錄"<<endl;
cout<<"3-查詢某個(gè)學(xué)生的缺課情況"<<endl;
cout<<"4-統(tǒng)計(jì)曠課信息"<<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<<"請(qǐng)輸入記錄情況個(gè)數(shù)"<<endl;
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"請(qǐng)輸入第"<<i+1<<"種情況"<<endl;
cout<<"請(qǐng)輸入缺課日期\n";
cin>>date;
cout<<"請(qǐng)輸入第幾節(jié)課\n";
cin>>ClassX;
cout<<"請(qǐng)輸入課程名稱\n";
cin>>ClassN;
cout<<"請(qǐng)輸入學(xué)生姓名\n";
cin>>stuN;
cout<<"請(qǐng)輸入學(xué)生學(xué)號(hào)\n";
cin>>stuID;
cout<<"請(qǐng)輸入缺課類型,1代表請(qǐng)假,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 ;
}
}
//修改某個(gè)學(xué)生的缺課記錄
void Change(STU stu[])
{
cout<<"請(qǐng)輸入將要修改的學(xué)生姓名或者學(xué)號(hào),1代表姓名,2代表學(xué)號(hào):"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"請(qǐng)輸入將要修改的學(xué)生姓名:"<<endl;
string name;
cin>>name;
for(int i=0; i<n; i++)
{
if(stu[i].stuN==name)
{
stu[i].print();
cout<<"是否對(duì)該學(xué)生信息進(jìn)行修改,y代表進(jìn)行,n代表不進(jìn)行:"<<endl;
getchar();
char cc;
cin>>cc;
if(cc=='n')
continue;
else if(cc='y')
{
cout<<"請(qǐng)選擇修改內(nèi)容:"<<endl;
cout<<"修改日期請(qǐng)按1:\n修改課節(jié)請(qǐng)按2:\n修改課程名稱請(qǐng)按3:\n修改缺課類型請(qǐng)按4:\n";
cin>>x;
switch(x)
{
case 1:
{
char date[20];
cout<<"請(qǐng)輸入正確日期"<<endl;
cin>>date;
strcpy(stu[i].date,date);
}
break;
case 2:
{
cout<<"請(qǐng)輸入正確課節(jié)"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"請(qǐng)輸入正確課程名稱"<<endl;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"請(qǐng)輸入正確缺課類型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
break;
cout<<"輸出修改后的學(xué)生信息:"<<endl;
stu[i].print();
}
else cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
}
}
else if(x==2)
{
cout<<"請(qǐng)輸入要修改的學(xué)號(hào):"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
{
cout<<"是否對(duì)該學(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<<"請(qǐng)選擇修改內(nèi)容:"<<endl;
cout<<"修改日期請(qǐng)按1:\n修改課節(jié)請(qǐng)按2:\n修改課程名稱請(qǐng)按3:\n修改缺課類型請(qǐng)按4:\n";
cin>>x;
switch(x)
{
case 1:
{
cout<<"請(qǐng)輸入正確日期"<<endl;
char name[20];
cin>>name;
strcpy(stu[i].date,name);
}
break;
case 2:
{
cout<<"請(qǐng)輸入正確課節(jié)"<<endl;
cin>>x;
stu[i].ClassX=x;
}
break;
case 3:
{
cout<<"請(qǐng)輸入正確課程名稱"<<endl;
string name;
cin>>name;
stu[i].ClassN=name;
}
break;
case 4:
{
cout<<"請(qǐng)輸入正確缺課類型"<<endl;
cin>>x;
stu[i].ClassL=x;
}
break;
default :
cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
break;
cout<<"輸出修改后的學(xué)生信息:"<<endl;
stu[i].print();
}
else
cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
}
}
else
cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
//查詢某個(gè)學(xué)生的缺課情況
void Find(STU stu[])
{
cout<<"請(qǐng)輸入將要查詢的學(xué)生姓名(1)或者學(xué)號(hào)(2)"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"請(qǐng)輸入將要查詢的學(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<<"請(qǐng)輸入將要查詢的學(xué)生學(xué)號(hào)"<<endl;
cin>>x;
for(int i=0; i<n; i++)
{
if(stu[i].stuID==x)
stu[i].print();
}
}
else cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
//統(tǒng)計(jì)曠課學(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)計(jì)曠課課程信息
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<<"請(qǐng)輸入對(duì)應(yīng)功能序號(hào)"<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
Input(stu);
break;
case 2:
{
if(n==0)
cout<<"錯(cuò)誤,無(wú)信息!\n";
else
Change(stu);
}
break;
case 3:
{
if(n==0)
cout<<"錯(cuò)誤,無(wú)信息!\n";
else
Find(stu);
}
break;
case 4:
{
if(n==0)
cout<<"錯(cuò)誤,無(wú)信息!\n";
else
{
cout<<"\n查看學(xué)生曠課信息請(qǐng)按1:\n";
cout<<"\n查看課程曠課信息請(qǐng)按2:\n";
cin>>x;
if(x==1)
chaxun1(stu);
else if(x==2)
chaxun2(stu);
else
cout<<"抱歉,沒(méi)有該選項(xiàng)。"<<endl;
}
}
break;
case 5:
{
cout<<"退出該系統(tǒng)。"<<endl;
return 0;
break;
}
default:
cout<<"對(duì)不起,該項(xiàng)功能不存在."<<endl;
}
}
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++實(shí)現(xiàn)簡(jiǎn)單職工信息管理系統(tǒng)
- C++學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)簡(jiǎn)單的信息管理系統(tǒng)
- C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)景區(qū)信息管理系統(tǒng)
- linux下C/C++學(xué)生信息管理系統(tǒng)
- C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C++實(shí)現(xiàn)高校人員信息管理系統(tǒng)
- C++利用鏈表實(shí)現(xiàn)圖書(shū)信息管理系統(tǒng)
- C++代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-08-08
QT5實(shí)現(xiàn)簡(jiǎn)單的TCP通信的實(shí)現(xiàn)
本文主要介紹了QT5實(shí)現(xiàn)簡(jiǎn)單的TCP通信的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
詳解C++的靜態(tài)內(nèi)存分配與動(dòng)態(tài)內(nèi)存分配
內(nèi)存分配 (Memory Allocation) 是指為計(jì)算機(jī)程序或服務(wù)分配物理內(nèi)存空間或虛擬內(nèi)存空間的一個(gè)過(guò)程,本文主要介紹了C++的靜態(tài)內(nèi)存分配與動(dòng)態(tài)內(nèi)存分配,感興趣的同學(xué)可以參考閱讀2023-06-06
簡(jiǎn)單掌握桶排序算法及C++版的代碼實(shí)現(xiàn)
桶排序是將要排序的算法按桶分組排序之后再遍歷匯總的一種線性排序算法,下面就讓我們來(lái)通過(guò)小例子簡(jiǎn)單掌握桶排序算法及C++版的代碼實(shí)現(xiàn)^^2016-07-07
C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解
TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層2022-09-09
C++自帶的sort函數(shù)如何對(duì)vector容器元素進(jìn)行排序
這篇文章主要介紹了C++自帶的sort函數(shù)如何對(duì)vector容器元素進(jìn)行排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
C++中關(guān)于union的使用方法說(shuō)明
這篇文章主要介紹了C++中關(guān)于union的使用方法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Windows下VScode實(shí)現(xiàn)簡(jiǎn)單回聲服務(wù)的方法
回聲服務(wù)端可以將客戶端傳來(lái)的信息,再原封不動(dòng)地發(fā)送給客戶端,因而得名 epoch 服務(wù)。接下來(lái)通過(guò)本文給大家介紹Windows下VScode實(shí)現(xiàn)簡(jiǎn)單回聲服務(wù)的方法,感興趣的朋友一起看看吧2021-08-08
Qt圖片繪圖類之QPixmap/QImage/QPicture詳解
這篇文章主要為大家詳細(xì)介紹了Qt圖片繪圖類中QPixmap、QImage和QPicture的使用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03

