高校工资管理系统 C课程设计.docx
- 文档编号:11225572
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:25
- 大小:87.48KB
高校工资管理系统 C课程设计.docx
《高校工资管理系统 C课程设计.docx》由会员分享,可在线阅读,更多相关《高校工资管理系统 C课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
高校工资管理系统C课程设计
高校工资管理系统C课程设计
C++课程设计
高
校
工
资
管
理
系
统
1.系统概述
通过设计一个较为简单的《高校工资管理系统》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。
了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。
2.总体设计
2.1职工类的设计
基于C++中类的概念,类的封装,继承和抽象。
编写一个Person的基类包含共有的相关信息和操作,然后使职工类都继承于此基类从而实现多态。
2.2应用类的设计
编写一个Person类的友元类College类来实现添加,删除,查找等功能。
2.3文件的读写设计
通过College类中的Save()函数来实现数据的存储,保存在Person.dat中,而通过Load()函数来实现Person.dat数据的读入。
3.详细设计及系统实现
3.1Person类
classPerson//人员类(抽象类)
{
protected:
intNo;//编号
charName[20];//姓名
charDuty;//人员类别标志(0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师)
doubleSalary;//基本工资
Person*next;//指针域
public:
Person()//基类构造
{
next=0;//指针域设置为空
}
virtual~Person()//基类虚析构
{
}
virtualvoidInput()=0;//从键盘输入数据
virtualvoidInput(ifstream&ifs)=0;//从文件输入数据
virtualvoidOutput()=0;//向屏幕输出数据
virtualvoidOutput(ofstream&ofs)=0;//向文件输出数据
virtualdoubleIncoming()=0;//计算收入
friendclassCollege;
};
3.2Teacher类
classTeacher:
virtualpublicPerson//教师类
{
protected:
intHours;//教师课时
public:
//为对象设置数据分为两种途径,通过)构造函数,)一般成员函数
//分开可以使得程序中应用更加灵活
//本程序采用:
缺省构造+Input()
Teacher()//构造函数,初始化部分数据
{
Duty='0';
Salary=800;
}
voidInput()//键盘补充输入其它数据
{
cout<<"编号:
";cin>>No;
cout<<"姓名:
";cin>>Name;
cout<<"教师上学期课时:
";cin>>Hours;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
voidOutput()
{
cout< } voidOutput(ofstream&ofs) { ofs< } doubleIncoming() { returnSalary+(Hours-120)*20; } }; 3.3Assistant类 classAssistant: virtualpublicPerson//实验员 { protected: intAllowance; intHours; public: Assistant() { Duty='1'; Salary=650; Allowance=150; } voidInput() { cout<<"编号: ";cin>>No; cout<<"姓名: ";cin>>Name; cout<<"实验员上学期实验课时: ";cin>>Hours; } voidInput(ifstream&ifs) { ifs>>No>>Name>>Duty>>Hours; } voidOutput() { cout< } voidOutput(ofstream&ofs) { ofs< } doubleIncoming() { returnSalary+Allowance+(Hours-70)*20; } }; 3.4Manager类 classManager: virtualpublicPerson//行政人员 { protected: intAllowance; public: Manager() { Duty='2'; Salary=750; Allowance=250; } voidInput() { cout<<"编号: ";cin>>No; cout<<"姓名: ";cin>>Name; } voidInput(ifstream&ifs) { ifs>>No>>Name>>Duty; } voidOutput() { cout< } voidOutput(ofstream&ofs) { ofs< } doubleIncoming() { returnSalary+Allowance; } }; 3.5Teacher_Assistant类 classTeacher_Assistant: publicTeacher,publicAssistant//教师兼实验员 { public: Teacher_Assistant() { Duty='3'; Teacher: : Salary=800; } voidInput() { cout<<"编号: ";cin>>No; cout<<"姓名: ";cin>>Name; cout<<"教师上学期课时: ";cin>>Teacher: : Hours; cout<<"教师兼职实验员上学期实验课时: ";cin>>Assistant: : Hours; } voidInput(ifstream&ifs) { ifs>>No>>Name>>Duty>>Teacher: : Hours>>Assistant: : Hours; } voidOutput() { cout< : Hours<<"" < : Hours<<"\t"< } voidOutput(ofstream&ofs) { ofs< : Hours<<"" < : Hours< } doubleIncoming() { returnSalary+(Teacher: : Hours-120)*20 +Allowance+(Assistant: : Hours-70)*20; } }; 3.6Manager_Teacher类 classManager_Teacher: publicManager,publicTeacher//行政人员兼教师 { public: Manager_Teacher() { Duty='4'; Manager: : Salary=750; } voidInput() { cout<<"编号: ";cin>>No; cout<<"姓名: ";cin>>Name; cout<<"行政人员兼职教师上学期课时: ";cin>>Hours; } voidInput(ifstream&ifs) { ifs>>No>>Name>>Duty>>Hours; } voidOutput() { cout< } voidOutput(ofstream&ofs) { ofs< } doubleIncoming() { returnSalary+Allowance+Hours*20; } }; 3.7College类 3.7.1头文件 classCollege { private: Person*PL; voidClear(); intCollege: : Find(intID,Person**p1,Person**p2); public: College();//构造 ~College();//析构 voidAdd();//增加职工 voidDelete();//删除职工 voidModify();//修改职工 voidPrint();//输出职工信息 voidSave();//职工信息存盘 voidLoad();//职工信息装入 voidFinding();//查找职工 }; 3.7.2构造函数 College: : College()//构造函数(创建个头结点的链表) { Person*p=newTeacher; PL=p; cout<<"自动装入数据...\n"; Load(); } 3.7.3析构函数 College: : ~College()//析构函数(仅保留个头结点) { Person*p=PL; while(p)//逐个删除结点,包括头结点 { PL=p->next; deletep; p=PL; } PL=0; } 3.7.4Add函数 voidCollege: : Add()//增加职工 { cout<<"\t\t****************高校工资管理系统*******************\n\n\n"; cout<<"\n\t\t\t\t**增加职工,输入x结束**\n\n"; //查找尾结点 Person*p=PL; while(p->next)p=p->next; charch='m'; //创建新结点,录入数据,连接到链表 Teacher*pt; Assistant*pa; Manager*pm; Teacher_Assistant*pta; Manager_Teacher*pmt; cout<<"职工分类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师]: \n\n"; for(;ch! ='x';) { cout<<"类别: "; cin>>ch; switch(ch) { case'0': pt=newTeacher;pt->Input(); p->next=pt; break; case'1': pa=newAssistant;pa->Input(); p->next=pa; break; case'2': pm=newManager;pm->Input(); p->next=pm; break; case'3': pta=newTeacher_Assistant;pta->Input(); p->next=pta; break; case'4': pmt=newManager_Teacher;pmt->Input(); p->next=pmt; break; } p=p->next; } } 3.7.5Find函数 //查找职工结点(返回-找到,-未找到.结点指针由p1返回,p2为前看指针) intCollege: : Find(intID,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.6Clear函数 voidCollege: : Clear()//清除所有的职工结点(仅保留头结点) { Person*p=PL->next; while(p) { PL->next=p->next; deletep; p=PL->next; } } 3.7.7Delete函数 voidCollege: : Delete()//删除职工 { cout<<"\t\t****************高校工资管理系统*******************\n\n\n"; cout<<"\n\t\t\t\t**删除职工**\n"; intNo; Person*p1,*p2; cout<<"编号: ";cin>>No; if(! Find(No,&p1,&p2)) { cout<<"指定的人员没有找到! \n"; } else { p2->next=p1->next;//连接 deletep1; cout<<"正确删除! \n"; } } 3.7.8Modify函数 voidCollege: : Modify()//修改职工 { cout<<"\t\t****************高校工资管理系统*******************\n\n\n"; cout<<"\n\t\t\t\t**修改职工**\n"; intNo; Person*p1,*p2; cout<<"编号: ";cin>>No; if(! Find(No,&p1,&p2)) { cout<<"指定的人员没有找到! \n"; } else { p1->Output();//输出原来的职工信息(做提示) p1->Input();//输入新的职工信息(更新) cout<<"修改完成! \n"; } } 3.7.9Print函数 voidCollege: : 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->Output(); p=p->next; } } 3.7.10Save函数 voidCollege: : Save()//职工信息存盘 { ofstreamf("Person.dat",ios: : out);//打开文件 //遍历输出至文件 Person*p=PL->next; while(p) { p->Output(f); p=p->next; } f.close();//关闭文件 cout<<"职工信息已经保存在Person.dat.\n"; } 3.7.11Load函数 voidCollege: : Load()//职工信息装入 { charbuf[81];//临时空间 charDuty;//人员类型 Person*p2;//新建结点的指针 longt;//读写位置 //清除现有结点(保留头结点) Clear(); //打开文件 ifstreamf("Person.dat",ios: : in); //建立结点,读数据 Person*p=PL;//尾结点指针 while (1) { //读取人员类型 t=f.tellg(); f>>buf>>buf>>Duty; if(f) { //根据人员类型创建新结点 switch(Duty) { case'0': p2=newTeacher;break; case'1': p2=newAssistant;break; case'2': p2=newManager;break; case'3': p2=newTeacher_Assistant;break; case'4': p2=newManager_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.12Finding函数 voidCollege: : Finding() { cout<<"\t\t****************高校工资管理系统*******************\n\n\n"; cout<<"\n\t\t\t\t**查找职工**\n"; Person*p1,*p2; intID; cout<<"编号;"; cin>>ID; cout<<"\n\n"; p1=PL->next; p2=PL; while(p1) { if((p1)->No==ID) { cout<<"编号\t姓名\t岗位\t\t其它\t工资\n"; (p1)->Output(); break; }//找到 else { p2=p1;//继续查找 p1=(p1)->next; } } } 3.8界面函数 charMeau() { charc; intflag; do { system("cls"); flag=1; cout<<"\t\t****************高校工资管理系统*******************\n\n\n"; 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、修改职工┃\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; if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8') flag=0; }while(flag); returnc; }//显示主菜单,接受选择 3.9主函数 voidmain() { charch; Collegec;//定义大学对象 do{ ch=Meau(); switch(ch) { case'1': system("cls");c.Add();cout<<"\n\n\t\t按任意键结束...\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";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();getchar(); }; }while(ch! ='8'); } 4.系统评价 该系统实现了职工的添加,删除,查找,显示,修改,和数据的存盘与装入操作,总体上来说功能比较全面,但仍有一些不足,如界面问题,以及程序中的许多繁琐之处。 5.设计结果与分析 5.1主界面 实现各种功能的选择: 5.2添加功能 实现添加功能,输入“x“结束: 5.3删除功能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高校工资管理系统 课程设计 高校 工资管理 系统