目录
教师工资管理系统报告
一、描述
二、序言
三、摘要
四、详细设计
1、系统需求及功能分析
2、 设计方案
3、数据结构表
4、数据测试表
五、运行和调试
1、主界面
2、输入第1个教工的资料
3、输入第2个教工的资料
4、输入第3个教工的资料
5、输入第4个教工的资料
6、打印资料并显示
7、文件保存内容
六、遇到的问题
问题一及解决方法
问题二及解决方案
七、设计总结
八、源代码
九、其他期末课程设计系统(开源)
十、附载/下载地址
注意
C&C++期末课程设计
C语言期末课程设计
大家好!我是小浝仔,今天给大家分享C语言期末课程设计——教师工资管理系统,这个程序是用C语言程序编写的,运行环境为VisualC++6.0,实现了教师工资数据的录入(输入各种数据)、统计(各行政人员的工资计算最终按工资进行的冒泡排序)、打印、备份功能等等,是学习C语言程序很好的参考资料,本系统在命令行窗口运行,没有可视化界面,也没有用到MFC类库,如果朋友们用来学习或做C语言期末课程设计作业一定是可以的,我来共享给大家一些哦!!!要是觉得好的话,记得给个三连!!!亲测有效哦!!!
有问题或意见,请及时联系我:
CSDN:小浝仔_CSDN博客https://blog.csdn.net/m0_46843484?spm=1000.2115.3001.5343
版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
借助现代信息技术和管理理论,建立学校管理信息系统势在必行。对学校而言,全面开发和应用计算机管理信息系统就是有必要的。在学校管理中,教师是学校的宝贵资源,也是学校的“生命线”,因此人事管理是学校的计算机管理信息系统重要组成部分。而工资管理又是人力资源管理的重中之重。实行电子化的工资管理,可以让人力资源管理人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作。
在本次课程设计当中,我的课题就是设计“学校教师工资管理系统”的仿真软件。通过设计任务书中的要求以及介绍,大致确定了主要的目的是:学习和掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
为了更好的完成此次课程设计,我首先了解了学校教师的管理结构,并查询了大量书籍,制订了合理的方案,然后设计出大体的框架,接下来将各个部分慢慢的扩充起来,使其充盈丰实,然后完成了大致的雏形,并通过不断地测试和调试,完成了最终的成品。
最后,经过自己的一番努力以及指导老师的悉心指导,终于完成了此方针软件的设计,通过这次课程设计,我基本了解并且学习了如何分析研究数据对象的特性、数据的组织方法、如何选取合适的数据逻辑结构和存储结构。这对以后的学习都有着很大的帮助。
本系统基本上能够满足学校教师工资管理的需求。工资管理系统中使用了各种表格,保存相关的工资信息,方便查询,浏览,修改等操作。本系统结合实际的人事、财务制度,经过实际的需求分析,采用功能强大的VC++作为开发工具开发出来的学校教师工资管理系统。
本文首先分析了学校教师工资管理的应用现状,阐述了本教师工资管理系统的开发目的。通过对一系列问题的分析,确定了系统的开发平台。接着详细给出了从学校教师工资管理系统分析到总体设计详细设计与实现及测试的各个环节,最后对本次课程设计作出了总结。
本系统以Visual C++ 6.0为平台,使用C++编程语言编写实现,包含冒泡排序的数据结构,和对文件夹的基本操作等基础知识。本系统能够打印报表,方便保存和管理。
关键词:面向对象、课程设计、计算机科学与技术学院、教师工资管理
(1)这是一个小型学院教师工资管理系统,教师工资管理的数据文件中存储有教工姓名、月工资、教工号、性别、年龄、电话号码,该程序可以录入和显示所有员工的相关资料。在录入所有教工后,系统会自动对教工按工资进行降序排列存入文件中。
(2)项目运行的软、硬件环境:
Windows操作系统以及相应的软硬件
Microsoft Visual C++ 6.0
(3)项目具体的功能要求:
①数据录入:输入各种数据;
②数据统计:各行政人员的工资计算最终按工资进行的冒泡排序;
③数据打印:打印表格;
④数据备份:把相关数据写入文件;
(4)类层次结构图
首先定义教工类employee;再通过employee类分别派生出讲师类technician、辅导员类manager、教授类seller;还有行政人员类sellermanager是从讲师类和教授类派生得到。各类中产成员函数就只是对数据成员的设置和取出操作。另外有四个函数inputmanager、inputseller、inputsellermanager、inputtechnician
分别对类manager、seller、sellermanager、technician四个类的对象的赋值操作。在本系统中我用的是数组操作所有的教工,因为此系统是为小型公司所设计,所以在系统中预设教工为1000个。一开始用“employee employeeall[EMP];”语句定义一个一维数组用来存放employee的对象。当操作员输入完成后,系统会自动调用一个函数(compositorall)对所有员工的工资进行降序排列。然后用函数(outputtofile)把排列好了的数据自动保存在“D:\\计算机学院教师工资管理系统文档.txt” 文件中。资料保存后,系统会提示:“是否打印?” ,若打印则显示出来打印,若不打印则就直接退出系统。本程序从整体上来看是通过函数之间的调用来实现的。
数据成员结构图
序号 |
成员名 |
数据类型 |
长度 |
字段含义 |
1 |
Age |
Int |
2 |
年龄 |
2 |
Employees |
Long |
4 |
学院教工总人数 |
3 |
Monthwages |
Double |
4 |
教工工的月工资 |
4 |
Name |
Char |
10 |
姓名 |
5 |
Number |
Char |
10 |
教工号 |
6 |
Post |
Char |
10 |
职位 |
7 |
Sex |
Char |
10 |
性别 |
8 |
Telephone |
Char |
15 |
电话号码 |
9 |
Managers |
Static int |
2 |
辅导员的总人数 |
10 |
Sellers |
Static int |
2 |
教授的总人数 |
11 |
Sellroom |
Static double |
4 |
个人课程量 |
12 |
Sellrooms |
Static double |
4 |
同专业的课程总量 |
13 |
Technicians |
Static int |
2 |
讲师的人数 |
数据测试表
姓名 |
小浝仔 |
小柒缘 |
小黄 |
张雪梅 |
姜海燕 |
职位 |
讲师 |
教授 |
讲师 |
教授 |
教授 |
性别 |
男 |
男 |
男 |
女 |
女 |
年龄 |
21 |
39 |
20 |
30 |
21 |
电话号码 |
15974485450 |
09317185886 |
15873697236 |
15886655745 |
15886632946 |
教工号 |
101 |
102 |
103 |
104 |
105 |
课程量 |
108 |
109 |
109 |
||
工作时间 |
101 |
98 |
|||
姓名 |
全欢 |
屈华海 |
赵湘季 |
戴赛玉 |
张自轩 |
职位 |
辅导员 |
讲师 |
讲师 |
行政人员 |
教授 |
性别 |
男 |
男 |
男 |
女 |
男 |
年龄 |
20 |
21 |
21 |
20 |
21 |
电话号码 |
13875088220 |
15873690339 |
15886643480 |
15886668149 |
15974485474 |
教工号 |
106 |
107 |
108 |
109 |
110 |
课程量 |
106 |
||||
工作时间 |
99 |
97 |
在以下这段程序段中:
……
……
int n;
cin>>n;
switch(n)
{
case 1:
inputtechnician(employeeall[i]);
i++;
break;
case 2:
inputmanager(employeeall[i]);
i++;
break;
case 3:
inputseller(employeeall[i]);
i++;
break;
case 4:
inputsellermanager(employeeall[i]);
i++;
break;
case 5:
system("cls");//刷新屏幕****
compositorall(employeeall);//教工的工资降序排列 outputtofile(employeeall);//把资料保存到文件中*
cout<<"是否打印资料(y/n)";
char a[5];
cin>>a;
if(a[0]=='y'||a[0]=='Y')
printfile();//把文件中的资料显示到显示器上 return 1;
default:
cout<<"\t错误!请重新输入!\n";
}
……
……
若输入的是整数程序可以正常运行,如果误输入了非数字字符(比如:a)则程序运行到这里时会是一个“死循环”中。
解决方法:
把int型变量“n”定义为一个字符数组char[5];再把switch(n)改为switch(n[0]),通过比较字符数组中的第一个元素。但是如果用户输入“145”
这样的话,程序比较字符数组中的第一个字符是“1”程序还是会正确运行下去。这个问题的解决方案是在switch(n[0])前加一条语句if(strlen(n)==1),else
cout<<"\t错误!请重新输入!\n"。修改后的程序段如下:
……
……
char n[5];
cin>>n;
if(strlen(n)==1)
{
switch(n[0])
{
case '1':
inputtechnician(employeeall[i]);
i++;
break;
case '2':
inputmanager(employeeall[i]);
i++;
break;
case '3':
inputseller(employeeall[i])
i++;
break;
case '4':
inputsellermanager(employeeall[i]);
i++;
break;
case '5':
system("cls"); //刷新屏幕**********************
compositorall(employeeall);//教工的工资降序排列
outputtofile(employeeall);//把资料保存到文件中*
cout<<"是否打印资料(y/n)";
char a[5];
cin>>a;
if(a[0]=='y'||a[0]=='Y')
printfile();//把文件中的资料显示到显示器上
return 1;
default:
cout<<"\t错误!请重新输入!\n";
}
}
else
cout<<"\t错误!请重新输入!\n";
……
……
提高数据录入的正确性
解决方法:
在录入年龄的时候,年龄不可能是一个小于0的数,也不可能是太大的数,通过if(temp<=18||temp>65)语句来判断该年龄是否在18至65之间。年龄在大于18是因为我们国家的法定成年年龄是18岁,要满18岁才能参加工作;而小于65周岁呢,一般年高60岁就是退休年龄不再参加工作了。
面向对象课程设计是计算机专业一门重要的专业基础课。此次课程设计的目的是以C语言程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,使我进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。培养独立的C语言程序实际与算法设计方法,具备初步的独立分析和设计能力;软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;能够综合运用所学的理论知识和方法进行独立分析和解决问题的能力。
总的来说这次课设让我学到了很多东西,在网上找的参考资料不仅仅对这次课设有用处,而且对以后的学习也有不小的帮助,因为从中我学到了不少很实用的编程技巧。
注意:保存数据文件文本需要提前建立好,并修改源程序中的文件的目录。如果建立好开发环境,直接拷贝代码,即可运行!亲测有效!!!
#include
#include
#include
#include
/* 【小浝仔】CSDN:https://blog.csdn.net/m0_46843484?spm=1011.2124.3001.5343*/
const int EMP=1000;//学院教工总人数(跟据需要可以放缩)************************
void numbertochar(char*,double);
//定义基类教工类employee******************************************************
class employee{
private:
// 姓名 教工号 职位 性别 电话号码************************
char name[10],number[10],post[10],sex[10],telephone[15];
int age;//年龄*************************************************************
double monthwages;//月工资*************************************************
static long employees;//学院教工人数***************************************
public:
long getemployees()
{
return employees;
}
char*getnumber()
{
return number;
}
char*getname()
{
return name;
}
char*getpost()
{
return post;
}
char*getsex()
{
return sex;
}
char*gettelephone()
{
return telephone;
}
int getage()
{
return age;
}
double getmonthwages()
{
return monthwages;
}
void setnumber(char temp[])
{
renumber: if(strlen(temp)>15)
{
cout<<"输入错误(不能多余15个字母或5个汉字)!请重新输入。\n";
char temp1[15];
cout<<"教 工 号:\t";
cin>>temp1;
if(strlen(temp1)>15)
goto renumber;
else
strcpy(number,temp1);
}
else
strcpy(number,temp);
}
void setname(char temp[])
{
renumber: if(strlen(temp)>15)
{
cout<<"输入错误(不能多余15个字母或5个汉字)!请重新输入。\n";
char temp1[10];
cout<<"姓 名:\t";
cin>>temp1;
if(strlen(temp1)>15)
goto renumber;
else
strcpy(name,temp1);
}
else
strcpy(name,temp);
employees++;
}
void setpost(char temp[])
{
renumber: if(strlen(temp)>10)
{
cout<<"输入错误(不能多余十个字母或五个汉字)!请重新输入。\n";
char temp1[10];
cout<<"职 位\t";
cin>>temp1;
if(strlen(temp1)>10)
goto renumber;
else
strcpy(post,temp1);
}
else
strcpy(post,temp);
}
void setsex()
{
cout<<"性别(1、男;2、女):";
resex: char temp1[5];
cin>>temp1;
if(strlen(temp1)==1)
{
switch(temp1[0])
{
case '1':
strcpy(sex,"男");
break;
case '2':
strcpy(sex,"女");
break;
default:
cout<<"错误(请选择1或2)";
goto resex;
}
}
else
{
cout<<"错误(请选择1或2)";
goto resex;
}
}
void settelephone(char temp[])
{
retelephone: if(strlen(temp)>20)
{
cout<<"输入错误(不能多余二十个数字)!请重新输入。\n";
char temp1[20];
cout<<"电 话 号 码:\t";
cin>>temp1;
if(strlen(temp1)>20)
goto retelephone;
else
strcpy(telephone,temp1);
}
else
strcpy(telephone,temp);
}
void setage(int temp)
{
renumber: if(temp<=18||temp>65)
{
cout<<"输入错误!请重新输入。\n";
int temp1;
cout<<"年 龄:\t";
cin>>temp1;
if(temp1<=0||temp1>120)
goto renumber;
else
age=temp1;
}
else
age=temp;
}
void setmonthwages(double temp)
{
monthwages=temp;
}
};
long employee::employees=0;
//讲师类的定义*****************************************************************
class technician: public employee{
protected:
static int technicians;//用来记数讲师的数量********************************
public:
int gettechnicians()
{
return technicians;
}
void setnumber(char temp[])
{
technicians++;
employee::setnumber(temp);
}
void monthly_wages(double temp)
{
setmonthwages(temp*100);
//讲师的工资为课程量*课时工资100每课时**************************
}
};
int technician::technicians=0;
//辅导员类的定义***************************************************************
class manager:public employee{
static int managers;//辅导员的数量*****************************************
public:
int getmanagers()
{
return managers;
}
void monthly_wages()
{
setmonthwages(5000);//辅导员的工资为五千固定***************************
managers++;
}
};
int manager::managers=0;
//教授类的定义*****************************************************************
class seller:public employee{
protected:
static double sellroom;
static double sellrooms;
static int sellers;
public:
int getsellers()
{
return sellers;
}
double getsellroom()
{
return sellroom;
}
double getsellrooms()
{
return sellrooms;
}
void setsellroom(double temp)
{
sellroom=temp;
sellrooms=sellrooms+temp;
}
void monthly_wages()
{
setmonthwages(sellroom*0.04);
sellers++;
}
};
double seller::sellroom=0;
double seller::sellrooms=0;
int seller::sellers=0;
//行政人员类的定义*************************************************************
class sellermanager:public seller{
static int sellermanagers;//行政人员的数量*********************************
public:
int getsellermanagers()
{
return sellermanagers;
}
double getsellrooms()
{
return sellrooms;
}
void monthly_wages()
{
setmonthwages(sellrooms*0.005+5000);
sellermanagers++;
}
};
int sellermanager::sellermanagers=0;
//各数据输入的原函数声明*******************************************************
void inputtechnician(employee&);
void inputmanager(employee&);
void inputseller(employee&);
void inputsellermanager(employee&);
void compositorall(employee*);//对所有教工的工资降序排列***********************
int printfile();//把文件中的资料显示到显示器上*********************************
void outputtofile(employee*);//把资料保存到文件中******************************
//主函数***********************************************************************
int main()
{
employee employeeall[EMP];
int i=0;
while(i>n;
if(strlen(n)==1)
{
switch(n[0])
{
case '1':
inputtechnician(employeeall[i]);
i++;
break;
case '2':
inputmanager(employeeall[i]);
i++;
break;
case '3':
inputseller(employeeall[i]);
i++;
break;
case '4':
inputsellermanager(employeeall[i]);
i++;
break;
case '5':
system("cls"); //刷新屏幕**************************************
compositorall(employeeall);//对所有教工的工资降序排列**********
outputtofile(employeeall);//把资料保存到文件中*****************
cout<<"是否打印资料(y/n)";
char a[5];
cin>>a;
if(a[0]=='y'||a[0]=='Y')
printfile();//把文件中的资料显示到显示器上*****************
return 1;
default:
cout<<"\t错误!请重新输入!\n";
}
}
else
cout<<"\t错误!请重新输入!\n";
}
compositorall(employeeall);//对所有教工的工资降序排列**********************
outputtofile(employeeall);//把资料保存到文件中*****************************
printfile();//把文件中的资料显示到显示器上*********************************
return 0;
}
//教工基本信息的输入函数*******************************************************
void inputtechnician(employee &empl)
{
technician tech;
cout<<"\n★★教工资料:\n";
char temp[20];
cout<<"姓 名:\t";
cin>>temp;
empl.setname(temp);
cout<<"教 工 号:\t";
cin>>temp;
empl.setnumber(temp);
empl.setpost("讲 师");
empl.setsex();
cout<<"电 话 号 码:\t";
cin>>temp;
empl.settelephone(temp);
int tempq=0;
cout<<"年 龄:\t";
cin>>tempq;
empl.setage(tempq);
double tempp=0;
cout<<"工作时间(课时):\t";
cin>>tempp;
tech.monthly_wages(tempp);
empl.setmonthwages(tech.getmonthwages());
}
//辅导员的基本信息的输入函数***************************************************
void inputmanager(employee &empl)
{
manager mana;
cout<<"\n★★辅导员资料:\n";
char temp[20];
cout<<"姓 名:\t";
cin>>temp;
empl.setname(temp);
cout<<"教 工 号:\t";
cin>>temp;
empl.setnumber(temp);
empl.setpost("辅 导 员");
empl.setsex();
cout<<"电 话 号 码:\t";
cin>>temp;
empl.settelephone(temp);
int tempq=0;
cout<<"年 龄:\t";
cin>>tempq;
empl.setage(tempq);
mana.monthly_wages();
empl.setmonthwages(mana.getmonthwages());
}
//教授的基本信息的输入函数*****************************************************
void inputseller(employee &empl)
{
seller sell;
cout<<"\n★★教授资料:\n";
char temp[20];
cout<<"姓 名:\t";
cin>>temp;
empl.setname(temp);
cout<<"教 工 号:\t";
cin>>temp;
empl.setnumber(temp);
empl.setpost("教 授");
empl.setsex();
cout<<"电 话 号 码:\t";
cin>>temp;
empl.settelephone(temp);
int tempq=0;
cout<<"年 龄:\t";
cin>>tempq;
empl.setage(tempq);
double tempp=0;
cout<<"课 程 量:\t";
cin>>tempp;
sell.setsellroom(tempp);
sell.monthly_wages();
empl.setmonthwages(sell.getmonthwages());
}
//行政人员的基本信息的输入函数*************************************************
void inputsellermanager(employee &empl)
{
sellermanager sellmana;
cout<<"\n★★行政人员资料:\n";
char temp[20];
cout<<"姓 名:\t";
cin>>temp;
empl.setname(temp);
cout<<"教 工 号:\t";
cin>>temp;
empl.setnumber(temp);
empl.setpost("行政人员");
empl.setsex();
cout<<"电 话 号 码:\t";
cin>>temp;
empl.settelephone(temp);
int tempq=0;
cout<<"年 龄:\t";
cin>>tempq;
empl.setage(tempq);
sellmana.setsellroom(sellmana.getsellrooms());
sellmana.monthly_wages();
empl.setmonthwages(sellmana.getmonthwages());
}
//把资料保存到文件中***********************************************************
void outputtofile(employee *empl)
{
ofstream fout;
fout.open("D:\\计算机学院教师工资管理系统文档.txt");
if(!fout)
cout<<"Open file error!";
else
{
fout<<"姓 名"<<"\t";
fout<<"教工号"<<"\t";
fout<<"职 位"<<"\t";
fout<<"性别"<<"\t";
fout<<"年龄"<<"\t";
fout<<"电话号码"<<"\t\t";
fout<<"月工资"<<"\n";
for(int i=0;ij;i--)
{
if(temp[i].getmonthwages()>temp[i-1].getmonthwages())
{
temp1=temp[i];
temp[i]=temp[i-1];
temp[i-1]=temp1;
}
}
}
★C语言期末课程设计★——成绩管理系统(源代码+详细注释)_小浝仔-CSDN博客_c语言学生成绩管理系统论文
【C语言期末课程设计】——超市管理系统(开源)_小浝仔-CSDN博客_c语言超市管理系统
★C/C++期末课程设计★—☆产品入库管理操作系统☆【开源+详细注释】_小浝仔-CSDN博客
【C&C++期末课程设计】——职工工作量统计系统(源代码+详细注释)_小浝仔-CSDN博客
【C&C++期末课程设计】——职工资源管理系统(源代码+详细注释)不要错过哦。_小浝仔-CSDN博客
C&C++期末课程设计——个人收支管理系统(一)【源代码+详细注释】_小浝仔-CSDN博客
C&C++期末课程设计——产品管理系统(源代码+详细注释)_小浝仔-CSDN博客
C&C++期末课程设计——学生成绩管理源代码_小浝仔-CSDN博客
C&C++期末课程设计——图书管理系统源代码_小浝仔-CSDN博客
C++期末课程设计——宾馆客房管理系统(详细报告+源代码+详细注释)(另附加“25+”C++&&C语言期末课程设计系统下载地址)_小浝仔-CSDN博客
下面附载了“25+”C++&&C语言期末课程设计下载地址(超详细),每个系统的简介都详细介绍了本系统的实现功能,可以根据功能查找自己所需要的。
C&C++——文件成绩(源代码)-C/C++文档类资源-CSDN文库
C&C++课程设计——图书管理系统.zip_图书管理系统c++增添删除-C/C++文档类资源-CSDN文库
C&C++课程设计——学生成绩管理系统.zip-C/C++文档类资源-CSDN文库
C/C++课程设计——职工工作量统计系统(源代码、注释).zip-C/C++文档类资源-CSDN文库
C&C++课程设计——班级学生档案管理系统源代码(源代码+注释).zip-C/C++文档类资源-CSDN文库
C&C++期末课程设计——KTV歌曲管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C&C++期末课程设计——产品信息管理系统(源代码+详细注释)-C/C++文档类资源-CSDN文库
C&C++期末课程设计——个人收支管理系统(源代码+详细注释)-C/C++文档类资源-CSDN文库
C&C++期末课程设计——职工资源管理系统(源代码+详细注释)-C/C++文档类资源-CSDN文库
C&C++期末课程设计——个人收支管理系统(二)(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——教工工资管理系统(源代码+课程设计+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——成绩管理系统源程序.zip-C/C++文档类资源-CSDN文库
C语言课程设计——超市管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——火车票订票管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——商品销售系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——通讯录管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——图书管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——图书借阅系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——万年历系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——文本编辑器系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——学生成绩管理系统.zip-C/C++文档类资源-CSDN文库
C语言课程设计——学生成绩管理系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——学生信息系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
C语言课程设计——做的绘图板系统(源代码+详细注释).zip-C/C++文档类资源-CSDN文库
- 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!