资源描述
课 程 设 计
课程名称: 程序设计方法和C 语言课程设计
设计题目: 小型企业工资管理系统设计
学 院: 信息工程和自动化学院
专 业: 计算机科学和技术
年 级: 级
学生姓名:
指导老师: 张力
日 期: 6月22日—7月6日
教 务 处 制
课 程 设 计 任 务 书
信息工程和自动化 学院 计算机科学和技术 专业 年级
班级: 082 学号: 姓名:
课程设计题目: 程序设计方法和C 语言课程设计
课程设计关键内容:
一、 编程实现小型企业工资管理系统:
需求分析:
1、企业关键有4类人员:经理、技术员、销售员、销售经理。要求存放这些人
职员号、姓名、月工资、岗位、年纪、性别等信息。
2、工资计算方法:
A、经理:固定月薪为8000;
B、技术员:工作时间*小时工资(100元每小时);
C、销售员:销售额*4%分成;
D、销售经理:底薪(5000)+所辖部门销售额总额*0.5%;
3、注册新职员,添加新职员具体信息,如:职员号,姓名,出生年份,性别,职称,部门工资等;
4、按姓名,部门等条件进行查询;
5、修改和删除职员信息;
6、按工资高低进行排序;
7、把各项纪录存放在文本文件中
设计
1、 类及类层次结构设计
有一个父类和4个子类
父类中有虚函数,和基础数据录入和输出,特殊数据录入处理由多态实现。
2、 模块分析
1):新建部分
为实现不限制数量人员录入建立链表;
2):查找
在链表中查找含有某个特殊组员数据对象,从头到尾寻求一边,判定是否输出
3):排序
链表排序,冒泡排序,选择对其关键字进行排序;交换结点(交换对象next数据)
4):输出到文本
有类,fstream和函数save实现,链表组员一次输入
3、 主菜单设计
(一)、 编码及调试
完整程序:
Main.cpp:
#include"staff.h"
#include"My_function.h"
#include<stdio.h>
int main()
{
fstream io("date.txt",ios::out);
Staff head;
Staff *h,*p,*s;
h=&head;
p=&head;
s=&head;
if(!io)
{
cerr<<"File could not be opened"<<endl;
exit(1);
};
int i=0;
while(i!=4)
{
cout<<"请选择你要进行操作"<<endl;
cout<<"1:注册新职员 2:查询"<<endl;
cout<<"3:按工资高低进行排序"<<endl;
cout<<"4:统计并推出"<<endl;
cin>>i;
switch(i)
{
case 1:Login(&p,&s);break;
case 2:Query(h);break;
case 3:Sort(h); break;
case 4:Save(head,io); break;
default:cout<<"请重新选择"<<endl;
};
};
system("cls");
cout<<"作者:计科082 崔辉毅 10405207"<<endl;
cout<<"……版权归作者崔某全部……"<<endl;
cout<<"………西陵荣誉出品………"<<endl;
return 0;
};
STFF.H:
#ifndef STAFF_H
#define STAFF_H
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
class Staff;
class Staff
{
public:
Staff();
Staff(int i);
~Staff();
virtual int count_wage();
virtual void set();
void b_set(); //基础信息录入
virtual void get();
void b_get(); //基础信息输出
void set_wage(int wage);
int get_wage();
void set_next(Staff* next);
Staff* get_next();
void set_job(int job);
int get_job();
string get_name();
void b_save(fstream &io);
virtual void save(fstream &io);
private:
string M_NO,M_name; //职员号、姓名
int M_job; //岗位(1经理、2技术员、3销售员、4销售经理)
int M_wage,M_age,M_sex; //月工资、年纪、性别(1男2女)
int M_year; //出生年份
Staff *M_next; //指向下一个
};
class Manager:public Staff
{
public:
Manager();
void set();
void get();
int count_wage();
void save(fstream &io);
};
class Technician:public Staff
{
public:
Technician();
void set();
void get();
int count_wage();
void save(fstream &io);
private:
int M_time;
};
class Sales:public Staff
{
public:
Sales();
void set();
void get();
int count_wage();
void save(fstream &io);
private:
int M_sale;
};
class Sales_Manager:public Staff
{
public:
Sales_Manager();
void set();
void get();
int count_wage();
void save(fstream &io);
private:
int M_sale;
};
#endif
STAFF.CPP:
#include"staff.h"
Staff::Staff(int i)
{
M_job=i;
M_next=0;
};
Staff::Staff()
{
M_next=0;
};
Manager::Manager()
{
set_job(1);
Staff();
};
Technician::Technician()
{
set_job(2);
};
Sales::Sales()
{
set_job(3);
};
Sales_Manager::Sales_Manager()
{
set_job(4);
};
Staff::~Staff()
{
};
void Staff::set()
{
};
void Staff::b_set()
{
cout<<"请输入该职员职员号"<<endl;
cin>>M_NO;
cout<<"请输入该职员姓名"<<endl;
cin>>M_name;
cout<<"请输入该职员出生年份"<<endl;
cin>>M_year;
cout<<"请输入该职员性别(1男2女)"<<endl;
cin>>M_sex;
};
void Staff::get()
{
};
void Staff::b_get()
{
cout<<"职员号: "<<M_NO<<endl;
cout<<"姓名: "<<M_name<<endl;
cout<<"出生年份: "<<M_year<<endl;
if(M_sex==1)
cout<<"性别: 男"<<endl;
else
cout<<"性别: 女"<<endl;
};
int Staff::count_wage()
{
return 0;
};
void Staff::set_wage(int wage)
{
M_wage=wage;
};
int Staff::get_wage()
{
return M_wage;
};
void Staff::set_next(Staff* next)
{
M_next=next;
};
Staff* Staff::get_next()
{
return M_next;
};
string Staff::get_name()
{
return M_name;
};
void Staff::set_job(int job)
{
M_job=job;
};
int Staff::get_job()
{
return M_job;
};
void Staff::b_save(fstream &io)
{
io<<"职员号: "<<M_NO<<endl;
io<<"姓名: "<<M_name<<endl;
io<<"出生年份: "<<M_year<<endl;
if(M_sex==1)
io<<"性别: 男"<<endl;
else
io<<"性别: 女"<<endl;
};
void Staff::save(fstream &io){};
int Manager::count_wage()
{
set_wage(8000);
return 8000;
};
void Manager::set()
{
b_set();
count_wage();
};
void Manager::get()
{
b_get();
cout<<"职务: Manager"<<endl;
cout<<"月薪: 8000"<<endl;
};
void Manager::save(fstream &io)
{
b_save(io);
io<<"职务: Manager"<<endl;
io<<"月薪: 8000"<<endl;
};
int Technician::count_wage()
{
set_wage((M_time*100));
return M_time*100;
};
void Technician::set()
{
b_set();
cout<<"请输入该职员月工作时间"<<endl;
cin>>M_time;
count_wage();
};
void Technician::get()
{
b_get();
cout<<"职务: Technician"<<endl;
cout<<"月薪: "<<count_wage()<<endl;
};
void Technician::save(fstream &io)
{
b_save(io);
io<<"职务: Technician"<<endl;
io<<"月薪: "<<count_wage()<<endl;
};
int Sales::count_wage()
{
set_wage((M_sale*0.04));
return M_sale*0.04;
};
void Sales::set()
{
b_set();
cout<<"请输入该职员销售额"<<endl;
cin>>M_sale;
count_wage();
};
void Sales::get()
{
b_get();
cout<<"职务: Sales"<<endl;
cout<<"月薪: "<<count_wage()<<endl;
};
void Sales::save(fstream &io)
{
b_save(io);
io<<"职务: Sales"<<endl;
io<<"月薪: "<<count_wage()<<endl;
};
int Sales_Manager::count_wage()
{
set_wage((5000+M_sale*0.0005));
return 5000+M_sale*0.0005;
};
void Sales_Manager::set()
{
b_set();
cout<<"请输入该职员所辖部门销售额总额"<<endl;
cin>>M_sale;
count_wage();
};
void Sales_Manager::get()
{
b_get();
cout<<"职务: Sales_Manager"<<endl;
cout<<"月薪: "<<count_wage()<<endl;
};
void Sales_Manager::save(fstream &io)
{
b_save(io);
io<<"职务: Sales_Manager"<<endl;
io<<"月薪: "<<count_wage()<<endl;
};
My_function.h:
#ifndef MY_FUNCTION_H
#define MY_FUNCTION_H
#include"staff.h"
void Login(Staff **p,Staff **s);
void Query(Staff *h);
void name(Staff *h);
void job(Staff *h);
void Sort(Staff *h);
void Save(Staff &h,fstream &io);
#endif
My_function.cpp:
#include"My_function.h"
void Login(Staff **p,Staff **s)
{
int i;
cout<<"请输入该职员职务(1经理、2技术员、3销售员、4销售经理)"<<endl;
cin>>i;
switch(i)
{
case 1:*s=new Manager;break;
case 2:*s=new Technician;break;
case 3:*s=new Sales;break;
case 4:*s=new Sales_Manager;break;
};
(**s).set();
(**p).set_next(*s);
*p=*s;
};
void Query(Staff *h)
{
int i;
cout<<"请选择:1 按姓名查询"<<endl;
cout<<" 2 按部门查询"<<endl;
cin>>i;
switch(i)
{
case 1:name(h);break;
case 2:job(h);break;
default:cout<<"请重新选择"<<endl;
};
};
void name(Staff *h)
{
Staff *p=h,*s=h;
string name;
cout<<"请输入您要查询职员名字"<<endl;
cin>>name;
while((*p).get_next())
{
if((*p).get_name()==name)
{
(*p).get();
};
s=(*p).get_next();
p=s;
};
if((*p).get_name()==name)
{
(*p).get();
};
cout<<"搜寻结束"<<endl;
};
void job(Staff *h)
{
Staff *p=h,*s=h;
int job;
cout<<"请输入您要查询部门编号(1经理、2技术员、3销售员、4销售经理)"<<endl;
cin>>job;
while((*p).get_next())
{
if((*p).get_job()==job)
{
(*p).get();
};
s=(*p).get_next();
p=s;
};
if((*p).get_job()==job)
{
(*p).get();
};
cout<<"搜寻结束"<<endl;
};
void Sort(Staff *h)
{
Staff *z,*x=h; //z:中间变量 x:监管循环次数
Staff *s,*p,*q;
s=h;
p=(*h).get_next();
if(p)
{
q=(*p).get_next();
if(q)
{
while((p!=0)&&(q!=0)&&(s!=0))
{
while((p!=0)&&(q!=0)&&(s!=0))
{
if((*p).get_wage()>(*q).get_wage())
{
(*s).set_next(q);
z=(*q).get_next();
(*q).set_next(p);
(*p).set_next(z);
s=q;
q=(*p).get_next();
}
else
{
s=p;
p=q;
q=(*q).get_next();
};
};
x=(*x).get_next();
s=x;
p=(*s).get_next();
q=(*p).get_next();
};
}
}
cout<<"排序完成,退出时输出到文本查看"<<endl;
};
void Save(Staff &h,fstream &io)
{
Staff *p,*s;
p=h.get_next();
s=h.get_next();
while(p)
{
(*p).save(io);
cout<<endl;
s=(*p).get_next();
p=s;
};
};
调试:
1.注册职员(链表实现):
2.查询:
3.排序:
4.文本:
二、分析程序题:
………………………………
四、 总结和体会
经过课程设计了解了一定得链表知识和指针使用。
具体来说对链表建立,查找和排序全部进行了练习,其间对指针是用注意细节愈加明了.等等… …
五、 参考文件
书本……
设 计 指 导 教 师 (签字):
教学基层组织责任人(签字):
年6月 20 日
展开阅读全文