基於Linux下的QT學生管理系統

基於Linux下的QT學生管理系統

1.項目背景
隨着學校的規模不斷擴大,學生數量急劇增加,有關學生的各種各樣的信息量也成倍的增長。面對龐大的信息量,就需要有學生信息管理系統來提高學生管理工作的效率。通過這樣的系統,可以做到信息的管理、科學統計和快速的查詢,從而減少管理方面的工作量,從而提高管理效率。所以該項目開發的系統爲學校學生信息管理系統,以便方便管理學生信息。

2 系統分析與設計
2.1 需求分析
2.1.1 系統概要
利用QT Creator編程環境編寫一個簡單的學生信息管理系統,直接對.txt文本進行操作,實現對學生信息的增,刪,改,查功能,本系統直接用TXT文本來儲存學生數據。本系統還具有學生管理員登陸和註冊功能,通過TXT文本來儲蓄學生管理員信息,以便下次管理員登陸學生管理系統,管理學生信息。
2.1.2 總體設計
二.總體設計
在窗口剛跳出來時,出現的是管理員登陸界面,點擊登陸按鈕可以直接進入學生管理系統的管理界面,而點擊註冊按鈕則跳轉的是管理員註冊界面,註冊界面有用戶名、密碼框、確認密碼框,如果註冊成功該管理員的信息會記錄到管理員TXT文本中。而在學生管理界面中:
在左邊的QTextEdit對象中顯示所有學生的信息,學生的信息被保存在student.txt文件中。右邊是幾個QPushButton,分別實現增,刪,改,查功能。還有一個QLineEdit,用來編輯學生信息。
1.增加學生信息:在行編輯器內輸入學生的信息,點擊“增加”按鈕,該生的信息就會被寫入student.txt文件,並且將增加後的所有的學生信息顯示在窗口的QTextEdit對象中。
2.刪除學生信息:在行編輯器內輸入學生的信息,點擊“刪除”按鈕,該生的信息就會從student.txt文件中刪除,並且將刪除後的所有的學生信息顯示在窗口的QTextEdit對象中。
3.修改學生信息:在行編輯器內輸入學生的信息,點擊“修改”按鈕,該生的新的信息就會被寫入文件,並且將修改後的所有的學生信息顯示在窗口的QTextEdit對象中。
4.查找學生信息:在行編輯器內輸入學生的學號,點擊“查找”按鈕,該生的信息會顯示在窗口上。(如圖2.1.2系統流程圖)
在這裏插入圖片描述
2.2 功能模塊介紹
2.2.1 管理員註冊註冊、登陸模塊
註冊模塊:通過語句QFile file(“guanlirenyuan.txt”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append); 創建一個文本文件,然後通過設置只寫功能,將管理員的用戶名密碼數據儲存到guanlirenyuan.txt文本中。QString xingming=ui->namelineEdit->text();
int password=ui->passwlineEdit->text().toInt();
int repassword=ui->repasswlineEdit->text().toInt();通過用戶名lineEdit,密碼lineEdit,確認密碼lineEdit,來輸入管理員信息。
登錄模塊:通過QFile file(“guanlirenyuan.txt”);file.open(QIODevice::ReadOnly|QIODevice::Text);語句打開管理員數據文本,並將文本的打開方式的設爲只讀模式。在文本流中,QTextStream重載了兩種運算符以簡化輸入輸出流的用法,運算符<<被稱爲插入符,顧名思義,是往該流對象中插入數據。另一個運算符>>被稱之爲提取符,即從流對象中提取出數據。然後通過QTextStream來讀取管理員TXT文本文件中的數據inp >> xingming >>password >>repassword;然後通過if判斷如果用戶名和密碼與管理TXT文本數據相匹配則通過跳轉槽函數,跳轉到管理學生信息界面,如果不匹配則彈出QMessageBox提示窗口,提示密碼或用戶名錯誤。
2.2.2 添加學生信息模塊
QFilefile(“student.txt”)file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append);通過以上數據創建一個student.txt文本來儲存學生的信息,將文件設置只寫功能,通過QTextStream out(&file);out<< name<<" “<<sex<<” “<<id<<” “<<linux1<<” “<<c<<” “<< “\n”;語句將學生的姓名、性別、學號、Linux成績、c++成績插入到student.txt文本中,從而實現添加學生信息模塊,添加完學生信息後file.close();關閉文件流,以防數據丟失,核心代碼如下:
QFile file(“student.txt”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append);
if(!file.isOpen()){
QMessageBox::about(NULL, “message”, “Failed to open data file”);
return;
}
QTextStream out(&file);
out<< name<<” “<<sex<<” “<<id<<” “<<linux1<<” “<<c<<” "<< “\n”;
file.close();
2.2.3 查詢學生信息模塊
用語句打開student.txt文本,並將文本設置打開的方式爲只讀QFile file(“student.txt”);file.open(QIODevice::ReadOnly|QIODevice::Text);通過學生的學號來查詢學生的信息,如果學號與student.txt文本文檔的學號信息相匹配則,通過setText方法將學生姓名、成績等信息顯示到label上,這樣就簡單的實現了學生信息的查詢功能,核心代碼如下:
while(!inp.atEnd()){
QString name;
QString sex;
int id,linux1,c;
inp >>name >>sex >>id >>linux1 >>c;
allstudentinfo.push_back(studentinfo(name, sex,id,linux1, c ));

   }
   allstudentinfo.pop_back();
   file.close();
   int id=ui->idlineEdit->text().toInt();
   bool flag=false;

for(auto i:allstudentinfo){
if(id==i.getid()){
ui->nalabel->setText(i.getname());
ui->selabel->setText(i.getsex());
ui->lilabel->setText(QString::number(i.getlinux1()));
ui->clabel->setText(QString::number(i.getc()));
ui->avglabel->setText(QString::number(i.getavg()));
flag = true;
break;
}
2.2.4 刪除學生信息模塊
用語句打開student.txt文本,並將文本設置打開的方式爲只讀QFile file(“student.txt”);
file.open(QIODevice::ReadOnly|QIODevice::Text);通過for循環將學生信息從頭到尾都遍歷一遍相關語句爲:for(QVector::iterator it = allstudentinfo.begin(); it != allstudentinfo.end()😉
然後通過學生的學號信息來遍歷學生student.txt文本,如果student.txt文本的學號信息與要刪除學生信息學號相匹配則通過 allstudentinfo.erase(it)刪除該學生信息,並同時彈出信息刪除成功消息,最後將文本流關閉以防數據丟失。核心代碼:
for(QVector::iterator it = allstudentinfo.begin(); it != allstudentinfo.end()😉{
if(it->getid()==id){
allstudentinfo.erase(it);
flag = true;
}
else
it++;
}
if(flag){
QMessageBox::about(NULL,“message”,“delect sucess”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate);
if(!file.isOpen()){
QMessageBox::about(NULL,“message”,“Data file open failed”);
return;
}
QTextStream out(&file);
for(auto i :allstudentinfo){
out << i.getname() <<" “<< i.getsex()<<” “<<i.getid()<<” “<<i.getlinux1() <<” "<< i.getc() << " " <<endl;
}
file.close();
}

2.2.5 修改學生信息模塊
首先在lineEdit來向學生輸入學生數據,然後通過設置QTextStream out(&file)類來向student.txt文本插入數據,來實現數據插入student.txt中。通過匹配學生學號來修改學生信息,如果學號與學生數據學生相匹配則通過out << i.getname() << " " << i.getsex() <<" “<< i.getid() << " " << i.getlinux1()<<” " << i.getc() << endl;語句將要修改的學生信息重新插入到student.txt,這樣就實現了簡單的學生數據修改功能,核心代碼:
for(QVector::iterator it = allstudentinfo.begin();it!=allstudentinfo.end();it++){
if(it->getid() ==id){
it->setname(name);
it->setsex(sex);
it->setc©;
it->setlinux(linux1);
flag=true;
}
}
if(flag){
QMessageBox::about(NULL,“message”,“Modification successful”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate);
if(!file.isOpen()){
QMessageBox::about(NULL,“message”,“Failed to open data file”);
return;
}
QTextStream out(&file);
for(auto i :allstudentinfo){
out << i.getname() << " " << i.getsex() <<" “<< i.getid() << " " << i.getlinux1()<<” " << i.getc() << endl;
}
file.close();
}else {
QMessageBox::about(NULL,“message”,“Id does not exist!”);
2.2.6 添加時間模塊
設置時間事件,通過TextLable顯示時間,在每個窗口都設置時間事件核心代碼:
oid chaxun::timerEvent(QTimerEvent *event)
{ QDate date = QDate::currentDate();
QTime tm = QTime::currentTime();
ui->label_2->setText(date.toString("yyyy-MM-dd ")+ tm.toString(“hh:mm:ss”));
}
本學生管理系統是用txt文件來存放數據而不是數據庫,在以後我會繼續完善此項目,儘量用數據庫來的存放學生數據,並在數據庫層面上對數據進行增刪改查的操作,由於本項目代碼過多我就不一一附上了,如果有需要該項目作爲參考的同學可以私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章