高校工资管理系统 C课程设计



《高校工资管理系统 C课程设计》由会员分享,可在线阅读,更多相关《高校工资管理系统 C课程设计(18页珍藏版)》请在装配图网上搜索。
1、重庆邮电大学《C++》课程设计报告 C++课程设计 高 校 工 资 管 理 系 统 1.系统概述 通过设计一个较为简单的《高校工资管理系统》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。 2.总体设计 2.1职工类的设计 基于C++中类的概念,类的封装,继承和抽象。编写一个Person的基类包含共有的相关信息和操作,然后使职工类都
2、继承于此基类从而实现多态。 2.2应用类的设计 编写一个Person类的友元类College类来实现添加,删除,查找等功能。 2.3文件的读写设计 通过College类中的Save()函数来实现数据的存储,保存在Person.dat中,而通过Load()函数来实现Person.dat数据的读入。 3.详细设计及系统实现 3.1 Person类 class Person //人员类(抽象类) { protected: int No; //编号 char Name[20]; //姓名 char Duty;
3、 //人员类别标志(0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师) double Salary; //基本工资 Person *next; //指针域 public: Person() //基类构造 { next=0; //指针域设置为空 } virtual ~Person() //基类虚析构 { } virtual void Input()=0; //从键盘输入数据 virtual void Input(ifstream& ifs)=0;
4、 //从文件输入数据 virtual void Output()=0; //向屏幕输出数据 virtual void Output(ofstream& ofs)=0; //向文件输出数据 virtual double Incoming()=0; //计算收入 friend class College; }; 3.2 Teacher类 class Teacher:virtual public Person //教师类 { protected: int Hours; //教师课时 publi
5、c: //为对象设置数据分为两种途径,通过)构造函数,)一般成员函数 //分开可以使得程序中应用更加灵活 //本程序采用:缺省构造+Input() Teacher() //构造函数,初始化部分数据 { Duty='0'; Salary=800; } void Input() //键盘补充输入其它数据 { cout<<"编号:"; cin>>No; cout<<"姓名:"; cin>>Name; cout<<"教师上学期课时:"; cin>>Hours; }
6、
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 7、g()
{
return Salary+(Hours-120)*20;
}
};
3.3 Assistant类
class Assistant:virtual public Person //实验员
{
protected:
int Allowance;
int Hours;
public:
Assistant()
{
Duty='1';
Salary=650;
Allowance=150;
}
void Input()
{
cout<<"编号:" 8、; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"实验员上学期实验课时:"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 9、 {
ofs< 10、50;
Allowance=250;
}
void Input()
{
cout<<"编号:"; cin>>No;
cout<<"姓名:"; cin>>Name;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty;
}
void Output()
{
cout< 11、& ofs)
{
ofs< 12、00;
}
void Input()
{
cout<<"编号:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"教师上学期课时:"; cin>>Teacher::Hours;
cout<<"教师兼职实验员上学期实验课时:"; cin>>Assistant::Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Teacher::Hours>>Assistant::Hours;
}
v 13、oid Output()
{
cout< 14、
return Salary+(Teacher::Hours-120)*20
+Allowance+(Assistant::Hours-70)*20;
}
};
3.6 Manager_Teacher类
class Manager_Teacher:public Manager,public Teacher //行政人员兼教师
{
public:
Manager_Teacher()
{
Duty='4';
Manager::Salary=750;
}
void Input()
{
c 15、out<<"编号:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"行政人员兼职教师上学期课时:"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 16、stream& ofs)
{
ofs< 17、c:
College(); //构造
~College(); //析构
void Add(); //增加职工
void Delete(); //删除职工
void Modify(); //修改职工
void Print(); //输出职工信息
void Save(); //职工信息存盘
void Load(); //职工信息装入
void Finding(); //查找职工
};
3.7.2 构造函数
College::College() //构造函数(创建个头结点的链表)
{
18、Person *p=new Teacher;
PL=p;
cout<<"自动装入数据...\n";
Load();
}
3.7.3 析构函数
College::~College() //析构函数(仅保留个头结点)
{
Person *p=PL;
while(p) //逐个删除结点,包括头结点
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
3.7.4 Add函数
void College::Add() //增加职工
{
cout<<"\t\t******* 19、*********高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**增加职工,输入x结束** \n\n";
//查找尾结点
Person *p=PL;
while(p->next)p=p->next;
char ch='m';
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
cout<<"职工分 20、类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师]:\n\n";
for(;ch!='x';)
{
cout<<"类别:";
cin>>ch;
switch(ch)
{
case'0': pt=new Teacher; pt->Input();
p->next=pt;
break;
case '1': pa=new Assistant; pa->Input();
p->next=pa;
break;
case '2': pm= 21、new Manager; pm->Input();
p->next=pm;
break;
case '3': pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case '4': pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
}
p=p->next;
}
}
3.7.5 Find函数
//查找职工结点(返回-找到 22、,-未找到.结点指针由p1返回,p2为前看指针)
int College::Find(int ID,Person **p1,Person **p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->No==ID)
break; //找到
else
{
*p2=*p1; //继续查找
*p1=(*p1)->next;
}
}
return *p1?1:0;
}
3.7.6 Clear函数
void College 23、::Clear() //清除所有的职工结点(仅保留头结点)
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
3.7.7 Delete函数
void College::Delete() //删除职工
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t** 删除职工**\n";
int No; 24、
Person *p1,*p2;
cout<<"编号:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p2->next=p1->next; //连接
delete p1;
cout<<"正确删除!\n";
}
}
3.7.8 Modify函数
void College::Modify() //修改职工
{
cout<<"\t\t****************高校工资管理系统******** 25、***********\n\n\n";
cout<<"\n\t\t\t\t** 修改职工**\n";
int No;
Person *p1,*p2;
cout<<"编号:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
p1->Output(); //输出原来的职工信息(做提示)
p1->Input(); //输入新的职工信息(更新)
cout<<"修改完成!\n";
}
}
3.7.9 26、 Print函数
void College::Print() //输出职工信息
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n** 职工信息表**\n\n";
cout<<"编号\t姓名\t岗位\t\t其它\t工资\n";
Person *p=PL->next;
if(!p)
{
cout<<"无职工记录!\n";
return;
}
while(p) //遍历链表,输出职工信息
{
p->Ou 27、tput();
p=p->next;
}
}
3.7.10 Save函数
void College::Save() //职工信息存盘
{
ofstream f("Person.dat",ios::out); //打开文件
//遍历输出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //关闭文件
cout<<"职工信息已经保存在Person.dat.\n";
}
3.7. 28、11 Load函数
void College::Load() //职工信息装入
{
char buf[81]; //临时空间
char Duty; //人员类型
Person *p2; //新建结点的指针
long t; //读写位置
//清除现有结点(保留头结点)
Clear();
//打开文件
ifstream f("Person.dat",ios::in);
//建立结点,读数据
Person *p=PL; //尾结点指针
while(1)
{
//读取人员 29、类型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根据人员类型创建新结点
switch(Duty)
{
case '0': p2=new Teacher; break;
case '1': p2=new Assistant; break;
case '2': p2=new Manager; break;
case '3': p2=new Teacher_Assistant; break;
30、 case '4': p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//关闭文件
f.close();
cout<<"Person.dat数据已装入.\n";
}
3.7.12 Finding函数
v 31、oid College::Finding()
{
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
cout<<"\n\t\t\t\t**查找职工**\n";
Person *p1,*p2;
int ID;
cout<<"编号;";
cin>>ID;
cout<<"\n\n";
p1=PL->next;
p2=PL;
while(p1)
{
if((p1)->No==ID)
{
cout<<"编号\t姓名\t岗位\t\t其它\t工资 32、\n";
(p1)->Output();
break;
}//找到
else
{
p2=p1; //继续查找
p1=(p1)->next;
}
}
}
3.8 界面函数
char Meau()
{
char c;
int flag;
do
{
system("cls");
flag=1;
cout<<"\t\t****************高校工资管理系统*******************\n\n\n";
33、 cout<<"\t\t\t┏━━━━━━━━━━━━━━━━┑\n";
cout<<"\t\t\t┃ ┃\n";
cout<<"\t\t\t┃ 1、增加职工 ┃\n";
cout<<"\t\t\t┃ 2、删除职工 ┃\n";
cout<<"\t\t\t┃ 3、查找职工 ┃\n";
cout<<"\t\t\t┃ 4、修改职工 34、 ┃\n";
cout<<"\t\t\t┃ 5、输出职工信息 ┃\n";
cout<<"\t\t\t┃ 6、数据存盘 ┃\n";
cout<<"\t\t\t┃ 7、数据装入 ┃\n";
cout<<"\t\t\t┃ 8、退出 ┃\n";
cout<<"\t\t\t┗━━━━━━━━━━━━━━━━┛\n";
cout<<"\n\n\n\t\t请输入您的选择:";
cin>>c 35、;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8')
flag=0;
}while(flag);
return c;
}//显示主菜单,接受选择
3.9 主函数
void main()
{
char ch;
College c; //定义大学对象
do{
ch=Meau();
switch(ch)
{
case '1': system("cls");c.Add(); cout<<"\n\n\t\t按任意 36、键结束...\n";getchar();getchar();break;
case '2': system("cls");c.Delete();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case '3': system("cls");c.Finding();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case '4': system("cls");c.Modify();cout<<"\n\n\t\t按任意键结束...\n 37、";getchar();getchar();break;
case '5': system("cls");c.Print(); cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case '6': system("cls");c.Save(); cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;
case '7': system("cls");c.Load(); cout<<"\n\n\t\t按任意键结束...\n";getchar();get 38、char();
};
}while(ch!='8');
}
4.系统评价
该系统实现了职工的添加,删除,查找,显示,修改,和数据的存盘与装入操作,总体上来说功能比较全面,但仍有一些不足,如界面问题,以及程序中的许多繁琐之处。
5.设计结果与分析
5.1 主界面
实现各种功能的选择:
5.2 添加功能
实现添加功能,输入“x“结束:
5.3 删除功能
5.4 查找功能
5.5 修改功能
5.6 显示功能
5.7 保存功能
5.8 读入功能
6.设计体会与建议
6.1 体会
通过这次对《高校工资管理系统》这个实验的设计,充分感受并体会到了C++中的面对对象设计的真意,以及学习了对一个程序的分解和分工完成的方法,掌握了一点编写的技巧。实际的操作与解决问题的能力更有了大幅的提升。
6.2 建议
希望在以后的课程设计中,能更多的得到老师的帮助,可以帮助我们更清晰地理清思路,以及一些编程上的技巧。
7.附录
7.1 成员
7.2 分工
18
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。