c加加动态数组加无限内存人员管理系统.docx

上传人:b****6 文档编号:5095258 上传时间:2022-12-13 格式:DOCX 页数:55 大小:272.99KB
下载 相关 举报
c加加动态数组加无限内存人员管理系统.docx_第1页
第1页 / 共55页
c加加动态数组加无限内存人员管理系统.docx_第2页
第2页 / 共55页
c加加动态数组加无限内存人员管理系统.docx_第3页
第3页 / 共55页
c加加动态数组加无限内存人员管理系统.docx_第4页
第4页 / 共55页
c加加动态数组加无限内存人员管理系统.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

c加加动态数组加无限内存人员管理系统.docx

《c加加动态数组加无限内存人员管理系统.docx》由会员分享,可在线阅读,更多相关《c加加动态数组加无限内存人员管理系统.docx(55页珍藏版)》请在冰豆网上搜索。

c加加动态数组加无限内存人员管理系统.docx

c加加动态数组加无限内存人员管理系统

“信息与计算科学”专业

《C++语言程序设计》课程设计

 

班级计算科学

姓名

学号

指导教师

设计日期2016·春·19周~20周

(一)、设计菜单选择程序。

菜单是应用程序的界面,通过控制语句改变程序执行的顺序,设计菜单是程序设计的基础。

本设计分两步:

第一步:

设计一个菜单程序。

1.菜单内容:

程序运行后,给出3个菜单项的内容和输入提示,如下:

1)利用克莱姆法则求解线性方程组

2)统计一篇英文文章的单词数

3)退出程序

第二步:

为上述菜单项配上相应的功能。

 

1.流程图:

 

2.程序优缺点:

优点:

采用了动态开辟二维数组,传递不知道大小的二维数组,程序规范,可读性强。

缺点:

采用递归算法,增加了程序的时间复杂度。

 

3.代码段:

#include

#include

#include

#include

usingnamespacestd;

double**open_up(introw,intline);

doublePrice(introw,intline,double*a);

voidHead();

voidCramer();

voidStatis_Words();

 

intmain()

{

charch;//选择变量

while

(1)

{

Head();

cout<<"\t\t选择要进行的程序:

"<

ch=cin.get();

cout<

switch(ch)

{

case'1':

system("cls");Cramer();break;

case'2':

system("cls");Statis_Words();break;

case'3':

system("cls");cout<<"退出程序"<

default:

system("cls");cout<<"\t\t输入有误"<

}

cin.get();

}

 

return0;

}

voidHead()

{

cout<<"\t\t菜单选择程序"<

cout<<"\t\t"<

cout<<"\t\t"<

cout<<"\t\t1.克莱姆法则解线性方程组"<

cout<<"\t\t2.统计英语文章单词数"<

cout<<"\t\t3.结束"<

cout<<"\t\t"<

cout<<"\t\t"<

}

 

voidCramer()

{

intm=0,n=0,i=0,k=0,j=0,h=0;

doubleQuit=0.0,l=0.0;

double**a=open_up(15,15);//动态开辟二维数组

double**e=open_up(15,15);//动态开辟二维数组

double**T=open_up(15,15);//动态开辟二维数组

double**W=open_up(15,15);//动态开辟二维数组

doubleP[15]={0.0},d[15]={0.0};

cout<<"\t\t克莱姆法则计算矩阵的值"<

cout<<"输入所求线性方程组的系数矩阵";

cout<<"输入行数m和列数n"<

cin>>m>>n;

cout<<"输入矩阵"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

}

cout<

Quit=Price(n,n,(double*)a);

cout<<"系数矩阵的值为:

"<

cout<<"输入方程组的解矩阵"<

for(i=0;i

{

cin>>d[i];

}

for(i=0;i

{

for(j=0;j

{

e[i][j]=a[i][j];

}

}

for(j=0;j

{

for(i=0;i

{

a[i][j]=d[i];

}

for(i=0;i

{

P[j]=Price(n,n,(double*)a)/Quit;//强制类型转换

}

cout<<"x["<

for(h=0;h

{

a[h][j]=e[h][j];

}

}

}

 

voidStatis_Words()

{

charch='\0';

intcount=0,word=0;

cout<<"输入一片英语文章以零结尾\n"<

while((ch=cin.get())!

='0')

{

if((ch>=0&&ch<=64)||(ch>=91&&ch<=96)||(ch>122&&ch<127))//判断是否为

{

word=0;

}

else

{

if(0==word)

{

word=1;

count++;

}

}

}

cout<<"文章一共有"<

}

 

doublePrice(introw,intline,double*a)//求矩阵行列式的递归函数

{

inti=0,j=0,c=0,p=0,q=0;

doublesum=0;

double**ele=open_up(row,line);

//动态开辟二维数组

if(row==1)

{

return*a;

}

for(i=0;i

{

for(c=0;c

{

if(c

{

p=0;

}

else

{

p=1;

}

for(j=0;j

{

ele[c][j]=*(a+row*(c+p)+(j+1));

}

}

if(i%2==0)

{

q=1;

}

else

{

q=-1;

}

sum+=*(a+i*row+0)*q*Price(row-1,row-1,(double*)ele);

}

returnsum;

}

double**open_up(introw,intline)//动态开辟二维数组

{

double**ele=newdouble*[row];

for(inti=0;i

{

ele[i]=newdouble[line];

}

returnele;

}

 

4.程序运行截图:

 

(二)、有理数的四则运算。

有理数就是两个整数的比率,通常表示为

,分母

不能为0。

本设计要求设计一个Rational(有理数)类,实现有理数的四则运算,该类型的对象使用起来要像使用基本类型的对象一样自然。

具体要求如下:

1.抽象Ration类,包含两个数据成员(分子、分母),比如有理数

可以用对象

表示为

2.如果分子分母有公约数,应该约分,例如

应表示为

根据需要,有时要将

表示为

,或者将

表示为

重载相应的运算符(输入、输出、加、减、乘、除)。

比如,要计算

,希望像普通加法一样操作,

相加得

,算数表达式为

又如,想使用如下形式直接输入分子分母

cin<

//输入

cout>>r;

//输出

则需要重载这两个流运算符。

 

1.流程图:

 

2.程序优缺点:

优点:

采用了友元函数实现运算符重载,使用windows命名规则程序规范,可读性强,使用外部接口让程序更安全。

缺点:

部分函数为类的友元函数,破坏了类的完整性。

 

3.代码段:

#include

#include

usingnamespacestd;

intgcd(inta,intb);

classRation

{

public:

Ration(inta=0,intb=0):

numer(a),denom(b)

{

}

voiddecide();

voidtrans();

voidinput();

friendRationoperator-(Rationc1,Rationc2);

friendRationoperator+(Rationc1,Rationc2);

friendRationoperator*(Rationc1,Rationc2);

friendRationoperator/(Rationc1,Rationc2);

friendintgcd(inta,intb);

friendistream&operator>>(istream&in,Ration&c);

friendostream&operator<<(ostream&out,Ration&c);

private:

intnumer;

intdenom;

};

voidRation:

:

trans()//转变为小数

{

decide();

doublec=(double)numer/(double)denom;

cout<<"小数形式为"<

}

voidRation:

:

decide()//判别是否可以写成分数

{

if(0==denom)

{

cout<<"分母不能为零";

exit(0);

}

}

Rationoperator+(Rationc1,Rationc2)

{

c1.decide();

c2.decide();

Rationc3;

if(c1.denom==c2.denom)

{

c3.denom=c2.denom;

c3.numer=c1.numer+c2.numer;

}

else

{

c3.denom=c1.denom*c2.denom/gcd(c1.denom,c2.denom);

c3.numer=c1.numer*c3.denom/c1.denom+c2.numer*c3.denom/c2.denom;

}

returnc3;

}

Rationoperator-(Rationc1,Rationc2)

{

c1.decide();

c2.decide();

Rationc3;

if(c1.denom==c2.denom)

{

c3.denom=c2.denom;

c3.numer=c1.numer-c2.numer;

}

else

{

c3.denom=c1.denom*c2.denom/gcd(c1.denom,c2.denom);

c3.numer=c1.numer*c3.denom/c1.denom-c2.numer*c3.denom/c2.denom;

}

returnc3;

}

Rationoperator*(Rationc1,Rationc2)

{

c1.decide();

c2.decide();

Rationc3;

c3.denom=c1.denom*c2.denom;

c3.numer=c1.numer*c2.numer;

returnc3;

}

Rationoperator/(Rationc1,Rationc2)

{

c1.decide();

c2.decide();

Rationc3;

c3.numer=c1.numer*c2.denom;

c3.denom=c1.denom*c2.numer;

returnc3;

}

istream&operator>>(istream&in,Ration&c)

{

//c.decide();

cout<<"输入分子分母\n";

in>>c.numer;

cin.get();

in>>c.denom;

returnin;

}

ostream&operator<<(ostream&out,Ration&c)

{

//c.decide();

if(c.numer!

=0)

{

intGCD=gcd(c.numer,c.denom);

if(GCD<=1)

{

out<

}

else

{

out<

}

}

else

{

out<<'0'<<'\n';

}

returnout;

}

intgcd(inta,intb)//求最小公倍数

{

intn=b;

intc=a%b;

while(c!

=0)

{

a=b;

b=c;

c=a%b;

}

returnb;

}

intmain()

{

RationA;

RationB;

Rationc;

cout<<"请输入分数A"<

cin>>A;

cout<<"请输入分数B"<

cin>>B;

cout<<"B="<

cout<<"A="<

c=B/A;

cout<<"c=B/A="<

c=B*A;

cout<<"c=B*A="<

c=B+A;

cout<<"c=B+A="<

c=B-A;

cout<<"c=B-A="<

c.trans();

return0;

}

4.程序截图:

(三)、职工信息表设计。

使用继承的方法,编写最多能输入10个职工的信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。

设计要求实现如下功能:

1.建立职工信息数据,包括职工编号、姓名,性别和年龄。

2.根据职工信息表,建立只含姓名和年龄的职工信息简表。

3.使用继承的方法构造2个类,使用相应的对象数组放置10个职工信息。

4.编写同名display()成员函数,用来输出数组的内容。

5.编写函数printer(),用来根据实际对象输出它们的内容。

1.流程图

2.程序优缺点:

优点:

使用windows命名规则程序规范,可读性强,代码精炼,时间复杂度低,空间复杂度低

缺点:

功能较弱,操作性低。

3.代码段:

#include

#include

#include

usingnamespacestd;

classEmployee_one

{

public:

Employee_one(intn,char*nam,chars,inta):

num(n),name(nam),sex(s),age(a){}

virtualvoiddisplay();

intgetnum()

{

returnnum;

}

char*getname()

{

returnname;

}

chargetsex()

{

returnsex;

}

intgetage()

{

returnage;

}

private:

intnum;

char*name;

charsex;

intage;

};

 

classEmployee_two:

publicEmployee_one

{

public:

Employee_two(intn,char*nam,chars,inta,intw):

Employee_one(n,nam,s,a),wages(w){}

voiddisplay();

intgetwages()

{

returnwages;

}

private:

intwages;

};

 

voidEmployee_one:

:

display()

{

cout<

"<

<

:

right)

<<"age:

"<

<

:

left)<<"sex:

"<

<

:

left)<<"num:

"<

}

 

voidEmployee_two:

:

display()

{

cout<<"name:

"<

"<

"<

}

 

voidprinter(Employee_twow2[])

{

inta=0,i=0;

cout<<"请输入编号:

";

cin>>a;

if(a<=10)

{for(i=0;i<10;i++)

{

if(w2[i].getnum()==a)

{

cout<<"name:

"<

"<

"

<

"<

"<

}

}

}

else

{

cout<<"编号错误差无此人";

}

}

 

intmain()

{

Employee_onew1[10]=

{

Employee_one(1,"ci",'m',18),Employee_one(2,"cai",'m',19),

Employee_one(3,"xi",'f',18),Employee_one(4,"su",'m',20),

Employee_one(5,"li",'m',20),Employee_one(6,"yan",'m',19),

Employee_one(7,"yi",'m',18),Employee_one(8,"xiu",'m',21),

Employee_one(9,"su",'m',17),Employee_one(10,"men",'m',22)

};

 

Employee_twow2[10]=

{

Employee_two(1,"ci",'m',18,800),Employee_two(2,"cai",'m',19,700),

Employee_two(3,"xi",'f',18,900),Employee_two(4,"su",'m',20,750),

Employee_two(5,"li",'m',20,860),Employee_two(6,"yan",'m',19,900),

Employee_two(7,"yi",'m',18,1000),Employee_two(8,"xiu",'m',21,680),

Employee_two(9,"su",'m',17,1500),Employee_two(10,"men",'m',22,700)

};

cout<<"职工信息数据显示如下:

";

for(inti=0;i<10;i++)

{

Employee_one*p=w1+i;

p->display();

cout<<'\n';

}

cout<<"\n";

cout<<"职工信息简表如下:

\n";

for(intj=0;j<10;j++)

{

Employee_two*p=w2+j;

p->display();

cout<<"\n";

}

cout<<"实际对象信息为:

\n";

printer(w2);

cout<<"\n";

return0;

}

 

4.程序截图:

(四).高校人事管理系统:

1、问题描述(功能要求):

某高校,主要人员有:

在职人员(行政人员、教师、双肩挑人员(注:

教师编制,担任领导职务))、退休人员、返聘人员和临时工。

现在,需要存储这些人员的人事档案信息:

编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来校时间。

要求:

1)添加删除功能:

能根据学校人事的变动情况,添加删除记录;

2)查询功能:

能根据编号和姓名进行查询;

3)编辑功能(高级):

根据查询对相应的记录进行修改,并存储;

4)统计功能:

能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);

5)保存功能:

能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。

6)人员

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1