要約:単純な生徒の成績管理システムには、当然、追加、削除、変更、チェックが含まれます。生徒の成績管理は学校の教務部門の日常業務の重要な部分であり、大量の情報を扱います。このコードは生徒の成績管理の単純なシミュレーションであり、生徒データの入力、生徒データの出力、生徒データのクエリ、生徒データの追加、生徒データの変更、生徒データの削除の機能がメニュー選択によって完了します。
この管理システムのデータは、生徒番号、氏名、成績から構成される生徒の成績情報の集合体であり、この生徒グループの成績情報は同じ性質を持ち、同じデータオブジェクトに属します。このことから、これらのデータは線形テーブルのデータ要素の性質を持っていることがわかり、このシステムのデータは線形テーブルに格納されます。
シーケンシャル テーブルは、線形テーブルのシーケンシャル記憶構造であり、連続したメモリ ユニットのグループを使用して線形テーブルのデータ要素を順番に記憶することを意味します。順序記憶構造では、論理的に隣接する2つの要素は物理的な位置も隣接するという順序テーブルの特徴がある。このプロジェクトでは、シーケンシャルテーブルの線形テーブルシーケンシャルストレージ構造を採用できます。
これを行うには、最も単純な構造体の配列を使用します。
さらにいくつかの重要なモジュールについて話しましょう。
入力情報モジュール:
void Logging_data();//学生情報を入力
void List::Logging_data()//录入学生信息
{
if(len==Listlen)
{
cout << "表已满 !"<<endl;
return;
}
cout <<"请输入学生学号 "<<endl;
cin>>Elem[len+1].id;
if(id_ifnd(Elem[len+1].id) >=0 )
{
cout << "该学号已存在!"<<endl;
return;
}
cout <<"请输入学生姓名 "<<endl;
cin>>Elem[len+1].name;
cout <<"请输入学生成绩 "<<endl;
cin>>Elem[len+1].score;
if(Elem[len+1].score <0 || Elem[len+1].score>100)
{
cout << "输入有误!" <<endl;
return;
}
len++;
}
int id_ifnd(char *fin_id); //学生番号で検索し、見つかった位置または見つからなかった位置を返します;
void ele_stuinfo(); //学生情報を削除します
情報モジュールを削除します:
void List::dele_stuinfo() //删除学生信息
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
char dele_id[15]={0};
int i;
cout << "请输入要删除的学号 :";
cin >>dele_id;
for(i=0;i<len+1;i++)
{
if(strcmp(Elem[i].id,dele_id)==0)
{
if(i==len)
{
len--;
cout << "删除成功" << endl;
print_list();
return;
}
else
{
for(i;i<len+1;i++)
{
Elem[i]=Elem[i+1];
}
len--;
cout << "删除成功" << endl;
print_list();
return;
}
}
}
cout << "没有此学号的学生!"<<endl;
}
int is_empty(); //テーブルは空です
int is_full(); //テーブルはいっぱいです
void print_list(); //通常の印刷
印刷モジュール:
void List::print_list() //普通打印
{
int i;
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
else
{
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
for(i=0;i<len+1;i++)
{
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
}
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
}
void core_sort_low(); //成績順(失敗)で並べ替え
void core_sort_up(); //成績順(低い順)で並べ替え
void id_sort(); //学生番号で昇順で並べ替え
モジュールを学生番号の昇順に並べ替えます。
void List::id_sort() //按学号升序排序 ok
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(strcmp(Elem[j].id,Elem[j+1].id)>0)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
}
void core_sort_donw(); //降順(高い順)にソートします。
グレード分類モジュール:
void List::score_sort_donw() //按成绩降序(从高到低)排序 ok
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(Elem[j].score<Elem[j+1].score)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
}
void id_find_info(); //学生番号で学生情報を検索;
学生番号で学生情報モジュールを見つけます。
void List::id_find_info() //按学号查找学生信息;
{
cout << "请输入要查询的学生学号 : " ;
char buf[15]={0};
cin>>buf;
int i,k;
k=0;
for(i=0;i<len+1;i++)
{
if(strcmp(buf,Elem[i].id) == 0)
{
k++;
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
else
{
continue;
}
}
if(k==0)
{
cout <<"没有该学号的学生!"<<endl;
}
}
void name_find_info(); //学生情報を名前で検索;
void amend_info();//学生情報を変更
学生情報モジュールを変更するには:
void List::amend_info()//修改学生信息
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
char amend_id[15]={0};
int i;
char buf1[15]={0};
char buf2[15]={0};
float k;
cout << "请输入需修改信息的学生学号 :";
cin >>amend_id;
for(i=0;i<len+1;i++)
{
if(strcmp(Elem[i].id,amend_id)==0)
{
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
AAA: cout <<"请输入学生新学号 "<<endl;
cin>>buf1;
if(strcmp(buf1,Elem[i].id) != 0 && id_ifnd(buf1) >=0 )
{
cout << "该学号已存在!请重新输入"<<endl;
memset(buf1,0,sizeof(buf1));
goto AAA;
}
strcpy(Elem[i].id,buf1);
print_list();
cout <<"请输入学生新姓名 "<<endl;
cin>>buf2;
strcpy(Elem[i].name,buf2);
print_list();
BBB: cout <<"请输入学生新成绩 "<<endl;
cin>>k;
if(k <0 || k>100)
{
cout << "输入有误!请重新输入:" <<endl;
goto BBB;
}
Elem[i].score=k;
print_list();
cout << "已修改" << endl;
id_sort();
print_list();
return;
}
}
cout << "没有此学号的学生!"<<endl;
return;
}
完全なコード:
#include<iostream>
#include<string.h>
#define Listlen 100 //这里可以修改数组的大小,目前可以记录一百个学生成绩信息
using namespace std;
typedef struct ElemType{
char id[15]; //学号
char name[15]; //姓名
float score; //成绩
}STU;
class List{
public:
List()
{
Elem[Listlen]={0};
len=-1;
}
~List(){
}
void Logging_data();//录入学生信息
int id_ifnd(char *fin_id);//按学号查找返回查找到的位置或者没查找到的;
void dele_stuinfo(); //删除学生信息
int is_empty(); //表为空
int is_full() ; //表为满
void print_list(); //普通打印
void score_sort_low(); //成绩排序 (不及格)
void score_sort_up(); //按成绩升序(从低到高)排序
void id_sort(); //按学号升序排序
void score_sort_donw(); //按成绩降序(从高到低)排序
void id_find_info(); //按学号查找学生信息;
void name_find_info(); //按姓名查找学生信息;
void amend_info();//修改学生信息
private:
STU Elem[Listlen]; //定义结构体数组
int len;
};
int main(void)
{
List a;
int k;
char quits[6]={0};
strcpy(quits,"quit");
cout<<endl;
cout << "-------欢迎来到德玛西亚学校学生成绩信息管理系统-------"<<endl;
LIST: cout << "----------------1-------录入学生信息----------------"<<endl;
cout << "----------------2-------删除学生信息----------------"<<endl;
cout << "----------------3-------修改学生信息----------------"<<endl;
cout << "----------------4-------查询学生信息----------------"<<endl;
cout << "----------------0-------退出管理系统----------------"<<endl;
cout<<endl;
cin>>k;
char buf1[6]={0};
char buf2[6]={0};
char buf3[6]={0};
switch(k)
{
case 1:
for(k=0;k<100;k++)
{
a.Logging_data();
cout <<"继续录入请按任意键,录入结束请输入quit:";
cin>>buf1;
if(strcmp(buf1,quits)==0)
{
cout<<"录入结束表为 :"<<endl;
cout<<endl;
a.id_sort();
a.print_list();
goto LIST;
}
}
case 2:
for(k=0;k<100;k++)
{
a.dele_stuinfo();
cout <<"继续删除请按任意键,录入结束请输入quit:";
cin>>buf2;
if(strcmp(buf2,quits)==0)
{
cout<<"删除结束表为 :"<<endl;
cout<<endl;
a.id_sort();
a.print_list();
goto LIST;
}
}
case 3:
for(k=0;k<100;k++)
{
a.amend_info();
cout <<"继续修改请按任意键,录入结束请输入quit:";
cin>>buf3;
if(strcmp(buf3,quits)==0)
{
cout<<"修改结束表为 :"<<endl;
cout<<endl;
a.id_sort();
a.print_list();
goto LIST;
}
}
case 4:
int m;
FIND: cout<<endl;
cout << "----------------1-------按学号查找学生信息----------------"<<endl;
cout << "----------------2-------按姓名查找学生信息----------------"<<endl;
cout << "----------------3-------查找未及格的学生信息--------------"<<endl;
cout << "----------------4-------成绩降序表查看--------------------"<<endl;
cout << "----------------5-------成绩升序表查看--------------------"<<endl;
cout << "----------------0-------退出查询--------------------------"<<endl;
cout<<endl;
cin>>m;
switch(m)
{
case 1:
a.id_find_info();
goto FIND;
case 2:
a.name_find_info();
goto FIND;
case 3:
a.score_sort_low();
goto FIND;
case 4:
a.score_sort_donw();
a.print_list();
goto FIND;
case 5:
a.score_sort_up();
a.print_list();
goto FIND;
case 0:
goto LIST;
default:
cout <<"输入有误 请重新输入!"<<endl;
goto FIND;
}
case 0:
break;
default:
cout <<"输入有误 请重新输入!"<<endl;
goto LIST;
}
return 0;
}
void List::Logging_data()//录入学生信息
{
if(len==Listlen)
{
cout << "表已满 !"<<endl;
return;
}
cout <<"请输入学生学号 "<<endl;
cin>>Elem[len+1].id;
if(id_ifnd(Elem[len+1].id) >=0 )
{
cout << "该学号已存在!"<<endl;
return;
}
cout <<"请输入学生姓名 "<<endl;
cin>>Elem[len+1].name;
cout <<"请输入学生成绩 "<<endl;
cin>>Elem[len+1].score;
if(Elem[len+1].score <0 || Elem[len+1].score>100)
{
cout << "输入有误!" <<endl;
return;
}
len++;
}
int List::id_ifnd(char *fin_id) //按学号查找返回查找到的位置或者没查找到的;
{
int i;
for(i=0;i<len+1;i++)
{
if(strcmp(fin_id,Elem[i].id) == 0)
{
return i;
}
else
{
continue;
}
}
if(i==len+1)
{
return -1;
}
}
void List::dele_stuinfo() //删除学生信息
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
char dele_id[15]={0};
int i;
cout << "请输入要删除的学号 :";
cin >>dele_id;
for(i=0;i<len+1;i++)
{
if(strcmp(Elem[i].id,dele_id)==0)
{
if(i==len)
{
len--;
cout << "删除成功" << endl;
print_list();
return;
}
else
{
for(i;i<len+1;i++)
{
Elem[i]=Elem[i+1];
}
len--;
cout << "删除成功" << endl;
print_list();
return;
}
}
}
cout << "没有此学号的学生!"<<endl;
}
int List::is_empty() //表为空
{
if(len==-1)
{
return 1;
}
else{
return 0;
}
}
int List::is_full() //表为满
{
if(len+1==Listlen)
{
return 1;
}
else{
return 0;
}
}
void List::print_list() //普通打印
{
int i;
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
else
{
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
for(i=0;i<len+1;i++)
{
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
}
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
}
void List::score_sort_low() //成绩排序 (不及格)
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(Elem[j].score<Elem[j+1].score)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
int k=0;
for(i=0;i<len+1;i++)
{
if(Elem[i].score<60.0000)
{
break;
}
}
if(i==len+1)
{
cout << "没有不及格的学生!"<<endl;
return;
}
cout <<"学号 "<<"姓名 "<<"成绩(不及格) "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
for(i;i<len+1;i++)
{
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
}
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
void List::score_sort_up() //按成绩升序(从低到高)排序 ok
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(Elem[j].score>Elem[j+1].score)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
}
void List::id_sort() //按学号升序排序 ok
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(strcmp(Elem[j].id,Elem[j+1].id)>0)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
}
void List::score_sort_donw() //按成绩降序(从高到低)排序 ok
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
int i,j;
STU temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(Elem[j].score<Elem[j+1].score)
{
temp=Elem[j];
Elem[j]=Elem[j+1];
Elem[j+1]=temp;
}
}
}
}
void List::id_find_info() //按学号查找学生信息;
{
cout << "请输入要查询的学生学号 : " ;
char buf[15]={0};
cin>>buf;
int i,k;
k=0;
for(i=0;i<len+1;i++)
{
if(strcmp(buf,Elem[i].id) == 0)
{
k++;
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
else
{
continue;
}
}
if(k==0)
{
cout <<"没有该学号的学生!"<<endl;
}
}
void List::name_find_info() //按姓名查找学生信息;
{
cout << "请输入要查询的学生姓名 : " ;
char buf[10]={0};
cin>>buf;
int i,k;
k=0;
for(i=0;i<len+1;i++)
{
if(strcmp(buf,Elem[i].name) == 0)
{
k++;
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
}
else
{
continue;
}
}
if(k==0)
{
cout <<"没有该姓名的学生!"<<endl;
}
}
void List::amend_info()//修改学生信息
{
if(is_empty())
{
cout << "表为空 !"<<endl;
return;
}
char amend_id[15]={0};
int i;
char buf1[15]={0};
char buf2[15]={0};
float k;
cout << "请输入需修改信息的学生学号 :";
cin >>amend_id;
for(i=0;i<len+1;i++)
{
if(strcmp(Elem[i].id,amend_id)==0)
{
cout <<"学号 "<<"姓名 "<<"成绩 "<<endl;
cout <<"************************************************"<<endl;
cout <<endl;
cout<<Elem[i].id<<" "<<Elem[i].name<<" "<<Elem[i].score<<endl;
cout <<endl;
cout <<"************************************************"<<endl;
cout <<endl;
AAA: cout <<"请输入学生新学号 "<<endl;
cin>>buf1;
if(strcmp(buf1,Elem[i].id) != 0 && id_ifnd(buf1) >=0 )
{
cout << "该学号已存在!请重新输入"<<endl;
memset(buf1,0,sizeof(buf1));
goto AAA;
}
strcpy(Elem[i].id,buf1);
print_list();
cout <<"请输入学生新姓名 "<<endl;
cin>>buf2;
strcpy(Elem[i].name,buf2);
print_list();
BBB: cout <<"请输入学生新成绩 "<<endl;
cin>>k;
if(k <0 || k>100)
{
cout << "输入有误!请重新输入:" <<endl;
goto BBB;
}
Elem[i].score=k;
print_list();
cout << "已修改" << endl;
id_sort();
print_list();
return;
}
}
cout << "没有此学号的学生!"<<endl;
return;
}
実行結果: ポイントを入力するだけで確認できます
興味のある小さな松明は、楽しく使うことができます。今日の共有はこれで終わりです。読者の皆様、おじいちゃん、見てくれてありがとう、また次回!!ウーフー!!