課程設計:學生檔案管理系統
阿新 • • 發佈:2018-11-08
一、 程式設計的題目
——學生檔案管理系統
二、 程式分析
1. 主要運用到的知識:類和物件的應用、連結串列的應用等等。
2. 程式實現的功能:插入學生資訊(按學號排序插入);查詢學生資訊(按學號查詢、按名字查詢);修改學生資訊;刪除學生資訊;顯示學生資訊。
3. 分析
程式碼裡設定有Student類和Operation類,Student類私有資料儲存學生資訊:名字、班別、學號、性別、平時成績、卷面成績、總成績及排名,Operation類公有函式主要實現對資訊的操作:插入、查詢、刪除、修改、顯示。將Operation類與Sstudent類組合起來:
Menu()實現程式主選單,呼叫程式各功能
Insert()實現學生資訊的插入
Search()實現查詢功能,按名字查詢或按學號查詢
Remove()修改函式
Delete()刪除函式,刪除學生資訊
Show()顯示所有學生資訊,呼叫Printone函式通過迴圈把所有資訊顯示
四、程式原始碼
#include<iostream>
#include <string>
using namespace std;
class Student
{
private:
string number;//學號
string name;//名字
string grade;//班級
string sex;//性別
int dailyScore;//平時分
int finalScore;//卷面分
float generalScore;//總成績
int place;//排名
public:
Student *next;//next指向下一個學生,構成連結串列
Student(){next=NULL;}
Student(string num,string n,string g,string s,int dS,int fS,float gS,int pla)
{
number=num;
grade=g;
name=n;
sex=s;
dailyScore=dS;
finalScore=fS;
generalScore=gS;
place=pla;
next=NULL;
};//建構函式
string getnum(){return number;}//學號
string getgrade(){return grade;}//班別
string getname(){return name;}//名字
string gets(){return sex;}//性別
int getdS(){return dailyScore;}//平時分
int getfS(){return finalScore;}//卷面分
float getgS(){return generalScore;}//總成績
int getpla(){return place;}//排名
void setnum(string num){ number=num;}//修改學號
void setgrade(string g){ grade=g;}//修改班級
void setname(string n){name=n;}//修改名字
void sets(string s){sex=s;}//修改性別
void setdS(int dS){dailyScore=dS;}//修改平時分
void setfS(int fS){ finalScore=fS;}//修改卷面分
void setgS(float gS){ generalScore=gS;}//修改總成績
void setpla(int pla){ place=pla;}//修改排名
};
class Operation
{
private:
Student *first;
public:
Operation()
{
first=new Student;
}
void Menu();//選單
void Insert();//插入
void Search();//查詢
void Remove();//修改
void Delete();//刪除
void Print();//輸出
};
void Operation::Menu()
{
cout<<"********************************************************************************"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓〓 ☆ 學 生 檔案 管 理 系 統 ☆ 〓〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓★★★★★ ★★★★★★★ ★★★★★〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加學生資訊 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.顯示學生資訊 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.查詢學生資訊 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.刪除學生資訊 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.修改學生資訊 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.安全退出系統 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
}
void Operation::Insert() //插入
{
string number;//學號
string grade;//班級
string name;//名字
string sex;//性別
int dailyScore;//平時分
int finalScore;//卷面分
float generalScore;//總成績
int place;//排名
Student *p=NULL;
cout<<"請輸入要新增學生的資訊:"<<endl;
cout<<"請輸入學號:";
cin>>number;
cout<<endl;
cout<<"請輸入班級:";
cin>>grade;
cout<<endl;
cout<<"請輸入姓名:";
cin>>name;
cout<<endl;
cout<<"請輸入性別:";
cin>>sex;
cout<<endl;
cout<<"平時成績:";
cin>>dailyScore;
cout<<endl;
cout<<"卷面成績:";
cin>>finalScore;
cout<<endl;
cout<<"總成績:";
cin>>generalScore;
cout<<endl;
cout<<"排名:";
cin>>place;
cout<<endl;
Student *s=new Student(number,name,grade,sex,dailyScore,finalScore,generalScore,place);
p=first;
while(p->next!=NULL&&p->getnum()<s->getnum())//順便排好序
{
p=p->next;
}
s->next=p->next;
p->next=s;
}
void Operation::Delete()//刪除
{
string name;
Student * p =first->next, *q = first;
cout << "請輸入要刪除學生資訊的姓名:" << endl;
cin >> name;
while(p!=NULL)
{
if (p->getname()==name)
{
q->next = p->next;
delete p;
break;
}
p=p->next;
q=q->next;
}
if (p!=NULL)
{cout << "刪除成功!" << endl;
}
if (p==NULL)
{
cout << "\t\t沒有找到!" << endl;
}
}
void Operation::Search()//查詢
{
Student *p=NULL;
cout<<"\n** 查詢學生資訊 **\n"<<endl;
cout<<"請輸入查詢方式:"<<endl;
cout<<"1.按學號查詢"<<endl;
cout<<"2.按姓名查詢"<<endl;
cout<<"3.返回"<<endl;
char c;
cin>>c;
switch (c)
{
case '1':
{string n;
cout<<"請輸入你要查詢的學生的學號"<<endl;
cin>>n;
for(p=first;p!=NULL;p=p->next)
{
if(p->getnum()==n)
{
cout
<< "姓名:" <<p->getname() << endl
<< "班別:" <<p->getgrade() << endl
<< "學號:" <<p->getnum() << endl
<<"性別:"<<p->getgrade()<<endl
<< "日常成績:" <<p->getdS()<< endl
<< "期末成績:" <<p->getfS()<< endl
<< "總評成績:" <<p->getgS()<< endl
<< "排名:" <<p->getpla()<< endl ;
}
}
break;
}
case '2':
{
string name;
cout<<"請輸入你要查詢的學生姓名"<<endl;
cin>>name;
for(p=first;p!=NULL;p=p->next)
{
if(name==p->getname())
{
cout
<< "姓名:" <<p->getname() << endl
<< "班級:" <<p->getgrade() << endl
<< "學號:" <<p->getnum() << endl
<< "性別:" <<p->gets() << endl
<< "日常成績:" <<p->getdS()<< endl
<< "期末成績:" <<p->getfS()<< endl
<< "總評成績:" <<p->getgS()<< endl
<< "排名:" <<p->getpla()<< endl ;
}
}
break;
}
case '3':
return ;
}
}
void Operation::Print() //輸出
{
Student *p;
cout
<< "姓名"
<<"\t\t班級"
<< "\t\t學號"
<<"\t\t性別"
<< "\t\t期末成績"
<< "\t\t總評成績"
<< "\t\t排名"<<endl;
for(p=first->next;p!=NULL;p=p->next)
cout
<<p->getname()
<<"\t\t"<<p->getgrade()
<<"\t\t"<<p->getnum()
<<"\t\t"<<p->gets()
<<"\t\t"<<p->getfS()
<<"\t\t\t"<<p->getgS()
<<"\t\t\t"<<p->getpla()
<< endl ;
}
void Operation::Remove() //修改
{
string n;//修改項
string number;//學號
string grade;//班級
string name;//名字
string sex;//性別
int dailyScore;//平時分
int finalScore;//卷面分
float generalScore;//總成績
int place;//排名
cout<<"請輸入你要修改的學生姓名"<<endl;
cin>>n;
Student *p;
for(p=first->next;p!=NULL;p=p->next)
if(p->getname()==n)
{
cout<<"請選擇您要修改的資訊項:"<<endl;
cout<<"1、學號,2、班別,3、姓名,4、性別,5、平時分,6、卷面分,7、總成績,8、排名。"<<endl;
int in;
cin>>in;
switch(in)
{
case 1:
cout<<p->getnum()<<"修改為:"<<endl;
cin>>number;p->setnum(number);
break;
case 2:
cout<<p->getgrade()<<"修改為:"<<endl;
cin>>grade;p->setgrade(grade);
break;
case 3:
cout<<p->getname()<<"修改為:"<<endl;
cin>>name;p->setname(name);
break;
case 4:
cout<<p->gets()<<"修改為:"<<endl;
cin>>sex;p->sets(sex);
break;
case 5:
cout<<p->getdS()<<"修改為:"<<endl;
cin>>dailyScore;p->setdS(dailyScore);
break;
case 6:
cout<<p->getfS()<<"修改為:"<<endl;
cin>>finalScore;p->setfS(finalScore);
break;
case 7:
cout<<p->getgS()<<"修改為:"<<endl;
cin>>generalScore;p->setgS(generalScore);
break;
case 8:
cout<<p->getpla()<<"修改為:"<<endl;
cin>>place;p->setpla(place);
break;
default:
cout<<"輸入錯誤!"<<endl;
break;
}
}
}
int main()
{
Operation O;
O.Menu();
while(1)
{
int n;
cout<<"\n\t\t\n\t\t請選擇:";
cin>>n;
switch(n)
{
case 1://增加
O.Insert();
break;
case 2://顯示
O.Print();
break;
case 3://查詢
O.Search();
break;
case 4://刪除
O.Delete();
break;
case 5://修改
O.Remove();
break;
case 6:
cout<<"******************************"<<"\n感謝您的使用!\n"<<"******************************"<<endl;
exit(0);
}
}
return 0;
}