一、 程序设计的题目
——学生档案管理系统
二、 程序分析
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;
}