1、 c加加动态数组加无限内存人员管理系统 83 2020年4月19日 资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。 ”信息与计算科学”专业 《C++语言程序设计》课程设计 班级 计算科学 姓名 学号 指导教师
2、 设计日期 ·春·19周~20周 ( 一) 、 设计菜单选择程序。 菜单是应用程序的界面, 经过控制语句改变程序执行的顺序, 设计菜单是程序设计的基础。本设计分两步: 第一步: 设计一个菜单程序。 1. 菜单内容: 程序运行后, 给出3个菜单项的内容和输入提示, 如下: 1) 利用克莱姆法则求解线性方程组 2) 统计一篇英文文章的单词数 3) 退出程序 第二步: 为上述菜单项配上相应的功能。 开始 选择运算 求 解 线 性 方 程 组 求 解 单
3、 词
的
个
数
退
出
结束
1.流程图:
2.程序优缺点:
优点: 采用了 动态开辟二维数组, 传递不知道大小的二维数组, 程序规范, 可读性强。
缺点:采用递归算法, 增加了程序的时间复杂度。
3.代码段:
#include
4、int line);
double Price(int row,int line,double *a);
void Head();
void Cramer();
void Statis_Words();
int main()
{
char ch; // 选择变量
while(1)
{
Head();
cout<<"\t\t选择要进行的程序: "< 5、m("cls");Cramer();break;
case '2':system("cls");Statis_Words();break;
case '3':system("cls"); cout << " 退出程序" << endl; exit(0);break;
default :system("cls");cout<<"\t\t 输入有误 "< 6、程序 "< 7、 8、open_up(15,15); //动态开辟二维数组
double **T = open_up(15,15); //动态开辟二维数组
double **W = open_up(15,15); //动态开辟二维数组
double P[15] = {0.0},d[15] = {0.0};
cout << "\t\t克莱姆法则计算矩阵的值" << endl;
cout << "输入所求线性方程组的系数矩阵";
cout << "输入行数m和列数n" << endl;
cin >> m >> n;
cout<<"输入矩阵"< 9、or(i = 0;i < m;i++)
{
for(j = 0;j < n;j++)
{
cin >> a[i][j];
}
}
cout< 10、0;j < n;j++)
{
e[i][j] = a[i][j];
}
}
for(j = 0;j < n;j++)
{
for(i = 0;i < m;i++)
{
a[i][j] = d[i];
}
for(i = 0;i < m;i++)
{
P[j] = Price(n,n,(double*)a)/Quit; //强制类型转换
}
cout << "x[" << j << "]=" << P[j] < 11、 //重置矩阵
{
a[h][j] = e[h][j];
}
}
}
void Statis_Words()
{
char ch = '\0';
int count = 0,word = 0;
cout<<"输入一片英语文章 以零结尾\n "< 12、 122 && ch < 127)) //判断是否为
{
word = 0;
}
else
{
if(0 == word)
{
word = 1;
count++;
}
}
}
cout<<"文章一共有"< 13、 0,c = 0,p = 0,q = 0;
double sum = 0;
double **ele = open_up(row,line);
//动态开辟二维数组
if(row == 1)
{
return *a;
}
for(i = 0;i < row;i++) //递归法求解行列式的值
{
for(c = 0;c < row;c++)
{
if(c < i)
{
p=0;
}
else
{
14、 p=1;
}
for(j = 0;j < row - 1;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);
}
15、 return sum;
}
double **open_up(int row,int line) // 动态开辟二维数组
{
double **ele = new double *[row];
for (int i = 0; i < row; i++)
{
ele[i] = new double[line];
}
return ele;
}
4.程序运行截图:
( 二) 、 有理数的四则运算 16、
有理数就是两个整数的比率, 一般表示为, 分母不能为0。
本设计要求设计一个Rational( 有理数) 类, 实现有理数的四则运算, 该类型的对象使用起来要像使用基本类型的对象一样自然。具体要求如下:
1. 抽象Ration类, 包含两个数据成员( 分子、 分母) , 比如有理数能够用对象表示为。
2. 如果分子分母有公约数, 应该约分, 例如应表示为。根据需要, 有时要将表示为, 或者将表示为
重载相应的运算符( 输入、 输出、 加、 减、 乘、 除) 。比如, 要计算, 希望像普通加法一样操作, 和相加得, 算数表示式为。又如, 想使用如下形式直接输入分子 17、分母
cin << r ;
//输入
cout >> r;
//输出
则需要重载这两个流运算符。
1.流程图:
小数转换
转换
结束
执行减法
执行加法
执行乘法
开始
创立分数对象
执行除法
开始
开始
开始
创立分数对象
创立分数对象
创立分数对象
执行除法
执行除法
执行除法
执行乘法
执行乘法
18、
执行加法
执行加法
执行减法
2.程序优缺点:
优点: 采用了友元函数实现运算符重载, 使用windows命名规则程序规范, 可读性强, 使用外部接口让程序更安全。
缺点: 部分函数为类的友元函数, 破坏了类的完整性。
3.代码段:
#include 19、ic:
Ration(int a = 0,int b = 0):numer(a),denom(b)
{
}
void decide ();
void trans ();
void input ();
friend Ration operator -(Ration c1,Ration c2);
friend Ration operator +(Ration c1,Ration c2);
friend Ration operator *(Ration c1,Ration c2);
friend R 20、ation operator /(Ration c1,Ration c2);
friend int gcd(int a, int b);
friend istream & operator >> (istream &in,Ration &c );
friend ostream & operator << (ostream &out,Ration &c );
private:
int numer;
int denom;
};
void Ration :: trans () //转变为小数
{
decide();
double c = (do 21、uble)numer/(double)denom;
cout << "小数形式为 "<< c < 22、)
{
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 ;
}
return c3;
}
Ration operator -(Ration c1,Ration c2)
{
c1. 23、decide();
c2.decide();
Ration c3;
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 ;
}
re 24、turn c3;
}
Ration operator *(Ration c1,Ration c2)
{
c1.decide();
c2.decide();
Ration c3;
c3.denom = c1.denom * c2.denom;
c3.numer = c1.numer * c2.numer;
return c3;
}
Ration operator /(Ration c1,Ration c2)
{
c1.decide();
c2.decide();
Ration c3;
c3.nu 25、mer = c1.numer * c2.denom;
c3.denom = c1.denom * c2.numer;
return c3;
}
istream & operator >> (istream &in,Ration &c )
{
//c.decide();
cout<<"输入分子分母\n";
in >>c.numer;
cin.get();
in >> c.denom;
return in;
}
ostream & operator << (ostream &out,Ration &c )
{
//c.de 26、cide();
if(c.numer != 0)
{
int GCD = gcd(c.numer,c.denom) ;
if(GCD <= 1)
{
out< 27、nt b) // 求最小公倍数
{
int n = b;
int c = a % b;
while(c!=0)
{
a = b;
b = c;
c = a % b;
}
return b;
}
int main()
{
Ration A;
Ration B;
Ration c;
cout << "请输入分数A"< 28、B = " << B;
cout <<" A = " << A;
c = B / A;
cout <<"c = B / A = "< 34、5)< 35、{
int a = 0,i = 0;
cout<<"请输入编号:";
cin>>a;
if(a <= 10)
{ for (i = 0;i < 10;i++)
{
if (w2[i].getnum()==a)
{
cout<<"name:"< 36、);
}
}
}
else
{
cout<<"编号错误差无此人";
}
}
int main()
{
Employee_one w1[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 37、',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_two w2[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,"s 38、u",'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(int i = 0;i < 10; i++) 39、
{
Employee_one *p= w1+i;
p->display();
cout << '\n';
}
cout<<"\n";
cout<<"职工信息简表如下:\n";
for(int j = 0;j < 10;j++)
{
Employee_two *p = w2 + j;
p->display();
cout<<"\n";
}
cout<<"实际对象信息为: \n";
printer(w 40、2);
cout<<"\n";
return 0;
}
4.程序截图:
( 四) .高校人事管理系统:
1、 问题描述( 功能要求) :
某高校, 主要人员有: 在职人员( 行政人员、 教师、 双肩挑人员( 注: 教师编制, 担任领导职务) ) 、 退休人员、 返聘人员和临时工。现在, 需要存储这些人员的人事档案信息: 编号、 姓名、 性别、 年龄、 职务、 职称、 政治面貌、 最高学历、 任职时间、 来校时间。
要求:
1) 添加删除功能 41、 能根据学校人事的变动情况, 添加删除记录;
2) 查询功能: 能根据编号和姓名进行查询;
3) 编辑功能( 高级) : 根据查询对相应的记录进行修改, 并存储;
4) 统计功能: 能根据多种参数进行人员的统计( 在职人数、 党员人数、 女工人数、 高学历高职称人数) ;
5) 保存功能: 能对输入的数据进行相应的存储, 要求重载插入和提取符以完成数据的保存和打开。
6) 人员编号在生成人员信息时同时生成, 每输入一个人员信息, 编号顺序加1。
2、 问题的解决方案:
根据系统功能要求, 能够将问题解决分为以下步骤:
1) 应用系统分析, 建立该系统的功能模块 42、框图以及界面的组织和设计;
2) 分析系统中的各个实体及它们之间的关系包括属性和行为;
3) 根据问题描述, 设计系统的类层次;
4) 完成类层次中各个类的描述( 包括属性和方法) ;
5) 完成类中各个成员函数的定义;
6) 完成系统的应用模块;
7) 功能调试;
完成系统总结报告以及系统使用说明书。
高校人事管理系统包括的功能:
1.流程图
结束
动态增加容量
增加教职工
删除教职工
显示教职工
查找教职工
修改教职工
统计职务人数
执行销 43、毁函数退出
开始
选择函数
开始
开始
开始
选择函数
选择函数
选择函数
v
统计职务人数
删除教职工
增加教职工
查找教职工
显示教职工
修改教职工
执行销毁函数退出
执行销毁函数退出
修改教职工
显示教职工
查找教职工
增加教职工
删除教职工
统计职务人数
v
动态增加容量
结束
2程序优缺点:
优点: 44、 采用动态类数组建立, 并设立了数组的有效长度, 而且自动增加数组长度, 不必使用文件结构, 降低了空间复杂度, 代码规范可读性性强, 封装紧密, 安全。采用了《数据结构》链表的思想
缺点: 界面设计有所欠缺。部分函数算法还需加强
3程序代码:
#include 45、// 类数组的有效长度
class Personnel_Staff //人员类
{
public:
void Add(); //新增教职工信息
void Display(); //显示已有教职工信息
void Edit(); //修改教职工信息
bool Search(int Num ,char *Na); //查找教职工
void Delete(); //删除教职工信息
void State(); //统计信息
int GetSer_Number()
{
return S 46、er_Number;
}
int GetAge()
{
return Age;
}
int GetOff_Time()
{
return Off_Time;
}
int GetStart_Time()
{
return Start_Time;
}
char *GetName()
{
return Name;
}
char *GetSex()
{
return Sex;
47、 }
char *GetJob()
{
return Job;
}
char *GetTitle_Po()
{
return Title_Po;
}
char *GetPol_Status()
{
return Pol_Status;
}
char *GetEdu_Certi()
{
return Edu_Certi;
}
private:
int Ser_Number; //编号
int A 48、ge; //年龄
int Off_Time; //任职时间
int Start_Time; //来校时间
char Name[20]; //姓名
char Sex[20]; //性别
char Job[20]; //职务
char Title_Po[20]; //职称
char Pol_Status[20]; //政治面貌
char Edu_Certi[20]; //学历
};
//###### 49、新增教职工信息
void Personnel_Staff::Add()
{
//Tusedsize = usedsize;
int f = 1;
cout << "##########新增职工档案#############" << endl;
cout << "输入教职工编号: ";
cin >> Ser_Number;
//ser_Number = usedsize;
cout << "输入教职工姓名: ";
cin >> Name;
co 50、ut << "输入教职工性别: ";
cin >> Sex;
cout << "输入教职工年龄: ";
cin >> Age;
while (1)
{
cout << "教职工分类( 行政, 教师, 双肩挑, 退休, 返聘, 临时工) : ";
cin >> Job;
if ( strcmp(Job,"行政") == 0
|| strcmp(Job,"教师") == 0
|| strcmp(Job,"双肩挑") == 0
|| strcmp(Job,"退休") == 0
|| strcmp(Job,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818