用C++设计的一个学生管理系统

本文介绍了一个简单的员工管理系统的设计与实现,该系统支持增加、删除、修改、查询和浏览员工信息等功能。通过面向对象的方法,定义了Date、Person及Employee等类,并通过Interface类实现了系统的界面逻辑。

该系统包含增加,删除,修改,查询,浏览的功能,分别用五个文件编写。

//employee.h

#include<iostream>
#include<string>
using namespace std;
class Date//出生日期
{
protected:
int year;
int month;
int day;
public:
void Set(int y,int m,int d);//初始化
int GetYear(); 
int GetMonth();
int GetDay();
};
class Person
{
protected:
char name[20];//姓名
char sex;//性别
char tel[20];//电话号码
char add[30];//家庭住址
Date birthday;
public:
Person();
void Input();
void Output();
char* GetName();//提取姓名
void DeleteN();//删除
};
class Employee:public Person
{
protected:
char number[10];//职工号
char position[20]; //职位
char department[20];//部门
double wage;//工资
public:
char* GetNum(); //提取职工号
void Input();
void Output();
};

 

//employee1.cpp

#include<iostream>
#include<string>
using namespace std;
class Date//出生日期
{
protected:
int year;
int month;
int day;
public:
void Set(int y,int m,int d);//初始化
int GetYear(); 
int GetMonth();
int GetDay();
};
class Person
{
protected:
char name[20];//姓名
char sex;//性别
char tel[20];//电话号码
char add[30];//家庭住址
Date birthday;
public:
Person();
void Input();
void Output();
char* GetName();//提取姓名
void DeleteN();//删除
};
class Employee:public Person
{
protected:
char number[10];//职工号
char position[20]; //职位
char department[20];//部门
double wage;//工资
public:
char* GetNum(); //提取职工号
void Input();
void Output();
};


//interface.h

#include<iostream>
#include<string>
using namespace std;
#include"employee.h"
const int N=200;//设置系统人数
class Interface
{
protected:
Employee e[N];
int num;//职工信息人数
public:
Interface();
void menu();//设计界面
void Run();//系统启动
void Input();//输入职工信息
void Browse();//浏览信息
void Change();//修改信息
void Delete();//删除信息
void Search();//查询信息
bool SearchNa();//按姓名查询职工信息
bool SearchNum();//按工号查询
};


//interface.cpp

#include"interface.h"
#include<string>
#include<iostream>
#include<cstdlib>
using namespace std;
Interface::Interface()
{
num=0;
}
void Interface::menu()//设计界面
{
cout<<"\n*****************************************"<<endl;
cout<<"*          欢迎使用本系统!             *"<<endl;
cout<<"*            1.录入信息                 *"<<endl;
cout<<"*            2.查询信息                 *"<<endl;
cout<<"*            3.浏览信息                 *"<<endl;
cout<<"*            4.修改信息                 *"<<endl;
cout<<"*            5.删除信息                 *"<<endl;
cout<<"*            0.退    出                 *"<<endl;
cout<<"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
}
void Interface::Run()//启动系统
{
int choice;
do
{
system("pause");
system("cls");
menu();
cout<<"\n请输入您的选择:";
cin>>choice;

switch(choice)
{
case 1:
Input();
break;
case 2:
Search();
break;
case 3:
Browse();
break;
case 4:
Change();
break;
case 5:
Delete();
break;
case 0:
cout<<"\n您已退出本系统!欢迎再次使用!"<<endl;
break;
}
}while(choice);
system("pause");
}
void Interface::Input()
{
if(num==N)//输入人数=设置人数
{
cout<<"\n人数已满!无法录入!\n";
return;
}
int i=num;
cout<<"\n请输入员工信息:"<<endl;
e[i].Input();
cout<<"\n录入成功!即将返回菜单!"<<endl;
num++;
}
void Interface::Browse()//浏览信息
{
cout<<endl;
if(num==0)
{
cout<<"\n没有职工信息!\n";
return;
}
else
{
cout<<"\n您要查看的职工信息如下:\n";
for(int i=0;i<num;i++)
e[i].Output();
cout<<"\n全部职工信息如上!即将返回菜单!"<<endl;
}
}
void Interface::Search()//查询
{
int N;
do
{
cout<<"\n请输入您要选择查询的方式(1为按姓名查询,2为按工号查询,0为退出):"<<endl;
cin>>N;
switch(N)
{
case 1:
SearchNa();
break;
case 2:
SearchNum();
break;
case 0:
Run();
break;
}
}while(N);
}
bool Interface::SearchNa()
{
char na[20];
cout<<"\n请输入要查询的员工姓名:";
cin>>na;
for(int i=0;i<num;i++)
if(strcmp(e[i].GetName(),na)==0)//strcmp函数用于比较两个字符串
break;
if(i==num)
{
cout<<"\n查无此人!"<<endl;
return false;
}
else
{
cout<<"\n您要查询的员工的信息如下:"<<endl;
e[i].Output();
}
return true;
}
bool Interface::SearchNum()
{
char n[10];
cout<<"\n请输入要查询的员工工号:";
cin>>n;
for(int i=0;i<num;i++)
if(strcmp(e[i].GetNum(),n)==0)
break;
if(i==num)
{
cout<<"\n查无此人!"<<endl;
return false;
}
   else
{
cout<<"\n您要查询的员工的信息如下:"<<endl;
e[i].Output();
}
return true;
}
void Interface::Change()
{
char na[20];
cout<<"\n请输入要修改的员工的姓名:";
cin>>na;
for(int i=0;i<num;i++)
if(strcmp(e[i].GetName(),na)==0)
break;
if(i==num)
cout<<"\n查无此人!"<<endl;
else
{
cout<<"\n请输入新的员工信息:"<<endl;
e[i].Input();
cout<<"\n修改成功!即将返回菜单!"<<endl;
}
}
void Interface::Delete()
{
char na[20];
char n;
cout<<"\n请输入员工姓名:";
cin>>na;
for(int i=0;i<num;i++)
if(strcmp(e[i].GetName(),na)==0)
break;
if(i==num)
cout<<"\n查无此人!"<<endl;
else
{
e[i].DeleteN();
cout<<"\n删除成功!即将返回菜单!"<<endl;
}
}

//main.cpp

#include"interface.h"
int main()
{
Interface in;
cout<<"|------------------------------|\n";
cout<<"|          Welcome!            |\n";
cout<<"|       欢迎使用本系统!       |\n";
cout<<"|------------------------------|\n";
cout<<endl;
in.Run();
return 0;
}   



















#include "iostream" #include "fstream" #include "iomanip" #include "string" using namespace std; bool equal(char *a,char *b,int n)//判断两个字符串是否一样 { int temp=0; for(int i=0;i<n;i++) if(a[i]==b[i]) temp++; if(temp==n) return 1; else return 0; } int getline(int n)//求文件中信息的行数(既文件中学生的数量,课程的数量) n为5表示为求A.txt中的行数,n为7表示求B.txt中的行数 { int count=0; char temp[20]; char temp1[20]; for(int i=0;i<20;i++) { temp1[i]=0; } ifstream f1; if(n==5) { f1.open("A.txt"); } if(n==7) { f1.open("B.txt"); } while(f1.get()) { if(!equal(temp,temp1,20)) { for(int i=0;i>temp; count++; } else break; } f1.close(); return count/n; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct binfo//学生基本信息 { char num[8],name[8],sex[8],flatnum[4],telenum[11];//学号,姓名,宿舍号,电话号码 }; struct sinfo//学生课程信息 { char num[8],jectnum[8],jectname[20];//学号,课程编号,课程名称 double xuefen,usualscore,labscore,testscore,comscore,turexuefen;//学分,平时成绩,实验成绩,卷面成绩,综合成绩,实得学分 double subxufen,subscore; }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class studentb { friend ostream &operator;<>(istream &is;,studentb &st;); public: studentb(); void dele();//删除信息 void displayb1(ostream &os;);//查询基本信息 void displayb(ostream &os;); void displaypart(); void inputb(istream &is;); char* getnum(); char* getname(); private: binfo b;//基本信息 }; void studentb::displaypart() { cout<<"学号:"<<b.num<<'\t'<<"姓名:"<<b.name<<endl; } studentb::studentb() { } void studentb::displayb(ostream &os;) { os<<b.num<<'\t'<<b.name<<'\t'<<b.sex<<'\t'<<b.flatnum<<'\t'<<b.telenum<<endl; } void studentb::displayb1(ostream &os;) { os<<"学号:"<<b.num<<" "<<"姓名:"<<b.name<<" "<<"性别:"<<b.sex<<" "<<"宿舍号:"<<b.flatnum<<" "<<"电话号码:"<<b.telenum<>b.num>>b.name>>b.sex>>b.flatnum>>b.telenum; } ///////////////////////////////////////////////////////////////////////////////////////// class students { public: students(){}; void inputs(istream &is;); void displays(); void displays1(); void displays(ostream &os;); void inputsubxuefen(double x); void inputsubscore(double x); char *getnum(); double getxuefen(); double getcomscore(); void cal(); private: sinfo s; }; void students::inputsubscore(double x) { s.subscore=x; } void students::inputsubxuefen(double x) { s.subxufen=x; } double students::getcomscore() { return s.comscore; } double students::getxuefen() { return s.turexuefen; } void students::cal() { if(s.labscore==-1) s.comscore=s.usualscore*0.3+s.testscore*0.7; else s.comscore=s.usualscore*0.15+s.labscore*0.15+s.testscore*0.7; if(s.comscore<60) s.turexuefen=0; else s.turexuefen=s.xuefen; } char* students::getnum() { return s.num; } void students::inputs(istream &is;) { if(is==cin) cout<<"请输入学号,课程编号,课程名称,学分,平时成绩,实验成绩,卷面成绩:"<>s.num>>s.jectnum>>s.jectname>>s.xuefen>>s.usualscore>>s.labscore>>s.testscore; cal(); } void students::displays1() { cout<<"学号:"<<s.num<<" "<<"课程编号:"<<s.jectnum<<'\t'<<"课程名称:"<<s.jectname<<'\t'<<"综合成绩:"<<s.comscore<<'\t'<<"实得学分:"<<s.turexuefen<<endl; } void students::displays() { cout<<"课程编号:"<<s.jectnum<<'\t'<<"课程名称:"<<s.jectname<<'\t'<<"综合成绩:"<<s.comscore<<'\t'<<"实得学分:"<<s.turexuefen<<endl; } void students::displays(ostream &os;) { os<<s.num<<'\t'<<s.jectnum<<'\t'<<s.jectname<<'\t'<<s.xuefen<<'\t'<<s.usualscore<<'\t'<<s.labscore<<'\t'<<s.testscore<<endl; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class allstudentb { public: allstudentb(int n) { studentnum=n; sptr=new studentb [studentnum]; ifstream f("A.txt"); for(int i=0;i<studentnum;i++) sptr[i].inputb(f); f.close(); } ~allstudentb(){delete [] sptr;} void searchb(char *ch);//查询基本信息 void searchpart(char *ch); void deleb(char *ch);//删除信息 void sort();//信息排序 private: studentb *sptr; int studentnum; }; void allstudentb::deleb(char *ch) { int temp=strlen(ch); ofstream f("A.txt"); for(int i=0;i<studentnum;i++) { if(!equal(ch,sptr[i].getnum(),temp)&&!equal(ch,sptr[i].getname(),temp)) sptr[i].displayb(f); } f.close(); } void allstudentb::searchb(char *ch) { int temp=strlen(ch); for(int i=0;i<studentnum;i++) if(equal(ch,sptr[i].getnum(),temp)||equal(ch,sptr[i].getname(),temp)) sptr[i].displayb1(cout); } void allstudentb::searchpart(char *ch) { int temp=strlen(ch); for(int i=0;i<studentnum;i++) if(equal(ch,sptr[i].getnum(),temp)||equal(ch,sptr[i].getname(),temp)) sptr[i].displaypart(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class allstudents { public: allstudents(int n){ num=n; ifstream f("B.txt"); sptr=new students [n]; for(int i=0;i<n;i++) sptr[i].inputs(f); f.close(); } ~allstudents(){delete [] sptr;} void searchs(char *ch); void inputs(); void displays(); void deles(char *ch); void sortxuefen(int n); void sortcomscore(int n); void print();//在屏幕上显示信息 private: students *sptr; int num; }; void allstudents::print() { for(int i=0;i<num;i++) sptr[i].displays1(); } void allstudents::sortxuefen(int n) { students temp; int i,j; if(n==0) { for(i=1;i<num;i++) for(j=0;j<num-i;j++) if(sptr[j].getxuefen()<sptr[j+1].getxuefen())//降序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } else { for(i=1;i<num;i++) for(j=0;jsptr[j+1].getxuefen())//升序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } displays(); } void allstudents::sortcomscore(int n) { int i,j; students temp; if(n==0) { for(i=1;i<num;i++) for(j=0;j<num-i;j++) if(sptr[j].getcomscore()<sptr[j+1].getcomscore())//降序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } else { for(i=1;i<num;i++) for(j=0;jsptr[j+1].getcomscore())//升序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } displays(); } void allstudents::deles(char *ch) { int temp=strlen(ch); ofstream f("B.txt"); for(int i=0;i<num;i++) { if(!equal(ch,sptr[i].getnum(),temp)) sptr[i].displays(f); } f.close(); } void allstudents::searchs(char *ch) { int count=0; double subxuefen=0; double subscore=0; int temp=strlen(ch); for(int i=0;i<num;i++) { if(equal(ch,sptr[i].getnum(),temp)) { sptr[i].displays(); count++; subxuefen=subxuefen+sptr[i].getxuefen(); subscore=subscore+sptr[i].getcomscore(); } sptr[i].inputsubscore(subscore); sptr[i].inputsubxuefen(subxuefen); } cout<<"共修:"<<count<<"科 实得总学分为:"<<subxuefen<<endl; } void allstudents::inputs() { students *p=new students [num]; for(int i=0;i<num;i++) p[i]=sptr[i]; delete []sptr; num++; sptr =new students [num]; for(int i=0;i<num-1;i++) sptr[i]=p[i]; sptr[num-1].inputs(cin); displays(); } void allstudents::displays() { ofstream f("B.txt"); for(int i=0;i<num;i++) sptr[i].displays(f); f.close(); } int main() { int m,n; m=getline(5);//学生数 n=getline(7); allstudentb stb(m); allstudents sts(n); int *score=new int[m]; int *xuefen=new int[m]; int x; char ch[8]; while(1) { cout<<"\n\n\n" <<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n" <<"\t\t※ ※\n" <<"\t\t※ 学生管理系统 ※\n" <<"\t\t※ ※\n" <<"\t\t※ 操作: ※\n" <<"\t\t※ 1--查询学生基本信息 ※\n" <<"\t\t※ 2--查询学生课程信息 ※\n" <<"\t\t※ 3--录入学生课程信息 ※\n" <<"\t\t※ 4--对学生信息进行排序 ※\n" <<"\t\t※ 5--删除学生信息 ※\n" <<"\t\t※ 6--退出 ※\n" <<"\t\t※ ※\n" <<"\t\t※ ※\n" <<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl; cout<>x; switch(x) { case 1: { if(m!=0) { cout<>ch; cout<<endl; cout<<endl; stb.searchb(ch); } else { cout<<"无学生基本信息可查!请录入学生信息!!"<<endl; } cout<<endl; cout<<endl; }break; case 2: { cout<>ch; stb.searchpart(ch);//查询学号为ch的学生的基本信息 sts.searchs(ch);//查询学号为ch的学生的所有课程信息 }break; case 3: { int temp1,count=0; cout<>temp1; while(count<temp1) { sts.inputs(); count++; } }break; case 4: { cout<<endl; cout<<endl; cout<<"1--按学分排序"<<endl; cout<<"2--按综合成绩排序"<<endl; cout<>temp1; if(temp1==1) { cout<<endl; cout<<endl; cout<<"输入0按降序排列"<<endl; cout<<"输入1安升序排列"<<endl; cout<>temp2; sts.sortxuefen(temp2); sts.print(); } if(temp1==2) { cout<<endl; cout<<endl; cout<<"输入0按降序排列"<<endl; cout<<"输入1安升序排列"<<endl; cout<>temp2; sts.sortcomscore(temp2); sts.print(); } }break; case 5: { char num[8]; cout<>num; stb.deleb(num); sts.deles(num); cout<<"学生信息已删除!"<<endl; }break; case 6:return 0; default:break; } } }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值