招聘干部录取系统(C++)

发布时间:   来源:文档文库   
字号:

1 题目与要求
1.1 题目:招聘干部录取系统
设某市公开招聘5名副局长。招聘过程中要进行4项笔试(政策法律基础、语文、英语、计算机基础)和一项口试(考察处理问题能力)。录取时对于年龄3055的应聘者按总分从高到低录取。总分的构成如下:4项笔试分(百分制);口试分(百分制)乘2;学历分;年龄分;工作经历分。后三种分数的计算方法如下: 学历分:
100 75 50 0 年龄分:
55 50 40 35 30 70 75 100 80 70 其它年龄(可以有小数部分)的分数按线性插值确定。

工作经历分(仅考虑任科级干部年限)
0 1 2 6 6年以上 0 70 100 20 0 其它年龄(可以有小数部分)的分数按线性插值确定。

VC++语言实现招聘干部录取系统。该系统在磁盘上存贮如下信息: 1、应聘者报名表。表中记录了每位应聘者的有关信息,其中包括:、性别、出生年月、最后学历、任科级干部有多少年月、现工作单位。
2、每位应聘者5项考试的成绩。

该系统的功能如下:
1、输入应聘者的信息和5项考试成绩;
2、输出按总分从高到低排列的成绩表,表项有、8项分数、总分。设应聘者不超过50名;
3、输出5份录取通知书;
4、查询某人的8项分数和总分。


1.2 综合程序设计要求
一、文档
1、需求说明书(分层的数据流图、数据词典、小说明) 2、模块结构图,每个模块的说明; 3、每个模块的算法及使用的数据结构; 4、每个模块的编码和整个程序的编码; 5、各模块的测试用例及测试结果; 6、使用手册。 二、程序
1、设计若干命令以表示要求程序执行相应的功能;
2、输入到程序的数据名称及格式应通过提示信息告诉用户。能拒绝非法数据,同时给出重新输入数据的提示。当输入数据量很大时,应建立磁盘文件,以便重复演示程序功能;
3、程序的运行结果要以清晰可读的形式显示出来,并可打印及存贮,以便查阅。

2 画数据流图 2.1 顶层数据流图
应聘截至日期 成绩总表


应聘者信息和考试成绩 招聘干部 录取通知书表
录取系统



被查询人 被查询者个人成绩
1 招聘干部录取系统数据流图(第0层)

相应的数据词典条目: 数据流名:招聘截止日期 成:年+月
数据流名:应聘者信息与考试成绩 成:{个人信息+考试成绩}1n n为应聘人数:n50 数据流名:成绩总表
{+个人成绩}1n :按总分从高到低排列。 数据流名:录取通知书表
成:{+被录取的信息}15 注:1.总分前五名的录取通知单。
2.若应聘者不足五人,按实际人数处理。 数据流名:被查询者的个人成绩

成:+个人成绩 数据项名:个人信息
成:+性别+出生年月+最后学历+工作年限+现工作单位 :工作年限指任科级干部的年月。 数据项名:考试成绩
:政策法律基础成绩+语文成绩+英语成绩+计算机成绩+口试成绩 数据项名:个人成绩
成:考试成绩+学历分+年龄分+工作经历分+口试分 数据项名:总分
成:考试成绩+学历分+年龄分+工作经历分+口试分

2.2 第一层数据流图


应聘者信息和考试成绩

信息 总表
1* 信息处理
信息处理成绩总表

招聘截止日期

读入
1 输出
3 录取通知书 被查询者成绩
2 1*:成绩总表+应聘者人数 被查询人

2 招聘干部录取系统数据流图(第一层)

数据流名:信息总表
成:{个人信息+考试成绩}* * *+招聘截止年月 名:成绩总表 成:+个人成绩
织:按总分从高到低顺序。 名:读入 号:1 激发条件:需招聘成绩表,或需要确定干部录取情况,或需要某指定者的成绩 加工逻辑:1将“应聘者信息与考试成绩”读入信息总表中 2读入招聘截止年月

2.3 关于加工“信息处理的”的分解
初步成绩表

成绩总表
信息总表
计算填表 排序 应聘者人数


2.1
2.2 3 加工“信息处理”的分解


文件名:初步成绩总表
形成:+个人成绩已填入的应聘者个数。 加工名:计算填表 编号:2.1 激发条件:信息总表已经形成
加工逻辑:将应聘者的学历、年龄和工作年限计算成学历分、年龄分和工作经历分,并计算总分,将应聘者所有成绩填入初步成绩表中。 加工名:排序 编号:2.2 激发条件:初步成绩总表按总分高到低排序
加工逻辑:按总分的高低从高到低排列个人成绩和。

2.4 关于加工“输出”的分解
3.1

输出成绩总


成绩总表



成绩总表+应聘者人数
3.2 通知书 3.3
询者成绩
录取通知书


被查询人

被查询者成绩
4 加工“输出”的分解

2.5 系统数据流图

应聘者信息和考试成绩 初步成绩表
输出成绩总表 打印成绩总表



1* 信息总表
读入
计算填表
排序
1* 1* 输出录取通知书
招聘截止日期 被查询人 1*:成绩总表+应聘人数

输出被查 询者成绩
5 招聘干部录取系统数据流图



3 画模块结构图
从图5可以看出,从2.12.3均为信息处理部分,可视作系统的中心变换部分。那么从加工1至加工2.1“信息总表”便是系统的逻辑输入,从加工2.3到文件成绩总表的数据流程便是系统的逻辑输出。我们为中心变换部分和其前、后的部分各设计一个模块,因此可画出系统顶层的模块结构图。

干部招聘主模块

成绩总表 信息总表 信息总表 成绩总表



信息处理
6 系统顶层模块结构

下面考虑三个第一层模块的下属模块。
由于输入的功能就是“读入”加工的功能,将招聘截止年月和应聘者信息与考试成绩读入信息总表中,比较简单,不用为其设立下属模块。现将其更名为“读入”模块。
再设计“输出”模块的下属模块。根据系统要求,输出模块应根据用户要求完成“打印成绩总表”“打印录取通知书表”和“模块的下属模块”。根据系统要求,输出模块应根据用户要求完成“打印成绩总表”“打印录取通知书表”和“打印被查询者个人成绩”三项功能中的一项或几项,所以可为“输出”模块建立如图7所示的三个模块。
下面考虑设计“信息处理”模块的下属模块。从图3的数据流图可见,可为“信息处理”模块设立两个下属模块:“计算填表”和“排序”。前一个模块完成计算各项分数并填入初步成绩表,循环调用该模块直至填表完毕。
至此,我们可以画出整个软件的模块结构图。如图9。其中每一个模块都用了一个表示符合给予命名。
下面列出各模块的功能说明:

成绩总表 应聘人数





成绩总表应聘人数
成绩总表
成绩总表应聘人数 应聘人数
输出成绩总表 输出录取通知书表 输出被查询者成绩
7 输出模块下属模块







填入初步成绩表

信息总表
应聘截止日期 成绩总表
信息处理
填入成绩表
已填入人数 信息总表 成绩总表 应聘人数
8 “信息处理”及其下属模块


信息总表
INVCAD 信息总表
应聘截止日期
成绩总表
成绩总表应聘者个数
读入READIN


填入初步成绩 已填入人数
计算填表CALFILL

信息处理TREATINF 输出EXPORTION 填入成绩表应聘人数 成绩总表 成绩总表

信息总表 应聘人数 成绩总表应聘人数
排序ARRANGE 成绩总表 应聘人数
被查询者
PRNMARK 输出录取通知书表PRNINF PRNPER 9 系统的模块结构图




3.1 干部招聘主模块 模块名:INVCAD 输入:<招聘截止日期><应聘者信息与考试成绩><被查询人> 输出:<成绩总表> 功能:建立成绩总表
调用以下模块:READINTREATINFEXPORT 3.2 <读入>模块 模块名:READIN 输入:<招聘截止日期><应聘者信息与考试成绩> 输出:<信息总表> 功能:将<招聘截止日期><应聘者信息与考试成绩>存入指定的<信息总表>中。 调用以下模块:无
注释:该模块与数据流图中的加工<读入>对应。 3.3 <信息处理>模块 模块名:TREATINF 输入:<信息总表><应聘截止日期> 输出:<成绩总表> 功能:将<信息总表>息折算成成绩,并按总分从高到低排成<成绩总表> 调用以下模块:CALCUTFILLINARRANGE 注释:该模块与数据流图中的加工<信息处理>对应。 3.4 <输出>模块 模块名:EXPORT 输入:<成绩总表><被查询人> 输出:<成绩总表><录取通知书表><被查询人个人成绩>中的一项或几项的屏幕形象或纸面现象。 功能:<成绩总表><录取通知书表><被查询人个人成绩>中的一项或几项在屏幕或打印机上显示出来。
调用一下模块:PRNMARKPRNINFPRNPER 注释:该模块与数据流图中的加工<输出>对应。 3.5 <计算填表>模块 模块名:CALCUT 输入:<信息总表><应聘截止日期> 输出:<初步成绩表><应聘者人数> 功能:根据当前的一个应聘者的信息,计算出他的个人成绩,填入表中。 调用一下模块:CALAGECALWORK 注释:该模块与数据流图中的加工<计算填表>对应。 3.6 <排序>模块 模块名:ARRANGE 输入:<初步成绩表><应聘者人数> 输出:<输出总表> 功能:将<初步成绩表>按总分从高到低排序。 调用以下模块:无
注释:该模块与数据流图中的加工<排序>对应。

3.7 <输出成绩总表>模块 模块名:PRNMARK 输入:<成绩总表><应聘者人数> 输出:<成绩总表>的屏幕形象或纸面形象。 功能:将<成绩总表>在屏幕或纸面上显示出来。 调用以下模块:无
注释:该模块与数据流图中的加工<打印成绩总表>对应。 3.8 <输出录取通知书表>模块 模块名:PRNINF 输入:<成绩总表><应聘者人数> 输出:<录取通知书>的屏幕或纸面形象。
功能:将<录取通知书>在屏幕或纸面上显示出来。 调用以下模块:无
注释:该模块与数据流图中的加工<打印录取通知书>对应。 3.9 <输出被查询者个人成绩>模块 模块名:PRNPER 输入:<成绩总表><应聘者人数> 输出:<被查询者个人成绩>的屏幕或纸面形象。 功能:将<被查询者个人成绩>在屏幕或纸面上显示。 调用以下模块:无
注释:该模块与数据流图中的加工<打印被查询者个人成绩>对应。


4 详细设计(VC++语言) 4.1 主模板
先考虑主模块的数据结构,根据数据词典的说明,容易设计出这些数据的类型和相应的变量。
struct Tdate {招聘截止日期} { int year; int month; } struct Tmark {考试成绩} { float pol; {政治} float chn; {语文} flaot eng; {英语} float ; {计算机} float oral; {口试} } struct Tinform {应聘者个人信息} { char name[20]; {} char sex; {性别} char schoolrecord; {学历} float worklen; {任科级干部年限} char wordsite[60]; {现工作单位} Tmark mark; {考试成绩} } struct Tmarks {应聘者信息和考试成绩} { char name[20]; {} float age; {年龄分} float srecord; {学历分} float wlen; {工作经历分} Tmark mark; {考试成绩} float total; {总分} }Tmarklist[50];
Ifstream Inflist; {信息总表文件} Tmarks Tmarklist[50] {成绩总表} Tmarks marklist; char Sourcefile[20] {外部文件名}
注:文件操作由于多为结构体数据,因此建议使用二进制文件操作方法;

主模块算法 模块名:INVCAD 输入:<招聘截止日期><应聘者信息与考试成绩><被查询人> 输出:<成绩总表> 指令:
输出系统的初始界面 输出菜单界面
开提示窗口,要求用户输入选择项

招聘干部录取系统 1.输入应聘者信息 2.结果输出

switch( { case 1: 调用〈读入〉模块,建立文件
break; case 2: 调用〈输出〉模块 break; default: break; }

4.2 <读入>模块
该模块与加工1对应。它先读入招聘截止日期,再依次读入应聘者的各项信息,同时对信息作鉴别,看是否合理。读完一个应聘者的所有信息后将其全部再屏幕上显示出来,供输入者复核。该模块涉及的数据基本上再主模块理定义了,其它定义如下:
Tdate STOP,BIRTH,WORKTIME; {招聘截止年月,出生年月,工作年限} float ALEN; {年龄} char JUDGE; {判断是否正确:Y/N} Tinform INF; {信息总表的一个元素的容} float STOPLLINE; {招聘截止时间} int I; {应聘的人数}
“读入”模块算法(每输入一位应聘者信息,将其保存在外部文件 filelist.dat
模块名:READIN 输入:<招聘截止日期><应聘者信息与考试成绩> 输出:<信息总表> 指令:
读入招聘截止日期; I=0
while(!infile.eof(
{

读入;
读入性别,鉴别; 读入学历,鉴别; 读入工作地点;
读入出生年月,鉴别; 读入工作年限,鉴别; 读入考试成绩,鉴别; 读入工作年限,鉴别; 读入考试成绩,鉴别;
输出所有信息,确认有无错误; 将信息写入文件
I=I+1 };
4.3 信息处理模块
如果模块“计算填表”模块和“排序”模块分别能实现编号为2.12.2加工逻辑,那么根据模块“信息处理”对其下属模块的管理方法,可写出其算法。我们要使用的变量有:
float STOPLINE; {招聘截止日期} Tinform INFORM; {文件的一个元素} 信息处理模块的算法 模块名:TREATINF 输入:<信息总表><应聘截止日期> 输出:<成绩总表> 指令:以读打开文件 Inflist.open(Sourcefile INFORM←文件Inflist的一个元素 STOPLINE←应聘截止日期
I=0 WHILE(没有到达文件结束EOF { INFORM←文件INFLIST的一个元素 调用“计算填表”模块
} 调用“排序”模块
解除文件Inflist外部文件的联系Inflist.fclose(
4.4 输出模块
该模块只是起选择通道的作用。根据模块的输入,输出和小说明,可设计出该模块的算法。
“输出”模块的算法 模块名:EXPORT 输入:<成绩总表><被查询人> 输出:<成绩总表><录取通知表><被查询人成绩>中的一项或几项的屏幕
形象或纸面形象。
指令:switch( { case 1:调用“输出成绩总表”模块 case 2:调用“输出录取通知书表”模块 case 3:调用“输出被查询者成绩”模块 }
4.5 计算填表模块
根据该模块的输入、输出和小说明,可设计出该模块和算法指令: 计算填表的算法 模块名:CALCUT 输入:<信息总表><应聘截止日期> 输出:<初步成绩表><应聘者人数> 指令:计算学历分 计算年龄分 计算工作经历分 计算总分
将成绩填入成绩总表中

4.6 排序模块
该模块与加工2.2对应,我们使用冒泡排序的方法,涉及到的数据结构如下: int FLAG; {若值为TRUE则为发生过交换} Tmarks TEMP; {交换时的中间变量} 根据该模块的输入、输出和小说明,可设计出该模块的排序算法: 排序模块的算法(也可以使用其它可行的排序算法,见教课书 模块名:ARRANGE 输入:<初步成绩表><应聘者人数> 输出:<成绩总表> 指令:FLAG = TRUE J=1 while(J { FLAG=FALSE L = N-1 whileL>=J
{ if (marklist[L].total
{ 将两个元素换位 FLAG=TRUE } L=L-1 } J=J1
}
4.7 输出“成绩总表”模块
该模块与加工3.1对应,根据模块的输入、输出和小说明,可设计出该模块的算法。输出“成绩总表”模块算法: 模块名:PRNMARK 输入:<成绩总表><应聘者人数> 输出:<成绩总表>的屏幕形象或纸面形象。 指令:输出提示信息
for(J=1;J{ 输出应聘者成绩
IF(J%4==0 清屏并继续输出 }
4.8 输出“录取通知书表”模块
该模块与加工3.2对应,根据该模块的输入、输出和小说明,可设计出该模块的算法。输出“成绩总表”模块的算法; 模块名:PRNINF 输入:<成绩总表><应聘者人数> 输出:<录取通知书>的屏幕或纸面形象。 指令:
K=输出的份数
For(J=1;J输出录取通知书

4.9 输出被查询者成绩
该模块与加工3.3对应,根据该模块的输入、输出和小说明,可设计出该模块的算法,我们将用QNAME来存储被查询者。 打印被查询者成绩的算法: 模块名:PRNPER 输入:<成绩总表><应聘者人数> 输出:<被查询者个人成绩>的屏幕或纸面形象。 指令:
do{ 输出提示信息
cout<<输入被查询者 查询该是否在成绩总表中
if 在表中 { 输出该人成绩ELSE输出提示信息要求重复 } } while(不在成绩总表中


5 程序代码设计
//gbly.cpp 干部招聘录用系统 //其泉 2010-12-31 //-------------------------------------------------------- #include "stdafx.h" #include #include #include #include #include
using namespace std; // 变量、结构体定义区 ---------------------------------------- struct Tmark // {考试成绩} {
}; float pol; // {政治} float chn; // {语文} float eng; // {英语} float ; // {计算机} float oral; // {口试} struct Tinform // {应聘者个人信息} { string name; // {}

string sex; // {性别} string birthday; // {出生日期} int age; // {年龄} string schoolrecord; // {学历} int worklen; // {任科级干部年限} string wordsite; // {现工作单位} Tmark mark; // {考试成绩} float srecord; // {学历分} float agenum; // {年龄分} float wlen; // {工作经历分} float total; // {总分} };
struct Tinform tinformList[50]; int w=0; //定义一个全局变量 int findFlag=0; //定义查询标志


//--------------------------------------------------------------- // 自定义函数区 开始------------------------------------------------ //--------------------------------------------------------------- int MenuShow( //自定义函数 {/** 功能:输出系统操作界面 **/ cout<<" ==============================================="<<"\n"; cout<<" = ="<<"\n"; cout<<" = 招聘干部录取系统 ="<<"\n"; cout<<" = ="<<"\n"; cout<<" =---------------------------------------------="<<"\n"; cout<<" = ="<<"\n"; cout<<" = 1.录入应聘信息 ="<<"\n"; cout<<" = 2.输出总分表 ="<<"\n"; cout<<" = 3.输出录取通知书 ="<<"\n"; cout<<" = 4. ="<<"\n"; cout<<" = 5. ="<<"\n"; cout<<" = 6.退 ="<<"\n"; cout<<" = ="<<"\n"; cout<<" = ="<<"\n"; cout<<" = CopyRight 2010 LQQ ="<<"\n"; cout<<" ==============================================="<<"\n"; cout<<" 请输入功能选择项(数字)"; return 0; } //--------------------------------------------------------------- //自定义函数
int IsStrTrue(int i, string strInp { /** 功能:判断字串中含有的"/"数量,含有10个返回真。 **/ string sTmp; int tmpi,tmpi2,ic,iReturn; ic=iReturn=0; tmpi=strInp.find("/"; while (tmpi!=-1 { ic++; // 循环/计数 sTmp=strInp.substr(0,tmpi; tmpi++; tmpi2=strInp.length(; strInp=strInp.substr(tmpi,tmpi2; tmpi=strInp.find("/"; } if (ic==10 iReturn=1; return iReturn; }

//--------------------------------------------------------------- //自定义函数
float CalCut(int x, string sValue { /** 功能:得到学历、工作经历、年龄分值。 x=0:学历 1:工作经历 2:年龄 sValue:函数输入值
float_return: 函数返回值,999:输入值出错 **/
int iFen,itmpx; float float_return,itmpFen; switch(x { case 0: { // 学历
if (sValue=="博士" iFen=100; else if (sValue=="硕士" iFen=75; else if (sValue=="本科" iFen=50; else iFen=0; float_return=float(iFen; break; }; case 1: { //工作经历
itmpx=atoi(sValue.c_str(; if (itmpx==0 iFen=0; else if (itmpx==1 iFen=70; else if (itmpx==2 iFen=100; else if (itmpx==3 iFen=80; else if (itmpx==4 iFen=60; else if (itmpx==5 iFen=40; else if (itmpx==6 iFen=20; else if (itmpx>6 iFen=0; else iFen=999; float_return=float(iFen; break; } case 2: { //年龄
itmpx=atoi(sValue.c_str(; itmpFen=float(itmpx; if (itmpx >= 30 && itmpx <= 35 { //70-80 区间分差 2
itmpFen=float(70+(itmpx-30*2; } else if (itmpx > 35 && itmpx <= 40 { //80-100 区间分差 4
itmpFen=float(100-(40-itmpx*4;
} else if (itmpx > 40 && itmpx <= 50 { //100-75 区间分差 2.5
itmpFen=100-float(50-itmpx*2.5; }
else if (itmpx > 50 && itmpx <= 55 { //75-70 区间分差 1
itmpFen=float(75-(itmpx-50*1; }
else itmpFen=999; float_return=itmpFen; break; } default: {float_return=999; break;} } return float_return; }
//--------------------------------------------------------------- //自定义函数
void searchPerson(struct Tinform tinformList[],string name { /** 功能:查询所有人员或按查找;
参数1:查找的结构体;
参数2:需要查找的人员,如果是空值就输出所有人员名称 **/ struct Tinform temp; int i,j,k; for(int m=0;m<50;m++ //遍历数组值,得到纪录总数
{ if(tinformList[m].name=="" { i=m; break; } } //排序 Order for(j=1; j{ for(k=0; k{ if(tinformList[k].total { temp =tinformList[k]; tinformList[k] =tinformList[k+1]; tinformList[k+1] = temp;
} } } cout<<" -------------------------------------------------------------------------"<<"\n"; cout<<" |政策法律|语文|英语|计算机|口试|学历分|年龄分|工作经历分| 总分 | "<<"\n"; cout<<" -------------------------------------------------------------------------"<<"\n";

for(int i=0;i<50;i++ { if(tinformList[i].name=="" break; else
{ if(name==""

{ //输出所有记录 cout<<" "; cout<
cout<<" ";
cout< cout<<" "<
cout<<" "; cout<
cout<<" "; cout<
cout<<" ";
cout<
cout<<" "< cout<<" "<
cout<<" "< cout<<" "< } else { //输出查询某人的记录
if(tinformList[i].name==name
{
cout<<" "; cout<
cout<<" ";
cout< cout<<" "<
cout<<" "; cout<
cout<<" "; cout<
cout<<" ";
cout<


cout<<" "<cout<<" "<cout<<" "<cout<<" "< findFlag=1; break; } } } } cout<<" -------------------------------------------------------------------------"<<"\n\n"; }
//--------------------------------------------------------------- //自定义函数
void delPerson(struct Tinform tinformList[],string name { /** 功能:删除某条记录;
参数1:查找的结构体;
参数2:需要查找的人员。 **/
int deli=0; for(int i=0;i<50;i++
{ if(tinformList[i].name=="" break; else
{ if(tinformList[i].name==name


}
} { //查找到需删除的记录。
for(int j=i;j<50;j++
{ if(tinformList[j].name!=""
{ tinformList[j]=tinformList[j+1];
} else break; }
} cout<<" "<删除成功!\n"; deli++; break; if (deli==0 cout<<" "<未查询到!\n";

//删除后重新写入
FILE *fpwriteagain=fopen("c:\\test.txt","w"; if(fpwriteagain==NULL{ cout<<"不能打开文件"; exit(0; } for(int i=0;i<50;i++ { fwrite(&tinformList[i],sizeof(Tinform,1,fpwriteagain; } fclose(fpwriteagain; }
//--------------------------------------------------------------- //自定义函数
void orderPerson(struct Tinform tinformList[] { /** 功能:输出录取通知书(前5名) **/ struct Tinform temp; int i,j,k;



for(int m=0;m<50;m++ //遍历数组值,得到纪录总数
{ if(tinformList[m].name==""
{ i=m; break; } } //排序 order for(j=1; j{ for(k=0; k{ if(tinformList[k].total
{
temp =tinformList[k]; tinformList[k] =tinformList[k+1]; tinformList[k+1] = temp; } } } cout<<"\n"<<" -------------------------------------------------------------------- "<<"\n"; cout<<" 录取通知书(按总分从高到低排名,取前5 "<<"\n"; cout<<" -------------------------------------------------------------------------- "<<"\n"; cout<<" |政策法律|语文|英语|计算机|口试|学历分|年龄分|工作经历分| 总分 | "<<"\n"; cout<<" -------------------------------------------------------------------------- "<<"\n";


} for(int i=0;i<5;i++ { if(tinformList[i].name!=""
} { //输出记录
cout<<" "; cout<
cout<<" ";
cout< cout<<" "<
cout<<" "; cout<
cout<<" "; cout<
cout<<" ";
cout<
cout<<" "< cout<<" "<
cout<<" "< cout<<" "<} cout<<" -------------------------------------------------------------------------- "<<"\n"; // 自定义函数区 结束------------------------------------------------ //---------------------------------------------------------------


//--------------------------------------------------------------- // 主程序
//--------------------------------------------------------------- int main(int argc, char* argv[] { int x ,tmpi,tmpi2; string sInput,sTmp; float iTmpFen;

x=1; //初始化 while (x!=0 {
MenuShow(; FILE *fnew=NULL; //从文本文件中读入数据 FILE *fpread=fopen("c:\\test.txt","r";
if(fpread==NULL{ fnew=fopen("c:\\test.txt","w+"; fpread=fopen("c:\\test.txt","r";
} fread(&tinformList,sizeof(tinformList,1,fpread; fclose(fpread;



cin>>sInput; //得到输入功能值 x=atoi(sInput.c_str(; switch(x { case 1: { //录入应聘信息
cout<<"\n";
cout<<" ============================================================="<<"\n";

cout<<" | | 性别 | 出生年月 | 学历 | 任科级干部年限 | 工作单位 +"<<"\n"; cout<<" | 政策法律 | 语文 | 英语 | 计算机 | 口试 | +"<<"\n"; cout<<" -------------------------------------------------------------"<<"\n"; cout<<" 性别:男/ 出生年月:0000-00-00 任科级干部年限:00 +"<<"\n"; cout<<" !注意:各字段之间用 “/”间隔。 +"<<"\n"; cout<<" ============================================================="<<"\n";












cout<<" 请录入应聘信息:"<<"\n"; cin>>sInput; Tinform candidate; //声明一个应聘者结构体 实例 tmpi=IsStrTrue(0, sInput; if (tmpi==1 {
tmpi=sInput.find("/";
sTmp=sInput.substr(0,tmpi; //








candidate.name= sTmp;
tmpi++;
tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //性别
candidate.sex=sTmp;
tmpi++;
tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //出生年月 candidate.birthday=sTmp; SYSTEMTIME m_time; GetLocalTime(&m_time; int year=m_time.wYear; //获得当前年份 int birYear birYear =atoi(sTmp.substr(0,sTmp.find("-".c_str(; candidate.age=year-birYear; //年龄


tmpi++;
tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //学历 candidate.schoolrecord=sTmp; tmpi++; tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //任科级干部年限 candidate.worklen=atoi(sTmp.c_str(;
tmpi++;
tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //工作单位 candidate.wordsite=sTmp;









tmpi++;
tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //政策法律 candidate.mark.pol=atoi(sTmp.c_str(; ; tmpi++; tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //语文 candidate.mark.chn=atoi(sTmp.c_str(; tmpi++; tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //英语 candidate.mark.eng=atoi(sTmp.c_str(; tmpi++; tmpi2=sInput.length(; sInput=sInput.substr(tmpi,tmpi2; tmpi=sInput.find("/"; sTmp=sInput.substr(0,tmpi; //计算机 candidate.mark.=atoi(sTmp.c_str(; tmpi++; tmpi2=sInput.length(; sTmp=sInput.substr(tmpi,tmpi2; //口试
candidate.mark.oral=atoi(sTmp.c_str(; //学历分
candidate.srecord=CalCut(0,candidate.schoolrecord; //工作经历分
char tempworknum[20]; itoa(candidate.worklen,tempworknum,10; candidate.wlen=CalCut(1,tempworknum; //年龄分
char tempagenum[20];
itoa(candidate.age,tempagenum,10;
candidate.agenum=CalCut(2,tempagenum;

















} //总分
candidate.total=candidate.mark.chn+ candidate.mark.+candidate.mark.eng+
candidate.mark.oral*2+candidate.mark.pol+ candidate.srecord+candidate.wlen+candidate.agenum; int i=0,count,choice; cout<<"录入应聘信息成功!"<<"\n"; for(int i=0;i<50;i++ { if(tinformList[i].name==""
{ tinformList[i]=candidate; break; } } FILE *fpwrite=fopen("c:\\test.txt","w"; if(fpwrite==NULL{ cout<<"不能打开文件"; exit(0; } fwrite(tinformList,sizeof(tinformList,1,fpwrite; fclose(fpwrite; //首先将数据从文件里读出来 等到一个数组 //然后像数组里添加记录 //写入数组前将文本清空 //最后将数字写入文件
else cout<<" 你输入的数据格式不正确:"<<"\n"; break; } case 2: { //输出总分表
searchPerson( tinformList,""; break; } case 3: { //输出录取通知书
orderPerson(tinformList; break; } case 4: { //查询
cout<<"请输入要查询的:"< string strname;
cin>>strname;
searchPerson( tinformList,strname; if(findFlag==0 cout<<"该人员不存在!"< break;
} case 5: { //删除
cout<<"请输入要删除的:"< string strname;
cin>>strname; delPerson( tinformList,strname; break; } case 6: { x=0; break; } default: { x=0; break; } }
} return 0; } //--------------------------------------------------------------


本文来源:https://www.2haoxitong.net/k/doc/95404c525a0216fc700abb68a98271fe900eaf7b.html

《招聘干部录取系统(C++).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式